* [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable @ 2024-12-06 19:26 Piotr Zalewski 2024-12-11 22:45 ` Heiko Stuebner 2025-06-05 20:08 ` Diederik de Haas 0 siblings, 2 replies; 22+ messages in thread From: Piotr Zalewski @ 2024-12-06 19:26 UTC (permalink / raw) To: hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel Cc: Piotr Zalewski Remove color_mgmt_changed check from vop2_crtc_atomic_try_set_gamma to allow gamma LUT rewrite during modeset when coming out of suspend. Add a check for color_mgmt_changed directly in vop2_crtc_atomic_flush. This patch fixes the patch adding gamma LUT support for vop2 [1]. [1] https://lore.kernel.org/linux-rockchip/20241101185545.559090-3-pZ010001011111@proton.me/ Suggested-by: Andy Yan <andy.yan@rock-chips.com> Signed-off-by: Piotr Zalewski <pZ010001011111@proton.me> --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index 0c8ec7220fbe..d259f1c6571d 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -1601,7 +1601,7 @@ static void vop2_crtc_atomic_try_set_gamma(struct vop2 *vop2, struct drm_crtc *crtc, struct drm_crtc_state *crtc_state) { - if (!vop2->lut_regs || !crtc_state->color_mgmt_changed) + if (!vop2->lut_regs) return; if (!crtc_state->gamma_lut) { @@ -2669,7 +2669,7 @@ static void vop2_crtc_atomic_flush(struct drm_crtc *crtc, struct vop2 *vop2 = vp->vop2; /* In case of modeset, gamma lut update already happened in atomic enable */ - if (!drm_atomic_crtc_needs_modeset(crtc_state)) + if (!drm_atomic_crtc_needs_modeset(crtc_state) && crtc_state->color_mgmt_changed) vop2_crtc_atomic_try_set_gamma_locked(vop2, vp, crtc, crtc_state); vop2_post_config(crtc); -- 2.47.1 _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2024-12-06 19:26 [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable Piotr Zalewski @ 2024-12-11 22:45 ` Heiko Stuebner 2025-06-05 20:08 ` Diederik de Haas 1 sibling, 0 replies; 22+ messages in thread From: Heiko Stuebner @ 2024-12-11 22:45 UTC (permalink / raw) To: hjc, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel, Piotr Zalewski Cc: Heiko Stuebner On Fri, 06 Dec 2024 19:26:10 +0000, Piotr Zalewski wrote: > Remove color_mgmt_changed check from vop2_crtc_atomic_try_set_gamma to > allow gamma LUT rewrite during modeset when coming out of suspend. Add > a check for color_mgmt_changed directly in vop2_crtc_atomic_flush. > > This patch fixes the patch adding gamma LUT support for vop2 [1]. > > [1] https://lore.kernel.org/linux-rockchip/20241101185545.559090-3-pZ010001011111@proton.me/ > > [...] Applied, thanks! [1/1] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable commit: 9c22b6ece2e5c2308f41ba4bec27cfa158397fa7 Best regards, -- Heiko Stuebner <heiko@sntech.de> _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2024-12-06 19:26 [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable Piotr Zalewski 2024-12-11 22:45 ` Heiko Stuebner @ 2025-06-05 20:08 ` Diederik de Haas 2025-06-07 15:32 ` Piotr Zalewski 1 sibling, 1 reply; 22+ messages in thread From: Diederik de Haas @ 2025-06-05 20:08 UTC (permalink / raw) To: Piotr Zalewski, hjc, heiko, andy.yan Cc: maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel [-- Attachment #1.1: Type: text/plain, Size: 2890 bytes --] Hi Piotr, Since kernel 6.14-rc1 I have the problem that visual output is no longer shown on my PineTab2 and a ``git bisect`` pointed to this patch/commit as the culprit. What is important to note is that ``CONFIG_DRM=m`` seems to be required as the problem does not occur with ``CONFIG_DRM=y``. Near the end of my bisect session, something interesting occurred. I was booted into a 'bad' kernel (ie no visual output) and when I started to build my final kernel, I closed the lid of the PineTab2 which made it go into suspend. When my final kernel was built, I opened the lid again, which made it resume, to transfer my final kernel to it. And much to my surprise, I then did have visual output. When I read the (below) commit message of the 'offending' commit, it may not be such a surprise after all. When I build a (new) 6.14-rc1 kernel with a revert of this commit on top, then I did not have the above mentioned problem, confirming this commit was the 'bad' commit. I did try it on a Quartz64-B (also rk3566) and it did not have any issue (output via HDMI). I don't know what the cause for this issue is, hopefully you do. Cheers, Diederik On Fri Dec 6, 2024 at 8:26 PM CET, Piotr Zalewski wrote: > Remove color_mgmt_changed check from vop2_crtc_atomic_try_set_gamma to > allow gamma LUT rewrite during modeset when coming out of suspend. Add > a check for color_mgmt_changed directly in vop2_crtc_atomic_flush. > > This patch fixes the patch adding gamma LUT support for vop2 [1]. > > [1] https://lore.kernel.org/linux-rockchip/20241101185545.559090-3-pZ010001011111@proton.me/ > > Suggested-by: Andy Yan <andy.yan@rock-chips.com> > Signed-off-by: Piotr Zalewski <pZ010001011111@proton.me> > --- > drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c > index 0c8ec7220fbe..d259f1c6571d 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c > @@ -1601,7 +1601,7 @@ static void vop2_crtc_atomic_try_set_gamma(struct vop2 *vop2, > struct drm_crtc *crtc, > struct drm_crtc_state *crtc_state) > { > - if (!vop2->lut_regs || !crtc_state->color_mgmt_changed) > + if (!vop2->lut_regs) > return; > > if (!crtc_state->gamma_lut) { > @@ -2669,7 +2669,7 @@ static void vop2_crtc_atomic_flush(struct drm_crtc *crtc, > struct vop2 *vop2 = vp->vop2; > > /* In case of modeset, gamma lut update already happened in atomic enable */ > - if (!drm_atomic_crtc_needs_modeset(crtc_state)) > + if (!drm_atomic_crtc_needs_modeset(crtc_state) && crtc_state->color_mgmt_changed) > vop2_crtc_atomic_try_set_gamma_locked(vop2, vp, crtc, crtc_state); > > vop2_post_config(crtc); [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] [-- Attachment #2: Type: text/plain, Size: 170 bytes --] _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-05 20:08 ` Diederik de Haas @ 2025-06-07 15:32 ` Piotr Zalewski 2025-06-08 11:08 ` Diederik de Haas 0 siblings, 1 reply; 22+ messages in thread From: Piotr Zalewski @ 2025-06-07 15:32 UTC (permalink / raw) To: Diederik de Haas Cc: hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel On Thursday, June 5th, 2025 at 10:13 PM, Diederik de Haas <didi.debian@cknow.org> wrote: > Hi Piotr, > > Since kernel 6.14-rc1 I have the problem that visual output is no longer > shown on my PineTab2 and a `git bisect` pointed to this patch/commit > as the culprit. What is important to note is that `CONFIG_DRM=m` seems > to be required as the problem does not occur with `CONFIG_DRM=y`. > > Near the end of my bisect session, something interesting occurred. > I was booted into a 'bad' kernel (ie no visual output) and when I > started to build my final kernel, I closed the lid of the PineTab2 which > made it go into suspend. When my final kernel was built, I opened the > lid again, which made it resume, to transfer my final kernel to it. > And much to my surprise, I then did have visual output. > When I read the (below) commit message of the 'offending' commit, it may > not be such a surprise after all. > > When I build a (new) 6.14-rc1 kernel with a revert of this commit on > top, then I did not have the above mentioned problem, confirming this > commit was the 'bad' commit. > > I did try it on a Quartz64-B (also rk3566) and it did not have any issue > (output via HDMI). > I don't know what the cause for this issue is, hopefully you do. > Hi Diederik, I tested and confirmed that this happens with drm=m but also in my case it happened when drm=y. After some testing I found out that at boot modeset happened twice and at short interval and since this patch allows for gamma LUT update regardless of color_mgmt_changed state this makes DSP CTRL GAMMA LUT EN bit to be unset twice too. It seems that VOP does not like it. I patched vop2_vp_dsp_lut_disable function so that dsp_ctrl is set only if GAMMA LUT EN bit is set. I checked that this also does not break the gamma lut functionality with emphasis on out-of/into suspend behavior. diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index d0f5fea15e21..7ddf311b38c6 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -897,6 +897,9 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) { u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); + if ((dsp_ctrl & RK3568_VP_DSP_CTRL__DSP_LUT_EN) == 0) + return; + dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); } I will wait with sending a patch because maybe Andy has something to add to this. Best regards, Piotr Zalewski _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-07 15:32 ` Piotr Zalewski @ 2025-06-08 11:08 ` Diederik de Haas 2025-06-08 12:10 ` Andy Yan 2025-06-09 22:37 ` Piotr Zalewski 0 siblings, 2 replies; 22+ messages in thread From: Diederik de Haas @ 2025-06-08 11:08 UTC (permalink / raw) To: Piotr Zalewski Cc: hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel [-- Attachment #1.1: Type: text/plain, Size: 3249 bytes --] Hi Piotr, On Sat Jun 7, 2025 at 5:32 PM CEST, Piotr Zalewski wrote: > On Thursday, June 5th, 2025 at 10:13 PM, Diederik de Haas <didi.debian@cknow.org> wrote: >> Since kernel 6.14-rc1 I have the problem that visual output is no longer >> shown on my PineTab2 and a `git bisect` pointed to this patch/commit >> as the culprit. What is important to note is that `CONFIG_DRM=m` seems >> to be required as the problem does not occur with `CONFIG_DRM=y`. >> >> Near the end of my bisect session, something interesting occurred. >> I was booted into a 'bad' kernel (ie no visual output) and when I >> started to build my final kernel, I closed the lid of the PineTab2 which >> made it go into suspend. When my final kernel was built, I opened the >> lid again, which made it resume, to transfer my final kernel to it. >> And much to my surprise, I then did have visual output. >> When I read the (below) commit message of the 'offending' commit, it may >> not be such a surprise after all. >> >> I did try it on a Quartz64-B (also rk3566) and it did not have any issue >> (output via HDMI). >> I don't know what the cause for this issue is, hopefully you do. > > I tested and confirmed that this happens with drm=m but also in my case > it happened when drm=y. After some testing I found out that at boot modeset Interesting that it also happened with drm=y. As you're more knowledgeable then I am with this, maybe look through https://lists.sr.ht/~diederik/pine64-discuss/<D9AM2OOLREO0.2JMAI42J06TW0@cknow.org> to see if you may spot something relevant? > happened twice and at short interval and since this patch allows for gamma > LUT update regardless of color_mgmt_changed state this makes DSP CTRL GAMMA > LUT EN bit to be unset twice too. It seems that VOP does not like it. I Happy to see you found the cause :-) Do you happen to know why it was unset twice? That sounds suboptimal. But (IIUC) setting a bit to a value it already has causing issues, sounds surprising as well. > patched vop2_vp_dsp_lut_disable function so that dsp_ctrl is set only if > GAMMA LUT EN bit is set. I checked that this also does not break the gamma > lut functionality with emphasis on out-of/into suspend behavior. > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c > index d0f5fea15e21..7ddf311b38c6 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c > @@ -897,6 +897,9 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) > { > u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); > > + if ((dsp_ctrl & RK3568_VP_DSP_CTRL__DSP_LUT_EN) == 0) > + return; > + > dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; > vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); > } I built a kernel with 6.14-rc1 + this patch and can confirm the screen has output again :-) > I will wait with sending a patch because maybe Andy has something to add > to this. Sounds like a plan. It could be that this issue surfaced an underlaying issue and if so, fixing that would be even better. > Best regards, Piotr Zalewski Thanks a lot! Cheers, Diederik [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] [-- Attachment #2: Type: text/plain, Size: 170 bytes --] _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re:Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-08 11:08 ` Diederik de Haas @ 2025-06-08 12:10 ` Andy Yan 2025-06-08 12:53 ` Diederik de Haas 2025-06-09 22:37 ` Piotr Zalewski 1 sibling, 1 reply; 22+ messages in thread From: Andy Yan @ 2025-06-08 12:10 UTC (permalink / raw) To: Diederik de Haas Cc: Piotr Zalewski, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel Hello, At 2025-06-08 19:08:50, "Diederik de Haas" <didi.debian@cknow.org> wrote: >Hi Piotr, > >On Sat Jun 7, 2025 at 5:32 PM CEST, Piotr Zalewski wrote: >> On Thursday, June 5th, 2025 at 10:13 PM, Diederik de Haas <didi.debian@cknow.org> wrote: >>> Since kernel 6.14-rc1 I have the problem that visual output is no longer >>> shown on my PineTab2 and a `git bisect` pointed to this patch/commit >>> as the culprit. What is important to note is that `CONFIG_DRM=m` seems >>> to be required as the problem does not occur with `CONFIG_DRM=y`. >>> >>> Near the end of my bisect session, something interesting occurred. >>> I was booted into a 'bad' kernel (ie no visual output) and when I >>> started to build my final kernel, I closed the lid of the PineTab2 which >>> made it go into suspend. When my final kernel was built, I opened the >>> lid again, which made it resume, to transfer my final kernel to it. >>> And much to my surprise, I then did have visual output. >>> When I read the (below) commit message of the 'offending' commit, it may >>> not be such a surprise after all. >>> >>> I did try it on a Quartz64-B (also rk3566) and it did not have any issue >>> (output via HDMI). >>> I don't know what the cause for this issue is, hopefully you do. >> >> I tested and confirmed that this happens with drm=m but also in my case >> it happened when drm=y. After some testing I found out that at boot modeset > >Interesting that it also happened with drm=y. >As you're more knowledgeable then I am with this, maybe look through >https://lists.sr.ht/~diederik/pine64-discuss/<D9AM2OOLREO0.2JMAI42J06TW0@cknow.org> > >to see if you may spot something relevant? > >> happened twice and at short interval and since this patch allows for gamma >> LUT update regardless of color_mgmt_changed state this makes DSP CTRL GAMMA >> LUT EN bit to be unset twice too. It seems that VOP does not like it. I > >Happy to see you found the cause :-) >Do you happen to know why it was unset twice? That sounds suboptimal. >But (IIUC) setting a bit to a value it already has causing issues, >sounds surprising as well. I have conducted tests on both rk3566-box-demo (with drm set to y) and rk3568-lubancat-2 (with drm set to m), but I was unable to reproduce this issue. Could you two please share your kernel defconfig and the corresponding kernel startup logs? Additionally, both of my two boards tested with HDMI output. What kind of display interface does your board use for output? > >> patched vop2_vp_dsp_lut_disable function so that dsp_ctrl is set only if >> GAMMA LUT EN bit is set. I checked that this also does not break the gamma >> lut functionality with emphasis on out-of/into suspend behavior. >> >> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >> index d0f5fea15e21..7ddf311b38c6 100644 >> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >> @@ -897,6 +897,9 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) >> { >> u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); >> >> + if ((dsp_ctrl & RK3568_VP_DSP_CTRL__DSP_LUT_EN) == 0) >> + return; >> + >> dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; >> vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); >> } > >I built a kernel with 6.14-rc1 + this patch and can confirm the screen >has output again :-) > >> I will wait with sending a patch because maybe Andy has something to add >> to this. > >Sounds like a plan. It could be that this issue surfaced an underlaying >issue and if so, fixing that would be even better. > >> Best regards, Piotr Zalewski > >Thanks a lot! > >Cheers, > Diederik _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-08 12:10 ` Andy Yan @ 2025-06-08 12:53 ` Diederik de Haas 2025-06-09 9:15 ` Andy Yan 0 siblings, 1 reply; 22+ messages in thread From: Diederik de Haas @ 2025-06-08 12:53 UTC (permalink / raw) To: Andy Yan Cc: Piotr Zalewski, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel [-- Attachment #1.1: Type: text/plain, Size: 4567 bytes --] Hi Andy, On Sun Jun 8, 2025 at 2:10 PM CEST, Andy Yan wrote: > At 2025-06-08 19:08:50, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>On Sat Jun 7, 2025 at 5:32 PM CEST, Piotr Zalewski wrote: >>> On Thursday, June 5th, 2025 at 10:13 PM, Diederik de Haas <didi.debian@cknow.org> wrote: >>>> Since kernel 6.14-rc1 I have the problem that visual output is no longer >>>> shown on my PineTab2 and a `git bisect` pointed to this patch/commit >>>> as the culprit. What is important to note is that `CONFIG_DRM=m` seems >>>> to be required as the problem does not occur with `CONFIG_DRM=y`. >>>> >>>> Near the end of my bisect session, something interesting occurred. >>>> I was booted into a 'bad' kernel (ie no visual output) and when I >>>> started to build my final kernel, I closed the lid of the PineTab2 which >>>> made it go into suspend. When my final kernel was built, I opened the >>>> lid again, which made it resume, to transfer my final kernel to it. >>>> And much to my surprise, I then did have visual output. >>>> When I read the (below) commit message of the 'offending' commit, it may >>>> not be such a surprise after all. >>>> >>>> I did try it on a Quartz64-B (also rk3566) and it did not have any issue >>>> (output via HDMI). >>>> I don't know what the cause for this issue is, hopefully you do. >>> >>> I tested and confirmed that this happens with drm=m but also in my case >>> it happened when drm=y. After some testing I found out that at boot modeset >> >>Interesting that it also happened with drm=y. >>As you're more knowledgeable then I am with this, maybe look through >>https://lists.sr.ht/~diederik/pine64-discuss/<D9AM2OOLREO0.2JMAI42J06TW0@cknow.org> >> >>to see if you may spot something relevant? >> >>> happened twice and at short interval and since this patch allows for gamma >>> LUT update regardless of color_mgmt_changed state this makes DSP CTRL GAMMA >>> LUT EN bit to be unset twice too. It seems that VOP does not like it. I >> >>Happy to see you found the cause :-) >>Do you happen to know why it was unset twice? That sounds suboptimal. >>But (IIUC) setting a bit to a value it already has causing issues, >>sounds surprising as well. > > I have conducted tests on both rk3566-box-demo (with drm set to y) and rk3568-lubancat-2 (with drm set to m), > but I was unable to reproduce this issue. Could you two please share your kernel defconfig and the corresponding kernel startup logs? > Additionally, both of my two boards tested with HDMI output. What kind of display interface does your board use for output? I wasn't able to reproduce this issue on my PINE64 Quartz-B (rk3566) with HDMI output either, but the problem is present on a PineTab2 [1] (also rk3566) which uses a MIPI DSI connection to the display panel. Kernel config: https://paste.sr.ht/~diederik/aa747ed170aa01cc759fbe1ffd9cebe8c887b10b dmesg kernel 6.14-rc1: https://paste.sr.ht/~diederik/733fbf8bb7f6aee8b68cf5a652157d445462c24a dmesg kernel 6.14-rc1 with Piotr's patch: https://paste.sr.ht/~diederik/db1af672cfb611acbfbdf35adb6f170e5c38febc Both dmesg outputs contain a suspend-resume cycle. I'm using a USB Wi-Fi adapter for the wireless connection. [1] https://wiki.pine64.org/wiki/PineTab2 Happy to provide more info and/or do some tests. Cheers, Diederik >>> patched vop2_vp_dsp_lut_disable function so that dsp_ctrl is set only if >>> GAMMA LUT EN bit is set. I checked that this also does not break the gamma >>> lut functionality with emphasis on out-of/into suspend behavior. >>> >>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>> index d0f5fea15e21..7ddf311b38c6 100644 >>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>> @@ -897,6 +897,9 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) >>> { >>> u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); >>> >>> + if ((dsp_ctrl & RK3568_VP_DSP_CTRL__DSP_LUT_EN) == 0) >>> + return; >>> + >>> dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; >>> vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); >>> } >> >>I built a kernel with 6.14-rc1 + this patch and can confirm the screen >>has output again :-) >> >>> I will wait with sending a patch because maybe Andy has something to add >>> to this. >> >>Sounds like a plan. It could be that this issue surfaced an underlaying >>issue and if so, fixing that would be even better. [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] [-- Attachment #2: Type: text/plain, Size: 170 bytes --] _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re:Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-08 12:53 ` Diederik de Haas @ 2025-06-09 9:15 ` Andy Yan 2025-06-09 12:36 ` Diederik de Haas 0 siblings, 1 reply; 22+ messages in thread From: Andy Yan @ 2025-06-09 9:15 UTC (permalink / raw) To: Diederik de Haas Cc: Piotr Zalewski, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel [-- Attachment #1: Type: text/plain, Size: 4808 bytes --] Hi Diederik, At 2025-06-08 20:53:37, "Diederik de Haas" <didi.debian@cknow.org> wrote: >Hi Andy, > >On Sun Jun 8, 2025 at 2:10 PM CEST, Andy Yan wrote: >> At 2025-06-08 19:08:50, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>On Sat Jun 7, 2025 at 5:32 PM CEST, Piotr Zalewski wrote: >>>> On Thursday, June 5th, 2025 at 10:13 PM, Diederik de Haas <didi.debian@cknow.org> wrote: >>>>> Since kernel 6.14-rc1 I have the problem that visual output is no longer >>>>> shown on my PineTab2 and a `git bisect` pointed to this patch/commit >>>>> as the culprit. What is important to note is that `CONFIG_DRM=m` seems >>>>> to be required as the problem does not occur with `CONFIG_DRM=y`. >>>>> >>>>> Near the end of my bisect session, something interesting occurred. >>>>> I was booted into a 'bad' kernel (ie no visual output) and when I >>>>> started to build my final kernel, I closed the lid of the PineTab2 which >>>>> made it go into suspend. When my final kernel was built, I opened the >>>>> lid again, which made it resume, to transfer my final kernel to it. >>>>> And much to my surprise, I then did have visual output. >>>>> When I read the (below) commit message of the 'offending' commit, it may >>>>> not be such a surprise after all. >>>>> >>>>> I did try it on a Quartz64-B (also rk3566) and it did not have any issue >>>>> (output via HDMI). >>>>> I don't know what the cause for this issue is, hopefully you do. >>>> >>>> I tested and confirmed that this happens with drm=m but also in my case >>>> it happened when drm=y. After some testing I found out that at boot modeset >>> >>>Interesting that it also happened with drm=y. >>>As you're more knowledgeable then I am with this, maybe look through >>>https://lists.sr.ht/~diederik/pine64-discuss/<D9AM2OOLREO0.2JMAI42J06TW0@cknow.org> >>> >>>to see if you may spot something relevant? >>> >>>> happened twice and at short interval and since this patch allows for gamma >>>> LUT update regardless of color_mgmt_changed state this makes DSP CTRL GAMMA >>>> LUT EN bit to be unset twice too. It seems that VOP does not like it. I >>> >>>Happy to see you found the cause :-) >>>Do you happen to know why it was unset twice? That sounds suboptimal. >>>But (IIUC) setting a bit to a value it already has causing issues, >>>sounds surprising as well. >> >> I have conducted tests on both rk3566-box-demo (with drm set to y) and rk3568-lubancat-2 (with drm set to m), >> but I was unable to reproduce this issue. Could you two please share your kernel defconfig and the corresponding kernel startup logs? >> Additionally, both of my two boards tested with HDMI output. What kind of display interface does your board use for output? > >I wasn't able to reproduce this issue on my PINE64 Quartz-B (rk3566) >with HDMI output either, but the problem is present on a PineTab2 [1] >(also rk3566) which uses a MIPI DSI connection to the display panel. > >Kernel config: >https://paste.sr.ht/~diederik/aa747ed170aa01cc759fbe1ffd9cebe8c887b10b > >dmesg kernel 6.14-rc1: >https://paste.sr.ht/~diederik/733fbf8bb7f6aee8b68cf5a652157d445462c24a > >dmesg kernel 6.14-rc1 with Piotr's patch: >https://paste.sr.ht/~diederik/db1af672cfb611acbfbdf35adb6f170e5c38febc > >Both dmesg outputs contain a suspend-resume cycle. >I'm using a USB Wi-Fi adapter for the wireless connection. > >[1] https://wiki.pine64.org/wiki/PineTab2 > >Happy to provide more info and/or do some tests. Can you apply the patch in the attachment, reproduce this issue(without Piotr's patch), and then provide me with a copy of the kernel log? Thanks. > >Cheers, > Diederik > >>>> patched vop2_vp_dsp_lut_disable function so that dsp_ctrl is set only if >>>> GAMMA LUT EN bit is set. I checked that this also does not break the gamma >>>> lut functionality with emphasis on out-of/into suspend behavior. >>>> >>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>> index d0f5fea15e21..7ddf311b38c6 100644 >>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>> @@ -897,6 +897,9 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) >>>> { >>>> u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); >>>> >>>> + if ((dsp_ctrl & RK3568_VP_DSP_CTRL__DSP_LUT_EN) == 0) >>>> + return; >>>> + >>>> dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; >>>> vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); >>>> } >>> >>>I built a kernel with 6.14-rc1 + this patch and can confirm the screen >>>has output again :-) >>> >>>> I will wait with sending a patch because maybe Andy has something to add >>>> to this. >>> >>>Sounds like a plan. It could be that this issue surfaced an underlaying >>>issue and if so, fixing that would be even better. [-- Attachment #2: print_lut_0609_1710.patch --] [-- Type: application/octet-stream, Size: 1223 bytes --] diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index d0f5fea15e21..d90b345b5b53 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -898,6 +898,7 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; + printk("vop2_vp_dsp_lut_disable dsp_ctrl: 0x%08x\n", dsp_ctrl); vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); } @@ -1506,7 +1507,7 @@ static void vop2_crtc_atomic_try_set_gamma(struct vop2 *vop2, { if (!vop2->lut_regs) return; - + printk("%s gamma_lut: %px\n", __func__, crtc_state->gamma_lut); if (!crtc_state->gamma_lut) { vop2_vp_dsp_lut_disable(vp); return; @@ -1643,7 +1644,7 @@ static void vop2_crtc_atomic_enable(struct drm_crtc *crtc, int ret; struct drm_encoder *encoder; - drm_dbg(vop2->drm, "Update mode to %dx%d%s%d, type: %d for vp%d\n", + drm_info(vop2->drm, "Update mode to %dx%d%s%d, type: %d for vp%d\n", hdisplay, vdisplay, mode->flags & DRM_MODE_FLAG_INTERLACE ? "i" : "p", drm_mode_vrefresh(mode), vcstate->output_type, vp->id); [-- Attachment #3: Type: text/plain, Size: 170 bytes --] _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-09 9:15 ` Andy Yan @ 2025-06-09 12:36 ` Diederik de Haas 2025-06-10 9:07 ` Andy Yan 0 siblings, 1 reply; 22+ messages in thread From: Diederik de Haas @ 2025-06-09 12:36 UTC (permalink / raw) To: Andy Yan Cc: Piotr Zalewski, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel [-- Attachment #1.1: Type: text/plain, Size: 5242 bytes --] Hi Andy, On Mon Jun 9, 2025 at 11:15 AM CEST, Andy Yan wrote: > At 2025-06-08 20:53:37, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>On Sun Jun 8, 2025 at 2:10 PM CEST, Andy Yan wrote: >>> At 2025-06-08 19:08:50, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>On Sat Jun 7, 2025 at 5:32 PM CEST, Piotr Zalewski wrote: >>>>> On Thursday, June 5th, 2025 at 10:13 PM, Diederik de Haas <didi.debian@cknow.org> wrote: >>>>>> Since kernel 6.14-rc1 I have the problem that visual output is no longer >>>>>> shown on my PineTab2 and a `git bisect` pointed to this patch/commit >>>>>> as the culprit. What is important to note is that `CONFIG_DRM=m` seems >>>>>> to be required as the problem does not occur with `CONFIG_DRM=y`. >>>>>> >>>>>> Near the end of my bisect session, something interesting occurred. >>>>>> I was booted into a 'bad' kernel (ie no visual output) and when I >>>>>> started to build my final kernel, I closed the lid of the PineTab2 which >>>>>> made it go into suspend. When my final kernel was built, I opened the >>>>>> lid again, which made it resume, to transfer my final kernel to it. >>>>>> And much to my surprise, I then did have visual output. >>>>>> When I read the (below) commit message of the 'offending' commit, it may >>>>>> not be such a surprise after all. >>>>>> >>>>>> I did try it on a Quartz64-B (also rk3566) and it did not have any issue >>>>>> (output via HDMI). >>>>>> I don't know what the cause for this issue is, hopefully you do. >>>>> >>>>> I tested and confirmed that this happens with drm=m but also in my case >>>>> it happened when drm=y. After some testing I found out that at boot modeset >>>> >>>>Interesting that it also happened with drm=y. >>>>As you're more knowledgeable then I am with this, maybe look through >>>>https://lists.sr.ht/~diederik/pine64-discuss/<D9AM2OOLREO0.2JMAI42J06TW0@cknow.org> >>>> >>>>to see if you may spot something relevant? >>>> >>>>> happened twice and at short interval and since this patch allows for gamma >>>>> LUT update regardless of color_mgmt_changed state this makes DSP CTRL GAMMA >>>>> LUT EN bit to be unset twice too. It seems that VOP does not like it. I >>>> >>>>Happy to see you found the cause :-) >>>>Do you happen to know why it was unset twice? That sounds suboptimal. >>>>But (IIUC) setting a bit to a value it already has causing issues, >>>>sounds surprising as well. >>> >>> I have conducted tests on both rk3566-box-demo (with drm set to y) and rk3568-lubancat-2 (with drm set to m), >>> but I was unable to reproduce this issue. Could you two please share your kernel defconfig and the corresponding kernel startup logs? >>> Additionally, both of my two boards tested with HDMI output. What kind of display interface does your board use for output? >> >>I wasn't able to reproduce this issue on my PINE64 Quartz-B (rk3566) >>with HDMI output either, but the problem is present on a PineTab2 [1] >>(also rk3566) which uses a MIPI DSI connection to the display panel. >> >>Kernel config: >>https://paste.sr.ht/~diederik/aa747ed170aa01cc759fbe1ffd9cebe8c887b10b >> >>dmesg kernel 6.14-rc1: >>https://paste.sr.ht/~diederik/733fbf8bb7f6aee8b68cf5a652157d445462c24a >> >>dmesg kernel 6.14-rc1 with Piotr's patch: >>https://paste.sr.ht/~diederik/db1af672cfb611acbfbdf35adb6f170e5c38febc >> >>Both dmesg outputs contain a suspend-resume cycle. >>I'm using a USB Wi-Fi adapter for the wireless connection. >> >>[1] https://wiki.pine64.org/wiki/PineTab2 >> >>Happy to provide more info and/or do some tests. > > Can you apply the patch in the attachment, reproduce this issue(without Piotr's patch), > and then provide me with a copy of the kernel log? Same test as above, but added ``dmesg | grep "vop2_"`` at the end as well dmesg kernel 6.14-rc1 with Andy's print_lut_0609_1710 patch: https://paste.sr.ht/~diederik/ac356ee8b0f7e772c7310293d99d95644f59a4ee Thanks! Diederik >>>>> patched vop2_vp_dsp_lut_disable function so that dsp_ctrl is set only if >>>>> GAMMA LUT EN bit is set. I checked that this also does not break the gamma >>>>> lut functionality with emphasis on out-of/into suspend behavior. >>>>> >>>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>> index d0f5fea15e21..7ddf311b38c6 100644 >>>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>> @@ -897,6 +897,9 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) >>>>> { >>>>> u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); >>>>> >>>>> + if ((dsp_ctrl & RK3568_VP_DSP_CTRL__DSP_LUT_EN) == 0) >>>>> + return; >>>>> + >>>>> dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; >>>>> vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); >>>>> } >>>> >>>>I built a kernel with 6.14-rc1 + this patch and can confirm the screen >>>>has output again :-) >>>> >>>>> I will wait with sending a patch because maybe Andy has something to add >>>>> to this. >>>> >>>>Sounds like a plan. It could be that this issue surfaced an underlaying >>>>issue and if so, fixing that would be even better. [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] [-- Attachment #2: Type: text/plain, Size: 170 bytes --] _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re:Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-09 12:36 ` Diederik de Haas @ 2025-06-10 9:07 ` Andy Yan 2025-06-10 11:02 ` Diederik de Haas 0 siblings, 1 reply; 22+ messages in thread From: Andy Yan @ 2025-06-10 9:07 UTC (permalink / raw) To: Diederik de Haas Cc: Piotr Zalewski, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel [-- Attachment #1: Type: text/plain, Size: 6607 bytes --] Hi Diederik, At 2025-06-09 20:36:41, "Diederik de Haas" <didi.debian@cknow.org> wrote: >Hi Andy, > >On Mon Jun 9, 2025 at 11:15 AM CEST, Andy Yan wrote: >> At 2025-06-08 20:53:37, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>On Sun Jun 8, 2025 at 2:10 PM CEST, Andy Yan wrote: >>>> At 2025-06-08 19:08:50, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>On Sat Jun 7, 2025 at 5:32 PM CEST, Piotr Zalewski wrote: >>>>>> On Thursday, June 5th, 2025 at 10:13 PM, Diederik de Haas <didi.debian@cknow.org> wrote: >>>>>>> Since kernel 6.14-rc1 I have the problem that visual output is no longer >>>>>>> shown on my PineTab2 and a `git bisect` pointed to this patch/commit >>>>>>> as the culprit. What is important to note is that `CONFIG_DRM=m` seems >>>>>>> to be required as the problem does not occur with `CONFIG_DRM=y`. >>>>>>> >>>>>>> Near the end of my bisect session, something interesting occurred. >>>>>>> I was booted into a 'bad' kernel (ie no visual output) and when I >>>>>>> started to build my final kernel, I closed the lid of the PineTab2 which >>>>>>> made it go into suspend. When my final kernel was built, I opened the >>>>>>> lid again, which made it resume, to transfer my final kernel to it. >>>>>>> And much to my surprise, I then did have visual output. >>>>>>> When I read the (below) commit message of the 'offending' commit, it may >>>>>>> not be such a surprise after all. >>>>>>> >>>>>>> I did try it on a Quartz64-B (also rk3566) and it did not have any issue >>>>>>> (output via HDMI). >>>>>>> I don't know what the cause for this issue is, hopefully you do. >>>>>> >>>>>> I tested and confirmed that this happens with drm=m but also in my case >>>>>> it happened when drm=y. After some testing I found out that at boot modeset >>>>> >>>>>Interesting that it also happened with drm=y. >>>>>As you're more knowledgeable then I am with this, maybe look through >>>>>https://lists.sr.ht/~diederik/pine64-discuss/<D9AM2OOLREO0.2JMAI42J06TW0@cknow.org> >>>>> >>>>>to see if you may spot something relevant? >>>>> >>>>>> happened twice and at short interval and since this patch allows for gamma >>>>>> LUT update regardless of color_mgmt_changed state this makes DSP CTRL GAMMA >>>>>> LUT EN bit to be unset twice too. It seems that VOP does not like it. I >>>>> >>>>>Happy to see you found the cause :-) >>>>>Do you happen to know why it was unset twice? That sounds suboptimal. >>>>>But (IIUC) setting a bit to a value it already has causing issues, >>>>>sounds surprising as well. >>>> >>>> I have conducted tests on both rk3566-box-demo (with drm set to y) and rk3568-lubancat-2 (with drm set to m), >>>> but I was unable to reproduce this issue. Could you two please share your kernel defconfig and the corresponding kernel startup logs? >>>> Additionally, both of my two boards tested with HDMI output. What kind of display interface does your board use for output? >>> >>>I wasn't able to reproduce this issue on my PINE64 Quartz-B (rk3566) >>>with HDMI output either, but the problem is present on a PineTab2 [1] >>>(also rk3566) which uses a MIPI DSI connection to the display panel. >>> >>>Kernel config: >>>https://paste.sr.ht/~diederik/aa747ed170aa01cc759fbe1ffd9cebe8c887b10b >>> >>>dmesg kernel 6.14-rc1: >>>https://paste.sr.ht/~diederik/733fbf8bb7f6aee8b68cf5a652157d445462c24a >>> >>>dmesg kernel 6.14-rc1 with Piotr's patch: >>>https://paste.sr.ht/~diederik/db1af672cfb611acbfbdf35adb6f170e5c38febc >>> >>>Both dmesg outputs contain a suspend-resume cycle. >>>I'm using a USB Wi-Fi adapter for the wireless connection. >>> >>>[1] https://wiki.pine64.org/wiki/PineTab2 >>> >>>Happy to provide more info and/or do some tests. >> >> Can you apply the patch in the attachment, reproduce this issue(without Piotr's patch), >> and then provide me with a copy of the kernel log? > >Same test as above, but added ``dmesg | grep "vop2_"`` at the end as well > >dmesg kernel 6.14-rc1 with Andy's print_lut_0609_1710 patch: >https://paste.sr.ht/~diederik/ac356ee8b0f7e772c7310293d99d95644f59a4ee root@pt2-scmi:~# dmesg | grep "vop2_" [ 4.996281] rockchip-drm display-subsystem: bound fe040000.vop (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) [ 5.005207] rockchip-drm display-subsystem: bound fe0a0000.hdmi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) [ 5.006798] rockchip-drm display-subsystem: bound fe060000.dsi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) [ 5.021204] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 [ 5.021219] vop2_vp_dsp_lut_disable dsp_ctrl: 0x0000000f It seems that dsp_ctrl: 0x0000000f , this value is not what we expected. The expected is 0x00010000. Could you please do an experiment for me? When there is no display on your screen, execute the following command and see if the screen can resume displaying: ./data/io -w -4 0xfe040d00 0x10000; io -w -4 0xfe040000 0x28002 I have placed the io tool in the attachment. You can use command like bellow to read back to confirm if what you write has taken effect: io -r -4 -l 0x100 0xfe040d00 you may need to make CONFIG_DEVMEM=y so that you can write the register by io command. [ 73.750524] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 [ 73.750542] vop2_vp_dsp_lut_disable dsp_ctrl: 0x00010000 > >Thanks! > >Diederik > >>>>>> patched vop2_vp_dsp_lut_disable function so that dsp_ctrl is set only if >>>>>> GAMMA LUT EN bit is set. I checked that this also does not break the gamma >>>>>> lut functionality with emphasis on out-of/into suspend behavior. >>>>>> >>>>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>> index d0f5fea15e21..7ddf311b38c6 100644 >>>>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>> @@ -897,6 +897,9 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) >>>>>> { >>>>>> u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); >>>>>> >>>>>> + if ((dsp_ctrl & RK3568_VP_DSP_CTRL__DSP_LUT_EN) == 0) >>>>>> + return; >>>>>> + >>>>>> dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; >>>>>> vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); >>>>>> } >>>>> >>>>>I built a kernel with 6.14-rc1 + this patch and can confirm the screen >>>>>has output again :-) >>>>> >>>>>> I will wait with sending a patch because maybe Andy has something to add >>>>>> to this. >>>>> >>>>>Sounds like a plan. It could be that this issue surfaced an underlaying >>>>>issue and if so, fixing that would be even better. > [-- Attachment #2: io --] [-- Type: application/octet-stream, Size: 593608 bytes --] [-- Attachment #3: Type: text/plain, Size: 170 bytes --] _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-10 9:07 ` Andy Yan @ 2025-06-10 11:02 ` Diederik de Haas 2025-06-11 7:41 ` Andy Yan 0 siblings, 1 reply; 22+ messages in thread From: Diederik de Haas @ 2025-06-10 11:02 UTC (permalink / raw) To: Andy Yan Cc: Piotr Zalewski, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel [-- Attachment #1.1: Type: text/plain, Size: 5799 bytes --] Hi Andy, On Tue Jun 10, 2025 at 11:07 AM CEST, Andy Yan wrote: > At 2025-06-09 20:36:41, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>On Mon Jun 9, 2025 at 11:15 AM CEST, Andy Yan wrote: >>> At 2025-06-08 20:53:37, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>On Sun Jun 8, 2025 at 2:10 PM CEST, Andy Yan wrote: >>>>> At 2025-06-08 19:08:50, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>>On Sat Jun 7, 2025 at 5:32 PM CEST, Piotr Zalewski wrote: >>>>>>> On Thursday, June 5th, 2025 at 10:13 PM, Diederik de Haas <didi.debian@cknow.org> wrote: >>>>>>>> Since kernel 6.14-rc1 I have the problem that visual output is no longer >>>>>>>> shown on my PineTab2 and a `git bisect` pointed to this patch/commit >>>>> >>>>> I have conducted tests on both rk3566-box-demo (with drm set to y) >>>>> and rk3568-lubancat-2 (with drm set to m), but I was unable to >>>>> reproduce this issue. Could you two please share your kernel >>>>> defconfig and the corresponding kernel startup logs? >>>>> Additionally, both of my two boards tested with HDMI output. What >>>>> kind of display interface does your board use for output? >>>> >>>>I wasn't able to reproduce this issue on my PINE64 Quartz-B (rk3566) >>>>with HDMI output either, but the problem is present on a PineTab2 [1] >>>>(also rk3566) which uses a MIPI DSI connection to the display panel. >>>> >>>>Kernel config: >>>>https://paste.sr.ht/~diederik/aa747ed170aa01cc759fbe1ffd9cebe8c887b10b >>>> >>>>dmesg kernel 6.14-rc1: >>>>https://paste.sr.ht/~diederik/733fbf8bb7f6aee8b68cf5a652157d445462c24a >>>> >>>>dmesg kernel 6.14-rc1 with Piotr's patch: >>>>https://paste.sr.ht/~diederik/db1af672cfb611acbfbdf35adb6f170e5c38febc >>>> >>>>Both dmesg outputs contain a suspend-resume cycle. >>>>I'm using a USB Wi-Fi adapter for the wireless connection. >>>> >>>>[1] https://wiki.pine64.org/wiki/PineTab2 >>>> >>>>Happy to provide more info and/or do some tests. >>> >>> Can you apply the patch in the attachment, reproduce this issue(without Piotr's patch), >>> and then provide me with a copy of the kernel log? >> >>Same test as above, but added ``dmesg | grep "vop2_"`` at the end as well >> >>dmesg kernel 6.14-rc1 with Andy's print_lut_0609_1710 patch: >>https://paste.sr.ht/~diederik/ac356ee8b0f7e772c7310293d99d95644f59a4ee > > > root@pt2-scmi:~# dmesg | grep "vop2_" > [ 4.996281] rockchip-drm display-subsystem: bound fe040000.vop (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) > [ 5.005207] rockchip-drm display-subsystem: bound fe0a0000.hdmi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) > [ 5.006798] rockchip-drm display-subsystem: bound fe060000.dsi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) > [ 5.021204] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 > [ 5.021219] vop2_vp_dsp_lut_disable dsp_ctrl: 0x0000000f > > It seems that dsp_ctrl: 0x0000000f , this value is not what we expected. > > The expected is 0x00010000. > > Could you please do an experiment for me? When there is no display on your screen, > execute the following command and see if the screen can resume displaying: > > ./data/io -w -4 0xfe040d00 0x10000; io -w -4 0xfe040000 0x28002 > > I have placed the io tool in the attachment. > > You can use command like bellow to read back to confirm if what you write has taken effect: > io -r -4 -l 0x100 0xfe040d00 > > you may need to make CONFIG_DEVMEM=y so that you can write the register by io command. I renamed it as ``andy-io`` and performed the test: ```sh root@pt2-scmi:~# echo 'just (re-)booted into my PineTab2; screen is blank' just (re-)booted into my PineTab2; screen is blank root@pt2-scmi:~# uname -a Linux pt2-scmi 6.14.0-rc1-00001-gfbe17d9b77b0 #18 SMP Mon Jun 9 13:17:28 CEST 2025 aarch64 GNU/Linux root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 mmap() failed: Operation not permitted root@pt2-scmi:~# grep CONFIG_DEVMEM /boot/config-6.14.0-rc1-00001-gfbe17d9b77b0 CONFIG_DEVMEM=y root@pt2-scmi:~# ./andy-io -w -4 0xfe040d00 0x10000 mmap() failed: Operation not permitted root@pt2-scmi:~# ./andy-io -w -4 0xfe040000 0x28002 mmap() failed: Operation not permitted ``` I guess this is not what you expected and I don't know why it happens. Cheers, Diederik > [ 73.750524] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 > [ 73.750542] vop2_vp_dsp_lut_disable dsp_ctrl: 0x00010000 >>>>>>> patched vop2_vp_dsp_lut_disable function so that dsp_ctrl is set only if >>>>>>> GAMMA LUT EN bit is set. I checked that this also does not break the gamma >>>>>>> lut functionality with emphasis on out-of/into suspend behavior. >>>>>>> >>>>>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>> index d0f5fea15e21..7ddf311b38c6 100644 >>>>>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>> @@ -897,6 +897,9 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) >>>>>>> { >>>>>>> u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); >>>>>>> >>>>>>> + if ((dsp_ctrl & RK3568_VP_DSP_CTRL__DSP_LUT_EN) == 0) >>>>>>> + return; >>>>>>> + >>>>>>> dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; >>>>>>> vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); >>>>>>> } >>>>>> >>>>>>I built a kernel with 6.14-rc1 + this patch and can confirm the screen >>>>>>has output again :-) >>>>>> >>>>>>> I will wait with sending a patch because maybe Andy has something to add >>>>>>> to this. >>>>>> >>>>>>Sounds like a plan. It could be that this issue surfaced an underlaying >>>>>>issue and if so, fixing that would be even better. [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] [-- Attachment #2: Type: text/plain, Size: 170 bytes --] _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re:Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-10 11:02 ` Diederik de Haas @ 2025-06-11 7:41 ` Andy Yan 2025-06-11 10:56 ` Diederik de Haas 0 siblings, 1 reply; 22+ messages in thread From: Andy Yan @ 2025-06-11 7:41 UTC (permalink / raw) To: Diederik de Haas Cc: Piotr Zalewski, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, dri-devel, linux-rockchip Hi Diederik, At 2025-06-10 19:02:11, "Diederik de Haas" <didi.debian@cknow.org> wrote: >Hi Andy, > >On Tue Jun 10, 2025 at 11:07 AM CEST, Andy Yan wrote: >> At 2025-06-09 20:36:41, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>On Mon Jun 9, 2025 at 11:15 AM CEST, Andy Yan wrote: >>>> At 2025-06-08 20:53:37, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>On Sun Jun 8, 2025 at 2:10 PM CEST, Andy Yan wrote: >>>>>> At 2025-06-08 19:08:50, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>>>On Sat Jun 7, 2025 at 5:32 PM CEST, Piotr Zalewski wrote: >>>>>>>> On Thursday, June 5th, 2025 at 10:13 PM, Diederik de Haas <didi.debian@cknow.org> wrote: >>>>>>>>> Since kernel 6.14-rc1 I have the problem that visual output is no longer >>>>>>>>> shown on my PineTab2 and a `git bisect` pointed to this patch/commit >>>>>> >>>>>> I have conducted tests on both rk3566-box-demo (with drm set to y) >>>>>> and rk3568-lubancat-2 (with drm set to m), but I was unable to >>>>>> reproduce this issue. Could you two please share your kernel >>>>>> defconfig and the corresponding kernel startup logs? >>>>>> Additionally, both of my two boards tested with HDMI output. What >>>>>> kind of display interface does your board use for output? >>>>> >>>>>I wasn't able to reproduce this issue on my PINE64 Quartz-B (rk3566) >>>>>with HDMI output either, but the problem is present on a PineTab2 [1] >>>>>(also rk3566) which uses a MIPI DSI connection to the display panel. >>>>> >>>>>Kernel config: >>>>>https://paste.sr.ht/~diederik/aa747ed170aa01cc759fbe1ffd9cebe8c887b10b >>>>> >>>>>dmesg kernel 6.14-rc1: >>>>>https://paste.sr.ht/~diederik/733fbf8bb7f6aee8b68cf5a652157d445462c24a >>>>> >>>>>dmesg kernel 6.14-rc1 with Piotr's patch: >>>>>https://paste.sr.ht/~diederik/db1af672cfb611acbfbdf35adb6f170e5c38febc >>>>> >>>>>Both dmesg outputs contain a suspend-resume cycle. >>>>>I'm using a USB Wi-Fi adapter for the wireless connection. >>>>> >>>>>[1] https://wiki.pine64.org/wiki/PineTab2 >>>>> >>>>>Happy to provide more info and/or do some tests. >>>> >>>> Can you apply the patch in the attachment, reproduce this issue(without Piotr's patch), >>>> and then provide me with a copy of the kernel log? >>> >>>Same test as above, but added ``dmesg | grep "vop2_"`` at the end as well >>> >>>dmesg kernel 6.14-rc1 with Andy's print_lut_0609_1710 patch: >>>https://paste.sr.ht/~diederik/ac356ee8b0f7e772c7310293d99d95644f59a4ee >> >> >> root@pt2-scmi:~# dmesg | grep "vop2_" >> [ 4.996281] rockchip-drm display-subsystem: bound fe040000.vop (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >> [ 5.005207] rockchip-drm display-subsystem: bound fe0a0000.hdmi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >> [ 5.006798] rockchip-drm display-subsystem: bound fe060000.dsi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >> [ 5.021204] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >> [ 5.021219] vop2_vp_dsp_lut_disable dsp_ctrl: 0x0000000f >> >> It seems that dsp_ctrl: 0x0000000f , this value is not what we expected. >> >> The expected is 0x00010000. >> >> Could you please do an experiment for me? When there is no display on your screen, >> execute the following command and see if the screen can resume displaying: >> >> ./data/io -w -4 0xfe040d00 0x10000; io -w -4 0xfe040000 0x28002 >> >> I have placed the io tool in the attachment. >> >> You can use command like bellow to read back to confirm if what you write has taken effect: >> io -r -4 -l 0x100 0xfe040d00 >> >> you may need to make CONFIG_DEVMEM=y so that you can write the register by io command. > >I renamed it as ``andy-io`` and performed the test: > >```sh >root@pt2-scmi:~# echo 'just (re-)booted into my PineTab2; screen is blank' >just (re-)booted into my PineTab2; screen is blank >root@pt2-scmi:~# uname -a >Linux pt2-scmi 6.14.0-rc1-00001-gfbe17d9b77b0 #18 SMP Mon Jun 9 13:17:28 CEST 2025 aarch64 GNU/Linux >root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 >mmap() failed: Operation not permitted >root@pt2-scmi:~# grep CONFIG_DEVMEM /boot/config-6.14.0-rc1-00001-gfbe17d9b77b0 >CONFIG_DEVMEM=y >root@pt2-scmi:~# ./andy-io -w -4 0xfe040d00 0x10000 >mmap() failed: Operation not permitted >root@pt2-scmi:~# ./andy-io -w -4 0xfe040000 0x28002 >mmap() failed: Operation not permitted >``` This is my config about DEVMEM: ~/WorkSpace/linux-next$ rg DEVMEM .config 1014:CONFIG_NET_DEVMEM=y 3069:CONFIG_DEVMEM=y 7280:CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y 7542:CONFIG_STRICT_DEVMEM=y 7543:# CONFIG_IO_STRICT_DEVMEM is not set CONFIG_IO_STRICT_DEVMEM should not be set to y if you want to access an IO address from usersapce. > >I guess this is not what you expected and I don't know why it happens. > >Cheers, > Diederik > >> [ 73.750524] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >> [ 73.750542] vop2_vp_dsp_lut_disable dsp_ctrl: 0x00010000 >>>>>>>> patched vop2_vp_dsp_lut_disable function so that dsp_ctrl is set only if >>>>>>>> GAMMA LUT EN bit is set. I checked that this also does not break the gamma >>>>>>>> lut functionality with emphasis on out-of/into suspend behavior. >>>>>>>> >>>>>>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>> index d0f5fea15e21..7ddf311b38c6 100644 >>>>>>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>> @@ -897,6 +897,9 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) >>>>>>>> { >>>>>>>> u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); >>>>>>>> >>>>>>>> + if ((dsp_ctrl & RK3568_VP_DSP_CTRL__DSP_LUT_EN) == 0) >>>>>>>> + return; >>>>>>>> + >>>>>>>> dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; >>>>>>>> vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); >>>>>>>> } >>>>>>> >>>>>>>I built a kernel with 6.14-rc1 + this patch and can confirm the screen >>>>>>>has output again :-) >>>>>>> >>>>>>>> I will wait with sending a patch because maybe Andy has something to add >>>>>>>> to this. >>>>>>> >>>>>>>Sounds like a plan. It could be that this issue surfaced an underlaying >>>>>>>issue and if so, fixing that would be even better. > _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-11 7:41 ` Andy Yan @ 2025-06-11 10:56 ` Diederik de Haas 2025-06-11 12:15 ` Andy Yan 0 siblings, 1 reply; 22+ messages in thread From: Diederik de Haas @ 2025-06-11 10:56 UTC (permalink / raw) To: Andy Yan Cc: Piotr Zalewski, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-rockchip [-- Attachment #1.1: Type: text/plain, Size: 10945 bytes --] Hi Andy, On Wed Jun 11, 2025 at 9:41 AM CEST, Andy Yan wrote: > At 2025-06-10 19:02:11, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>On Tue Jun 10, 2025 at 11:07 AM CEST, Andy Yan wrote: >>> At 2025-06-09 20:36:41, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>On Mon Jun 9, 2025 at 11:15 AM CEST, Andy Yan wrote: >>>>> At 2025-06-08 20:53:37, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>>On Sun Jun 8, 2025 at 2:10 PM CEST, Andy Yan wrote: >>>>>>> At 2025-06-08 19:08:50, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>>>>On Sat Jun 7, 2025 at 5:32 PM CEST, Piotr Zalewski wrote: >>>>>>>>> On Thursday, June 5th, 2025 at 10:13 PM, Diederik de Haas <didi.debian@cknow.org> wrote: >>>>>>>>>> Since kernel 6.14-rc1 I have the problem that visual output is no longer >>>>>>>>>> shown on my PineTab2 and a `git bisect` pointed to this patch/commit >>>>>>> >>>>>>> I have conducted tests on both rk3566-box-demo (with drm set to y) >>>>>>> and rk3568-lubancat-2 (with drm set to m), but I was unable to >>>>>>> reproduce this issue. Could you two please share your kernel >>>>>>> defconfig and the corresponding kernel startup logs? >>>>>>> Additionally, both of my two boards tested with HDMI output. What >>>>>>> kind of display interface does your board use for output? >>>>>> >>>>>>I wasn't able to reproduce this issue on my PINE64 Quartz-B (rk3566) >>>>>>with HDMI output either, but the problem is present on a PineTab2 [1] >>>>>>(also rk3566) which uses a MIPI DSI connection to the display panel. >>>>>> >>>>>>Kernel config: >>>>>>https://paste.sr.ht/~diederik/aa747ed170aa01cc759fbe1ffd9cebe8c887b10b >>>>>> >>>>>>dmesg kernel 6.14-rc1: >>>>>>https://paste.sr.ht/~diederik/733fbf8bb7f6aee8b68cf5a652157d445462c24a >>>>>> >>>>>>dmesg kernel 6.14-rc1 with Piotr's patch: >>>>>>https://paste.sr.ht/~diederik/db1af672cfb611acbfbdf35adb6f170e5c38febc >>>>>> >>>>>>Both dmesg outputs contain a suspend-resume cycle. >>>>>>I'm using a USB Wi-Fi adapter for the wireless connection. >>>>>> >>>>>>[1] https://wiki.pine64.org/wiki/PineTab2 >>>>>> >>>>>>Happy to provide more info and/or do some tests. >>>>> >>>>> Can you apply the patch in the attachment, reproduce this issue(without Piotr's patch), >>>>> and then provide me with a copy of the kernel log? >>>> >>>>Same test as above, but added ``dmesg | grep "vop2_"`` at the end as well >>>> >>>>dmesg kernel 6.14-rc1 with Andy's print_lut_0609_1710 patch: >>>>https://paste.sr.ht/~diederik/ac356ee8b0f7e772c7310293d99d95644f59a4ee >>> >>> root@pt2-scmi:~# dmesg | grep "vop2_" >>> [ 4.996281] rockchip-drm display-subsystem: bound fe040000.vop (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>> [ 5.005207] rockchip-drm display-subsystem: bound fe0a0000.hdmi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>> [ 5.006798] rockchip-drm display-subsystem: bound fe060000.dsi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>> [ 5.021204] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >>> [ 5.021219] vop2_vp_dsp_lut_disable dsp_ctrl: 0x0000000f >>> >>> It seems that dsp_ctrl: 0x0000000f , this value is not what we expected. >>> >>> The expected is 0x00010000. >>> >>> Could you please do an experiment for me? When there is no display on your screen, >>> execute the following command and see if the screen can resume displaying: >>> >>> ./data/io -w -4 0xfe040d00 0x10000; io -w -4 0xfe040000 0x28002 >>> >>> I have placed the io tool in the attachment. >>> >>> You can use command like bellow to read back to confirm if what you write has taken effect: >>> io -r -4 -l 0x100 0xfe040d00 >>> >>> you may need to make CONFIG_DEVMEM=y so that you can write the register by io command. >> >>I renamed it as ``andy-io`` and performed the test: >> >>```sh >>root@pt2-scmi:~# echo 'just (re-)booted into my PineTab2; screen is blank' >>just (re-)booted into my PineTab2; screen is blank >>root@pt2-scmi:~# uname -a >>Linux pt2-scmi 6.14.0-rc1-00001-gfbe17d9b77b0 #18 SMP Mon Jun 9 13:17:28 CEST 2025 aarch64 GNU/Linux >>root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 >>mmap() failed: Operation not permitted >>root@pt2-scmi:~# grep CONFIG_DEVMEM /boot/config-6.14.0-rc1-00001-gfbe17d9b77b0 >>CONFIG_DEVMEM=y >>root@pt2-scmi:~# ./andy-io -w -4 0xfe040d00 0x10000 >>mmap() failed: Operation not permitted >>root@pt2-scmi:~# ./andy-io -w -4 0xfe040000 0x28002 >>mmap() failed: Operation not permitted >>``` > > This is my config about DEVMEM: > > ~/WorkSpace/linux-next$ rg DEVMEM .config > 1014:CONFIG_NET_DEVMEM=y > 3069:CONFIG_DEVMEM=y > 7280:CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y > 7542:CONFIG_STRICT_DEVMEM=y > 7543:# CONFIG_IO_STRICT_DEVMEM is not set > > CONFIG_IO_STRICT_DEVMEM should not be set to y if you want to access an IO address from usersapce. That last one seems to be the culprit: root@pt2-scmi:~# grep DEVMEM /boot/config-6.14.0-rc1-00001-gfbe17d9b77b0 CONFIG_NET_DEVMEM=y CONFIG_DEVMEM=y CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y CONFIG_STRICT_DEVMEM=y CONFIG_IO_STRICT_DEVMEM=y My kernel config is based upon Debian's and in commit ef7e196951aa ("[arm*,powerpc*,s390x,x86] Enable IO_STRICT_DEVMEM") I found "can be reverted using the kernel parameter: iomem=relaxed", so I added that parameter and rebooted: ```sh root@pt2-scmi:~# echo 'just (re-)booted into my PineTab2; screen is blank' just (re-)booted into my PineTab2; screen is blank root@pt2-scmi:~# uname -a Linux pt2-scmi 6.14.0-rc1-00001-gfbe17d9b77b0 #18 SMP Mon Jun 9 13:17:28 CEST 2025 aarch64 GNU/Linux root@pt2-scmi:~# cat /proc/cmdline root=UUID=42bbb627-189b-49e3-ae42-699815dc2cbb ignore_loglevel ro rootwait earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off iomem=relaxed root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 fe040d00: 0000000f 00000000 00000000 00000000 fe040d10: 00000010 00000000 00000000 00000000 fe040d20: 00000000 00000000 00000000 00000000 fe040d30: 01b70010 00500370 00100510 10001000 fe040d40: 00000000 00000000 03b00010 00500370 fe040d50: 05120004 00100510 00000000 00000000 fe040d60: 00000000 00000000 00000000 00000000 fe040d70: 00000000 00000000 00000000 00000000 fe040d80: 15110903 00030911 1a150b04 00040b15 fe040d90: 15110903 00030911 00000000 00000000 fe040da0: 00000000 00000000 00000000 00000000 fe040db0: 00000000 00000000 00000000 00000000 fe040dc0: 00000000 00000000 00000000 00000000 fe040dd0: 00000000 00000000 00000000 00000000 fe040de0: 00000000 00000000 00000000 00000000 fe040df0: 00000000 00000000 00000000 00000000 root@pt2-scmi:~# ./andy-io -w -4 0xfe040d00 0x10000 root@pt2-scmi:~# echo 'screen just turned on \o/' screen just turned on \o/ root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 fe040d00: 00010000 00000000 00000000 00000000 fe040d10: 00000010 00000000 00000000 00000000 fe040d20: 00000000 00000000 00000000 00000000 fe040d30: 01b70010 00500370 00100510 10001000 fe040d40: 00000000 00000000 03b00010 00500370 fe040d50: 05120004 00100510 00000000 00000000 fe040d60: 00000000 00000000 00000000 00000000 fe040d70: 00000000 00000000 00000000 00000000 fe040d80: 15110903 00030911 1a150b04 00040b15 fe040d90: 15110903 00030911 00000000 00000000 fe040da0: 00000000 00000000 00000000 00000000 fe040db0: 00000000 00000000 00000000 00000000 fe040dc0: 00000000 00000000 00000000 00000000 fe040dd0: 00000000 00000000 00000000 00000000 fe040de0: 00000000 00000000 00000000 00000000 fe040df0: 00000000 00000000 00000000 00000000 root@pt2-scmi:~# ./andy-io -w -4 0xfe040000 0x28002 root@pt2-scmi:~# echo "screen is still on ... don't see any changes on screen" screen is still on ... don't see any changes on screen root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 fe040d00: 00010000 00000000 00000000 00000000 fe040d10: 00000010 00000000 00000000 00000000 fe040d20: 00000000 00000000 00000000 00000000 fe040d30: 01b70010 00500370 00100510 10001000 fe040d40: 00000000 00000000 03b00010 00500370 fe040d50: 05120004 00100510 00000000 00000000 fe040d60: 00000000 00000000 00000000 00000000 fe040d70: 00000000 00000000 00000000 00000000 fe040d80: 15110903 00030911 1a150b04 00040b15 fe040d90: 15110903 00030911 00000000 00000000 fe040da0: 00000000 00000000 00000000 00000000 fe040db0: 00000000 00000000 00000000 00000000 fe040dc0: 00000000 00000000 00000000 00000000 fe040dd0: 00000000 00000000 00000000 00000000 fe040de0: 00000000 00000000 00000000 00000000 fe040df0: 00000000 00000000 00000000 00000000 ``` For completeness, I then closed the lid and opened it again: ```sh root@pt2-scmi:~# dmesg | grep "vop2_" [ 5.128785] rockchip-drm display-subsystem: bound fe040000.vop (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) [ 5.138031] rockchip-drm display-subsystem: bound fe0a0000.hdmi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) [ 5.139641] rockchip-drm display-subsystem: bound fe060000.dsi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) [ 5.160937] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 [ 5.160950] vop2_vp_dsp_lut_disable dsp_ctrl: 0x0000000f [ 1931.879232] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 [ 1931.879245] vop2_vp_dsp_lut_disable dsp_ctrl: 0x00010000 ``` Cheers, Diederik >>> [ 73.750524] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >>> [ 73.750542] vop2_vp_dsp_lut_disable dsp_ctrl: 0x00010000 >>>>>>>>> patched vop2_vp_dsp_lut_disable function so that dsp_ctrl is set only if >>>>>>>>> GAMMA LUT EN bit is set. I checked that this also does not break the gamma >>>>>>>>> lut functionality with emphasis on out-of/into suspend behavior. >>>>>>>>> >>>>>>>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>>> index d0f5fea15e21..7ddf311b38c6 100644 >>>>>>>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>>> @@ -897,6 +897,9 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) >>>>>>>>> { >>>>>>>>> u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); >>>>>>>>> >>>>>>>>> + if ((dsp_ctrl & RK3568_VP_DSP_CTRL__DSP_LUT_EN) == 0) >>>>>>>>> + return; >>>>>>>>> + >>>>>>>>> dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; >>>>>>>>> vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); >>>>>>>>> } >>>>>>>> >>>>>>>>I built a kernel with 6.14-rc1 + this patch and can confirm the screen >>>>>>>>has output again :-) >>>>>>>> >>>>>>>>> I will wait with sending a patch because maybe Andy has something to add >>>>>>>>> to this. >>>>>>>> >>>>>>>>Sounds like a plan. It could be that this issue surfaced an underlaying >>>>>>>>issue and if so, fixing that would be even better. [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] [-- Attachment #2: Type: text/plain, Size: 170 bytes --] _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re:Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-11 10:56 ` Diederik de Haas @ 2025-06-11 12:15 ` Andy Yan 2025-06-11 12:26 ` Diederik de Haas 0 siblings, 1 reply; 22+ messages in thread From: Andy Yan @ 2025-06-11 12:15 UTC (permalink / raw) To: Diederik de Haas Cc: Piotr Zalewski, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-rockchip Hi Diederik, At 2025-06-11 18:56:31, "Diederik de Haas" <didi.debian@cknow.org> wrote: >Hi Andy, > >On Wed Jun 11, 2025 at 9:41 AM CEST, Andy Yan wrote: >> At 2025-06-10 19:02:11, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>On Tue Jun 10, 2025 at 11:07 AM CEST, Andy Yan wrote: >>>> At 2025-06-09 20:36:41, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>On Mon Jun 9, 2025 at 11:15 AM CEST, Andy Yan wrote: >>>>>> At 2025-06-08 20:53:37, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>>>On Sun Jun 8, 2025 at 2:10 PM CEST, Andy Yan wrote: >>>>>>>> At 2025-06-08 19:08:50, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>>>>>On Sat Jun 7, 2025 at 5:32 PM CEST, Piotr Zalewski wrote: >>>>>>>>>> On Thursday, June 5th, 2025 at 10:13 PM, Diederik de Haas <didi.debian@cknow.org> wrote: >>>>>>>>>>> Since kernel 6.14-rc1 I have the problem that visual output is no longer >>>>>>>>>>> shown on my PineTab2 and a `git bisect` pointed to this patch/commit >>>>>>>> >>>>>>>> I have conducted tests on both rk3566-box-demo (with drm set to y) >>>>>>>> and rk3568-lubancat-2 (with drm set to m), but I was unable to >>>>>>>> reproduce this issue. Could you two please share your kernel >>>>>>>> defconfig and the corresponding kernel startup logs? >>>>>>>> Additionally, both of my two boards tested with HDMI output. What >>>>>>>> kind of display interface does your board use for output? >>>>>>> >>>>>>>I wasn't able to reproduce this issue on my PINE64 Quartz-B (rk3566) >>>>>>>with HDMI output either, but the problem is present on a PineTab2 [1] >>>>>>>(also rk3566) which uses a MIPI DSI connection to the display panel. >>>>>>> >>>>>>>Kernel config: >>>>>>>https://paste.sr.ht/~diederik/aa747ed170aa01cc759fbe1ffd9cebe8c887b10b >>>>>>> >>>>>>>dmesg kernel 6.14-rc1: >>>>>>>https://paste.sr.ht/~diederik/733fbf8bb7f6aee8b68cf5a652157d445462c24a >>>>>>> >>>>>>>dmesg kernel 6.14-rc1 with Piotr's patch: >>>>>>>https://paste.sr.ht/~diederik/db1af672cfb611acbfbdf35adb6f170e5c38febc >>>>>>> >>>>>>>Both dmesg outputs contain a suspend-resume cycle. >>>>>>>I'm using a USB Wi-Fi adapter for the wireless connection. >>>>>>> >>>>>>>[1] https://wiki.pine64.org/wiki/PineTab2 >>>>>>> >>>>>>>Happy to provide more info and/or do some tests. >>>>>> >>>>>> Can you apply the patch in the attachment, reproduce this issue(without Piotr's patch), >>>>>> and then provide me with a copy of the kernel log? >>>>> >>>>>Same test as above, but added ``dmesg | grep "vop2_"`` at the end as well >>>>> >>>>>dmesg kernel 6.14-rc1 with Andy's print_lut_0609_1710 patch: >>>>>https://paste.sr.ht/~diederik/ac356ee8b0f7e772c7310293d99d95644f59a4ee >>>> >>>> root@pt2-scmi:~# dmesg | grep "vop2_" >>>> [ 4.996281] rockchip-drm display-subsystem: bound fe040000.vop (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>>> [ 5.005207] rockchip-drm display-subsystem: bound fe0a0000.hdmi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>>> [ 5.006798] rockchip-drm display-subsystem: bound fe060000.dsi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>>> [ 5.021204] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >>>> [ 5.021219] vop2_vp_dsp_lut_disable dsp_ctrl: 0x0000000f >>>> >>>> It seems that dsp_ctrl: 0x0000000f , this value is not what we expected. >>>> >>>> The expected is 0x00010000. >>>> >>>> Could you please do an experiment for me? When there is no display on your screen, >>>> execute the following command and see if the screen can resume displaying: >>>> >>>> ./data/io -w -4 0xfe040d00 0x10000; io -w -4 0xfe040000 0x28002 >>>> >>>> I have placed the io tool in the attachment. >>>> >>>> You can use command like bellow to read back to confirm if what you write has taken effect: >>>> io -r -4 -l 0x100 0xfe040d00 >>>> >>>> you may need to make CONFIG_DEVMEM=y so that you can write the register by io command. >>> >>>I renamed it as ``andy-io`` and performed the test: >>> >>>```sh >>>root@pt2-scmi:~# echo 'just (re-)booted into my PineTab2; screen is blank' >>>just (re-)booted into my PineTab2; screen is blank >>>root@pt2-scmi:~# uname -a >>>Linux pt2-scmi 6.14.0-rc1-00001-gfbe17d9b77b0 #18 SMP Mon Jun 9 13:17:28 CEST 2025 aarch64 GNU/Linux >>>root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 >>>mmap() failed: Operation not permitted >>>root@pt2-scmi:~# grep CONFIG_DEVMEM /boot/config-6.14.0-rc1-00001-gfbe17d9b77b0 >>>CONFIG_DEVMEM=y >>>root@pt2-scmi:~# ./andy-io -w -4 0xfe040d00 0x10000 >>>mmap() failed: Operation not permitted >>>root@pt2-scmi:~# ./andy-io -w -4 0xfe040000 0x28002 >>>mmap() failed: Operation not permitted >>>``` >> >> This is my config about DEVMEM: >> >> ~/WorkSpace/linux-next$ rg DEVMEM .config >> 1014:CONFIG_NET_DEVMEM=y >> 3069:CONFIG_DEVMEM=y >> 7280:CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y >> 7542:CONFIG_STRICT_DEVMEM=y >> 7543:# CONFIG_IO_STRICT_DEVMEM is not set >> >> CONFIG_IO_STRICT_DEVMEM should not be set to y if you want to access an IO address from usersapce. > >That last one seems to be the culprit: > >root@pt2-scmi:~# grep DEVMEM /boot/config-6.14.0-rc1-00001-gfbe17d9b77b0 >CONFIG_NET_DEVMEM=y >CONFIG_DEVMEM=y >CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y >CONFIG_STRICT_DEVMEM=y >CONFIG_IO_STRICT_DEVMEM=y > >My kernel config is based upon Debian's and in commit >ef7e196951aa ("[arm*,powerpc*,s390x,x86] Enable IO_STRICT_DEVMEM") > >I found "can be reverted using the kernel parameter: iomem=relaxed", so >I added that parameter and rebooted: > >```sh >root@pt2-scmi:~# echo 'just (re-)booted into my PineTab2; screen is blank' >just (re-)booted into my PineTab2; screen is blank >root@pt2-scmi:~# uname -a >Linux pt2-scmi 6.14.0-rc1-00001-gfbe17d9b77b0 #18 SMP Mon Jun 9 13:17:28 CEST 2025 aarch64 GNU/Linux >root@pt2-scmi:~# cat /proc/cmdline >root=UUID=42bbb627-189b-49e3-ae42-699815dc2cbb ignore_loglevel ro rootwait earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off iomem=relaxed >root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 >fe040d00: 0000000f 00000000 00000000 00000000 >fe040d10: 00000010 00000000 00000000 00000000 >fe040d20: 00000000 00000000 00000000 00000000 >fe040d30: 01b70010 00500370 00100510 10001000 >fe040d40: 00000000 00000000 03b00010 00500370 >fe040d50: 05120004 00100510 00000000 00000000 >fe040d60: 00000000 00000000 00000000 00000000 >fe040d70: 00000000 00000000 00000000 00000000 >fe040d80: 15110903 00030911 1a150b04 00040b15 >fe040d90: 15110903 00030911 00000000 00000000 >fe040da0: 00000000 00000000 00000000 00000000 >fe040db0: 00000000 00000000 00000000 00000000 >fe040dc0: 00000000 00000000 00000000 00000000 >fe040dd0: 00000000 00000000 00000000 00000000 >fe040de0: 00000000 00000000 00000000 00000000 >fe040df0: 00000000 00000000 00000000 00000000 >root@pt2-scmi:~# ./andy-io -w -4 0xfe040d00 0x10000 >root@pt2-scmi:~# echo 'screen just turned on \o/' >screen just turned on \o/ Do you mean the screen is turned on(that you see the display on the screen) here ? > root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 >fe040d00: 00010000 00000000 00000000 00000000 >fe040d10: 00000010 00000000 00000000 00000000 >fe040d20: 00000000 00000000 00000000 00000000 >fe040d30: 01b70010 00500370 00100510 10001000 >fe040d40: 00000000 00000000 03b00010 00500370 >fe040d50: 05120004 00100510 00000000 00000000 >fe040d60: 00000000 00000000 00000000 00000000 >fe040d70: 00000000 00000000 00000000 00000000 >fe040d80: 15110903 00030911 1a150b04 00040b15 >fe040d90: 15110903 00030911 00000000 00000000 >fe040da0: 00000000 00000000 00000000 00000000 >fe040db0: 00000000 00000000 00000000 00000000 >fe040dc0: 00000000 00000000 00000000 00000000 >fe040dd0: 00000000 00000000 00000000 00000000 >fe040de0: 00000000 00000000 00000000 00000000 >fe040df0: 00000000 00000000 00000000 00000000 >root@pt2-scmi:~# ./andy-io -w -4 0xfe040000 0x28002 >root@pt2-scmi:~# echo "screen is still on ... don't see any changes on screen" >screen is still on ... don't see any changes on screen >root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 >fe040d00: 00010000 00000000 00000000 00000000 >fe040d10: 00000010 00000000 00000000 00000000 >fe040d20: 00000000 00000000 00000000 00000000 >fe040d30: 01b70010 00500370 00100510 10001000 >fe040d40: 00000000 00000000 03b00010 00500370 >fe040d50: 05120004 00100510 00000000 00000000 >fe040d60: 00000000 00000000 00000000 00000000 >fe040d70: 00000000 00000000 00000000 00000000 >fe040d80: 15110903 00030911 1a150b04 00040b15 >fe040d90: 15110903 00030911 00000000 00000000 >fe040da0: 00000000 00000000 00000000 00000000 >fe040db0: 00000000 00000000 00000000 00000000 >fe040dc0: 00000000 00000000 00000000 00000000 >fe040dd0: 00000000 00000000 00000000 00000000 >fe040de0: 00000000 00000000 00000000 00000000 >fe040df0: 00000000 00000000 00000000 00000000 >``` > >For completeness, I then closed the lid and opened it again: > >```sh >root@pt2-scmi:~# dmesg | grep "vop2_" >[ 5.128785] rockchip-drm display-subsystem: bound fe040000.vop (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >[ 5.138031] rockchip-drm display-subsystem: bound fe0a0000.hdmi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >[ 5.139641] rockchip-drm display-subsystem: bound fe060000.dsi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >[ 5.160937] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >[ 5.160950] vop2_vp_dsp_lut_disable dsp_ctrl: 0x0000000f >[ 1931.879232] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >[ 1931.879245] vop2_vp_dsp_lut_disable dsp_ctrl: 0x00010000 >``` > >Cheers, > Diederik > >>>> [ 73.750524] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >>>> [ 73.750542] vop2_vp_dsp_lut_disable dsp_ctrl: 0x00010000 >>>>>>>>>> patched vop2_vp_dsp_lut_disable function so that dsp_ctrl is set only if >>>>>>>>>> GAMMA LUT EN bit is set. I checked that this also does not break the gamma >>>>>>>>>> lut functionality with emphasis on out-of/into suspend behavior. >>>>>>>>>> >>>>>>>>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>>>> index d0f5fea15e21..7ddf311b38c6 100644 >>>>>>>>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>>>> @@ -897,6 +897,9 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) >>>>>>>>>> { >>>>>>>>>> u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); >>>>>>>>>> >>>>>>>>>> + if ((dsp_ctrl & RK3568_VP_DSP_CTRL__DSP_LUT_EN) == 0) >>>>>>>>>> + return; >>>>>>>>>> + >>>>>>>>>> dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; >>>>>>>>>> vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); >>>>>>>>>> } >>>>>>>>> >>>>>>>>>I built a kernel with 6.14-rc1 + this patch and can confirm the screen >>>>>>>>>has output again :-) >>>>>>>>> >>>>>>>>>> I will wait with sending a patch because maybe Andy has something to add >>>>>>>>>> to this. >>>>>>>>> >>>>>>>>>Sounds like a plan. It could be that this issue surfaced an underlaying >>>>>>>>>issue and if so, fixing that would be even better. > _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-11 12:15 ` Andy Yan @ 2025-06-11 12:26 ` Diederik de Haas 2025-06-11 12:49 ` Andy Yan 0 siblings, 1 reply; 22+ messages in thread From: Diederik de Haas @ 2025-06-11 12:26 UTC (permalink / raw) To: Andy Yan Cc: Piotr Zalewski, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-rockchip [-- Attachment #1.1: Type: text/plain, Size: 10596 bytes --] Hi, On Wed Jun 11, 2025 at 2:15 PM CEST, Andy Yan wrote: > At 2025-06-11 18:56:31, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>On Wed Jun 11, 2025 at 9:41 AM CEST, Andy Yan wrote: >>> At 2025-06-10 19:02:11, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>On Tue Jun 10, 2025 at 11:07 AM CEST, Andy Yan wrote: >>>>> At 2025-06-09 20:36:41, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>>On Mon Jun 9, 2025 at 11:15 AM CEST, Andy Yan wrote: >>>>>>> At 2025-06-08 20:53:37, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>>>>On Sun Jun 8, 2025 at 2:10 PM CEST, Andy Yan wrote: >>>>>>>>> At 2025-06-08 19:08:50, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>>>>>>On Sat Jun 7, 2025 at 5:32 PM CEST, Piotr Zalewski wrote: >>>>>>>>>>> On Thursday, June 5th, 2025 at 10:13 PM, Diederik de Haas <didi.debian@cknow.org> wrote: >>>>>>>>>>>> Since kernel 6.14-rc1 I have the problem that visual output is no longer >>>>>>>>>>>> shown on my PineTab2 and a `git bisect` pointed to this patch/commit >>>>>>>>> >>>>>>>>> I have conducted tests on both rk3566-box-demo (with drm set to y) >>>>>>>>> and rk3568-lubancat-2 (with drm set to m), but I was unable to >>>>>>>>> reproduce this issue. Could you two please share your kernel >>>>>>>>> defconfig and the corresponding kernel startup logs? >>>>>>>>> Additionally, both of my two boards tested with HDMI output. What >>>>>>>>> kind of display interface does your board use for output? >>>>>>>> >>>>>>>>I wasn't able to reproduce this issue on my PINE64 Quartz-B (rk3566) >>>>>>>>with HDMI output either, but the problem is present on a PineTab2 [1] >>>>>>>>(also rk3566) which uses a MIPI DSI connection to the display panel. >>>>>>>> >>>>>>>>Kernel config: >>>>>>>>https://paste.sr.ht/~diederik/aa747ed170aa01cc759fbe1ffd9cebe8c887b10b >>>>>>>> >>>>>>>>dmesg kernel 6.14-rc1: >>>>>>>>https://paste.sr.ht/~diederik/733fbf8bb7f6aee8b68cf5a652157d445462c24a >>>>>>>> >>>>>>>>dmesg kernel 6.14-rc1 with Piotr's patch: >>>>>>>>https://paste.sr.ht/~diederik/db1af672cfb611acbfbdf35adb6f170e5c38febc >>>>>>>> >>>>>>>>Both dmesg outputs contain a suspend-resume cycle. >>>>>>>>I'm using a USB Wi-Fi adapter for the wireless connection. >>>>>>>> >>>>>>>>[1] https://wiki.pine64.org/wiki/PineTab2 >>>>>>>> >>>>>>>>Happy to provide more info and/or do some tests. >>>>>>> >>>>>>> Can you apply the patch in the attachment, reproduce this issue(without Piotr's patch), >>>>>>> and then provide me with a copy of the kernel log? >>>>>> >>>>>>Same test as above, but added ``dmesg | grep "vop2_"`` at the end as well >>>>>> >>>>>>dmesg kernel 6.14-rc1 with Andy's print_lut_0609_1710 patch: >>>>>>https://paste.sr.ht/~diederik/ac356ee8b0f7e772c7310293d99d95644f59a4ee >>>>> >>>>> root@pt2-scmi:~# dmesg | grep "vop2_" >>>>> [ 4.996281] rockchip-drm display-subsystem: bound fe040000.vop (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>>>> [ 5.005207] rockchip-drm display-subsystem: bound fe0a0000.hdmi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>>>> [ 5.006798] rockchip-drm display-subsystem: bound fe060000.dsi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>>>> [ 5.021204] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >>>>> [ 5.021219] vop2_vp_dsp_lut_disable dsp_ctrl: 0x0000000f >>>>> >>>>> It seems that dsp_ctrl: 0x0000000f , this value is not what we expected. >>>>> >>>>> The expected is 0x00010000. >>>>> >>>>> Could you please do an experiment for me? When there is no display on your screen, >>>>> execute the following command and see if the screen can resume displaying: >>>>> >>>>> ./data/io -w -4 0xfe040d00 0x10000; io -w -4 0xfe040000 0x28002 >>>>> >>>>> I have placed the io tool in the attachment. >>>>> >>>>> You can use command like bellow to read back to confirm if what you write has taken effect: >>>>> io -r -4 -l 0x100 0xfe040d00 >>>>> >>>>> you may need to make CONFIG_DEVMEM=y so that you can write the register by io command. >>>> >>>>I renamed it as ``andy-io`` and performed the test: >>>> >>> 7543:# CONFIG_IO_STRICT_DEVMEM is not set >>> >>> CONFIG_IO_STRICT_DEVMEM should not be set to y if you want to access an IO address from usersapce. >> >>That last one seems to be the culprit: >> >>My kernel config is based upon Debian's and in commit >>ef7e196951aa ("[arm*,powerpc*,s390x,x86] Enable IO_STRICT_DEVMEM") >> >>I found "can be reverted using the kernel parameter: iomem=relaxed", so >>I added that parameter and rebooted: >> >>```sh >>root@pt2-scmi:~# echo 'just (re-)booted into my PineTab2; screen is blank' >>just (re-)booted into my PineTab2; screen is blank >>root@pt2-scmi:~# uname -a >>Linux pt2-scmi 6.14.0-rc1-00001-gfbe17d9b77b0 #18 SMP Mon Jun 9 13:17:28 CEST 2025 aarch64 GNU/Linux >>root@pt2-scmi:~# cat /proc/cmdline >>root=UUID=42bbb627-189b-49e3-ae42-699815dc2cbb ignore_loglevel ro rootwait earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off iomem=relaxed >>root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 >>fe040d00: 0000000f 00000000 00000000 00000000 >>fe040d10: 00000010 00000000 00000000 00000000 >>fe040d20: 00000000 00000000 00000000 00000000 >>fe040d30: 01b70010 00500370 00100510 10001000 >>fe040d40: 00000000 00000000 03b00010 00500370 >>fe040d50: 05120004 00100510 00000000 00000000 >>fe040d60: 00000000 00000000 00000000 00000000 >>fe040d70: 00000000 00000000 00000000 00000000 >>fe040d80: 15110903 00030911 1a150b04 00040b15 >>fe040d90: 15110903 00030911 00000000 00000000 >>fe040da0: 00000000 00000000 00000000 00000000 >>fe040db0: 00000000 00000000 00000000 00000000 >>fe040dc0: 00000000 00000000 00000000 00000000 >>fe040dd0: 00000000 00000000 00000000 00000000 >>fe040de0: 00000000 00000000 00000000 00000000 >>fe040df0: 00000000 00000000 00000000 00000000 >>root@pt2-scmi:~# ./andy-io -w -4 0xfe040d00 0x10000 >>root@pt2-scmi:~# echo 'screen just turned on \o/' >>screen just turned on \o/ > > Do you mean the screen is turned on(that you see the display on the screen) here ? Yep. Before the ``-w`` command the screen was blank/black and after the ``-w`` command the (sway based) login screen was visible. >> root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 >>fe040d00: 00010000 00000000 00000000 00000000 >>fe040d10: 00000010 00000000 00000000 00000000 >>fe040d20: 00000000 00000000 00000000 00000000 >>fe040d30: 01b70010 00500370 00100510 10001000 >>fe040d40: 00000000 00000000 03b00010 00500370 >>fe040d50: 05120004 00100510 00000000 00000000 >>fe040d60: 00000000 00000000 00000000 00000000 >>fe040d70: 00000000 00000000 00000000 00000000 >>fe040d80: 15110903 00030911 1a150b04 00040b15 >>fe040d90: 15110903 00030911 00000000 00000000 >>fe040da0: 00000000 00000000 00000000 00000000 >>fe040db0: 00000000 00000000 00000000 00000000 >>fe040dc0: 00000000 00000000 00000000 00000000 >>fe040dd0: 00000000 00000000 00000000 00000000 >>fe040de0: 00000000 00000000 00000000 00000000 >>fe040df0: 00000000 00000000 00000000 00000000 >>root@pt2-scmi:~# ./andy-io -w -4 0xfe040000 0x28002 >>root@pt2-scmi:~# echo "screen is still on ... don't see any changes on screen" >>screen is still on ... don't see any changes on screen >>root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 >>fe040d00: 00010000 00000000 00000000 00000000 >>fe040d10: 00000010 00000000 00000000 00000000 >>fe040d20: 00000000 00000000 00000000 00000000 >>fe040d30: 01b70010 00500370 00100510 10001000 >>fe040d40: 00000000 00000000 03b00010 00500370 >>fe040d50: 05120004 00100510 00000000 00000000 >>fe040d60: 00000000 00000000 00000000 00000000 >>fe040d70: 00000000 00000000 00000000 00000000 >>fe040d80: 15110903 00030911 1a150b04 00040b15 >>fe040d90: 15110903 00030911 00000000 00000000 >>fe040da0: 00000000 00000000 00000000 00000000 >>fe040db0: 00000000 00000000 00000000 00000000 >>fe040dc0: 00000000 00000000 00000000 00000000 >>fe040dd0: 00000000 00000000 00000000 00000000 >>fe040de0: 00000000 00000000 00000000 00000000 >>fe040df0: 00000000 00000000 00000000 00000000 >>``` >> >>For completeness, I then closed the lid and opened it again: >> >>```sh >>root@pt2-scmi:~# dmesg | grep "vop2_" >>[ 5.128785] rockchip-drm display-subsystem: bound fe040000.vop (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>[ 5.138031] rockchip-drm display-subsystem: bound fe0a0000.hdmi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>[ 5.139641] rockchip-drm display-subsystem: bound fe060000.dsi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>[ 5.160937] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >>[ 5.160950] vop2_vp_dsp_lut_disable dsp_ctrl: 0x0000000f >>[ 1931.879232] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >>[ 1931.879245] vop2_vp_dsp_lut_disable dsp_ctrl: 0x00010000 >>``` >> >>Cheers, >> Diederik >> >>>>> [ 73.750524] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >>>>> [ 73.750542] vop2_vp_dsp_lut_disable dsp_ctrl: 0x00010000 >>>>>>>>>>> patched vop2_vp_dsp_lut_disable function so that dsp_ctrl is set only if >>>>>>>>>>> GAMMA LUT EN bit is set. I checked that this also does not break the gamma >>>>>>>>>>> lut functionality with emphasis on out-of/into suspend behavior. >>>>>>>>>>> >>>>>>>>>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>>>>> index d0f5fea15e21..7ddf311b38c6 100644 >>>>>>>>>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>>>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>>>>> @@ -897,6 +897,9 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) >>>>>>>>>>> { >>>>>>>>>>> u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); >>>>>>>>>>> >>>>>>>>>>> + if ((dsp_ctrl & RK3568_VP_DSP_CTRL__DSP_LUT_EN) == 0) >>>>>>>>>>> + return; >>>>>>>>>>> + >>>>>>>>>>> dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; >>>>>>>>>>> vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); >>>>>>>>>>> } >>>>>>>>>> >>>>>>>>>>I built a kernel with 6.14-rc1 + this patch and can confirm the screen >>>>>>>>>>has output again :-) >>>>>>>>>> >>>>>>>>>>> I will wait with sending a patch because maybe Andy has something to add >>>>>>>>>>> to this. >>>>>>>>>> >>>>>>>>>>Sounds like a plan. It could be that this issue surfaced an underlaying >>>>>>>>>>issue and if so, fixing that would be even better. >> [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] [-- Attachment #2: Type: text/plain, Size: 170 bytes --] _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re:Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-11 12:26 ` Diederik de Haas @ 2025-06-11 12:49 ` Andy Yan 2025-06-11 22:12 ` Piotr Zalewski ` (2 more replies) 0 siblings, 3 replies; 22+ messages in thread From: Andy Yan @ 2025-06-11 12:49 UTC (permalink / raw) To: Diederik de Haas Cc: Piotr Zalewski, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-rockchip Hi Deiderik and Piotr, At 2025-06-11 20:26:38, "Diederik de Haas" <didi.debian@cknow.org> wrote: >Hi, > >On Wed Jun 11, 2025 at 2:15 PM CEST, Andy Yan wrote: >> At 2025-06-11 18:56:31, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>On Wed Jun 11, 2025 at 9:41 AM CEST, Andy Yan wrote: >>>> At 2025-06-10 19:02:11, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>On Tue Jun 10, 2025 at 11:07 AM CEST, Andy Yan wrote: >>>>>> At 2025-06-09 20:36:41, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>>>On Mon Jun 9, 2025 at 11:15 AM CEST, Andy Yan wrote: >>>>>>>> At 2025-06-08 20:53:37, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>>>>>On Sun Jun 8, 2025 at 2:10 PM CEST, Andy Yan wrote: >>>>>>>>>> At 2025-06-08 19:08:50, "Diederik de Haas" <didi.debian@cknow.org> wrote: >>>>>>>>>>>On Sat Jun 7, 2025 at 5:32 PM CEST, Piotr Zalewski wrote: >>>>>>>>>>>> On Thursday, June 5th, 2025 at 10:13 PM, Diederik de Haas <didi.debian@cknow.org> wrote: >>>>>>>>>>>>> Since kernel 6.14-rc1 I have the problem that visual output is no longer >>>>>>>>>>>>> shown on my PineTab2 and a `git bisect` pointed to this patch/commit >>>>>>>>>> >>>>>>>>>> I have conducted tests on both rk3566-box-demo (with drm set to y) >>>>>>>>>> and rk3568-lubancat-2 (with drm set to m), but I was unable to >>>>>>>>>> reproduce this issue. Could you two please share your kernel >>>>>>>>>> defconfig and the corresponding kernel startup logs? >>>>>>>>>> Additionally, both of my two boards tested with HDMI output. What >>>>>>>>>> kind of display interface does your board use for output? >>>>>>>>> >>>>>>>>>I wasn't able to reproduce this issue on my PINE64 Quartz-B (rk3566) >>>>>>>>>with HDMI output either, but the problem is present on a PineTab2 [1] >>>>>>>>>(also rk3566) which uses a MIPI DSI connection to the display panel. >>>>>>>>> >>>>>>>>>Kernel config: >>>>>>>>>https://paste.sr.ht/~diederik/aa747ed170aa01cc759fbe1ffd9cebe8c887b10b >>>>>>>>> >>>>>>>>>dmesg kernel 6.14-rc1: >>>>>>>>>https://paste.sr.ht/~diederik/733fbf8bb7f6aee8b68cf5a652157d445462c24a >>>>>>>>> >>>>>>>>>dmesg kernel 6.14-rc1 with Piotr's patch: >>>>>>>>>https://paste.sr.ht/~diederik/db1af672cfb611acbfbdf35adb6f170e5c38febc >>>>>>>>> >>>>>>>>>Both dmesg outputs contain a suspend-resume cycle. >>>>>>>>>I'm using a USB Wi-Fi adapter for the wireless connection. >>>>>>>>> >>>>>>>>>[1] https://wiki.pine64.org/wiki/PineTab2 >>>>>>>>> >>>>>>>>>Happy to provide more info and/or do some tests. >>>>>>>> >>>>>>>> Can you apply the patch in the attachment, reproduce this issue(without Piotr's patch), >>>>>>>> and then provide me with a copy of the kernel log? >>>>>>> >>>>>>>Same test as above, but added ``dmesg | grep "vop2_"`` at the end as well >>>>>>> >>>>>>>dmesg kernel 6.14-rc1 with Andy's print_lut_0609_1710 patch: >>>>>>>https://paste.sr.ht/~diederik/ac356ee8b0f7e772c7310293d99d95644f59a4ee >>>>>> >>>>>> root@pt2-scmi:~# dmesg | grep "vop2_" >>>>>> [ 4.996281] rockchip-drm display-subsystem: bound fe040000.vop (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>>>>> [ 5.005207] rockchip-drm display-subsystem: bound fe0a0000.hdmi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>>>>> [ 5.006798] rockchip-drm display-subsystem: bound fe060000.dsi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>>>>> [ 5.021204] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >>>>>> [ 5.021219] vop2_vp_dsp_lut_disable dsp_ctrl: 0x0000000f >>>>>> >>>>>> It seems that dsp_ctrl: 0x0000000f , this value is not what we expected. >>>>>> >>>>>> The expected is 0x00010000. >>>>>> >>>>>> Could you please do an experiment for me? When there is no display on your screen, >>>>>> execute the following command and see if the screen can resume displaying: >>>>>> >>>>>> ./data/io -w -4 0xfe040d00 0x10000; io -w -4 0xfe040000 0x28002 >>>>>> >>>>>> I have placed the io tool in the attachment. >>>>>> >>>>>> You can use command like bellow to read back to confirm if what you write has taken effect: >>>>>> io -r -4 -l 0x100 0xfe040d00 >>>>>> >>>>>> you may need to make CONFIG_DEVMEM=y so that you can write the register by io command. >>>>> >>>>>I renamed it as ``andy-io`` and performed the test: >>>>> >>>> 7543:# CONFIG_IO_STRICT_DEVMEM is not set >>>> >>>> CONFIG_IO_STRICT_DEVMEM should not be set to y if you want to access an IO address from usersapce. >>> >>>That last one seems to be the culprit: >>> >>>My kernel config is based upon Debian's and in commit >>>ef7e196951aa ("[arm*,powerpc*,s390x,x86] Enable IO_STRICT_DEVMEM") >>> >>>I found "can be reverted using the kernel parameter: iomem=relaxed", so >>>I added that parameter and rebooted: >>> >>>```sh >>>root@pt2-scmi:~# echo 'just (re-)booted into my PineTab2; screen is blank' >>>just (re-)booted into my PineTab2; screen is blank >>>root@pt2-scmi:~# uname -a >>>Linux pt2-scmi 6.14.0-rc1-00001-gfbe17d9b77b0 #18 SMP Mon Jun 9 13:17:28 CEST 2025 aarch64 GNU/Linux >>>root@pt2-scmi:~# cat /proc/cmdline >>>root=UUID=42bbb627-189b-49e3-ae42-699815dc2cbb ignore_loglevel ro rootwait earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off iomem=relaxed >>>root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 >>>fe040d00: 0000000f 00000000 00000000 00000000 >>>fe040d10: 00000010 00000000 00000000 00000000 >>>fe040d20: 00000000 00000000 00000000 00000000 >>>fe040d30: 01b70010 00500370 00100510 10001000 >>>fe040d40: 00000000 00000000 03b00010 00500370 >>>fe040d50: 05120004 00100510 00000000 00000000 >>>fe040d60: 00000000 00000000 00000000 00000000 >>>fe040d70: 00000000 00000000 00000000 00000000 >>>fe040d80: 15110903 00030911 1a150b04 00040b15 >>>fe040d90: 15110903 00030911 00000000 00000000 >>>fe040da0: 00000000 00000000 00000000 00000000 >>>fe040db0: 00000000 00000000 00000000 00000000 >>>fe040dc0: 00000000 00000000 00000000 00000000 >>>fe040dd0: 00000000 00000000 00000000 00000000 >>>fe040de0: 00000000 00000000 00000000 00000000 >>>fe040df0: 00000000 00000000 00000000 00000000 >>>root@pt2-scmi:~# ./andy-io -w -4 0xfe040d00 0x10000 >>>root@pt2-scmi:~# echo 'screen just turned on \o/' >>>screen just turned on \o/ >> >> Do you mean the screen is turned on(that you see the display on the screen) here ? > >Yep. Before the ``-w`` command the screen was blank/black and after the >``-w`` command the (sway based) login screen was visible. The root case for the problem is now clear。 Most of the registers in VOP need to write the cfd_done register(call vop2_cfg_done) after you have configured the registers. Then, they will take effect only when the VSYNC event occurs(It doesn't take effect immediately after you finish writing.). This also includes all the VP_DSP_CTRL registers. see the code: vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); vop2_crtc_atomic_try_set_gamma(vop2, vp, crtc, crtc_state); --> static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) { u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); When we read this register, we are reading the actual effective value, not the one(dsp_ctrl) that was just written in before (it has not yet taken effect) So when we continue to write about this register here, we overwrite the actual value we originally intended to put in. dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); } I think the correct solution should be similar to the Windows-related registry settings. All the registers related to Video Ports should be set as non-volatile, see: /* * The window registers are only updated when config done is written. * Until that they read back the old value. As we read-modify-write * these registers mark them as non-volatile. This makes sure we read * the new values from the regmap register cache. */ static const struct regmap_range vop2_nonvolatile_range[] = { regmap_reg_range(0x1000, 0x23ff), }; static const struct regmap_access_table vop2_volatile_table = { .no_ranges = vop2_nonvolatile_range, .n_no_ranges = ARRAY_SIZE(vop2_nonvolatile_range), }; Actually, there is another question. I still haven't figured out why this problem doesn't occur when compiling rockchipdrm=y . > >>> root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 >>>fe040d00: 00010000 00000000 00000000 00000000 >>>fe040d10: 00000010 00000000 00000000 00000000 >>>fe040d20: 00000000 00000000 00000000 00000000 >>>fe040d30: 01b70010 00500370 00100510 10001000 >>>fe040d40: 00000000 00000000 03b00010 00500370 >>>fe040d50: 05120004 00100510 00000000 00000000 >>>fe040d60: 00000000 00000000 00000000 00000000 >>>fe040d70: 00000000 00000000 00000000 00000000 >>>fe040d80: 15110903 00030911 1a150b04 00040b15 >>>fe040d90: 15110903 00030911 00000000 00000000 >>>fe040da0: 00000000 00000000 00000000 00000000 >>>fe040db0: 00000000 00000000 00000000 00000000 >>>fe040dc0: 00000000 00000000 00000000 00000000 >>>fe040dd0: 00000000 00000000 00000000 00000000 >>>fe040de0: 00000000 00000000 00000000 00000000 >>>fe040df0: 00000000 00000000 00000000 00000000 >>>root@pt2-scmi:~# ./andy-io -w -4 0xfe040000 0x28002 >>>root@pt2-scmi:~# echo "screen is still on ... don't see any changes on screen" >>>screen is still on ... don't see any changes on screen >>>root@pt2-scmi:~# ./andy-io -r -4 -l 0x100 0xfe040d00 >>>fe040d00: 00010000 00000000 00000000 00000000 >>>fe040d10: 00000010 00000000 00000000 00000000 >>>fe040d20: 00000000 00000000 00000000 00000000 >>>fe040d30: 01b70010 00500370 00100510 10001000 >>>fe040d40: 00000000 00000000 03b00010 00500370 >>>fe040d50: 05120004 00100510 00000000 00000000 >>>fe040d60: 00000000 00000000 00000000 00000000 >>>fe040d70: 00000000 00000000 00000000 00000000 >>>fe040d80: 15110903 00030911 1a150b04 00040b15 >>>fe040d90: 15110903 00030911 00000000 00000000 >>>fe040da0: 00000000 00000000 00000000 00000000 >>>fe040db0: 00000000 00000000 00000000 00000000 >>>fe040dc0: 00000000 00000000 00000000 00000000 >>>fe040dd0: 00000000 00000000 00000000 00000000 >>>fe040de0: 00000000 00000000 00000000 00000000 >>>fe040df0: 00000000 00000000 00000000 00000000 >>>``` >>> >>>For completeness, I then closed the lid and opened it again: >>> >>>```sh >>>root@pt2-scmi:~# dmesg | grep "vop2_" >>>[ 5.128785] rockchip-drm display-subsystem: bound fe040000.vop (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>>[ 5.138031] rockchip-drm display-subsystem: bound fe0a0000.hdmi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>>[ 5.139641] rockchip-drm display-subsystem: bound fe060000.dsi (ops vop2_crtc_atomic_try_set_gamma.part.0 [rockchipdrm]) >>>[ 5.160937] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >>>[ 5.160950] vop2_vp_dsp_lut_disable dsp_ctrl: 0x0000000f >>>[ 1931.879232] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >>>[ 1931.879245] vop2_vp_dsp_lut_disable dsp_ctrl: 0x00010000 >>>``` >>> >>>Cheers, >>> Diederik >>> >>>>>> [ 73.750524] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 >>>>>> [ 73.750542] vop2_vp_dsp_lut_disable dsp_ctrl: 0x00010000 >>>>>>>>>>>> patched vop2_vp_dsp_lut_disable function so that dsp_ctrl is set only if >>>>>>>>>>>> GAMMA LUT EN bit is set. I checked that this also does not break the gamma >>>>>>>>>>>> lut functionality with emphasis on out-of/into suspend behavior. >>>>>>>>>>>> >>>>>>>>>>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>>>>>> index d0f5fea15e21..7ddf311b38c6 100644 >>>>>>>>>>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>>>>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>>>>>>>>>> @@ -897,6 +897,9 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) >>>>>>>>>>>> { >>>>>>>>>>>> u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); >>>>>>>>>>>> >>>>>>>>>>>> + if ((dsp_ctrl & RK3568_VP_DSP_CTRL__DSP_LUT_EN) == 0) >>>>>>>>>>>> + return; >>>>>>>>>>>> + >>>>>>>>>>>> dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; >>>>>>>>>>>> vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); >>>>>>>>>>>> } >>>>>>>>>>> >>>>>>>>>>>I built a kernel with 6.14-rc1 + this patch and can confirm the screen >>>>>>>>>>>has output again :-) >>>>>>>>>>> >>>>>>>>>>>> I will wait with sending a patch because maybe Andy has something to add >>>>>>>>>>>> to this. >>>>>>>>>>> >>>>>>>>>>>Sounds like a plan. It could be that this issue surfaced an underlaying >>>>>>>>>>>issue and if so, fixing that would be even better. >>> > _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-11 12:49 ` Andy Yan @ 2025-06-11 22:12 ` Piotr Zalewski 2025-06-12 8:33 ` Diederik de Haas 2025-06-19 11:54 ` Piotr Zalewski 2 siblings, 0 replies; 22+ messages in thread From: Piotr Zalewski @ 2025-06-11 22:12 UTC (permalink / raw) To: Andy Yan Cc: Diederik de Haas, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-rockchip Hi Andy and Diederik > > The root case for the problem is now clear。 > > Most of the registers in VOP need to write the cfd_done register(call vop2_cfg_done) > after you have configured the registers. Then, they will take effect only when the VSYNC event occurs(It doesn't take effect immediately after you finish writing.). > This also includes all the VP_DSP_CTRL registers. > > see the code: > > vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); > > vop2_crtc_atomic_try_set_gamma(vop2, vp, crtc, crtc_state); > --> > > static void vop2_vp_dsp_lut_disable(struct vop2_video_port vp) > { > u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); > > > When we read this register, we are reading the actual effective value, > not the one(dsp_ctrl) that was just written in before (it has not yet taken effect) > > So when we continue to write about this register here, we overwrite the actual > value we originally intended to put in. > > > dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; > vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); > } > > I think the correct solution should be similar to the Windows-related registry settings. > All the registers related to Video Ports should be set as non-volatile, see: > / > * The window registers are only updated when config done is written. > * Until that they read back the old value. As we read-modify-write > * these registers mark them as non-volatile. This makes sure we read > * the new values from the regmap register cache. > */ > static const struct regmap_range vop2_nonvolatile_range[] = { > regmap_reg_range(0x1000, 0x23ff), > }; > > static const struct regmap_access_table vop2_volatile_table = { > .no_ranges = vop2_nonvolatile_range, > .n_no_ranges = ARRAY_SIZE(vop2_nonvolatile_range), > }; > I'm wondering that perhaps making a separate code path for gamma LUT enable in atomic enable would fix it? IIUC we set config. earlier in atomic_enable and write dsp_ctrl + cfg_done with proper configuration but since there wasn't a vsync the read of dsp ctrl in lut disable is not correct (or we cannot be sure it is correct). Putting try set gamma LUT before first dsp ctrl write and make it use the dsp_ctrl value so far written in atomic enable could also fix the issue because we wouldn't read dsp ctrl value from the register. > Actually, there is another question. I still haven't figured out why > this problem doesn't occur when compiling rockchipdrm=y . > I applied your patch and run a test on both versions. This is what i got with drm=m, so the same result as diederik. ``` [ 8.138482] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 [ 8.139093] vop2_vp_dsp_lut_disable dsp_ctrl: 0x0000000f ``` This is what i got with drm=y. So it seems with drm=y read value in the register _is_ what was written earlier in atomic enable i.e value is vaild? Maybe it is just "unfortunate" timing? ``` [ 6.646991] vop2_crtc_atomic_try_set_gamma gamma_lut: 0000000000000000 [ 6.647594] vop2_vp_dsp_lut_disable dsp_ctrl: 0x00010000 ``` I will have time to spend more on this over the weekend. Best regards, Piotr Zalewski _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-11 12:49 ` Andy Yan 2025-06-11 22:12 ` Piotr Zalewski @ 2025-06-12 8:33 ` Diederik de Haas 2025-06-19 11:54 ` Piotr Zalewski 2 siblings, 0 replies; 22+ messages in thread From: Diederik de Haas @ 2025-06-12 8:33 UTC (permalink / raw) To: Andy Yan Cc: Piotr Zalewski, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-rockchip [-- Attachment #1.1.1.1: Type: text/plain, Size: 1027 bytes --] Hi Andy, On Wed Jun 11, 2025 at 2:49 PM CEST, Andy Yan wrote: > The root case for the problem is now clear。 \o/ > ... > > Actually, there is another question. I still haven't figured out why > this problem doesn't occur when compiling rockchipdrm=y . Thus far I had compiled all my kernels with this: ```sh make clean cp ../config-6.14-arm64-cknow .config scripts/config --enable LOCALVERSION_AUTO scripts/config --enable DEBUG_INFO_NONE scripts/config --disable DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT make oldconfig time make -j `nproc` bindeb-pkg ``` And with ``make oldconfig`` I accepted all the defaults (during git bisect I did say 'y' to a new Rockchip related setting) Wanting to see ``DRM_ROCKCHIP=y`` for myself, I added ```sh scripts/config --enable DRM_ROCKCHIP scripts/config --enable DRM ``` before ``make oldconfig`` and built a new kernel. I can confirm I'm seeing it work now too. Attached you'll find the ``.config`` diff between the 2 builds. HTH, Diederik [-- Attachment #1.1.2: kernel-config-diff-with-drm_rockchip-y.diff --] [-- Type: text/x-patch, Size: 2624 bytes --] root@pt2-scmi:/boot# diff -u config-6.14.0-rc1-00001-gfbe17d9b77b0 config-6.14.0-rc1-00002-gbc85fa3dec68 --- config-6.14.0-rc1-00001-gfbe17d9b77b0 2025-06-09 11:47:09.000000000 +0200 +++ config-6.14.0-rc1-00002-gbc85fa3dec68 2025-06-11 18:43:24.000000000 +0200 @@ -6193,13 +6193,12 @@ CONFIG_RC_ATI_REMOTE=m CONFIG_RC_LOOPBACK=m # CONFIG_RC_XBOX_DVD is not set -CONFIG_CEC_CORE=m +CONFIG_CEC_CORE=y CONFIG_CEC_NOTIFIER=y # # CEC support # -CONFIG_MEDIA_CEC_RC=y CONFIG_MEDIA_CEC_SUPPORT=y # CONFIG_CEC_CH7322 is not set # CONFIG_CEC_CROS_EC is not set @@ -7185,16 +7184,16 @@ CONFIG_TEGRA_HOST1X_CONTEXT_BUS=y CONFIG_TEGRA_HOST1X=m CONFIG_TEGRA_HOST1X_FIREWALL=y -CONFIG_DRM=m +CONFIG_DRM=y CONFIG_DRM_MIPI_DSI=y # CONFIG_DRM_DEBUG_MM is not set -CONFIG_DRM_KMS_HELPER=m +CONFIG_DRM_KMS_HELPER=y # CONFIG_DRM_PANIC is not set # CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set # CONFIG_DRM_DEBUG_MODESET_LOCK is not set CONFIG_DRM_CLIENT=y -CONFIG_DRM_CLIENT_LIB=m -CONFIG_DRM_CLIENT_SELECTION=m +CONFIG_DRM_CLIENT_LIB=y +CONFIG_DRM_CLIENT_SELECTION=y CONFIG_DRM_CLIENT_SETUP=y # @@ -7210,7 +7209,7 @@ CONFIG_DRM_LOAD_EDID_FIRMWARE=y CONFIG_DRM_DISPLAY_DP_AUX_BUS=m -CONFIG_DRM_DISPLAY_HELPER=m +CONFIG_DRM_DISPLAY_HELPER=y CONFIG_DRM_BRIDGE_CONNECTOR=y # CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV=y @@ -7226,7 +7225,7 @@ CONFIG_DRM_BUDDY=m CONFIG_DRM_VRAM_HELPER=m CONFIG_DRM_TTM_HELPER=m -CONFIG_DRM_GEM_DMA_HELPER=m +CONFIG_DRM_GEM_DMA_HELPER=y CONFIG_DRM_GEM_SHMEM_HELPER=m CONFIG_DRM_SUBALLOC_HELPER=m CONFIG_DRM_SCHED=m @@ -7317,7 +7316,7 @@ CONFIG_DRM_VGEM=m # CONFIG_DRM_VKMS is not set # CONFIG_DRM_EXYNOS is not set -CONFIG_DRM_ROCKCHIP=m +CONFIG_DRM_ROCKCHIP=y CONFIG_ROCKCHIP_VOP=y CONFIG_ROCKCHIP_VOP2=y CONFIG_ROCKCHIP_ANALOGIX_DP=y @@ -7520,7 +7519,7 @@ # CONFIG_DRM_TI_TPD12S015 is not set CONFIG_DRM_ANALOGIX_ANX6345=m # CONFIG_DRM_ANALOGIX_ANX78XX is not set -CONFIG_DRM_ANALOGIX_DP=m +CONFIG_DRM_ANALOGIX_DP=y CONFIG_DRM_ANALOGIX_ANX7625=m CONFIG_DRM_I2C_ADV7511=m CONFIG_DRM_I2C_ADV7511_AUDIO=y @@ -7535,13 +7534,13 @@ # CONFIG_DRM_IMX8QXP_PIXEL_COMBINER is not set # CONFIG_DRM_IMX8QXP_PIXEL_LINK_TO_DPI is not set # CONFIG_DRM_IMX93_MIPI_DSI is not set -CONFIG_DRM_DW_HDMI=m +CONFIG_DRM_DW_HDMI=y # CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set CONFIG_DRM_DW_HDMI_I2S_AUDIO=m # CONFIG_DRM_DW_HDMI_GP_AUDIO is not set CONFIG_DRM_DW_HDMI_CEC=m -CONFIG_DRM_DW_HDMI_QP=m -CONFIG_DRM_DW_MIPI_DSI=m +CONFIG_DRM_DW_HDMI_QP=y +CONFIG_DRM_DW_MIPI_DSI=y # end of Display Interface Bridges CONFIG_DRM_IMX_DCSS=m [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] [-- Attachment #2: Type: text/plain, Size: 170 bytes --] _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-11 12:49 ` Andy Yan 2025-06-11 22:12 ` Piotr Zalewski 2025-06-12 8:33 ` Diederik de Haas @ 2025-06-19 11:54 ` Piotr Zalewski 2025-06-20 0:42 ` Andy Yan 2 siblings, 1 reply; 22+ messages in thread From: Piotr Zalewski @ 2025-06-19 11:54 UTC (permalink / raw) To: Andy Yan Cc: Diederik de Haas, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-rockchip Hi Andy > > The root case for the problem is now clear。 > > Most of the registers in VOP need to write the cfd_done register(call vop2_cfg_done) > after you have configured the registers. Then, they will take effect only when the VSYNC event occurs(It doesn't take effect immediately after you finish writing.). > This also includes all the VP_DSP_CTRL registers. > > see the code: > > vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); > > vop2_crtc_atomic_try_set_gamma(vop2, vp, crtc, crtc_state); > --> > > static void vop2_vp_dsp_lut_disable(struct vop2_video_port vp) > { > u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); > > > When we read this register, we are reading the actual effective value, > not the one(dsp_ctrl) that was just written in before (it has not yet taken effect) > > So when we continue to write about this register here, we overwrite the actual > value we originally intended to put in. > > > dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; > vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); > } > > I think the correct solution should be similar to the Windows-related registry settings. > All the registers related to Video Ports should be set as non-volatile, see: > > / > * The window registers are only updated when config done is written. > * Until that they read back the old value. As we read-modify-write > * these registers mark them as non-volatile. This makes sure we read > * the new values from the regmap register cache. > */ > static const struct regmap_range vop2_nonvolatile_range[] = { > regmap_reg_range(0x1000, 0x23ff), > }; > > static const struct regmap_access_table vop2_volatile_table = { > .no_ranges = vop2_nonvolatile_range, > .n_no_ranges = ARRAY_SIZE(vop2_nonvolatile_range), > }; Following your suggestion I added vop2 video port registers as not volatile and it fixed the issue. I took the values from RK3588 TRM Part2 V1.1. See the patch below and confirm if it is correct. diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index d0f5fea15e21..c5c1910fa5ca 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -2596,6 +2596,7 @@ static int vop2_win_init(struct vop2 *vop2) */ static const struct regmap_range vop2_nonvolatile_range[] = { regmap_reg_range(0x1000, 0x23ff), + regmap_reg_range(0x0C00, 0x0fff), }; static const struct regmap_access_table vop2_volatile_table = { > Actually, there is another question. I still haven't figured out why > this problem doesn't occur when compiling rockchipdrm=y . Couldn't reason out why this only happens with drm=m yet unfortunately. Best regards, Piotr Zalewski _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re:Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-19 11:54 ` Piotr Zalewski @ 2025-06-20 0:42 ` Andy Yan 0 siblings, 0 replies; 22+ messages in thread From: Andy Yan @ 2025-06-20 0:42 UTC (permalink / raw) To: Piotr Zalewski Cc: Diederik de Haas, hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-rockchip HI Piotr, 在 2025-06-19 19:54:12,"Piotr Zalewski" <pZ010001011111@proton.me> 写道: >Hi Andy > >> >> The root case for the problem is now clear。 >> >> Most of the registers in VOP need to write the cfd_done register(call vop2_cfg_done) >> after you have configured the registers. Then, they will take effect only when the VSYNC event occurs(It doesn't take effect immediately after you finish writing.). >> This also includes all the VP_DSP_CTRL registers. >> >> see the code: >> >> vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); >> >> vop2_crtc_atomic_try_set_gamma(vop2, vp, crtc, crtc_state); >> --> >> >> static void vop2_vp_dsp_lut_disable(struct vop2_video_port vp) >> { >> u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); >> >> >> When we read this register, we are reading the actual effective value, >> not the one(dsp_ctrl) that was just written in before (it has not yet taken effect) >> >> So when we continue to write about this register here, we overwrite the actual >> value we originally intended to put in. >> >> >> dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; >> vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); >> } >> >> I think the correct solution should be similar to the Windows-related registry settings. >> All the registers related to Video Ports should be set as non-volatile, see: >> >> / >> * The window registers are only updated when config done is written. >> * Until that they read back the old value. As we read-modify-write >> * these registers mark them as non-volatile. This makes sure we read >> * the new values from the regmap register cache. >> */ >> static const struct regmap_range vop2_nonvolatile_range[] = { >> regmap_reg_range(0x1000, 0x23ff), >> }; >> >> static const struct regmap_access_table vop2_volatile_table = { >> .no_ranges = vop2_nonvolatile_range, >> .n_no_ranges = ARRAY_SIZE(vop2_nonvolatile_range), >> }; > >Following your suggestion I added vop2 video port registers as not >volatile and it fixed the issue. I took the values from RK3588 TRM >Part2 V1.1. See the patch below and confirm if it is correct. > >diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >index d0f5fea15e21..c5c1910fa5ca 100644 >--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >@@ -2596,6 +2596,7 @@ static int vop2_win_init(struct vop2 *vop2) > */ > static const struct regmap_range vop2_nonvolatile_range[] = { > regmap_reg_range(0x1000, 0x23ff), >+ regmap_reg_range(0x0C00, 0x0fff), > }; > For a complete solution, the registers of all four Video Ports should all be marked as non-volatile. And they should be arranged in ascending order of address size, so they should be placed before 0x1000. Additionally, the comments here should also be updated accordingly. #define RK3568_VP0_CTRL_BASE 0x0C00 #define RK3568_VP1_CTRL_BASE 0x0D00 #define RK3568_VP2_CTRL_BASE 0x0E00 #define RK3588_VP3_CTRL_BASE 0x0F00 > static const struct regmap_access_table vop2_volatile_table = { > > >> Actually, there is another question. I still haven't figured out why >> this problem doesn't occur when compiling rockchipdrm=y . > >Couldn't reason out why this only happens with drm=m yet >unfortunately. This should eventually lead to an answer. However, I've been quite busy recently and haven't had time to conduct further analysis yet. I will incorporate it into my TODO list. > >Best regards, Piotr Zalewski _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-08 11:08 ` Diederik de Haas 2025-06-08 12:10 ` Andy Yan @ 2025-06-09 22:37 ` Piotr Zalewski 2025-06-10 11:27 ` Diederik de Haas 1 sibling, 1 reply; 22+ messages in thread From: Piotr Zalewski @ 2025-06-09 22:37 UTC (permalink / raw) To: Diederik de Haas Cc: hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel Hi Diederik, sorry for late response > Interesting that it also happened with drm=y. I actually checked now and i don't have the issue with drm=y, sorry for misinforming you all, hopefully no one's time was wasted. > As you're more knowledgeable then I am with this, maybe look through > https://lists.sr.ht/~diederik/pine64-discuss/D9AM2OOLREO0.2JMAI42J06TW0@cknow.org > > to see if you may spot something relevant? Heh, I'm not that knowledgeable but I will look through it. > > happened twice and at short interval and since this patch allows for gamma > > LUT update regardless of color_mgmt_changed state this makes DSP CTRL GAMMA > > LUT EN bit to be unset twice too. It seems that VOP does not like it. I > > > Happy to see you found the cause :-) > Do you happen to know why it was unset twice? That sounds suboptimal. It is due to DRM modeset which can happens when CRTC (display) config changes "significantly". AFAIK modeset happens def. when you go out of suspend or display timings change. I might have been fooled by serial console last time as it does not appear to happen twice in short interval when i review the journal entries. > But (IIUC) setting a bit to a value it already has causing issues, > sounds surprising as well. Depends on what hardware does, when you write to a register it might cause many other things to happen and seems like for vop2 it messes something up. I made a second patch so that the first write is not permitted but all subsequent are permitted (regardless of lut en state) - issue disappeared too. So it might be that very first write to dsp lut disable happens too fast (in relation to something else)?. It is not intuitive because when drm is a module it happens usually like ~second later. part of the log with drm=y ``` [ 6.543099] rockchip-drm display-subsystem: [drm] GAMMA LUT DISABLE ``` part of the log with drm=m ``` [ 7.944120] rockchip-drm display-subsystem: [drm] GAMMA LUT DISABLE ``` > > patched vop2_vp_dsp_lut_disable function so that dsp_ctrl is set only if > > GAMMA LUT EN bit is set. I checked that this also does not break the gamma > > lut functionality with emphasis on out-of/into suspend behavior. > > > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c > > index d0f5fea15e21..7ddf311b38c6 100644 > > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c > > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c > > @@ -897,6 +897,9 @@ static void vop2_vp_dsp_lut_disable(struct vop2_video_port *vp) > > { > > u32 dsp_ctrl = vop2_vp_read(vp, RK3568_VP_DSP_CTRL); > > > > + if ((dsp_ctrl & RK3568_VP_DSP_CTRL__DSP_LUT_EN) == 0) > > + return; > > + > > dsp_ctrl &= ~RK3568_VP_DSP_CTRL__DSP_LUT_EN; > > vop2_vp_write(vp, RK3568_VP_DSP_CTRL, dsp_ctrl); > > } > > > I built a kernel with 6.14-rc1 + this patch and can confirm the screen > has output again :-) cool :) > > I will wait with sending a patch because maybe Andy has something to add > > to this. > > > Sounds like a plan. It could be that this issue surfaced an underlaying > issue and if so, fixing that would be even better. When i have time this week I will check on what version of the kernel i tested gamma lut when i sent the patches and test there. > Thanks a lot! > Thank _you_ for taking your time to do all the bisecting. Best regards, Piotr Zalewski _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable 2025-06-09 22:37 ` Piotr Zalewski @ 2025-06-10 11:27 ` Diederik de Haas 0 siblings, 0 replies; 22+ messages in thread From: Diederik de Haas @ 2025-06-10 11:27 UTC (permalink / raw) To: Piotr Zalewski Cc: hjc, heiko, andy.yan, maarten.lankhorst, mripard, tzimmermann, airlied, simona, Dang Huynh, dri-devel, linux-arm-kernel, linux-rockchip, linux-kernel [-- Attachment #1.1: Type: text/plain, Size: 2743 bytes --] Hi Piotr, On Tue Jun 10, 2025 at 12:37 AM CEST, Piotr Zalewski wrote: > Hi Diederik, sorry for late response No need to be sorry :-) (late? Less then 2 days vs my ~4 months before the git bisect ...) >> Interesting that it also happened with drm=y. > > I actually checked now and i don't have the issue with drm=y, sorry for > misinforming you all, hopefully no one's time was wasted. Good to know, thanks :-) >> > happened twice and at short interval and since this patch allows for gamma >> > LUT update regardless of color_mgmt_changed state this makes DSP CTRL GAMMA >> > LUT EN bit to be unset twice too. It seems that VOP does not like it. I >> >> Happy to see you found the cause :-) >> Do you happen to know why it was unset twice? That sounds suboptimal. > > It is due to DRM modeset which can happens when CRTC (display) config changes > "significantly". AFAIK modeset happens def. when you go out of suspend or > display timings change. I might have been fooled by serial console last time > as it does not appear to happen twice in short interval when i review the > journal entries. > >> But (IIUC) setting a bit to a value it already has causing issues, >> sounds surprising as well. > > Depends on what hardware does, when you write to a register it might cause > many other things to happen and seems like for vop2 it messes something up. I didn't know that, thanks. > I made a second patch so that the first write is not permitted but all > subsequent are permitted (regardless of lut en state) - issue disappeared > too. So it might be that very first write to dsp lut disable happens too > fast (in relation to something else)?. It is not intuitive because when drm is > a module it happens usually like ~second later. > > part of the log with drm=y > ``` > [ 6.543099] rockchip-drm display-subsystem: [drm] GAMMA LUT DISABLE > ``` > > part of the log with drm=m > ``` > [ 7.944120] rockchip-drm display-subsystem: [drm] GAMMA LUT DISABLE > ``` My first (uneducated) hunch was a timing issue and ``=m`` can reveal issues which you wouldn't see with ``=y``. Andy already found an issue "that shouldn't happen" and my latest test also had an unexpected result. So (eventually) we'll figure it out :-) >> Sounds like a plan. It could be that this issue surfaced an underlaying >> issue and if so, fixing that would be even better. > > When i have time this week I will check on what version of the kernel i > tested gamma lut when i sent the patches and test there. I think it would be beneficial if you'd do the tests that Andy asked 'me' to do too, so we can compare results. FWIW: I have the 4GB RAM version. Cheers, Diederik [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] [-- Attachment #2: Type: text/plain, Size: 170 bytes --] _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip ^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2025-06-20 0:43 UTC | newest] Thread overview: 22+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-12-06 19:26 [PATCH drm-misc-next] rockchip/drm: vop2: don't check color_mgmt_changed in atomic_enable Piotr Zalewski 2024-12-11 22:45 ` Heiko Stuebner 2025-06-05 20:08 ` Diederik de Haas 2025-06-07 15:32 ` Piotr Zalewski 2025-06-08 11:08 ` Diederik de Haas 2025-06-08 12:10 ` Andy Yan 2025-06-08 12:53 ` Diederik de Haas 2025-06-09 9:15 ` Andy Yan 2025-06-09 12:36 ` Diederik de Haas 2025-06-10 9:07 ` Andy Yan 2025-06-10 11:02 ` Diederik de Haas 2025-06-11 7:41 ` Andy Yan 2025-06-11 10:56 ` Diederik de Haas 2025-06-11 12:15 ` Andy Yan 2025-06-11 12:26 ` Diederik de Haas 2025-06-11 12:49 ` Andy Yan 2025-06-11 22:12 ` Piotr Zalewski 2025-06-12 8:33 ` Diederik de Haas 2025-06-19 11:54 ` Piotr Zalewski 2025-06-20 0:42 ` Andy Yan 2025-06-09 22:37 ` Piotr Zalewski 2025-06-10 11:27 ` Diederik de Haas
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox