* [PATCH] drm/rockchip: vop: fix vop full rgb24 r/b color error @ 2020-06-19 2:12 Sandy Huang 2020-06-19 7:02 ` Heiko Stuebner 0 siblings, 1 reply; 3+ messages in thread From: Sandy Huang @ 2020-06-19 2:12 UTC (permalink / raw) To: Sandy Huang, Heiko Stübner, David Airlie, Daniel Vetter Cc: huangtao, linux-kernel, dri-devel, linux-rockchip, andy.yan, linux-arm-kernel RGB888 format msb is red component and the lsb is blue component, at vop full platform this is swapped, and this is different from vop lite and vop next, so add this patch to fix it. Signed-off-by: Sandy Huang <hjc@rock-chips.com> --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index c80f7d9fd13f..1c17048ad737 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -132,6 +132,7 @@ struct vop_win { struct rockchip_rgb; struct vop { + uint32_t version; struct drm_crtc crtc; struct device *dev; struct drm_device *drm_dev; @@ -989,6 +990,12 @@ static void vop_plane_atomic_update(struct drm_plane *plane, VOP_WIN_SET(vop, win, dsp_st, dsp_st); rb_swap = has_rb_swapped(fb->format->format); + /* + * VOP full need to do rb swap to show rgb888/bgr888 format color correctly + */ + if ((fb->format->format == DRM_FORMAT_RGB888 || fb->format->format == DRM_FORMAT_BGR888) && + VOP_MAJOR(vop->version) == 3) + rb_swap = !rb_swap; VOP_WIN_SET(vop, win, rb_swap, rb_swap); /* @@ -2091,6 +2098,7 @@ static int vop_bind(struct device *dev, struct device *master, void *data) vop->dev = dev; vop->data = vop_data; vop->drm_dev = drm_dev; + vop->version = vop_data->version; dev_set_drvdata(dev, vop); vop_win_init(vop); -- 2.17.1 _______________________________________________ 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] 3+ messages in thread
* Re: [PATCH] drm/rockchip: vop: fix vop full rgb24 r/b color error 2020-06-19 2:12 [PATCH] drm/rockchip: vop: fix vop full rgb24 r/b color error Sandy Huang @ 2020-06-19 7:02 ` Heiko Stuebner 2020-06-19 8:39 ` Huang Jiachai 0 siblings, 1 reply; 3+ messages in thread From: Heiko Stuebner @ 2020-06-19 7:02 UTC (permalink / raw) To: Sandy Huang Cc: huangtao, David Airlie, linux-kernel, dri-devel, linux-rockchip, Daniel Vetter, andy.yan, linux-arm-kernel Hi Sandy, Am Freitag, 19. Juni 2020, 04:12:51 CEST schrieb Sandy Huang: > RGB888 format msb is red component and the lsb is blue component, > at vop full platform this is swapped, and this is different from vop > lite and vop next, so add this patch to fix it. just me struggling with color formats ... and wondering why this never came up so far - with Version 3 being all major SoCs of the last years. So I guess the reason that nobody noticed so far is, that most things will use ARGB888 instead of RGB888? One implementation nit below as well. > Signed-off-by: Sandy Huang <hjc@rock-chips.com> > --- > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > index c80f7d9fd13f..1c17048ad737 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > @@ -132,6 +132,7 @@ struct vop_win { > > struct rockchip_rgb; > struct vop { > + uint32_t version; > struct drm_crtc crtc; > struct device *dev; > struct drm_device *drm_dev; > @@ -989,6 +990,12 @@ static void vop_plane_atomic_update(struct drm_plane *plane, > VOP_WIN_SET(vop, win, dsp_st, dsp_st); > > rb_swap = has_rb_swapped(fb->format->format); > + /* > + * VOP full need to do rb swap to show rgb888/bgr888 format color correctly > + */ one-line-comment? /* VOP-full needs rb_swap for correctly showing rgb888/bgr888 */ > + if ((fb->format->format == DRM_FORMAT_RGB888 || fb->format->format == DRM_FORMAT_BGR888) && > + VOP_MAJOR(vop->version) == 3) > + rb_swap = !rb_swap; can we move this into the existing has_rb_swapped() function? Like doing rb_swap = has_rb_swapped(vop, fb->format->format) and adding your conditional to the end there? Thanks Heiko > VOP_WIN_SET(vop, win, rb_swap, rb_swap); > > /* > @@ -2091,6 +2098,7 @@ static int vop_bind(struct device *dev, struct device *master, void *data) > vop->dev = dev; > vop->data = vop_data; > vop->drm_dev = drm_dev; > + vop->version = vop_data->version; > dev_set_drvdata(dev, vop); > > vop_win_init(vop); > _______________________________________________ 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] 3+ messages in thread
* Re: [PATCH] drm/rockchip: vop: fix vop full rgb24 r/b color error 2020-06-19 7:02 ` Heiko Stuebner @ 2020-06-19 8:39 ` Huang Jiachai 0 siblings, 0 replies; 3+ messages in thread From: Huang Jiachai @ 2020-06-19 8:39 UTC (permalink / raw) To: Heiko Stuebner Cc: huangtao, David Airlie, linux-kernel, dri-devel, linux-rockchip, Daniel Vetter, andy.yan, linux-arm-kernel Hi heiko, 在 2020/6/19 15:02, Heiko Stuebner 写道: > Hi Sandy, > > Am Freitag, 19. Juni 2020, 04:12:51 CEST schrieb Sandy Huang: >> RGB888 format msb is red component and the lsb is blue component, >> at vop full platform this is swapped, and this is different from vop >> lite and vop next, so add this patch to fix it. > just me struggling with color formats ... and wondering why this never > came up so far - with Version 3 being all major SoCs of the last years. > > So I guess the reason that nobody noticed so far is, that most things > will use ARGB888 instead of RGB888? yes, most gpu output format is ARGB888, so we didn't noticed it before. > One implementation nit below as well. > >> Signed-off-by: Sandy Huang <hjc@rock-chips.com> >> --- >> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 8 ++++++++ >> 1 file changed, 8 insertions(+) >> >> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c >> index c80f7d9fd13f..1c17048ad737 100644 >> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c >> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c >> @@ -132,6 +132,7 @@ struct vop_win { >> >> struct rockchip_rgb; >> struct vop { >> + uint32_t version; >> struct drm_crtc crtc; >> struct device *dev; >> struct drm_device *drm_dev; >> @@ -989,6 +990,12 @@ static void vop_plane_atomic_update(struct drm_plane *plane, >> VOP_WIN_SET(vop, win, dsp_st, dsp_st); >> >> rb_swap = has_rb_swapped(fb->format->format); >> + /* >> + * VOP full need to do rb swap to show rgb888/bgr888 format color correctly >> + */ > one-line-comment? > /* VOP-full needs rb_swap for correctly showing rgb888/bgr888 */ > >> + if ((fb->format->format == DRM_FORMAT_RGB888 || fb->format->format == DRM_FORMAT_BGR888) && >> + VOP_MAJOR(vop->version) == 3) >> + rb_swap = !rb_swap; > can we move this into the existing has_rb_swapped() function? > Like doing > rb_swap = has_rb_swapped(vop, fb->format->format) > and adding your conditional to the end there? > OK, update at v2. > Thanks > Heiko > > >> VOP_WIN_SET(vop, win, rb_swap, rb_swap); >> >> /* >> @@ -2091,6 +2098,7 @@ static int vop_bind(struct device *dev, struct device *master, void *data) >> vop->dev = dev; >> vop->data = vop_data; >> vop->drm_dev = drm_dev; >> + vop->version = vop_data->version; >> dev_set_drvdata(dev, vop); >> >> vop_win_init(vop); >> > > > > > -- Best Regard 黄家钗 Sandy Huang Addr: 福州市鼓楼区铜盘路软件大道89号福州软件园A区21号楼(350003) No. 21 Building, A District, No.89,software Boulevard Fuzhou,Fujian,PRC Tel:+86 0591-87884919 8690 E-mail:hjc@rock-chips.com _______________________________________________ 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] 3+ messages in thread
end of thread, other threads:[~2020-06-19 8:39 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-06-19 2:12 [PATCH] drm/rockchip: vop: fix vop full rgb24 r/b color error Sandy Huang 2020-06-19 7:02 ` Heiko Stuebner 2020-06-19 8:39 ` Huang Jiachai
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).