linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] drm/rockchip: vop: Fix color for RGB888/BGR888 format on VOP full
@ 2023-10-26 19:14 Jonas Karlman
  2023-10-26 20:02 ` Christopher Obbard
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Jonas Karlman @ 2023-10-26 19:14 UTC (permalink / raw)
  To: Heiko Stuebner, Sandy Huang, David Airlie, Daniel Vetter,
	Tomasz Figa
  Cc: Christopher Obbard, Andy Yan, Jonas Karlman, dri-devel,
	linux-arm-kernel, linux-rockchip, linux-kernel

Use of DRM_FORMAT_RGB888 and DRM_FORMAT_BGR888 on e.g. RK3288, RK3328
and RK3399 result in wrong colors being displayed.

The issue can be observed using modetest:

  modetest -s <connector_id>@<crtc_id>:1920x1080-60@RG24
  modetest -s <connector_id>@<crtc_id>:1920x1080-60@BG24

Vendor 4.4 kernel apply an inverted rb swap for these formats on VOP
full framework (IP version 3.x) compared to VOP little framework (2.x).

Fix colors by applying different rb swap for VOP full framework (3.x)
and VOP little framework (2.x) similar to vendor 4.4 kernel.

Fixes: 85a359f25388 ("drm/rockchip: Add BGR formats to VOP")
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
---
Changes in v2:
- Add comment about different rb swap for IP version 3.x and 2.x
- Add fixes tag

 drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index b3d0b6ae9294..ed2ed25959a2 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -247,14 +247,22 @@ static inline void vop_cfg_done(struct vop *vop)
 	VOP_REG_SET(vop, common, cfg_done, 1);
 }
 
-static bool has_rb_swapped(uint32_t format)
+static bool has_rb_swapped(uint32_t version, uint32_t format)
 {
 	switch (format) {
 	case DRM_FORMAT_XBGR8888:
 	case DRM_FORMAT_ABGR8888:
-	case DRM_FORMAT_BGR888:
 	case DRM_FORMAT_BGR565:
 		return true;
+	/*
+	 * full framework (IP version 3.x) only need rb swapped for RGB888 and
+	 * little framework (IP version 2.x) only need rb swapped for BGR888,
+	 * check for 3.x to also only rb swap BGR888 for unknown vop version
+	 */
+	case DRM_FORMAT_RGB888:
+		return VOP_MAJOR(version) == 3;
+	case DRM_FORMAT_BGR888:
+		return VOP_MAJOR(version) != 3;
 	default:
 		return false;
 	}
@@ -1035,7 +1043,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
 	VOP_WIN_SET(vop, win, dsp_info, dsp_info);
 	VOP_WIN_SET(vop, win, dsp_st, dsp_st);
 
-	rb_swap = has_rb_swapped(fb->format->format);
+	rb_swap = has_rb_swapped(vop->data->version, fb->format->format);
 	VOP_WIN_SET(vop, win, rb_swap, rb_swap);
 
 	/*
-- 
2.42.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] drm/rockchip: vop: Fix color for RGB888/BGR888 format on VOP full
  2023-10-26 19:14 [PATCH v2] drm/rockchip: vop: Fix color for RGB888/BGR888 format on VOP full Jonas Karlman
@ 2023-10-26 20:02 ` Christopher Obbard
  2023-10-26 20:33   ` Jonas Karlman
  2023-11-20 14:31 ` Diederik de Haas
  2023-11-20 16:13 ` Heiko Stuebner
  2 siblings, 1 reply; 5+ messages in thread
From: Christopher Obbard @ 2023-10-26 20:02 UTC (permalink / raw)
  To: Jonas Karlman, Heiko Stuebner, Sandy Huang, David Airlie,
	Daniel Vetter, Tomasz Figa
  Cc: Andy Yan, dri-devel, linux-arm-kernel, linux-rockchip,
	linux-kernel

Hi Jonas,

On Thu, 2023-10-26 at 19:14 +0000, Jonas Karlman wrote:
> Use of DRM_FORMAT_RGB888 and DRM_FORMAT_BGR888 on e.g. RK3288, RK3328
> and RK3399 result in wrong colors being displayed.
> 
> The issue can be observed using modetest:
> 
>   modetest -s <connector_id>@<crtc_id>:1920x1080-60@RG24
>   modetest -s <connector_id>@<crtc_id>:1920x1080-60@BG24
> 
> Vendor 4.4 kernel apply an inverted rb swap for these formats on VOP
> full framework (IP version 3.x) compared to VOP little framework (2.x).
> 
> Fix colors by applying different rb swap for VOP full framework (3.x)
> and VOP little framework (2.x) similar to vendor 4.4 kernel.
> 
> Fixes: 85a359f25388 ("drm/rockchip: Add BGR formats to VOP")
> Signed-off-by: Jonas Karlman <jonas@kwiboo.se>

Reviewed-by: Christopher Obbard <chris.obbard@collabora.com>
Tested-by: Christopher Obbard <chris.obbard@collabora.com>

Since you missed adding my *-by tags in v2.

> ---
> Changes in v2:
> - Add comment about different rb swap for IP version 3.x and 2.x
> - Add fixes tag
> 
>  drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index b3d0b6ae9294..ed2ed25959a2 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -247,14 +247,22 @@ static inline void vop_cfg_done(struct vop *vop)
>  	VOP_REG_SET(vop, common, cfg_done, 1);
>  }
>  
> -static bool has_rb_swapped(uint32_t format)
> +static bool has_rb_swapped(uint32_t version, uint32_t format)
>  {
>  	switch (format) {
>  	case DRM_FORMAT_XBGR8888:
>  	case DRM_FORMAT_ABGR8888:
> -	case DRM_FORMAT_BGR888:
>  	case DRM_FORMAT_BGR565:
>  		return true;
> +	/*
> +	 * full framework (IP version 3.x) only need rb swapped for RGB888
> and
> +	 * little framework (IP version 2.x) only need rb swapped for
> BGR888,
> +	 * check for 3.x to also only rb swap BGR888 for unknown vop
> version
> +	 */
> +	case DRM_FORMAT_RGB888:
> +		return VOP_MAJOR(version) == 3;
> +	case DRM_FORMAT_BGR888:
> +		return VOP_MAJOR(version) != 3;
>  	default:
>  		return false;
>  	}
> @@ -1035,7 +1043,7 @@ static void vop_plane_atomic_update(struct drm_plane
> *plane,
>  	VOP_WIN_SET(vop, win, dsp_info, dsp_info);
>  	VOP_WIN_SET(vop, win, dsp_st, dsp_st);
>  
> -	rb_swap = has_rb_swapped(fb->format->format);
> +	rb_swap = has_rb_swapped(vop->data->version, fb->format->format);
>  	VOP_WIN_SET(vop, win, rb_swap, rb_swap);
>  
>  	/*

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] drm/rockchip: vop: Fix color for RGB888/BGR888 format on VOP full
  2023-10-26 20:02 ` Christopher Obbard
@ 2023-10-26 20:33   ` Jonas Karlman
  0 siblings, 0 replies; 5+ messages in thread
From: Jonas Karlman @ 2023-10-26 20:33 UTC (permalink / raw)
  To: Christopher Obbard, Heiko Stuebner, Sandy Huang, David Airlie,
	Daniel Vetter, Tomasz Figa
  Cc: Andy Yan, dri-devel, linux-arm-kernel, linux-rockchip,
	linux-kernel

Hi Chris,

On 2023-10-26 22:02, Christopher Obbard wrote:
> Hi Jonas,
> 
> On Thu, 2023-10-26 at 19:14 +0000, Jonas Karlman wrote:
>> Use of DRM_FORMAT_RGB888 and DRM_FORMAT_BGR888 on e.g. RK3288, RK3328
>> and RK3399 result in wrong colors being displayed.
>>
>> The issue can be observed using modetest:
>>
>>   modetest -s <connector_id>@<crtc_id>:1920x1080-60@RG24
>>   modetest -s <connector_id>@<crtc_id>:1920x1080-60@BG24
>>
>> Vendor 4.4 kernel apply an inverted rb swap for these formats on VOP
>> full framework (IP version 3.x) compared to VOP little framework (2.x).
>>
>> Fix colors by applying different rb swap for VOP full framework (3.x)
>> and VOP little framework (2.x) similar to vendor 4.4 kernel.
>>
>> Fixes: 85a359f25388 ("drm/rockchip: Add BGR formats to VOP")
>> Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
> 
> Reviewed-by: Christopher Obbard <chris.obbard@collabora.com>
> Tested-by: Christopher Obbard <chris.obbard@collabora.com>
> 
> Since you missed adding my *-by tags in v2.
> 

Thanks, and sorry about that ;-)

Regards,
Jonas

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] drm/rockchip: vop: Fix color for RGB888/BGR888 format on VOP full
  2023-10-26 19:14 [PATCH v2] drm/rockchip: vop: Fix color for RGB888/BGR888 format on VOP full Jonas Karlman
  2023-10-26 20:02 ` Christopher Obbard
@ 2023-11-20 14:31 ` Diederik de Haas
  2023-11-20 16:13 ` Heiko Stuebner
  2 siblings, 0 replies; 5+ messages in thread
From: Diederik de Haas @ 2023-11-20 14:31 UTC (permalink / raw)
  To: Heiko Stuebner, Sandy Huang, David Airlie, Daniel Vetter,
	Tomasz Figa, linux-rockchip, Jonas Karlman
  Cc: Christopher Obbard, Andy Yan, dri-devel, linux-arm-kernel,
	linux-rockchip, linux-kernel, Jonas Karlman


[-- Attachment #1.1: Type: text/plain, Size: 526 bytes --]

On Thursday, 26 October 2023 21:14:58 CET Jonas Karlman wrote:
> Use of DRM_FORMAT_RGB888 and DRM_FORMAT_BGR888 on e.g. RK3288, RK3328
> and RK3399 result in wrong colors being displayed.
> 
> The issue can be observed using modetest:
> 
>   modetest -s <connector_id>@<crtc_id>:1920x1080-60@RG24
>   modetest -s <connector_id>@<crtc_id>:1920x1080-60@BG24

On my Rock64 (rk3328) I was able to see the problem without this patch and see 
it displaying correctly with it, so 

Tested-by: Diederik de Haas <didi.debian@cknow.org>

[-- Attachment #1.2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

[-- Attachment #2: Type: text/plain, Size: 176 bytes --]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] drm/rockchip: vop: Fix color for RGB888/BGR888 format on VOP full
  2023-10-26 19:14 [PATCH v2] drm/rockchip: vop: Fix color for RGB888/BGR888 format on VOP full Jonas Karlman
  2023-10-26 20:02 ` Christopher Obbard
  2023-11-20 14:31 ` Diederik de Haas
@ 2023-11-20 16:13 ` Heiko Stuebner
  2 siblings, 0 replies; 5+ messages in thread
From: Heiko Stuebner @ 2023-11-20 16:13 UTC (permalink / raw)
  To: Jonas Karlman, David Airlie, Daniel Vetter, Sandy Huang,
	Tomasz Figa
  Cc: Heiko Stuebner, Andy Yan, linux-rockchip, dri-devel, linux-kernel,
	Christopher Obbard, linux-arm-kernel

On Thu, 26 Oct 2023 19:14:58 +0000, Jonas Karlman wrote:
> Use of DRM_FORMAT_RGB888 and DRM_FORMAT_BGR888 on e.g. RK3288, RK3328
> and RK3399 result in wrong colors being displayed.
> 
> The issue can be observed using modetest:
> 
>   modetest -s <connector_id>@<crtc_id>:1920x1080-60@RG24
>   modetest -s <connector_id>@<crtc_id>:1920x1080-60@BG24
> 
> [...]

Applied, thanks!

[1/1] drm/rockchip: vop: Fix color for RGB888/BGR888 format on VOP full
      commit: bb0a05acd6121ff0e810b44fdc24dbdfaa46b642

Best regards,
-- 
Heiko Stuebner <heiko@sntech.de>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-11-20 16:14 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-26 19:14 [PATCH v2] drm/rockchip: vop: Fix color for RGB888/BGR888 format on VOP full Jonas Karlman
2023-10-26 20:02 ` Christopher Obbard
2023-10-26 20:33   ` Jonas Karlman
2023-11-20 14:31 ` Diederik de Haas
2023-11-20 16:13 ` Heiko Stuebner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).