* [PATCH] media: i2c: ov5645: Fix CSI-2 CRC errors on RK3576 after init sequence
@ 2026-08-26 8:54 Xiaolei Wang
2026-09-08 2:01 ` Xiaolei Wang
2026-09-08 10:14 ` Sakari Ailus
0 siblings, 2 replies; 6+ messages in thread
From: Xiaolei Wang @ 2026-08-26 8:54 UTC (permalink / raw)
To: hverkuil+cisco, sakari.ailus, mehdi.djait, u.kleine-koenig,
laurent.pinchart, jacopo, p.zabel, ezequiel, mchehab+samsung,
festevam, xiaoleiwangxiaolei
Cc: linux-media, linux-kernel
On the RK3576 platform, after ov5645_global_init_setting completes and
before stream on, the CSI host reports a high rate of CRC errors:
MIPI_CSI2 ERR1:0x1000000 (crc,vc: 0)
These errors occur exclusively in the window between init completion and
stream on. Once preview starts and the sensor outputs valid HS data, no
further CRC errors are observed.
Commit 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") reworked
the power sequence to properly enter LP-11 during power-up. As part of
this change, the SYSTEM_CTRL0_STOP (0x42) write in s_power() was replaced
with usleep_range(500, 1000), leaving the sensor in wake state (0x3008 =
0x02) from init through to s_stream. Reverting this commit resolves the
CRC errors, confirming it as the triggering change.
Restore the power-down state after init by appending { 0x3008, 0x42 } to
the end of ov5645_global_init_setting[]. This powers down the sensor core
after MIPI configuration is complete, while keeping the MIPI PHY active in
LP-11. The sensor is then woken up only at s_stream time.
This preserves all LP-11 compliance improvements from
commit 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") while
eliminating the CRC errors on RK3576.
Fixes: 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence")
Signed-off-by: Xiaolei Wang <xiaoleiwangxiaolei@gmail.com>
---
drivers/media/i2c/ov5645.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c
index c772ef6e51d2..be85e0155b81 100644
--- a/drivers/media/i2c/ov5645.c
+++ b/drivers/media/i2c/ov5645.c
@@ -351,7 +351,8 @@ static const struct reg_value ov5645_global_init_setting[] = {
{ 0x3008, 0x02 },
{ OV5645_IO_MIPI_CTRL00, 0x40 },
{ OV5645_MIPI_CTRL00, 0x24 },
- { OV5645_PAD_OUTPUT00, 0x70 }
+ { OV5645_PAD_OUTPUT00, 0x70 },
+ { 0x3008, 0x42 }
};
static const struct reg_value ov5645_setting_sxga[] = {
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH] media: i2c: ov5645: Fix CSI-2 CRC errors on RK3576 after init sequence 2026-08-26 8:54 [PATCH] media: i2c: ov5645: Fix CSI-2 CRC errors on RK3576 after init sequence Xiaolei Wang @ 2026-09-08 2:01 ` Xiaolei Wang 2026-09-08 10:14 ` Sakari Ailus 1 sibling, 0 replies; 6+ messages in thread From: Xiaolei Wang @ 2026-09-08 2:01 UTC (permalink / raw) To: hverkuil+cisco, sakari.ailus, mehdi.djait, u.kleine-koenig, laurent.pinchart, jacopo, p.zabel, ezequiel, mchehab+samsung, festevam Cc: linux-media, linux-kernel, stable Humble ping ... Add linux-stable in Cc list thanks xiaolei 在 2026/8/26 16:54, Xiaolei Wang 写道: > On the RK3576 platform, after ov5645_global_init_setting completes and > before stream on, the CSI host reports a high rate of CRC errors: > > MIPI_CSI2 ERR1:0x1000000 (crc,vc: 0) > > These errors occur exclusively in the window between init completion and > stream on. Once preview starts and the sensor outputs valid HS data, no > further CRC errors are observed. > > Commit 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") reworked > the power sequence to properly enter LP-11 during power-up. As part of > this change, the SYSTEM_CTRL0_STOP (0x42) write in s_power() was replaced > with usleep_range(500, 1000), leaving the sensor in wake state (0x3008 = > 0x02) from init through to s_stream. Reverting this commit resolves the > CRC errors, confirming it as the triggering change. > > Restore the power-down state after init by appending { 0x3008, 0x42 } to > the end of ov5645_global_init_setting[]. This powers down the sensor core > after MIPI configuration is complete, while keeping the MIPI PHY active in > LP-11. The sensor is then woken up only at s_stream time. > > This preserves all LP-11 compliance improvements from > commit 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") while > eliminating the CRC errors on RK3576. > > Fixes: 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") > Signed-off-by: Xiaolei Wang <xiaoleiwangxiaolei@gmail.com> > --- > drivers/media/i2c/ov5645.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c > index c772ef6e51d2..be85e0155b81 100644 > --- a/drivers/media/i2c/ov5645.c > +++ b/drivers/media/i2c/ov5645.c > @@ -351,7 +351,8 @@ static const struct reg_value ov5645_global_init_setting[] = { > { 0x3008, 0x02 }, > { OV5645_IO_MIPI_CTRL00, 0x40 }, > { OV5645_MIPI_CTRL00, 0x24 }, > - { OV5645_PAD_OUTPUT00, 0x70 } > + { OV5645_PAD_OUTPUT00, 0x70 }, > + { 0x3008, 0x42 } > }; > > static const struct reg_value ov5645_setting_sxga[] = { ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] media: i2c: ov5645: Fix CSI-2 CRC errors on RK3576 after init sequence 2026-08-26 8:54 [PATCH] media: i2c: ov5645: Fix CSI-2 CRC errors on RK3576 after init sequence Xiaolei Wang 2026-09-08 2:01 ` Xiaolei Wang @ 2026-09-08 10:14 ` Sakari Ailus 2026-09-08 10:36 ` Laurent Pinchart 2026-09-09 3:24 ` Xiaolei Wang 1 sibling, 2 replies; 6+ messages in thread From: Sakari Ailus @ 2026-09-08 10:14 UTC (permalink / raw) To: Xiaolei Wang Cc: hverkuil+cisco, mehdi.djait, u.kleine-koenig, laurent.pinchart, jacopo, p.zabel, ezequiel, mchehab+samsung, festevam, linux-media, linux-kernel Hi Xiaolei, On Wed, Aug 26, 2026 at 08:54:32AM +0000, Xiaolei Wang wrote: > On the RK3576 platform, after ov5645_global_init_setting completes and > before stream on, the CSI host reports a high rate of CRC errors: > > MIPI_CSI2 ERR1:0x1000000 (crc,vc: 0) > > These errors occur exclusively in the window between init completion and > stream on. Once preview starts and the sensor outputs valid HS data, no > further CRC errors are observed. > > Commit 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") reworked > the power sequence to properly enter LP-11 during power-up. As part of > this change, the SYSTEM_CTRL0_STOP (0x42) write in s_power() was replaced > with usleep_range(500, 1000), leaving the sensor in wake state (0x3008 = > 0x02) from init through to s_stream. Reverting this commit resolves the > CRC errors, confirming it as the triggering change. > > Restore the power-down state after init by appending { 0x3008, 0x42 } to > the end of ov5645_global_init_setting[]. This powers down the sensor core > after MIPI configuration is complete, while keeping the MIPI PHY active in > LP-11. The sensor is then woken up only at s_stream time. > > This preserves all LP-11 compliance improvements from > commit 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") while > eliminating the CRC errors on RK3576. > > Fixes: 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") > Signed-off-by: Xiaolei Wang <xiaoleiwangxiaolei@gmail.com> > --- > drivers/media/i2c/ov5645.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c > index c772ef6e51d2..be85e0155b81 100644 > --- a/drivers/media/i2c/ov5645.c > +++ b/drivers/media/i2c/ov5645.c > @@ -351,7 +351,8 @@ static const struct reg_value ov5645_global_init_setting[] = { > { 0x3008, 0x02 }, > { OV5645_IO_MIPI_CTRL00, 0x40 }, > { OV5645_MIPI_CTRL00, 0x24 }, > - { OV5645_PAD_OUTPUT00, 0x70 } > + { OV5645_PAD_OUTPUT00, 0x70 }, > + { 0x3008, 0x42 } Is the earlier write of 0x3008 still appropriate? > }; > > static const struct reg_value ov5645_setting_sxga[] = { -- Sakari Ailus ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] media: i2c: ov5645: Fix CSI-2 CRC errors on RK3576 after init sequence 2026-09-08 10:14 ` Sakari Ailus @ 2026-09-08 10:36 ` Laurent Pinchart 2026-09-09 3:24 ` Xiaolei Wang 2026-09-09 3:24 ` Xiaolei Wang 1 sibling, 1 reply; 6+ messages in thread From: Laurent Pinchart @ 2026-09-08 10:36 UTC (permalink / raw) To: Sakari Ailus Cc: Xiaolei Wang, hverkuil+cisco, mehdi.djait, u.kleine-koenig, jacopo, p.zabel, ezequiel, mchehab+samsung, festevam, linux-media, linux-kernel On Tue, Sep 08, 2026 at 01:14:32PM +0300, Sakari Ailus wrote: > On Wed, Aug 26, 2026 at 08:54:32AM +0000, Xiaolei Wang wrote: > > On the RK3576 platform, after ov5645_global_init_setting completes and > > before stream on, the CSI host reports a high rate of CRC errors: > > > > MIPI_CSI2 ERR1:0x1000000 (crc,vc: 0) > > > > These errors occur exclusively in the window between init completion and > > stream on. Once preview starts and the sensor outputs valid HS data, no > > further CRC errors are observed. > > > > Commit 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") reworked > > the power sequence to properly enter LP-11 during power-up. As part of > > this change, the SYSTEM_CTRL0_STOP (0x42) write in s_power() was replaced > > with usleep_range(500, 1000), leaving the sensor in wake state (0x3008 = > > 0x02) from init through to s_stream. Reverting this commit resolves the > > CRC errors, confirming it as the triggering change. > > > > Restore the power-down state after init by appending { 0x3008, 0x42 } to > > the end of ov5645_global_init_setting[]. This powers down the sensor core > > after MIPI configuration is complete, while keeping the MIPI PHY active in > > LP-11. The sensor is then woken up only at s_stream time. > > > > This preserves all LP-11 compliance improvements from > > commit 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") while > > eliminating the CRC errors on RK3576. > > > > Fixes: 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") > > Signed-off-by: Xiaolei Wang <xiaoleiwangxiaolei@gmail.com> > > --- > > drivers/media/i2c/ov5645.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c > > index c772ef6e51d2..be85e0155b81 100644 > > --- a/drivers/media/i2c/ov5645.c > > +++ b/drivers/media/i2c/ov5645.c > > @@ -351,7 +351,8 @@ static const struct reg_value ov5645_global_init_setting[] = { > > { 0x3008, 0x02 }, > > { OV5645_IO_MIPI_CTRL00, 0x40 }, > > { OV5645_MIPI_CTRL00, 0x24 }, > > - { OV5645_PAD_OUTPUT00, 0x70 } > > + { OV5645_PAD_OUTPUT00, 0x70 }, > > + { 0x3008, 0x42 } While at it, please use the register macro. > Is the earlier write of 0x3008 still appropriate? There are four earlier writes of register 0x3008. The whole initialization sequence likely needs a cleanup. It's not clear why software suspend needs to be disabled briefly during initialization. > > }; > > > > static const struct reg_value ov5645_setting_sxga[] = { -- Regards, Laurent Pinchart ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] media: i2c: ov5645: Fix CSI-2 CRC errors on RK3576 after init sequence 2026-09-08 10:36 ` Laurent Pinchart @ 2026-09-09 3:24 ` Xiaolei Wang 0 siblings, 0 replies; 6+ messages in thread From: Xiaolei Wang @ 2026-09-09 3:24 UTC (permalink / raw) To: Laurent Pinchart, Sakari Ailus Cc: hverkuil+cisco, mehdi.djait, u.kleine-koenig, jacopo, p.zabel, ezequiel, mchehab+samsung, festevam, linux-media, linux-kernel Hi Laurent, Thank you so much for your review. 在 2026/9/8 18:36, Laurent Pinchart 写道: > On Tue, Sep 08, 2026 at 01:14:32PM +0300, Sakari Ailus wrote: >> On Wed, Aug 26, 2026 at 08:54:32AM +0000, Xiaolei Wang wrote: >>> On the RK3576 platform, after ov5645_global_init_setting completes and >>> before stream on, the CSI host reports a high rate of CRC errors: >>> >>> MIPI_CSI2 ERR1:0x1000000 (crc,vc: 0) >>> >>> These errors occur exclusively in the window between init completion and >>> stream on. Once preview starts and the sensor outputs valid HS data, no >>> further CRC errors are observed. >>> >>> Commit 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") reworked >>> the power sequence to properly enter LP-11 during power-up. As part of >>> this change, the SYSTEM_CTRL0_STOP (0x42) write in s_power() was replaced >>> with usleep_range(500, 1000), leaving the sensor in wake state (0x3008 = >>> 0x02) from init through to s_stream. Reverting this commit resolves the >>> CRC errors, confirming it as the triggering change. >>> >>> Restore the power-down state after init by appending { 0x3008, 0x42 } to >>> the end of ov5645_global_init_setting[]. This powers down the sensor core >>> after MIPI configuration is complete, while keeping the MIPI PHY active in >>> LP-11. The sensor is then woken up only at s_stream time. >>> >>> This preserves all LP-11 compliance improvements from >>> commit 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") while >>> eliminating the CRC errors on RK3576. >>> >>> Fixes: 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") >>> Signed-off-by: Xiaolei Wang <xiaoleiwangxiaolei@gmail.com> >>> --- >>> drivers/media/i2c/ov5645.c | 3 ++- >>> 1 file changed, 2 insertions(+), 1 deletion(-) >>> >>> diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c >>> index c772ef6e51d2..be85e0155b81 100644 >>> --- a/drivers/media/i2c/ov5645.c >>> +++ b/drivers/media/i2c/ov5645.c >>> @@ -351,7 +351,8 @@ static const struct reg_value ov5645_global_init_setting[] = { >>> { 0x3008, 0x02 }, >>> { OV5645_IO_MIPI_CTRL00, 0x40 }, >>> { OV5645_MIPI_CTRL00, 0x24 }, >>> - { OV5645_PAD_OUTPUT00, 0x70 } >>> + { OV5645_PAD_OUTPUT00, 0x70 }, >>> + { 0x3008, 0x42 } > While at it, please use the register macro. Will do in v2. > >> Is the earlier write of 0x3008 still appropriate? > There are four earlier writes of register 0x3008. The whole > initialization sequence likely needs a cleanup. The ov5645_global_init_setting register may come directly from the manufacturer. I gave this a try. Three of the four writes can simply be dropped, leaving only the { 0x3008, 0x42 } near the beginning of the table: { 0x5a24, 0x00 }, - { 0x3008, 0x02 }, { 0x3503, 0x00 }, ... { 0x0601, 0x02 }, - { 0x3008, 0x42 }, - { 0x3008, 0x02 }, { OV5645_IO_MIPI_CTRL00, 0x40 }, I tested this change on the Rockchip 3576 and IMX8MP platforms and found no problems. > It's not clear why > software suspend needs to be disabled briefly during initialization. Yes, I noticed that the driver was configured with software suspend upon power-up at the initial commit. thanks xiaolei > >>> }; >>> >>> static const struct reg_value ov5645_setting_sxga[] = { ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] media: i2c: ov5645: Fix CSI-2 CRC errors on RK3576 after init sequence 2026-09-08 10:14 ` Sakari Ailus 2026-09-08 10:36 ` Laurent Pinchart @ 2026-09-09 3:24 ` Xiaolei Wang 1 sibling, 0 replies; 6+ messages in thread From: Xiaolei Wang @ 2026-09-09 3:24 UTC (permalink / raw) To: Sakari Ailus Cc: hverkuil+cisco, mehdi.djait, u.kleine-koenig, laurent.pinchart, jacopo, p.zabel, ezequiel, mchehab+samsung, festevam, linux-media, linux-kernel Hi Sakari, Thank you so much for your review. 在 2026/9/8 18:14, Sakari Ailus 写道: > Hi Xiaolei, > > On Wed, Aug 26, 2026 at 08:54:32AM +0000, Xiaolei Wang wrote: >> On the RK3576 platform, after ov5645_global_init_setting completes and >> before stream on, the CSI host reports a high rate of CRC errors: >> >> MIPI_CSI2 ERR1:0x1000000 (crc,vc: 0) >> >> These errors occur exclusively in the window between init completion and >> stream on. Once preview starts and the sensor outputs valid HS data, no >> further CRC errors are observed. >> >> Commit 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") reworked >> the power sequence to properly enter LP-11 during power-up. As part of >> this change, the SYSTEM_CTRL0_STOP (0x42) write in s_power() was replaced >> with usleep_range(500, 1000), leaving the sensor in wake state (0x3008 = >> 0x02) from init through to s_stream. Reverting this commit resolves the >> CRC errors, confirming it as the triggering change. >> >> Restore the power-down state after init by appending { 0x3008, 0x42 } to >> the end of ov5645_global_init_setting[]. This powers down the sensor core >> after MIPI configuration is complete, while keeping the MIPI PHY active in >> LP-11. The sensor is then woken up only at s_stream time. >> >> This preserves all LP-11 compliance improvements from >> commit 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") while >> eliminating the CRC errors on RK3576. >> >> Fixes: 092e8eb90a7d ("media: i2c: ov5645: Fix power sequence") >> Signed-off-by: Xiaolei Wang <xiaoleiwangxiaolei@gmail.com> >> --- >> drivers/media/i2c/ov5645.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/media/i2c/ov5645.c b/drivers/media/i2c/ov5645.c >> index c772ef6e51d2..be85e0155b81 100644 >> --- a/drivers/media/i2c/ov5645.c >> +++ b/drivers/media/i2c/ov5645.c >> @@ -351,7 +351,8 @@ static const struct reg_value ov5645_global_init_setting[] = { >> { 0x3008, 0x02 }, >> { OV5645_IO_MIPI_CTRL00, 0x40 }, >> { OV5645_MIPI_CTRL00, 0x24 }, >> - { OV5645_PAD_OUTPUT00, 0x70 } >> + { OV5645_PAD_OUTPUT00, 0x70 }, >> + { 0x3008, 0x42 } > Is the earlier write of 0x3008 still appropriate? You're right, I tested removing the { 0x3008, 0x02 } write and the MIPI PHY still enters LP-11 correctly without it. The CRC errors are also gone. The 0x02 was a leftover introduced by commit 092e8eb90a7d when it moved the 0x42 stop out of s_power() — the sensor doesn't need to be explicitly woken in the init table since s_stream handles that later. thanks xiaolei >> }; >> >> static const struct reg_value ov5645_setting_sxga[] = { ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-09-09 3:24 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-08-26 8:54 [PATCH] media: i2c: ov5645: Fix CSI-2 CRC errors on RK3576 after init sequence Xiaolei Wang 2026-09-08 2:01 ` Xiaolei Wang 2026-09-08 10:14 ` Sakari Ailus 2026-09-08 10:36 ` Laurent Pinchart 2026-09-09 3:24 ` Xiaolei Wang 2026-09-09 3:24 ` Xiaolei Wang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox