* [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off
@ 2025-11-10 19:03 João Paulo Gonçalves
2025-11-13 7:49 ` Herve Codina
0 siblings, 1 reply; 22+ messages in thread
From: João Paulo Gonçalves @ 2025-11-10 19:03 UTC (permalink / raw)
To: Herve Codina
Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Tomi Valkeinen,
João Paulo Gonçalves, linux-kernel, regressions
Hello,
After commit ad5c6ecef27e ("drm: bridge: ti-sn65dsi83: Add error
recovery mechanism"), our DSI display stopped working correctly. The
display internally uses a TI SN65DSI83 to convert DSI-to-LVDS, and with
the change, it keeps blinking on and off because the bridge is being
reset by the error recovery mechanism.
Even before the change, it was possible to see the message below from
the driver indicating that the bridge's internal PLL was not locked
(register 0xE5, bit 0 in [1]):
[ 11.198616] sn65dsi83 2-002c: Unexpected link status 0x01
However, it was working. After the change, it stopped working. Masking
the PLL error makes it work again:
diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c
index 033c44326552..89a0a2ab45b1 100644
--- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c
+++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c
@@ -429,7 +429,7 @@ static void sn65dsi83_handle_errors(struct sn65dsi83 *ctx)
*/
ret = regmap_read(ctx->regmap, REG_IRQ_STAT, &irq_stat);
- if (ret || irq_stat) {
+ if (ret || (irq_stat & ~REG_IRQ_STAT_CHA_PLL_UNLOCK)) {
/*
* IRQ acknowledged is not always possible (the bridge can be in
* a state where it doesn't answer anymore). To prevent an
Any suggestions on how to proceed here?
#regzbot introduced: ad5c6ecef27e
[1] https://www.ti.com/lit/ds/symlink/sn65dsi83.pdf
Best Regards,
João Paulo Gonçalves
^ permalink raw reply related [flat|nested] 22+ messages in thread* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-10 19:03 [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off João Paulo Gonçalves @ 2025-11-13 7:49 ` Herve Codina 2025-11-13 9:19 ` Francesco Dolcini 0 siblings, 1 reply; 22+ messages in thread From: Herve Codina @ 2025-11-13 7:49 UTC (permalink / raw) To: João Paulo Gonçalves Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter, Tomi Valkeinen, João Paulo Gonçalves, linux-kernel, regressions Hi João On Mon, 10 Nov 2025 16:03:51 -0300 João Paulo Gonçalves <jpaulo.silvagoncalves@gmail.com> wrote: > Hello, > > After commit ad5c6ecef27e ("drm: bridge: ti-sn65dsi83: Add error > recovery mechanism"), our DSI display stopped working correctly. The > display internally uses a TI SN65DSI83 to convert DSI-to-LVDS, and with > the change, it keeps blinking on and off because the bridge is being > reset by the error recovery mechanism. > > Even before the change, it was possible to see the message below from > the driver indicating that the bridge's internal PLL was not locked > (register 0xE5, bit 0 in [1]): > > [ 11.198616] sn65dsi83 2-002c: Unexpected link status 0x01 > > However, it was working. After the change, it stopped working. Masking > the PLL error makes it work again: > > diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c > index 033c44326552..89a0a2ab45b1 100644 > --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c > +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c > @@ -429,7 +429,7 @@ static void sn65dsi83_handle_errors(struct sn65dsi83 *ctx) > */ > > ret = regmap_read(ctx->regmap, REG_IRQ_STAT, &irq_stat); > - if (ret || irq_stat) { > + if (ret || (irq_stat & ~REG_IRQ_STAT_CHA_PLL_UNLOCK)) { > /* > * IRQ acknowledged is not always possible (the bridge can be in > * a state where it doesn't answer anymore). To prevent an > > Any suggestions on how to proceed here? > > #regzbot introduced: ad5c6ecef27e > > [1] https://www.ti.com/lit/ds/symlink/sn65dsi83.pdf > The PLL should be locked. Also in the datasheet, in 'Table 7-2. Initialization Sequence', the status is checked at the end of the initialization sequence and the sequence has to be done again when the status register value is not 0x00. Even before monitoring (irq or polling method), you have an issue with your PLL mentioned with the "sn65dsi83 2-002c: Unexpected link status 0x01" message. I don't understand even how your panel can be correctly driven with the bridge PLL unlock. I don't think that masking the error would be the correct solution. The root cause has to be identified. The "sn65dsi83 2-002c: Unexpected link status 0x01" should not appear. Can you check your clocks ? Does your hardware use the REFCLK external clock ? The driver expects the clock from the MIPI D-PHY channel A HS continuous (bit 0 in 0x0A register). Best regards, Hervé clock ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-13 7:49 ` Herve Codina @ 2025-11-13 9:19 ` Francesco Dolcini 2025-11-17 15:27 ` Luca Ceresoli 0 siblings, 1 reply; 22+ messages in thread From: Francesco Dolcini @ 2025-11-13 9:19 UTC (permalink / raw) To: Herve Codina Cc: João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter, Tomi Valkeinen, João Paulo Gonçalves, linux-kernel, regressions On Thu, Nov 13, 2025 at 08:49:50AM +0100, Herve Codina wrote: > On Mon, 10 Nov 2025 16:03:51 -0300 > João Paulo Gonçalves <jpaulo.silvagoncalves@gmail.com> wrote: > > After commit ad5c6ecef27e ("drm: bridge: ti-sn65dsi83: Add error > > recovery mechanism"), our DSI display stopped working correctly. The > > display internally uses a TI SN65DSI83 to convert DSI-to-LVDS, and with > > the change, it keeps blinking on and off because the bridge is being > > reset by the error recovery mechanism. > > > > Even before the change, it was possible to see the message below from > > the driver indicating that the bridge's internal PLL was not locked > > (register 0xE5, bit 0 in [1]): > > > > [ 11.198616] sn65dsi83 2-002c: Unexpected link status 0x01 > > > > However, it was working. After the change, it stopped working. Masking > > the PLL error makes it work again: > > > > diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c > > index 033c44326552..89a0a2ab45b1 100644 > > --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c > > +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c > > @@ -429,7 +429,7 @@ static void sn65dsi83_handle_errors(struct sn65dsi83 *ctx) > > */ > > > > ret = regmap_read(ctx->regmap, REG_IRQ_STAT, &irq_stat); > > - if (ret || irq_stat) { > > + if (ret || (irq_stat & ~REG_IRQ_STAT_CHA_PLL_UNLOCK)) { > > /* > > * IRQ acknowledged is not always possible (the bridge can be in > > * a state where it doesn't answer anymore). To prevent an > > > > Any suggestions on how to proceed here? > > > > #regzbot introduced: ad5c6ecef27e > > > > [1] https://www.ti.com/lit/ds/symlink/sn65dsi83.pdf > > > > The PLL should be locked. > > Also in the datasheet, in 'Table 7-2. Initialization Sequence', the status > is checked at the end of the initialization sequence and the sequence has to > be done again when the status register value is not 0x00. > > Even before monitoring (irq or polling method), you have an issue with your PLL > mentioned with the "sn65dsi83 2-002c: Unexpected link status 0x01" message. > > I don't understand even how your panel can be correctly driven with the bridge > PLL unlock. We'll try to figure out the reason and see what's the best path forward. Whatever was the reason it was working before, and it should stay working > I don't think that masking the error would be the correct solution. > The root cause has to be identified. The "sn65dsi83 2-002c: Unexpected link > status 0x01" should not appear. > > Can you check your clocks ? > Does your hardware use the REFCLK external clock ? No, REFCLK is tied to GND. > The driver expects the clock from the MIPI D-PHY channel A HS continuous (bit 0 > in 0x0A register). Francesco ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-13 9:19 ` Francesco Dolcini @ 2025-11-17 15:27 ` Luca Ceresoli 2025-11-18 16:56 ` Maxime Ripard 0 siblings, 1 reply; 22+ messages in thread From: Luca Ceresoli @ 2025-11-17 15:27 UTC (permalink / raw) To: Francesco Dolcini, Herve Codina Cc: João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter, Tomi Valkeinen, João Paulo Gonçalves, linux-kernel, regressions, thomas.petazzoni Hello João, Francesco, On Thu Nov 13, 2025 at 10:19 AM CET, Francesco Dolcini wrote: > On Thu, Nov 13, 2025 at 08:49:50AM +0100, Herve Codina wrote: >> On Mon, 10 Nov 2025 16:03:51 -0300 >> João Paulo Gonçalves <jpaulo.silvagoncalves@gmail.com> wrote: >> > After commit ad5c6ecef27e ("drm: bridge: ti-sn65dsi83: Add error >> > recovery mechanism"), our DSI display stopped working correctly. The >> > display internally uses a TI SN65DSI83 to convert DSI-to-LVDS, and with >> > the change, it keeps blinking on and off because the bridge is being >> > reset by the error recovery mechanism. >> > >> > Even before the change, it was possible to see the message below from >> > the driver indicating that the bridge's internal PLL was not locked >> > (register 0xE5, bit 0 in [1]): >> > >> > [ 11.198616] sn65dsi83 2-002c: Unexpected link status 0x01 >> > >> > However, it was working. After the change, it stopped working. Masking >> > the PLL error makes it work again: >> > >> > diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c >> > index 033c44326552..89a0a2ab45b1 100644 >> > --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c >> > +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c >> > @@ -429,7 +429,7 @@ static void sn65dsi83_handle_errors(struct sn65dsi83 *ctx) >> > */ >> > >> > ret = regmap_read(ctx->regmap, REG_IRQ_STAT, &irq_stat); >> > - if (ret || irq_stat) { >> > + if (ret || (irq_stat & ~REG_IRQ_STAT_CHA_PLL_UNLOCK)) { >> > /* >> > * IRQ acknowledged is not always possible (the bridge can be in >> > * a state where it doesn't answer anymore). To prevent an >> > >> > Any suggestions on how to proceed here? >> > >> > #regzbot introduced: ad5c6ecef27e >> > >> > [1] https://www.ti.com/lit/ds/symlink/sn65dsi83.pdf >> > >> >> The PLL should be locked. >> >> Also in the datasheet, in 'Table 7-2. Initialization Sequence', the status >> is checked at the end of the initialization sequence and the sequence has to >> be done again when the status register value is not 0x00. >> >> Even before monitoring (irq or polling method), you have an issue with your PLL >> mentioned with the "sn65dsi83 2-002c: Unexpected link status 0x01" message. >> >> I don't understand even how your panel can be correctly driven with the bridge >> PLL unlock. > > We'll try to figure out the reason and see what's the best path forward. > > Whatever was the reason it was working before, and it should stay > working I agree with Hervé that using the chip with an unlocked PLL looks dangerous and totally out of spec. So I encourage you to investigate what is going on in the hardware looking for the root cause, checking whether the PLL is really unlocked and how to get it working properly. The driver should be definitely be written focusing on the nominal case and handle out-of-spec cases as an exception, not the other way around. I also agree your hardware should not stop working when upgrading to a new kernel, so this investigation would ideally nail down tha root cause and point to a solution in a very short time. Hervé has matured quite some experience on SN65DSI84 error management, leading to his error recovery patch, and I also have a board with that chip on my desk. So we may be helpful in discussion, as well as reviewing and testing patches. Best regards, Luca -- Luca Ceresoli, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-17 15:27 ` Luca Ceresoli @ 2025-11-18 16:56 ` Maxime Ripard 2025-11-19 7:51 ` Herve Codina 0 siblings, 1 reply; 22+ messages in thread From: Maxime Ripard @ 2025-11-18 16:56 UTC (permalink / raw) To: Luca Ceresoli Cc: Francesco Dolcini, Herve Codina, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, Tomi Valkeinen, João Paulo Gonçalves, linux-kernel, regressions, thomas.petazzoni [-- Attachment #1: Type: text/plain, Size: 3910 bytes --] On Mon, Nov 17, 2025 at 04:27:28PM +0100, Luca Ceresoli wrote: > On Thu Nov 13, 2025 at 10:19 AM CET, Francesco Dolcini wrote: > > On Thu, Nov 13, 2025 at 08:49:50AM +0100, Herve Codina wrote: > >> On Mon, 10 Nov 2025 16:03:51 -0300 > >> João Paulo Gonçalves <jpaulo.silvagoncalves@gmail.com> wrote: > >> > After commit ad5c6ecef27e ("drm: bridge: ti-sn65dsi83: Add error > >> > recovery mechanism"), our DSI display stopped working correctly. The > >> > display internally uses a TI SN65DSI83 to convert DSI-to-LVDS, and with > >> > the change, it keeps blinking on and off because the bridge is being > >> > reset by the error recovery mechanism. > >> > > >> > Even before the change, it was possible to see the message below from > >> > the driver indicating that the bridge's internal PLL was not locked > >> > (register 0xE5, bit 0 in [1]): > >> > > >> > [ 11.198616] sn65dsi83 2-002c: Unexpected link status 0x01 > >> > > >> > However, it was working. After the change, it stopped working. Masking > >> > the PLL error makes it work again: > >> > > >> > diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c > >> > index 033c44326552..89a0a2ab45b1 100644 > >> > --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c > >> > +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c > >> > @@ -429,7 +429,7 @@ static void sn65dsi83_handle_errors(struct sn65dsi83 *ctx) > >> > */ > >> > > >> > ret = regmap_read(ctx->regmap, REG_IRQ_STAT, &irq_stat); > >> > - if (ret || irq_stat) { > >> > + if (ret || (irq_stat & ~REG_IRQ_STAT_CHA_PLL_UNLOCK)) { > >> > /* > >> > * IRQ acknowledged is not always possible (the bridge can be in > >> > * a state where it doesn't answer anymore). To prevent an > >> > > >> > Any suggestions on how to proceed here? > >> > > >> > #regzbot introduced: ad5c6ecef27e > >> > > >> > [1] https://www.ti.com/lit/ds/symlink/sn65dsi83.pdf > >> > > >> > >> The PLL should be locked. > >> > >> Also in the datasheet, in 'Table 7-2. Initialization Sequence', the status > >> is checked at the end of the initialization sequence and the sequence has to > >> be done again when the status register value is not 0x00. > >> > >> Even before monitoring (irq or polling method), you have an issue with your PLL > >> mentioned with the "sn65dsi83 2-002c: Unexpected link status 0x01" message. > >> > >> I don't understand even how your panel can be correctly driven with the bridge > >> PLL unlock. > > > > We'll try to figure out the reason and see what's the best path forward. > > > > Whatever was the reason it was working before, and it should stay > > working > > I agree with Hervé that using the chip with an unlocked PLL looks dangerous > and totally out of spec. So I encourage you to investigate what is going on > in the hardware looking for the root cause, checking whether the PLL is > really unlocked and how to get it working properly. > > The driver should be definitely be written focusing on the nominal case and > handle out-of-spec cases as an exception, not the other way around. > > I also agree your hardware should not stop working when upgrading to a new > kernel, so this investigation would ideally nail down tha root cause and > point to a solution in a very short time. > > Hervé has matured quite some experience on SN65DSI84 error management, > leading to his error recovery patch, and I also have a board with that chip > on my desk. So we may be helpful in discussion, as well as reviewing and > testing patches. I'd say we should do it the other way around. If that patch breaks systems that were working fine so far without a clear reason, we should revert the offending commit, and *then* work towards a solution to support error recovery that doesn't break that system. Maxime [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 273 bytes --] ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-18 16:56 ` Maxime Ripard @ 2025-11-19 7:51 ` Herve Codina 2025-11-19 8:40 ` Maxime Ripard 0 siblings, 1 reply; 22+ messages in thread From: Herve Codina @ 2025-11-19 7:51 UTC (permalink / raw) To: Maxime Ripard Cc: Luca Ceresoli, Francesco Dolcini, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, Tomi Valkeinen, João Paulo Gonçalves, linux-kernel, regressions, thomas.petazzoni Hi Maxime, On Tue, 18 Nov 2025 17:56:36 +0100 Maxime Ripard <mripard@kernel.org> wrote: > On Mon, Nov 17, 2025 at 04:27:28PM +0100, Luca Ceresoli wrote: > > On Thu Nov 13, 2025 at 10:19 AM CET, Francesco Dolcini wrote: > > > On Thu, Nov 13, 2025 at 08:49:50AM +0100, Herve Codina wrote: > > >> On Mon, 10 Nov 2025 16:03:51 -0300 > > >> João Paulo Gonçalves <jpaulo.silvagoncalves@gmail.com> wrote: > > >> > After commit ad5c6ecef27e ("drm: bridge: ti-sn65dsi83: Add error > > >> > recovery mechanism"), our DSI display stopped working correctly. The > > >> > display internally uses a TI SN65DSI83 to convert DSI-to-LVDS, and with > > >> > the change, it keeps blinking on and off because the bridge is being > > >> > reset by the error recovery mechanism. > > >> > > > >> > Even before the change, it was possible to see the message below from > > >> > the driver indicating that the bridge's internal PLL was not locked > > >> > (register 0xE5, bit 0 in [1]): > > >> > > > >> > [ 11.198616] sn65dsi83 2-002c: Unexpected link status 0x01 > > >> > > > >> > However, it was working. After the change, it stopped working. Masking > > >> > the PLL error makes it work again: > > >> > > > >> > diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c > > >> > index 033c44326552..89a0a2ab45b1 100644 > > >> > --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c > > >> > +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c > > >> > @@ -429,7 +429,7 @@ static void sn65dsi83_handle_errors(struct sn65dsi83 *ctx) > > >> > */ > > >> > > > >> > ret = regmap_read(ctx->regmap, REG_IRQ_STAT, &irq_stat); > > >> > - if (ret || irq_stat) { > > >> > + if (ret || (irq_stat & ~REG_IRQ_STAT_CHA_PLL_UNLOCK)) { > > >> > /* > > >> > * IRQ acknowledged is not always possible (the bridge can be in > > >> > * a state where it doesn't answer anymore). To prevent an > > >> > > > >> > Any suggestions on how to proceed here? > > >> > > > >> > #regzbot introduced: ad5c6ecef27e > > >> > > > >> > [1] https://www.ti.com/lit/ds/symlink/sn65dsi83.pdf > > >> > > > >> > > >> The PLL should be locked. > > >> > > >> Also in the datasheet, in 'Table 7-2. Initialization Sequence', the status > > >> is checked at the end of the initialization sequence and the sequence has to > > >> be done again when the status register value is not 0x00. > > >> > > >> Even before monitoring (irq or polling method), you have an issue with your PLL > > >> mentioned with the "sn65dsi83 2-002c: Unexpected link status 0x01" message. > > >> > > >> I don't understand even how your panel can be correctly driven with the bridge > > >> PLL unlock. > > > > > > We'll try to figure out the reason and see what's the best path forward. > > > > > > Whatever was the reason it was working before, and it should stay > > > working > > > > I agree with Hervé that using the chip with an unlocked PLL looks dangerous > > and totally out of spec. So I encourage you to investigate what is going on > > in the hardware looking for the root cause, checking whether the PLL is > > really unlocked and how to get it working properly. > > > > The driver should be definitely be written focusing on the nominal case and > > handle out-of-spec cases as an exception, not the other way around. > > > > I also agree your hardware should not stop working when upgrading to a new > > kernel, so this investigation would ideally nail down tha root cause and > > point to a solution in a very short time. > > > > Hervé has matured quite some experience on SN65DSI84 error management, > > leading to his error recovery patch, and I also have a board with that chip > > on my desk. So we may be helpful in discussion, as well as reviewing and > > testing patches. > > I'd say we should do it the other way around. If that patch breaks > systems that were working fine so far without a clear reason, we should > revert the offending commit, and *then* work towards a solution to > support error recovery that doesn't break that system. > I have the feeling that the broken system has an issue from the beginning. Why its PLL has been unlocked ? I would like to understand what happens but, of course, I don't have the hardware to investigate. Could the issue been on a component before the SN65DSI83 bridge? I mean the component in charge of generating the DSI clock can be a culprit. Best regards, Hervé ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-19 7:51 ` Herve Codina @ 2025-11-19 8:40 ` Maxime Ripard 2025-11-19 9:39 ` Tomi Valkeinen 2025-11-19 10:08 ` Luca Ceresoli 0 siblings, 2 replies; 22+ messages in thread From: Maxime Ripard @ 2025-11-19 8:40 UTC (permalink / raw) To: Herve Codina Cc: Luca Ceresoli, Francesco Dolcini, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, Tomi Valkeinen, João Paulo Gonçalves, linux-kernel, regressions, thomas.petazzoni [-- Attachment #1: Type: text/plain, Size: 5369 bytes --] On Wed, Nov 19, 2025 at 08:51:27AM +0100, Herve Codina wrote: > Hi Maxime, > > On Tue, 18 Nov 2025 17:56:36 +0100 > Maxime Ripard <mripard@kernel.org> wrote: > > > On Mon, Nov 17, 2025 at 04:27:28PM +0100, Luca Ceresoli wrote: > > > On Thu Nov 13, 2025 at 10:19 AM CET, Francesco Dolcini wrote: > > > > On Thu, Nov 13, 2025 at 08:49:50AM +0100, Herve Codina wrote: > > > >> On Mon, 10 Nov 2025 16:03:51 -0300 > > > >> João Paulo Gonçalves <jpaulo.silvagoncalves@gmail.com> wrote: > > > >> > After commit ad5c6ecef27e ("drm: bridge: ti-sn65dsi83: Add error > > > >> > recovery mechanism"), our DSI display stopped working correctly. The > > > >> > display internally uses a TI SN65DSI83 to convert DSI-to-LVDS, and with > > > >> > the change, it keeps blinking on and off because the bridge is being > > > >> > reset by the error recovery mechanism. > > > >> > > > > >> > Even before the change, it was possible to see the message below from > > > >> > the driver indicating that the bridge's internal PLL was not locked > > > >> > (register 0xE5, bit 0 in [1]): > > > >> > > > > >> > [ 11.198616] sn65dsi83 2-002c: Unexpected link status 0x01 > > > >> > > > > >> > However, it was working. After the change, it stopped working. Masking > > > >> > the PLL error makes it work again: > > > >> > > > > >> > diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c > > > >> > index 033c44326552..89a0a2ab45b1 100644 > > > >> > --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c > > > >> > +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c > > > >> > @@ -429,7 +429,7 @@ static void sn65dsi83_handle_errors(struct sn65dsi83 *ctx) > > > >> > */ > > > >> > > > > >> > ret = regmap_read(ctx->regmap, REG_IRQ_STAT, &irq_stat); > > > >> > - if (ret || irq_stat) { > > > >> > + if (ret || (irq_stat & ~REG_IRQ_STAT_CHA_PLL_UNLOCK)) { > > > >> > /* > > > >> > * IRQ acknowledged is not always possible (the bridge can be in > > > >> > * a state where it doesn't answer anymore). To prevent an > > > >> > > > > >> > Any suggestions on how to proceed here? > > > >> > > > > >> > #regzbot introduced: ad5c6ecef27e > > > >> > > > > >> > [1] https://www.ti.com/lit/ds/symlink/sn65dsi83.pdf > > > >> > > > > >> > > > >> The PLL should be locked. > > > >> > > > >> Also in the datasheet, in 'Table 7-2. Initialization Sequence', the status > > > >> is checked at the end of the initialization sequence and the sequence has to > > > >> be done again when the status register value is not 0x00. > > > >> > > > >> Even before monitoring (irq or polling method), you have an issue with your PLL > > > >> mentioned with the "sn65dsi83 2-002c: Unexpected link status 0x01" message. > > > >> > > > >> I don't understand even how your panel can be correctly driven with the bridge > > > >> PLL unlock. > > > > > > > > We'll try to figure out the reason and see what's the best path forward. > > > > > > > > Whatever was the reason it was working before, and it should stay > > > > working > > > > > > I agree with Hervé that using the chip with an unlocked PLL looks dangerous > > > and totally out of spec. So I encourage you to investigate what is going on > > > in the hardware looking for the root cause, checking whether the PLL is > > > really unlocked and how to get it working properly. > > > > > > The driver should be definitely be written focusing on the nominal case and > > > handle out-of-spec cases as an exception, not the other way around. > > > > > > I also agree your hardware should not stop working when upgrading to a new > > > kernel, so this investigation would ideally nail down tha root cause and > > > point to a solution in a very short time. > > > > > > Hervé has matured quite some experience on SN65DSI84 error management, > > > leading to his error recovery patch, and I also have a board with that chip > > > on my desk. So we may be helpful in discussion, as well as reviewing and > > > testing patches. > > > > I'd say we should do it the other way around. If that patch breaks > > systems that were working fine so far without a clear reason, we should > > revert the offending commit, and *then* work towards a solution to > > support error recovery that doesn't break that system. > > > > I have the feeling that the broken system has an issue from the beginning. > Why its PLL has been unlocked ? > > I would like to understand what happens but, of course, I don't have the > hardware to investigate. > > Could the issue been on a component before the SN65DSI83 bridge? > I mean the component in charge of generating the DSI clock can be a culprit. I understand what you're saying, but it's not the right way to think about it. Let's change perspective. Your work laptop just got a kernel upgrade, and its display doesn't work anymore. Would you be happy with the answer "it was broken all along, we might be able to help you fix it, maybe not, who knows when we'll have a fix"? It's frustrating, you might not even be able to debug it in the first place, and most importantly, broken or not, it used to work just fine. If it used to work for years, how can you possibly argue that it was broken all along? Maxime [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 273 bytes --] ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-19 8:40 ` Maxime Ripard @ 2025-11-19 9:39 ` Tomi Valkeinen 2025-11-19 10:08 ` Luca Ceresoli 1 sibling, 0 replies; 22+ messages in thread From: Tomi Valkeinen @ 2025-11-19 9:39 UTC (permalink / raw) To: Maxime Ripard, Herve Codina Cc: Luca Ceresoli, Francesco Dolcini, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, João Paulo Gonçalves, linux-kernel, regressions, thomas.petazzoni Hi, On 19/11/2025 10:40, Maxime Ripard wrote: > On Wed, Nov 19, 2025 at 08:51:27AM +0100, Herve Codina wrote: >> Hi Maxime, >> >> On Tue, 18 Nov 2025 17:56:36 +0100 >> Maxime Ripard <mripard@kernel.org> wrote: >> >>> On Mon, Nov 17, 2025 at 04:27:28PM +0100, Luca Ceresoli wrote: >>>> On Thu Nov 13, 2025 at 10:19 AM CET, Francesco Dolcini wrote: >>>>> On Thu, Nov 13, 2025 at 08:49:50AM +0100, Herve Codina wrote: >>>>>> On Mon, 10 Nov 2025 16:03:51 -0300 >>>>>> João Paulo Gonçalves <jpaulo.silvagoncalves@gmail.com> wrote: >>>>>>> After commit ad5c6ecef27e ("drm: bridge: ti-sn65dsi83: Add error >>>>>>> recovery mechanism"), our DSI display stopped working correctly. The >>>>>>> display internally uses a TI SN65DSI83 to convert DSI-to-LVDS, and with >>>>>>> the change, it keeps blinking on and off because the bridge is being >>>>>>> reset by the error recovery mechanism. >>>>>>> >>>>>>> Even before the change, it was possible to see the message below from >>>>>>> the driver indicating that the bridge's internal PLL was not locked >>>>>>> (register 0xE5, bit 0 in [1]): >>>>>>> >>>>>>> [ 11.198616] sn65dsi83 2-002c: Unexpected link status 0x01 >>>>>>> >>>>>>> However, it was working. After the change, it stopped working. Masking >>>>>>> the PLL error makes it work again: >>>>>>> >>>>>>> diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c >>>>>>> index 033c44326552..89a0a2ab45b1 100644 >>>>>>> --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c >>>>>>> +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c >>>>>>> @@ -429,7 +429,7 @@ static void sn65dsi83_handle_errors(struct sn65dsi83 *ctx) >>>>>>> */ >>>>>>> >>>>>>> ret = regmap_read(ctx->regmap, REG_IRQ_STAT, &irq_stat); >>>>>>> - if (ret || irq_stat) { >>>>>>> + if (ret || (irq_stat & ~REG_IRQ_STAT_CHA_PLL_UNLOCK)) { >>>>>>> /* >>>>>>> * IRQ acknowledged is not always possible (the bridge can be in >>>>>>> * a state where it doesn't answer anymore). To prevent an >>>>>>> >>>>>>> Any suggestions on how to proceed here? >>>>>>> >>>>>>> #regzbot introduced: ad5c6ecef27e >>>>>>> >>>>>>> [1] https://www.ti.com/lit/ds/symlink/sn65dsi83.pdf >>>>>>> >>>>>> >>>>>> The PLL should be locked. >>>>>> >>>>>> Also in the datasheet, in 'Table 7-2. Initialization Sequence', the status >>>>>> is checked at the end of the initialization sequence and the sequence has to >>>>>> be done again when the status register value is not 0x00. >>>>>> >>>>>> Even before monitoring (irq or polling method), you have an issue with your PLL >>>>>> mentioned with the "sn65dsi83 2-002c: Unexpected link status 0x01" message. >>>>>> >>>>>> I don't understand even how your panel can be correctly driven with the bridge >>>>>> PLL unlock. >>>>> >>>>> We'll try to figure out the reason and see what's the best path forward. >>>>> >>>>> Whatever was the reason it was working before, and it should stay >>>>> working >>>> >>>> I agree with Hervé that using the chip with an unlocked PLL looks dangerous >>>> and totally out of spec. So I encourage you to investigate what is going on >>>> in the hardware looking for the root cause, checking whether the PLL is >>>> really unlocked and how to get it working properly. >>>> >>>> The driver should be definitely be written focusing on the nominal case and >>>> handle out-of-spec cases as an exception, not the other way around. >>>> >>>> I also agree your hardware should not stop working when upgrading to a new >>>> kernel, so this investigation would ideally nail down tha root cause and >>>> point to a solution in a very short time. >>>> >>>> Hervé has matured quite some experience on SN65DSI84 error management, >>>> leading to his error recovery patch, and I also have a board with that chip >>>> on my desk. So we may be helpful in discussion, as well as reviewing and >>>> testing patches. >>> >>> I'd say we should do it the other way around. If that patch breaks >>> systems that were working fine so far without a clear reason, we should >>> revert the offending commit, and *then* work towards a solution to >>> support error recovery that doesn't break that system. >>> >> >> I have the feeling that the broken system has an issue from the beginning. >> Why its PLL has been unlocked ? >> >> I would like to understand what happens but, of course, I don't have the >> hardware to investigate. >> >> Could the issue been on a component before the SN65DSI83 bridge? >> I mean the component in charge of generating the DSI clock can be a culprit. > > I understand what you're saying, but it's not the right way to think about it. > > Let's change perspective. > > Your work laptop just got a kernel upgrade, and its display doesn't work > anymore. Would you be happy with the answer "it was broken all along, we > might be able to help you fix it, maybe not, who knows when we'll have a > fix"? > > It's frustrating, you might not even be able to debug it in the first > place, and most importantly, broken or not, it used to work just fine. > > If it used to work for years, how can you possibly argue that it was > broken all along? I agree. We could either revert the error handling, or change it to a print (dev_dbg? but will it flood-print then if the unlock irq is being raised all the time) instead of doing a reset. Tomi ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-19 8:40 ` Maxime Ripard 2025-11-19 9:39 ` Tomi Valkeinen @ 2025-11-19 10:08 ` Luca Ceresoli 2025-11-19 11:12 ` Francesco Dolcini 1 sibling, 1 reply; 22+ messages in thread From: Luca Ceresoli @ 2025-11-19 10:08 UTC (permalink / raw) To: Maxime Ripard, Herve Codina Cc: Francesco Dolcini, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, Tomi Valkeinen, João Paulo Gonçalves, linux-kernel, regressions, thomas.petazzoni Hi Maxime, João, Francesco, On Wed Nov 19, 2025 at 9:40 AM CET, Maxime Ripard wrote: > On Wed, Nov 19, 2025 at 08:51:27AM +0100, Herve Codina wrote: >> Hi Maxime, >> >> On Tue, 18 Nov 2025 17:56:36 +0100 >> Maxime Ripard <mripard@kernel.org> wrote: >> >> > On Mon, Nov 17, 2025 at 04:27:28PM +0100, Luca Ceresoli wrote: >> > > On Thu Nov 13, 2025 at 10:19 AM CET, Francesco Dolcini wrote: >> > > > On Thu, Nov 13, 2025 at 08:49:50AM +0100, Herve Codina wrote: >> > > >> On Mon, 10 Nov 2025 16:03:51 -0300 >> > > >> João Paulo Gonçalves <jpaulo.silvagoncalves@gmail.com> wrote: >> > > >> > After commit ad5c6ecef27e ("drm: bridge: ti-sn65dsi83: Add error >> > > >> > recovery mechanism"), our DSI display stopped working correctly. The >> > > >> > display internally uses a TI SN65DSI83 to convert DSI-to-LVDS, and with >> > > >> > the change, it keeps blinking on and off because the bridge is being >> > > >> > reset by the error recovery mechanism. >> > > >> > >> > > >> > Even before the change, it was possible to see the message below from >> > > >> > the driver indicating that the bridge's internal PLL was not locked >> > > >> > (register 0xE5, bit 0 in [1]): >> > > >> > >> > > >> > [ 11.198616] sn65dsi83 2-002c: Unexpected link status 0x01 >> > > >> > >> > > >> > However, it was working. After the change, it stopped working. Masking >> > > >> > the PLL error makes it work again: >> > > >> > >> > > >> > diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c >> > > >> > index 033c44326552..89a0a2ab45b1 100644 >> > > >> > --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c >> > > >> > +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c >> > > >> > @@ -429,7 +429,7 @@ static void sn65dsi83_handle_errors(struct sn65dsi83 *ctx) >> > > >> > */ >> > > >> > >> > > >> > ret = regmap_read(ctx->regmap, REG_IRQ_STAT, &irq_stat); >> > > >> > - if (ret || irq_stat) { >> > > >> > + if (ret || (irq_stat & ~REG_IRQ_STAT_CHA_PLL_UNLOCK)) { >> > > >> > /* >> > > >> > * IRQ acknowledged is not always possible (the bridge can be in >> > > >> > * a state where it doesn't answer anymore). To prevent an >> > > >> > >> > > >> > Any suggestions on how to proceed here? >> > > >> > >> > > >> > #regzbot introduced: ad5c6ecef27e >> > > >> > >> > > >> > [1] https://www.ti.com/lit/ds/symlink/sn65dsi83.pdf >> > > >> > >> > > >> >> > > >> The PLL should be locked. >> > > >> >> > > >> Also in the datasheet, in 'Table 7-2. Initialization Sequence', the status >> > > >> is checked at the end of the initialization sequence and the sequence has to >> > > >> be done again when the status register value is not 0x00. >> > > >> >> > > >> Even before monitoring (irq or polling method), you have an issue with your PLL >> > > >> mentioned with the "sn65dsi83 2-002c: Unexpected link status 0x01" message. >> > > >> >> > > >> I don't understand even how your panel can be correctly driven with the bridge >> > > >> PLL unlock. >> > > > >> > > > We'll try to figure out the reason and see what's the best path forward. >> > > > >> > > > Whatever was the reason it was working before, and it should stay >> > > > working >> > > >> > > I agree with Hervé that using the chip with an unlocked PLL looks dangerous >> > > and totally out of spec. So I encourage you to investigate what is going on >> > > in the hardware looking for the root cause, checking whether the PLL is >> > > really unlocked and how to get it working properly. >> > > >> > > The driver should be definitely be written focusing on the nominal case and >> > > handle out-of-spec cases as an exception, not the other way around. >> > > >> > > I also agree your hardware should not stop working when upgrading to a new >> > > kernel, so this investigation would ideally nail down tha root cause and >> > > point to a solution in a very short time. >> > > >> > > Hervé has matured quite some experience on SN65DSI84 error management, >> > > leading to his error recovery patch, and I also have a board with that chip >> > > on my desk. So we may be helpful in discussion, as well as reviewing and >> > > testing patches. >> > >> > I'd say we should do it the other way around. If that patch breaks >> > systems that were working fine so far without a clear reason, we should >> > revert the offending commit, and *then* work towards a solution to >> > support error recovery that doesn't break that system. >> > >> >> I have the feeling that the broken system has an issue from the beginning. >> Why its PLL has been unlocked ? >> >> I would like to understand what happens but, of course, I don't have the >> hardware to investigate. >> >> Could the issue been on a component before the SN65DSI83 bridge? >> I mean the component in charge of generating the DSI clock can be a culprit. > > I understand what you're saying, but it's not the right way to think about it. > > Let's change perspective. > > Your work laptop just got a kernel upgrade, and its display doesn't work > anymore. Would you be happy with the answer "it was broken all along, we > might be able to help you fix it, maybe not, who knows when we'll have a > fix"? > > It's frustrating, you might not even be able to debug it in the first > place, and most importantly, broken or not, it used to work just fine. > > If it used to work for years, how can you possibly argue that it was > broken all along? Fully understood, and we fully agree on the principle. My hope is that João/Francesco can investigate and find the root cause, and we can find a solution that works for both cases in a short time (say, this week). Without that we'd of course need to revert, but the next minute we'd still need to find a solution to make error management work in the nominal case, and I suspect we may end up with an ugly "works-without-pll" quirk and keep it forever. João, Francesco, on what hardware do you observe the problem? Which SoC? Which encoder, any previous bridges? Which clock rates? Which is the board dts? Luca -- Luca Ceresoli, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-19 10:08 ` Luca Ceresoli @ 2025-11-19 11:12 ` Francesco Dolcini 2025-11-19 12:09 ` Tomi Valkeinen 0 siblings, 1 reply; 22+ messages in thread From: Francesco Dolcini @ 2025-11-19 11:12 UTC (permalink / raw) To: Luca Ceresoli, Herve Codina Cc: Maxime Ripard, Francesco Dolcini, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, Tomi Valkeinen, João Paulo Gonçalves, linux-kernel, regressions, thomas.petazzoni Hello Luca, Herve On Wed, Nov 19, 2025 at 11:08:23AM +0100, Luca Ceresoli wrote: > > On Wed Nov 19, 2025 at 9:40 AM CET, Maxime Ripard wrote: > > On Wed, Nov 19, 2025 at 08:51:27AM +0100, Herve Codina wrote: > >> On Tue, 18 Nov 2025 17:56:36 +0100 > >> Maxime Ripard <mripard@kernel.org> wrote: > >> > On Mon, Nov 17, 2025 at 04:27:28PM +0100, Luca Ceresoli wrote: > >> > > On Thu Nov 13, 2025 at 10:19 AM CET, Francesco Dolcini wrote: > >> > > > On Thu, Nov 13, 2025 at 08:49:50AM +0100, Herve Codina wrote: > >> > > >> On Mon, 10 Nov 2025 16:03:51 -0300 > >> > > >> João Paulo Gonçalves <jpaulo.silvagoncalves@gmail.com> wrote: > >> > > >> > After commit ad5c6ecef27e ("drm: bridge: ti-sn65dsi83: Add error > >> > > >> > recovery mechanism"), our DSI display stopped working correctly. The > >> > > >> > display internally uses a TI SN65DSI83 to convert DSI-to-LVDS, and with > >> > > >> > the change, it keeps blinking on and off because the bridge is being > >> > > >> > reset by the error recovery mechanism. > >> > > >> > > >> > > >> > Even before the change, it was possible to see the message below from > >> > > >> > the driver indicating that the bridge's internal PLL was not locked > >> > > >> > (register 0xE5, bit 0 in [1]): > >> > > >> > > >> > > >> > [ 11.198616] sn65dsi83 2-002c: Unexpected link status 0x01 > >> > > >> > > >> > > >> > However, it was working. After the change, it stopped working. Masking > >> > > >> > the PLL error makes it work again: > >> > > >> > > >> > > >> > diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c > >> > > >> > index 033c44326552..89a0a2ab45b1 100644 > >> > > >> > --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c > >> > > >> > +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c > >> > > >> > @@ -429,7 +429,7 @@ static void sn65dsi83_handle_errors(struct sn65dsi83 *ctx) > >> > > >> > */ > >> > > >> > > >> > > >> > ret = regmap_read(ctx->regmap, REG_IRQ_STAT, &irq_stat); > >> > > >> > - if (ret || irq_stat) { > >> > > >> > + if (ret || (irq_stat & ~REG_IRQ_STAT_CHA_PLL_UNLOCK)) { > >> > > >> > /* > >> > > >> > * IRQ acknowledged is not always possible (the bridge can be in > >> > > >> > * a state where it doesn't answer anymore). To prevent an > >> > > >> > > >> > > >> > Any suggestions on how to proceed here? > >> > > >> > > >> > > >> > #regzbot introduced: ad5c6ecef27e > >> > > >> > > >> > > >> > [1] https://www.ti.com/lit/ds/symlink/sn65dsi83.pdf > >> > > >> > > >> > > >> > >> > > >> The PLL should be locked. > >> > > >> > >> > > >> Also in the datasheet, in 'Table 7-2. Initialization Sequence', the status > >> > > >> is checked at the end of the initialization sequence and the sequence has to > >> > > >> be done again when the status register value is not 0x00. > >> > > >> > >> > > >> Even before monitoring (irq or polling method), you have an issue with your PLL > >> > > >> mentioned with the "sn65dsi83 2-002c: Unexpected link status 0x01" message. > >> > > >> > >> > > >> I don't understand even how your panel can be correctly driven with the bridge > >> > > >> PLL unlock. > >> > > > > >> > > > We'll try to figure out the reason and see what's the best path forward. > >> > > > > >> > > > Whatever was the reason it was working before, and it should stay > >> > > > working > >> > > > >> > > I agree with Hervé that using the chip with an unlocked PLL looks dangerous > >> > > and totally out of spec. So I encourage you to investigate what is going on > >> > > in the hardware looking for the root cause, checking whether the PLL is > >> > > really unlocked and how to get it working properly. > >> > > > >> > > The driver should be definitely be written focusing on the nominal case and > >> > > handle out-of-spec cases as an exception, not the other way around. > >> > > > >> > > I also agree your hardware should not stop working when upgrading to a new > >> > > kernel, so this investigation would ideally nail down tha root cause and > >> > > point to a solution in a very short time. > >> > > > >> > > Hervé has matured quite some experience on SN65DSI84 error management, > >> > > leading to his error recovery patch, and I also have a board with that chip > >> > > on my desk. So we may be helpful in discussion, as well as reviewing and > >> > > testing patches. > >> > > >> > I'd say we should do it the other way around. If that patch breaks > >> > systems that were working fine so far without a clear reason, we should > >> > revert the offending commit, and *then* work towards a solution to > >> > support error recovery that doesn't break that system. > >> > > >> > >> I have the feeling that the broken system has an issue from the beginning. > >> Why its PLL has been unlocked ? > >> > >> I would like to understand what happens but, of course, I don't have the > >> hardware to investigate. > >> > >> Could the issue been on a component before the SN65DSI83 bridge? > >> I mean the component in charge of generating the DSI clock can be a culprit. > > > > I understand what you're saying, but it's not the right way to think about it. > > > > Let's change perspective. > > > > Your work laptop just got a kernel upgrade, and its display doesn't work > > anymore. Would you be happy with the answer "it was broken all along, we > > might be able to help you fix it, maybe not, who knows when we'll have a > > fix"? > > > > It's frustrating, you might not even be able to debug it in the first > > place, and most importantly, broken or not, it used to work just fine. > > > > If it used to work for years, how can you possibly argue that it was > > broken all along? > > Fully understood, and we fully agree on the principle. > > My hope is that João/Francesco can investigate and find the root cause, and > we can find a solution that works for both cases in a short time (say, this > week). This week it will not happen, unfortunately :-(. I have no time to look into it and João has no longer access to the hardware. > Without that we'd of course need to revert, but the next minute we'd still > need to find a solution to make error management work in the nominal case, > and I suspect we may end up with an ugly "works-without-pll" quirk and keep > it forever. So, it seems that the actual DSI clock is the root cause, and from some check yesterday it's not possible to fix it (limitation on the clock generation). In practice the display is working fine with the PLL not locked (quite some people is using it without any issue). > João, Francesco, on what hardware do you observe the problem? Which SoC? > Which encoder, any previous bridges? Verdin AM62, TI AM62 SOC, arch/arm64/boot/dts/ti/k3-am62-verdin.dtsi There is a DPI to DSI bridge in the module, tc358778, it has a 25MHz reference clock. TI AM62 DPI -> Toshiba TC358768 DSI -> TI SN65DSI83 -> Display From a preliminary investigation this is a HW limitation, we are not able to generate a "good enough" DSI clock, see tc358768_calc_pll() for the actual code implementation of it, I believe that the datasheet is not available without NDA. Maybe the ugly hack "works-without-pll" is the way to work? It will require a DT change, but this seems doable. Please note that this is the outcome of a short investigation done yesterday afternoon, so maybe I am overlooking something, unfortunately I do not have the bandwidth to work on it more this week. > Which clock rates? 71100000 Francesco ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-19 11:12 ` Francesco Dolcini @ 2025-11-19 12:09 ` Tomi Valkeinen 2025-11-19 12:24 ` Francesco Dolcini 0 siblings, 1 reply; 22+ messages in thread From: Tomi Valkeinen @ 2025-11-19 12:09 UTC (permalink / raw) To: Francesco Dolcini, Luca Ceresoli, Herve Codina Cc: Maxime Ripard, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, João Paulo Gonçalves, linux-kernel, regressions, thomas.petazzoni Hi, On 19/11/2025 13:12, Francesco Dolcini wrote: > Hello Luca, Herve > > On Wed, Nov 19, 2025 at 11:08:23AM +0100, Luca Ceresoli wrote: >> >> On Wed Nov 19, 2025 at 9:40 AM CET, Maxime Ripard wrote: >>> On Wed, Nov 19, 2025 at 08:51:27AM +0100, Herve Codina wrote: >>>> On Tue, 18 Nov 2025 17:56:36 +0100 >>>> Maxime Ripard <mripard@kernel.org> wrote: >>>>> On Mon, Nov 17, 2025 at 04:27:28PM +0100, Luca Ceresoli wrote: >>>>>> On Thu Nov 13, 2025 at 10:19 AM CET, Francesco Dolcini wrote: >>>>>>> On Thu, Nov 13, 2025 at 08:49:50AM +0100, Herve Codina wrote: >>>>>>>> On Mon, 10 Nov 2025 16:03:51 -0300 >>>>>>>> João Paulo Gonçalves <jpaulo.silvagoncalves@gmail.com> wrote: >>>>>>>>> After commit ad5c6ecef27e ("drm: bridge: ti-sn65dsi83: Add error >>>>>>>>> recovery mechanism"), our DSI display stopped working correctly. The >>>>>>>>> display internally uses a TI SN65DSI83 to convert DSI-to-LVDS, and with >>>>>>>>> the change, it keeps blinking on and off because the bridge is being >>>>>>>>> reset by the error recovery mechanism. >>>>>>>>> >>>>>>>>> Even before the change, it was possible to see the message below from >>>>>>>>> the driver indicating that the bridge's internal PLL was not locked >>>>>>>>> (register 0xE5, bit 0 in [1]): >>>>>>>>> >>>>>>>>> [ 11.198616] sn65dsi83 2-002c: Unexpected link status 0x01 >>>>>>>>> >>>>>>>>> However, it was working. After the change, it stopped working. Masking >>>>>>>>> the PLL error makes it work again: >>>>>>>>> >>>>>>>>> diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c >>>>>>>>> index 033c44326552..89a0a2ab45b1 100644 >>>>>>>>> --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c >>>>>>>>> +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c >>>>>>>>> @@ -429,7 +429,7 @@ static void sn65dsi83_handle_errors(struct sn65dsi83 *ctx) >>>>>>>>> */ >>>>>>>>> >>>>>>>>> ret = regmap_read(ctx->regmap, REG_IRQ_STAT, &irq_stat); >>>>>>>>> - if (ret || irq_stat) { >>>>>>>>> + if (ret || (irq_stat & ~REG_IRQ_STAT_CHA_PLL_UNLOCK)) { >>>>>>>>> /* >>>>>>>>> * IRQ acknowledged is not always possible (the bridge can be in >>>>>>>>> * a state where it doesn't answer anymore). To prevent an >>>>>>>>> >>>>>>>>> Any suggestions on how to proceed here? >>>>>>>>> >>>>>>>>> #regzbot introduced: ad5c6ecef27e >>>>>>>>> >>>>>>>>> [1] https://www.ti.com/lit/ds/symlink/sn65dsi83.pdf >>>>>>>>> >>>>>>>> >>>>>>>> The PLL should be locked. >>>>>>>> >>>>>>>> Also in the datasheet, in 'Table 7-2. Initialization Sequence', the status >>>>>>>> is checked at the end of the initialization sequence and the sequence has to >>>>>>>> be done again when the status register value is not 0x00. >>>>>>>> >>>>>>>> Even before monitoring (irq or polling method), you have an issue with your PLL >>>>>>>> mentioned with the "sn65dsi83 2-002c: Unexpected link status 0x01" message. >>>>>>>> >>>>>>>> I don't understand even how your panel can be correctly driven with the bridge >>>>>>>> PLL unlock. >>>>>>> >>>>>>> We'll try to figure out the reason and see what's the best path forward. >>>>>>> >>>>>>> Whatever was the reason it was working before, and it should stay >>>>>>> working >>>>>> >>>>>> I agree with Hervé that using the chip with an unlocked PLL looks dangerous >>>>>> and totally out of spec. So I encourage you to investigate what is going on >>>>>> in the hardware looking for the root cause, checking whether the PLL is >>>>>> really unlocked and how to get it working properly. >>>>>> >>>>>> The driver should be definitely be written focusing on the nominal case and >>>>>> handle out-of-spec cases as an exception, not the other way around. >>>>>> >>>>>> I also agree your hardware should not stop working when upgrading to a new >>>>>> kernel, so this investigation would ideally nail down tha root cause and >>>>>> point to a solution in a very short time. >>>>>> >>>>>> Hervé has matured quite some experience on SN65DSI84 error management, >>>>>> leading to his error recovery patch, and I also have a board with that chip >>>>>> on my desk. So we may be helpful in discussion, as well as reviewing and >>>>>> testing patches. >>>>> >>>>> I'd say we should do it the other way around. If that patch breaks >>>>> systems that were working fine so far without a clear reason, we should >>>>> revert the offending commit, and *then* work towards a solution to >>>>> support error recovery that doesn't break that system. >>>>> >>>> >>>> I have the feeling that the broken system has an issue from the beginning. >>>> Why its PLL has been unlocked ? >>>> >>>> I would like to understand what happens but, of course, I don't have the >>>> hardware to investigate. >>>> >>>> Could the issue been on a component before the SN65DSI83 bridge? >>>> I mean the component in charge of generating the DSI clock can be a culprit. >>> >>> I understand what you're saying, but it's not the right way to think about it. >>> >>> Let's change perspective. >>> >>> Your work laptop just got a kernel upgrade, and its display doesn't work >>> anymore. Would you be happy with the answer "it was broken all along, we >>> might be able to help you fix it, maybe not, who knows when we'll have a >>> fix"? >>> >>> It's frustrating, you might not even be able to debug it in the first >>> place, and most importantly, broken or not, it used to work just fine. >>> >>> If it used to work for years, how can you possibly argue that it was >>> broken all along? >> >> Fully understood, and we fully agree on the principle. >> >> My hope is that João/Francesco can investigate and find the root cause, and >> we can find a solution that works for both cases in a short time (say, this >> week). > > This week it will not happen, unfortunately :-(. I have no time to look > into it and João has no longer access to the hardware. > >> Without that we'd of course need to revert, but the next minute we'd still >> need to find a solution to make error management work in the nominal case, >> and I suspect we may end up with an ugly "works-without-pll" quirk and keep >> it forever. > > So, it seems that the actual DSI clock is the root cause, and from some > check yesterday it's not possible to fix it (limitation on the clock > generation). In practice the display is working fine with the PLL not > locked (quite some people is using it without any issue). I might be mistaken, but I don't think the PLL will work if unlocked... But maybe the case is that it unlocks and lock again right afterwards. >> João, Francesco, on what hardware do you observe the problem? Which SoC? >> Which encoder, any previous bridges? > > Verdin AM62, TI AM62 SOC, arch/arm64/boot/dts/ti/k3-am62-verdin.dtsi > > There is a DPI to DSI bridge in the module, tc358778, it has a 25MHz > reference clock. > > TI AM62 DPI -> Toshiba TC358768 DSI -> TI SN65DSI83 -> Display > > From a preliminary investigation this is a HW limitation, we are not > able to generate a "good enough" DSI clock, see tc358768_calc_pll() for I haven't studied the docs or done any testing, but I would think that it doesn't matter for the PLL even if the incoming DSI clock is a bit off, as long as it's continuous and stable. My first thought was that the DSI is using non-continuous clock, but at least the driver has code to drop the MIPI_DSI_CLOCK_NON_CONTINUOUS flag. > the actual code implementation of it, I believe that the datasheet is > not available without NDA. > > Maybe the ugly hack "works-without-pll" is the way to work? It will > require a DT change, but this seems doable. Revert is easier than adding new hacky DT properties... At least until the problem is understood. > Please note that this is the outcome of a short investigation done > yesterday afternoon, so maybe I am overlooking something, unfortunately > I do not have the bandwidth to work on it more this week. > >> Which clock rates? > 71100000 It would be a good test to try out with a few different clocks. Tomi ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-19 12:09 ` Tomi Valkeinen @ 2025-11-19 12:24 ` Francesco Dolcini 2025-11-19 17:27 ` Luca Ceresoli 0 siblings, 1 reply; 22+ messages in thread From: Francesco Dolcini @ 2025-11-19 12:24 UTC (permalink / raw) To: Tomi Valkeinen Cc: Francesco Dolcini, Luca Ceresoli, Herve Codina, Maxime Ripard, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, João Paulo Gonçalves, linux-kernel, regressions, thomas.petazzoni On Wed, Nov 19, 2025 at 02:09:04PM +0200, Tomi Valkeinen wrote: > On 19/11/2025 13:12, Francesco Dolcini wrote: > > On Wed, Nov 19, 2025 at 11:08:23AM +0100, Luca Ceresoli wrote: > >> > >> On Wed Nov 19, 2025 at 9:40 AM CET, Maxime Ripard wrote: > >>> On Wed, Nov 19, 2025 at 08:51:27AM +0100, Herve Codina wrote: > >>>> On Tue, 18 Nov 2025 17:56:36 +0100 > >>>> Maxime Ripard <mripard@kernel.org> wrote: > >>>>> On Mon, Nov 17, 2025 at 04:27:28PM +0100, Luca Ceresoli wrote: > >>>>>> On Thu Nov 13, 2025 at 10:19 AM CET, Francesco Dolcini wrote: > >>>>>>> On Thu, Nov 13, 2025 at 08:49:50AM +0100, Herve Codina wrote: > >>>>>>>> On Mon, 10 Nov 2025 16:03:51 -0300 > >>>>>>>> João Paulo Gonçalves <jpaulo.silvagoncalves@gmail.com> wrote: > >>>>>>>>> After commit ad5c6ecef27e ("drm: bridge: ti-sn65dsi83: Add error > >>>>>>>>> recovery mechanism"), our DSI display stopped working correctly. The > >>>>>>>>> display internally uses a TI SN65DSI83 to convert DSI-to-LVDS, and with > >>>>>>>>> the change, it keeps blinking on and off because the bridge is being > >>>>>>>>> reset by the error recovery mechanism. > >>>>>>>>> > >>>>>>>>> Even before the change, it was possible to see the message below from > >>>>>>>>> the driver indicating that the bridge's internal PLL was not locked > >>>>>>>>> (register 0xE5, bit 0 in [1]): > >>>>>>>>> > >>>>>>>>> [ 11.198616] sn65dsi83 2-002c: Unexpected link status 0x01 > >>>>>>>>> > >>>>>>>>> However, it was working. After the change, it stopped working. Masking > >>>>>>>>> the PLL error makes it work again: > >>>>>>>>> > >>>>>>>>> diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c > >>>>>>>>> index 033c44326552..89a0a2ab45b1 100644 > >>>>>>>>> --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c > >>>>>>>>> +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c > >>>>>>>>> @@ -429,7 +429,7 @@ static void sn65dsi83_handle_errors(struct sn65dsi83 *ctx) > >>>>>>>>> */ > >>>>>>>>> > >>>>>>>>> ret = regmap_read(ctx->regmap, REG_IRQ_STAT, &irq_stat); > >>>>>>>>> - if (ret || irq_stat) { > >>>>>>>>> + if (ret || (irq_stat & ~REG_IRQ_STAT_CHA_PLL_UNLOCK)) { > >>>>>>>>> /* > >>>>>>>>> * IRQ acknowledged is not always possible (the bridge can be in > >>>>>>>>> * a state where it doesn't answer anymore). To prevent an > >>>>>>>>> > >>>>>>>>> Any suggestions on how to proceed here? > >>>>>>>>> > >>>>>>>>> #regzbot introduced: ad5c6ecef27e > >>>>>>>>> > >>>>>>>>> [1] https://www.ti.com/lit/ds/symlink/sn65dsi83.pdf > >>>>>>>>> > >>>>>>>> > >>>>>>>> The PLL should be locked. > >>>>>>>> > >>>>>>>> Also in the datasheet, in 'Table 7-2. Initialization Sequence', the status > >>>>>>>> is checked at the end of the initialization sequence and the sequence has to > >>>>>>>> be done again when the status register value is not 0x00. > >>>>>>>> > >>>>>>>> Even before monitoring (irq or polling method), you have an issue with your PLL > >>>>>>>> mentioned with the "sn65dsi83 2-002c: Unexpected link status 0x01" message. > >>>>>>>> > >>>>>>>> I don't understand even how your panel can be correctly driven with the bridge > >>>>>>>> PLL unlock. > >>>>>>> > >>>>>>> We'll try to figure out the reason and see what's the best path forward. > >>>>>>> > >>>>>>> Whatever was the reason it was working before, and it should stay > >>>>>>> working > >>>>>> > >>>>>> I agree with Hervé that using the chip with an unlocked PLL looks dangerous > >>>>>> and totally out of spec. So I encourage you to investigate what is going on > >>>>>> in the hardware looking for the root cause, checking whether the PLL is > >>>>>> really unlocked and how to get it working properly. > >>>>>> > >>>>>> The driver should be definitely be written focusing on the nominal case and > >>>>>> handle out-of-spec cases as an exception, not the other way around. > >>>>>> > >>>>>> I also agree your hardware should not stop working when upgrading to a new > >>>>>> kernel, so this investigation would ideally nail down tha root cause and > >>>>>> point to a solution in a very short time. > >>>>>> > >>>>>> Hervé has matured quite some experience on SN65DSI84 error management, > >>>>>> leading to his error recovery patch, and I also have a board with that chip > >>>>>> on my desk. So we may be helpful in discussion, as well as reviewing and > >>>>>> testing patches. > >>>>> > >>>>> I'd say we should do it the other way around. If that patch breaks > >>>>> systems that were working fine so far without a clear reason, we should > >>>>> revert the offending commit, and *then* work towards a solution to > >>>>> support error recovery that doesn't break that system. > >>>>> > >>>> > >>>> I have the feeling that the broken system has an issue from the beginning. > >>>> Why its PLL has been unlocked ? > >>>> > >>>> I would like to understand what happens but, of course, I don't have the > >>>> hardware to investigate. > >>>> > >>>> Could the issue been on a component before the SN65DSI83 bridge? > >>>> I mean the component in charge of generating the DSI clock can be a culprit. > >>> > >>> I understand what you're saying, but it's not the right way to think about it. > >>> > >>> Let's change perspective. > >>> > >>> Your work laptop just got a kernel upgrade, and its display doesn't work > >>> anymore. Would you be happy with the answer "it was broken all along, we > >>> might be able to help you fix it, maybe not, who knows when we'll have a > >>> fix"? > >>> > >>> It's frustrating, you might not even be able to debug it in the first > >>> place, and most importantly, broken or not, it used to work just fine. > >>> > >>> If it used to work for years, how can you possibly argue that it was > >>> broken all along? > >> > >> Fully understood, and we fully agree on the principle. > >> > >> My hope is that João/Francesco can investigate and find the root cause, and > >> we can find a solution that works for both cases in a short time (say, this > >> week). > > > > This week it will not happen, unfortunately :-(. I have no time to look > > into it and João has no longer access to the hardware. > > > >> Without that we'd of course need to revert, but the next minute we'd still > >> need to find a solution to make error management work in the nominal case, > >> and I suspect we may end up with an ugly "works-without-pll" quirk and keep > >> it forever. > > > > So, it seems that the actual DSI clock is the root cause, and from some > > check yesterday it's not possible to fix it (limitation on the clock > > generation). In practice the display is working fine with the PLL not > > locked (quite some people is using it without any issue). > > I might be mistaken, but I don't think the PLL will work if unlocked... > But maybe the case is that it unlocks and lock again right afterwards. > >> João, Francesco, on what hardware do you observe the problem? Which SoC? > >> Which encoder, any previous bridges? > > > > Verdin AM62, TI AM62 SOC, arch/arm64/boot/dts/ti/k3-am62-verdin.dtsi > > > > There is a DPI to DSI bridge in the module, tc358778, it has a 25MHz > > reference clock. > > > > TI AM62 DPI -> Toshiba TC358768 DSI -> TI SN65DSI83 -> Display > > > > From a preliminary investigation this is a HW limitation, we are not > > able to generate a "good enough" DSI clock, see tc358768_calc_pll() for > > I haven't studied the docs or done any testing, but I would think that > it doesn't matter for the PLL even if the incoming DSI clock is a bit > off, as long as it's continuous and stable. > > My first thought was that the DSI is using non-continuous clock, but at > least the driver has code to drop the MIPI_DSI_CLOCK_NON_CONTINUOUS flag. > > > the actual code implementation of it, I believe that the datasheet is > > not available without NDA. > > > > Maybe the ugly hack "works-without-pll" is the way to work? It will > > require a DT change, but this seems doable. > > Revert is easier than adding new hacky DT properties... At least until > the problem is understood. > > > Please note that this is the outcome of a short investigation done > > yesterday afternoon, so maybe I am overlooking something, unfortunately > > I do not have the bandwidth to work on it more this week. > > > >> Which clock rates? > > 71100000 > It would be a good test to try out with a few different clocks. 50 MHz works, for example. It seems that the issue exists when the actual display clock is different from the dsi clock. And this can happen for the reason I explained before (the DSI clock is computed starting from this 25MHz reference clock). Francesco ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-19 12:24 ` Francesco Dolcini @ 2025-11-19 17:27 ` Luca Ceresoli 2025-11-19 18:40 ` Herve Codina 0 siblings, 1 reply; 22+ messages in thread From: Luca Ceresoli @ 2025-11-19 17:27 UTC (permalink / raw) To: Francesco Dolcini, Tomi Valkeinen Cc: Herve Codina, Maxime Ripard, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, João Paulo Gonçalves, linux-kernel, regressions, thomas.petazzoni Hello, On Wed Nov 19, 2025 at 1:24 PM CET, Francesco Dolcini wrote: ... >> I might be mistaken, but I don't think the PLL will work if unlocked... >> But maybe the case is that it unlocks and lock again right afterwards. >> >> João, Francesco, on what hardware do you observe the problem? Which SoC? >> >> Which encoder, any previous bridges? >> > >> > Verdin AM62, TI AM62 SOC, arch/arm64/boot/dts/ti/k3-am62-verdin.dtsi >> > >> > There is a DPI to DSI bridge in the module, tc358778, it has a 25MHz >> > reference clock. >> > >> > TI AM62 DPI -> Toshiba TC358768 DSI -> TI SN65DSI83 -> Display >> > >> > From a preliminary investigation this is a HW limitation, we are not >> > able to generate a "good enough" DSI clock, see tc358768_calc_pll() for Thanks Francesco for the feedback! I'm not sure I completely understand the issue described, but if the TI bridge requires a clock that cannot be provided by the hardware, then this actually looks like "a HW limitation" as you wrote, due to a HW integration limitation/bug/issue/whatever. In case this is confirmed, I think quirks are an appropriate tool to handle HW integration issues. >> I haven't studied the docs or done any testing, but I would think that >> it doesn't matter for the PLL even if the incoming DSI clock is a bit >> off, as long as it's continuous and stable. >> >> My first thought was that the DSI is using non-continuous clock, but at >> least the driver has code to drop the MIPI_DSI_CLOCK_NON_CONTINUOUS flag. >> >> > the actual code implementation of it, I believe that the datasheet is >> > not available without NDA. >> > >> > Maybe the ugly hack "works-without-pll" is the way to work? It will >> > require a DT change, but this seems doable. >> >> Revert is easier than adding new hacky DT properties... At least until >> the problem is understood. >> >> > Please note that this is the outcome of a short investigation done >> > yesterday afternoon, so maybe I am overlooking something, unfortunately >> > I do not have the bandwidth to work on it more this week. >> > >> >> Which clock rates? >> > 71100000 >> It would be a good test to try out with a few different clocks. > > 50 MHz works, for example. > > It seems that the issue exists when the actual display clock is different > from the dsi clock. And this can happen for the reason I explained > before (the DSI clock is computed starting from this 25MHz reference > clock). -- Luca Ceresoli, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-19 17:27 ` Luca Ceresoli @ 2025-11-19 18:40 ` Herve Codina 2025-11-20 9:50 ` Philippe Schenker 2025-11-21 9:57 ` Maxime Ripard 0 siblings, 2 replies; 22+ messages in thread From: Herve Codina @ 2025-11-19 18:40 UTC (permalink / raw) To: Luca Ceresoli, Francesco Dolcini Cc: Tomi Valkeinen, Maxime Ripard, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, João Paulo Gonçalves, linux-kernel, regressions, thomas.petazzoni Hi Luca, Francesco, others On Wed, 19 Nov 2025 18:27:38 +0100 "Luca Ceresoli" <luca.ceresoli@bootlin.com> wrote: > Hello, > > On Wed Nov 19, 2025 at 1:24 PM CET, Francesco Dolcini wrote: > ... > >> I might be mistaken, but I don't think the PLL will work if unlocked... > >> But maybe the case is that it unlocks and lock again right afterwards. > >> >> João, Francesco, on what hardware do you observe the problem? Which SoC? > >> >> Which encoder, any previous bridges? > >> > > >> > Verdin AM62, TI AM62 SOC, arch/arm64/boot/dts/ti/k3-am62-verdin.dtsi > >> > > >> > There is a DPI to DSI bridge in the module, tc358778, it has a 25MHz > >> > reference clock. > >> > > >> > TI AM62 DPI -> Toshiba TC358768 DSI -> TI SN65DSI83 -> Display > >> > > >> > From a preliminary investigation this is a HW limitation, we are not > >> > able to generate a "good enough" DSI clock, see tc358768_calc_pll() for > > Thanks Francesco for the feedback! > > I'm not sure I completely understand the issue described, but if the TI > bridge requires a clock that cannot be provided by the hardware, then this > actually looks like "a HW limitation" as you wrote, due to a HW integration > limitation/bug/issue/whatever. In case this is confirmed, I think quirks > are an appropriate tool to handle HW integration issues. > > >> I haven't studied the docs or done any testing, but I would think that > >> it doesn't matter for the PLL even if the incoming DSI clock is a bit > >> off, as long as it's continuous and stable. > >> > >> My first thought was that the DSI is using non-continuous clock, but at > >> least the driver has code to drop the MIPI_DSI_CLOCK_NON_CONTINUOUS flag. > >> > >> > the actual code implementation of it, I believe that the datasheet is > >> > not available without NDA. > >> > > >> > Maybe the ugly hack "works-without-pll" is the way to work? It will > >> > require a DT change, but this seems doable. > >> > >> Revert is easier than adding new hacky DT properties... At least until > >> the problem is understood. > >> > >> > Please note that this is the outcome of a short investigation done > >> > yesterday afternoon, so maybe I am overlooking something, unfortunately > >> > I do not have the bandwidth to work on it more this week. > >> > > >> >> Which clock rates? > >> > 71100000 > >> It would be a good test to try out with a few different clocks. > > > > 50 MHz works, for example. > > > > It seems that the issue exists when the actual display clock is different > > from the dsi clock. And this can happen for the reason I explained > > before (the DSI clock is computed starting from this 25MHz reference > > clock). > If there is no way to set a correct clock, I agree with Luca a quirk should be the best solution. For instance, in the dts: ti,pll_may_unlock_quirk; In the driver, mask the PLL unlock status bit from monitoring (polling and irq) if this boolean property is true: - Mask IRQ PLL Unlock bit in REG_IRQ_EN when IRQ are enabled - Mask IRQ PLL Unlock bit in REG_IRQ_STAT in sn65dsi83_handle_errors() to avoid a recover process on PLL unlock. Best regards, Hervé ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-19 18:40 ` Herve Codina @ 2025-11-20 9:50 ` Philippe Schenker 2025-11-21 9:58 ` Maxime Ripard 2025-11-21 9:57 ` Maxime Ripard 1 sibling, 1 reply; 22+ messages in thread From: Philippe Schenker @ 2025-11-20 9:50 UTC (permalink / raw) To: Herve Codina, Luca Ceresoli, Francesco Dolcini Cc: Tomi Valkeinen, Maxime Ripard, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, João Paulo Gonçalves, linux-kernel@vger.kernel.org, regressions@lists.linux.dev, thomas.petazzoni@bootlin.com [-- Attachment #1: Type: text/plain, Size: 4405 bytes --] On Wed, 2025-11-19 at 19:40 +0100, Herve Codina wrote: > Hi Luca, Francesco, others > > On Wed, 19 Nov 2025 18:27:38 +0100 > "Luca Ceresoli" <luca.ceresoli@bootlin.com> wrote: > > > Hello, > > > > On Wed Nov 19, 2025 at 1:24 PM CET, Francesco Dolcini wrote: > > ... > > > > I might be mistaken, but I don't think the PLL will work if > > > > unlocked... > > > > But maybe the case is that it unlocks and lock again right > > > > afterwards. > > > > > > João, Francesco, on what hardware do you observe the > > > > > > problem? Which SoC? > > > > > > Which encoder, any previous bridges? > > > > > > > > > > Verdin AM62, TI AM62 SOC, arch/arm64/boot/dts/ti/k3-am62- > > > > > verdin.dtsi > > > > > > > > > > There is a DPI to DSI bridge in the module, tc358778, it has > > > > > a 25MHz > > > > > reference clock. > > > > > > > > > > TI AM62 DPI -> Toshiba TC358768 DSI -> TI SN65DSI83 -> > > > > > Display > > > > > > > > > > From a preliminary investigation this is a HW limitation, we > > > > > are not > > > > > able to generate a "good enough" DSI clock, see > > > > > tc358768_calc_pll() for > > > > Thanks Francesco for the feedback! > > > > I'm not sure I completely understand the issue described, but if > > the TI > > bridge requires a clock that cannot be provided by the hardware, > > then this > > actually looks like "a HW limitation" as you wrote, due to a HW > > integration > > limitation/bug/issue/whatever. In case this is confirmed, I think > > quirks > > are an appropriate tool to handle HW integration issues. > > > > > > I haven't studied the docs or done any testing, but I would > > > > think that > > > > it doesn't matter for the PLL even if the incoming DSI clock is > > > > a bit > > > > off, as long as it's continuous and stable. > > > > > > > > My first thought was that the DSI is using non-continuous > > > > clock, but at > > > > least the driver has code to drop the > > > > MIPI_DSI_CLOCK_NON_CONTINUOUS flag. > > > > > > > > > the actual code implementation of it, I believe that the > > > > > datasheet is > > > > > not available without NDA. > > > > > > > > > > Maybe the ugly hack "works-without-pll" is the way to work? > > > > > It will > > > > > require a DT change, but this seems doable. > > > > > > > > Revert is easier than adding new hacky DT properties... At > > > > least until > > > > the problem is understood. > > > > > > > > > Please note that this is the outcome of a short investigation > > > > > done > > > > > yesterday afternoon, so maybe I am overlooking something, > > > > > unfortunately > > > > > I do not have the bandwidth to work on it more this week. > > > > > > > > > > > Which clock rates? > > > > > 71100000 > > > > It would be a good test to try out with a few different > > > > clocks. > > > > > > 50 MHz works, for example. > > > > > > It seems that the issue exists when the actual display clock is > > > different > > > from the dsi clock. And this can happen for the reason I > > > explained > > > before (the DSI clock is computed starting from this 25MHz > > > reference > > > clock). > > > > If there is no way to set a correct clock, I agree with Luca a quirk > should > be the best solution. > > For instance, in the dts: > ti,pll_may_unlock_quirk; I followed the discussion only loosely. But I once worked on bringing up the SN65DSI83 and from what I can remember is that there was a frequency range of the input clock where the PLL of SN65DSI83 just did not lock at all. I couldn't explain what was happening since the clock I fed was within the limits of the documentation I had. What I ultimately did was to just choose a clock that works. Given that experience I'm not sure about adding quirks on TI side. But anyway I'm not very familiar with the topic and it's a long time since I worked on it. Just wanted to point out this experience I had, maybe it helps. Best Regards, Philippe > > In the driver, mask the PLL unlock status bit from monitoring > (polling > and irq) if this boolean property is true: > - Mask IRQ PLL Unlock bit in REG_IRQ_EN when IRQ are enabled > - Mask IRQ PLL Unlock bit in REG_IRQ_STAT in > sn65dsi83_handle_errors() to > avoid a recover process on PLL unlock. > > Best regards, > Hervé [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 717 bytes --] ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-20 9:50 ` Philippe Schenker @ 2025-11-21 9:58 ` Maxime Ripard 2025-11-24 12:12 ` Luca Ceresoli 0 siblings, 1 reply; 22+ messages in thread From: Maxime Ripard @ 2025-11-21 9:58 UTC (permalink / raw) To: Philippe Schenker Cc: Herve Codina, Luca Ceresoli, Francesco Dolcini, Tomi Valkeinen, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, João Paulo Gonçalves, linux-kernel@vger.kernel.org, regressions@lists.linux.dev, thomas.petazzoni@bootlin.com [-- Attachment #1: Type: text/plain, Size: 4453 bytes --] On Thu, Nov 20, 2025 at 09:50:27AM +0000, Philippe Schenker wrote: > > > On Wed, 2025-11-19 at 19:40 +0100, Herve Codina wrote: > > Hi Luca, Francesco, others > > > > On Wed, 19 Nov 2025 18:27:38 +0100 > > "Luca Ceresoli" <luca.ceresoli@bootlin.com> wrote: > > > > > Hello, > > > > > > On Wed Nov 19, 2025 at 1:24 PM CET, Francesco Dolcini wrote: > > > ... > > > > > I might be mistaken, but I don't think the PLL will work if > > > > > unlocked... > > > > > But maybe the case is that it unlocks and lock again right > > > > > afterwards. > > > > > > > João, Francesco, on what hardware do you observe the > > > > > > > problem? Which SoC? > > > > > > > Which encoder, any previous bridges? > > > > > > > > > > > > Verdin AM62, TI AM62 SOC, arch/arm64/boot/dts/ti/k3-am62- > > > > > > verdin.dtsi > > > > > > > > > > > > There is a DPI to DSI bridge in the module, tc358778, it has > > > > > > a 25MHz > > > > > > reference clock. > > > > > > > > > > > > TI AM62 DPI -> Toshiba TC358768 DSI -> TI SN65DSI83 -> > > > > > > Display > > > > > > > > > > > > From a preliminary investigation this is a HW limitation, we > > > > > > are not > > > > > > able to generate a "good enough" DSI clock, see > > > > > > tc358768_calc_pll() for > > > > > > Thanks Francesco for the feedback! > > > > > > I'm not sure I completely understand the issue described, but if > > > the TI > > > bridge requires a clock that cannot be provided by the hardware, > > > then this > > > actually looks like "a HW limitation" as you wrote, due to a HW > > > integration > > > limitation/bug/issue/whatever. In case this is confirmed, I think > > > quirks > > > are an appropriate tool to handle HW integration issues. > > > > > > > > I haven't studied the docs or done any testing, but I would > > > > > think that > > > > > it doesn't matter for the PLL even if the incoming DSI clock is > > > > > a bit > > > > > off, as long as it's continuous and stable. > > > > > > > > > > My first thought was that the DSI is using non-continuous > > > > > clock, but at > > > > > least the driver has code to drop the > > > > > MIPI_DSI_CLOCK_NON_CONTINUOUS flag. > > > > > > > > > > > the actual code implementation of it, I believe that the > > > > > > datasheet is > > > > > > not available without NDA. > > > > > > > > > > > > Maybe the ugly hack "works-without-pll" is the way to work? > > > > > > It will > > > > > > require a DT change, but this seems doable. > > > > > > > > > > Revert is easier than adding new hacky DT properties... At > > > > > least until > > > > > the problem is understood. > > > > > > > > > > > Please note that this is the outcome of a short investigation > > > > > > done > > > > > > yesterday afternoon, so maybe I am overlooking something, > > > > > > unfortunately > > > > > > I do not have the bandwidth to work on it more this week. > > > > > > > > > > > > > Which clock rates? > > > > > > 71100000 > > > > > It would be a good test to try out with a few different > > > > > clocks. > > > > > > > > 50 MHz works, for example. > > > > > > > > It seems that the issue exists when the actual display clock is > > > > different > > > > from the dsi clock. And this can happen for the reason I > > > > explained > > > > before (the DSI clock is computed starting from this 25MHz > > > > reference > > > > clock). > > > > > > > If there is no way to set a correct clock, I agree with Luca a quirk > > should > > be the best solution. > > > > For instance, in the dts: > > ti,pll_may_unlock_quirk; > > I followed the discussion only loosely. But I once worked on bringing > up the SN65DSI83 and from what I can remember is that there was a > frequency range of the input clock where the PLL of SN65DSI83 just did > not lock at all. > > I couldn't explain what was happening since the clock I fed was within > the limits of the documentation I had. > > What I ultimately did was to just choose a clock that works. Given that > experience I'm not sure about adding quirks on TI side. > > But anyway I'm not very familiar with the topic and it's a long time > since I worked on it. Just wanted to point out this experience I had, > maybe it helps. If the frequency is predictable, can we disable the error recovery if we know we programmed the bridge in (one of) the affected range? Maxime [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 273 bytes --] ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-21 9:58 ` Maxime Ripard @ 2025-11-24 12:12 ` Luca Ceresoli 2025-11-24 14:12 ` Luca Ceresoli 2025-11-24 15:55 ` Maxime Ripard 0 siblings, 2 replies; 22+ messages in thread From: Luca Ceresoli @ 2025-11-24 12:12 UTC (permalink / raw) To: Maxime Ripard, Philippe Schenker Cc: Herve Codina, Francesco Dolcini, Tomi Valkeinen, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, João Paulo Gonçalves, linux-kernel@vger.kernel.org, regressions@lists.linux.dev, thomas.petazzoni@bootlin.com Hello João, Francesco, Maxime, Hervé, On Fri Nov 21, 2025 at 10:58 AM CET, Maxime Ripard wrote: > On Thu, Nov 20, 2025 at 09:50:27AM +0000, Philippe Schenker wrote: >> >> >> On Wed, 2025-11-19 at 19:40 +0100, Herve Codina wrote: >> > Hi Luca, Francesco, others >> > >> > On Wed, 19 Nov 2025 18:27:38 +0100 >> > "Luca Ceresoli" <luca.ceresoli@bootlin.com> wrote: >> > >> > > Hello, >> > > >> > > On Wed Nov 19, 2025 at 1:24 PM CET, Francesco Dolcini wrote: >> > > ... >> > > > > I might be mistaken, but I don't think the PLL will work if >> > > > > unlocked... >> > > > > But maybe the case is that it unlocks and lock again right >> > > > > afterwards. >> > > > > > > João, Francesco, on what hardware do you observe the >> > > > > > > problem? Which SoC? >> > > > > > > Which encoder, any previous bridges? >> > > > > > >> > > > > > Verdin AM62, TI AM62 SOC, arch/arm64/boot/dts/ti/k3-am62- >> > > > > > verdin.dtsi >> > > > > > >> > > > > > There is a DPI to DSI bridge in the module, tc358778, it has >> > > > > > a 25MHz >> > > > > > reference clock. >> > > > > > >> > > > > > TI AM62 DPI -> Toshiba TC358768 DSI -> TI SN65DSI83 -> >> > > > > > Display >> > > > > > >> > > > > > From a preliminary investigation this is a HW limitation, we >> > > > > > are not >> > > > > > able to generate a "good enough" DSI clock, see >> > > > > > tc358768_calc_pll() for >> > > >> > > Thanks Francesco for the feedback! >> > > >> > > I'm not sure I completely understand the issue described, but if >> > > the TI >> > > bridge requires a clock that cannot be provided by the hardware, >> > > then this >> > > actually looks like "a HW limitation" as you wrote, due to a HW >> > > integration >> > > limitation/bug/issue/whatever. In case this is confirmed, I think >> > > quirks >> > > are an appropriate tool to handle HW integration issues. >> > > >> > > > > I haven't studied the docs or done any testing, but I would >> > > > > think that >> > > > > it doesn't matter for the PLL even if the incoming DSI clock is >> > > > > a bit >> > > > > off, as long as it's continuous and stable. >> > > > > >> > > > > My first thought was that the DSI is using non-continuous >> > > > > clock, but at >> > > > > least the driver has code to drop the >> > > > > MIPI_DSI_CLOCK_NON_CONTINUOUS flag. >> > > > > >> > > > > > the actual code implementation of it, I believe that the >> > > > > > datasheet is >> > > > > > not available without NDA. >> > > > > > >> > > > > > Maybe the ugly hack "works-without-pll" is the way to work? >> > > > > > It will >> > > > > > require a DT change, but this seems doable. >> > > > > >> > > > > Revert is easier than adding new hacky DT properties... At >> > > > > least until >> > > > > the problem is understood. >> > > > > >> > > > > > Please note that this is the outcome of a short investigation >> > > > > > done >> > > > > > yesterday afternoon, so maybe I am overlooking something, >> > > > > > unfortunately >> > > > > > I do not have the bandwidth to work on it more this week. >> > > > > > >> > > > > > > Which clock rates? >> > > > > > 71100000 >> > > > > It would be a good test to try out with a few different >> > > > > clocks. >> > > > >> > > > 50 MHz works, for example. >> > > > >> > > > It seems that the issue exists when the actual display clock is >> > > > different >> > > > from the dsi clock. And this can happen for the reason I >> > > > explained >> > > > before (the DSI clock is computed starting from this 25MHz >> > > > reference >> > > > clock). >> > > >> > >> > If there is no way to set a correct clock, I agree with Luca a quirk >> > should >> > be the best solution. >> > >> > For instance, in the dts: >> > ti,pll_may_unlock_quirk; >> >> I followed the discussion only loosely. But I once worked on bringing >> up the SN65DSI83 and from what I can remember is that there was a >> frequency range of the input clock where the PLL of SN65DSI83 just did >> not lock at all. >> >> I couldn't explain what was happening since the clock I fed was within >> the limits of the documentation I had. >> >> What I ultimately did was to just choose a clock that works. Given that >> experience I'm not sure about adding quirks on TI side. >> >> But anyway I'm not very familiar with the topic and it's a long time >> since I worked on it. Just wanted to point out this experience I had, >> maybe it helps. > > If the frequency is predictable, can we disable the error recovery if we > know we programmed the bridge in (one of) the affected range? This looks like the best solution in principle. However I'm not sure the ti-sn65dsi83 driver knows the exact clock it will receive, I suspect it is only known to the DSI host and there is an API for the DSI device to obtain it from the DSI host. I'd be happy to be proven wrong though, and that the above idea can work. In case it doesn't we should reconsider the quirk. But as Maxime pointed out in another reply the quirk property in DT is not doable for backwards compatibility. Other options that have come to mind to use the quirk: * quirk based on the machine: ti-sn65dsi83 driver enabled the quirk if (of_machine_is_compatible("toradex,...")) * opt-out quirk instead of opt-in: ti-sn65dsi83 driver enabled the quirk if a DT property is absent, e.g. 'ti,pll-locking-capable' or similar to say "this hardware is able to provide a correct clock" Luca -- Luca Ceresoli, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-24 12:12 ` Luca Ceresoli @ 2025-11-24 14:12 ` Luca Ceresoli 2025-11-24 16:44 ` Emanuele Ghidoli 2025-11-24 15:55 ` Maxime Ripard 1 sibling, 1 reply; 22+ messages in thread From: Luca Ceresoli @ 2025-11-24 14:12 UTC (permalink / raw) To: Luca Ceresoli, Maxime Ripard, Philippe Schenker Cc: Herve Codina, Francesco Dolcini, Tomi Valkeinen, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, João Paulo Gonçalves, linux-kernel@vger.kernel.org, regressions@lists.linux.dev, thomas.petazzoni@bootlin.com Hello, sorry, a typo below. On Mon Nov 24, 2025 at 1:12 PM CET, Luca Ceresoli wrote: > Hello João, Francesco, Maxime, Hervé, > > On Fri Nov 21, 2025 at 10:58 AM CET, Maxime Ripard wrote: >> On Thu, Nov 20, 2025 at 09:50:27AM +0000, Philippe Schenker wrote: >>> >>> >>> On Wed, 2025-11-19 at 19:40 +0100, Herve Codina wrote: >>> > Hi Luca, Francesco, others >>> > >>> > On Wed, 19 Nov 2025 18:27:38 +0100 >>> > "Luca Ceresoli" <luca.ceresoli@bootlin.com> wrote: >>> > >>> > > Hello, >>> > > >>> > > On Wed Nov 19, 2025 at 1:24 PM CET, Francesco Dolcini wrote: >>> > > ... >>> > > > > I might be mistaken, but I don't think the PLL will work if >>> > > > > unlocked... >>> > > > > But maybe the case is that it unlocks and lock again right >>> > > > > afterwards. >>> > > > > > > João, Francesco, on what hardware do you observe the >>> > > > > > > problem? Which SoC? >>> > > > > > > Which encoder, any previous bridges? >>> > > > > > >>> > > > > > Verdin AM62, TI AM62 SOC, arch/arm64/boot/dts/ti/k3-am62- >>> > > > > > verdin.dtsi >>> > > > > > >>> > > > > > There is a DPI to DSI bridge in the module, tc358778, it has >>> > > > > > a 25MHz >>> > > > > > reference clock. >>> > > > > > >>> > > > > > TI AM62 DPI -> Toshiba TC358768 DSI -> TI SN65DSI83 -> >>> > > > > > Display >>> > > > > > >>> > > > > > From a preliminary investigation this is a HW limitation, we >>> > > > > > are not >>> > > > > > able to generate a "good enough" DSI clock, see >>> > > > > > tc358768_calc_pll() for >>> > > >>> > > Thanks Francesco for the feedback! >>> > > >>> > > I'm not sure I completely understand the issue described, but if >>> > > the TI >>> > > bridge requires a clock that cannot be provided by the hardware, >>> > > then this >>> > > actually looks like "a HW limitation" as you wrote, due to a HW >>> > > integration >>> > > limitation/bug/issue/whatever. In case this is confirmed, I think >>> > > quirks >>> > > are an appropriate tool to handle HW integration issues. >>> > > >>> > > > > I haven't studied the docs or done any testing, but I would >>> > > > > think that >>> > > > > it doesn't matter for the PLL even if the incoming DSI clock is >>> > > > > a bit >>> > > > > off, as long as it's continuous and stable. >>> > > > > >>> > > > > My first thought was that the DSI is using non-continuous >>> > > > > clock, but at >>> > > > > least the driver has code to drop the >>> > > > > MIPI_DSI_CLOCK_NON_CONTINUOUS flag. >>> > > > > >>> > > > > > the actual code implementation of it, I believe that the >>> > > > > > datasheet is >>> > > > > > not available without NDA. >>> > > > > > >>> > > > > > Maybe the ugly hack "works-without-pll" is the way to work? >>> > > > > > It will >>> > > > > > require a DT change, but this seems doable. >>> > > > > >>> > > > > Revert is easier than adding new hacky DT properties... At >>> > > > > least until >>> > > > > the problem is understood. >>> > > > > >>> > > > > > Please note that this is the outcome of a short investigation >>> > > > > > done >>> > > > > > yesterday afternoon, so maybe I am overlooking something, >>> > > > > > unfortunately >>> > > > > > I do not have the bandwidth to work on it more this week. >>> > > > > > >>> > > > > > > Which clock rates? >>> > > > > > 71100000 >>> > > > > It would be a good test to try out with a few different >>> > > > > clocks. >>> > > > >>> > > > 50 MHz works, for example. >>> > > > >>> > > > It seems that the issue exists when the actual display clock is >>> > > > different >>> > > > from the dsi clock. And this can happen for the reason I >>> > > > explained >>> > > > before (the DSI clock is computed starting from this 25MHz >>> > > > reference >>> > > > clock). >>> > > >>> > >>> > If there is no way to set a correct clock, I agree with Luca a quirk >>> > should >>> > be the best solution. >>> > >>> > For instance, in the dts: >>> > ti,pll_may_unlock_quirk; >>> >>> I followed the discussion only loosely. But I once worked on bringing >>> up the SN65DSI83 and from what I can remember is that there was a >>> frequency range of the input clock where the PLL of SN65DSI83 just did >>> not lock at all. >>> >>> I couldn't explain what was happening since the clock I fed was within >>> the limits of the documentation I had. >>> >>> What I ultimately did was to just choose a clock that works. Given that >>> experience I'm not sure about adding quirks on TI side. >>> >>> But anyway I'm not very familiar with the topic and it's a long time >>> since I worked on it. Just wanted to point out this experience I had, >>> maybe it helps. >> >> If the frequency is predictable, can we disable the error recovery if we >> know we programmed the bridge in (one of) the affected range? > > This looks like the best solution in principle. However I'm not sure the > ti-sn65dsi83 driver knows the exact clock it will receive, I suspect it is > only known to the DSI host and there is an API for the DSI device to obtain ^^^^^^^^ there isn't > it from the DSI host. > > I'd be happy to be proven wrong though, and that the above idea can work. > > In case it doesn't we should reconsider the quirk. But as Maxime pointed > out in another reply the quirk property in DT is not doable for backwards > compatibility. Other options that have come to mind to use the quirk: > > * quirk based on the machine: ti-sn65dsi83 driver enabled the quirk > if (of_machine_is_compatible("toradex,...")) > * opt-out quirk instead of opt-in: ti-sn65dsi83 driver enabled the quirk > if a DT property is absent, e.g. 'ti,pll-locking-capable' or similar to > say "this hardware is able to provide a correct clock" > > Luca > > -- > Luca Ceresoli, Bootlin > Embedded Linux and Kernel engineering > https://bootlin.com -- Luca Ceresoli, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-24 14:12 ` Luca Ceresoli @ 2025-11-24 16:44 ` Emanuele Ghidoli 0 siblings, 0 replies; 22+ messages in thread From: Emanuele Ghidoli @ 2025-11-24 16:44 UTC (permalink / raw) To: Luca Ceresoli, Maxime Ripard Cc: Herve Codina, Francesco Dolcini, Tomi Valkeinen, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, João Paulo Gonçalves, linux-kernel@vger.kernel.org, regressions@lists.linux.dev, thomas.petazzoni@bootlin.com, Philippe Schenker On 24/11/2025 15:12, Luca Ceresoli wrote: > Hello, > > sorry, a typo below. > > On Mon Nov 24, 2025 at 1:12 PM CET, Luca Ceresoli wrote: >> Hello João, Francesco, Maxime, Hervé, >> >> On Fri Nov 21, 2025 at 10:58 AM CET, Maxime Ripard wrote: >>> On Thu, Nov 20, 2025 at 09:50:27AM +0000, Philippe Schenker wrote: >>>> >>>> >>>> On Wed, 2025-11-19 at 19:40 +0100, Herve Codina wrote: >>>>> Hi Luca, Francesco, others >>>>> >>>>> On Wed, 19 Nov 2025 18:27:38 +0100 >>>>> "Luca Ceresoli" <luca.ceresoli@bootlin.com> wrote: >>>>> >>>>>> Hello, >>>>>> >>>>>> On Wed Nov 19, 2025 at 1:24 PM CET, Francesco Dolcini wrote: >>>>>> ... >>>>>>>> I might be mistaken, but I don't think the PLL will work if >>>>>>>> unlocked... >>>>>>>> But maybe the case is that it unlocks and lock again right >>>>>>>> afterwards. >>>>>>>>>> João, Francesco, on what hardware do you observe the >>>>>>>>>> problem? Which SoC? >>>>>>>>>> Which encoder, any previous bridges? >>>>>>>>> >>>>>>>>> Verdin AM62, TI AM62 SOC, arch/arm64/boot/dts/ti/k3-am62- >>>>>>>>> verdin.dtsi >>>>>>>>> >>>>>>>>> There is a DPI to DSI bridge in the module, tc358778, it has >>>>>>>>> a 25MHz >>>>>>>>> reference clock. >>>>>>>>> >>>>>>>>> TI AM62 DPI -> Toshiba TC358768 DSI -> TI SN65DSI83 -> >>>>>>>>> Display >>>>>>>>> >>>>>>>>> From a preliminary investigation this is a HW limitation, we >>>>>>>>> are not >>>>>>>>> able to generate a "good enough" DSI clock, see >>>>>>>>> tc358768_calc_pll() for >>>>>> >>>>>> Thanks Francesco for the feedback! >>>>>> >>>>>> I'm not sure I completely understand the issue described, but if >>>>>> the TI >>>>>> bridge requires a clock that cannot be provided by the hardware, >>>>>> then this >>>>>> actually looks like "a HW limitation" as you wrote, due to a HW >>>>>> integration >>>>>> limitation/bug/issue/whatever. In case this is confirmed, I think >>>>>> quirks >>>>>> are an appropriate tool to handle HW integration issues. >>>>>> >>>>>>>> I haven't studied the docs or done any testing, but I would >>>>>>>> think that >>>>>>>> it doesn't matter for the PLL even if the incoming DSI clock is >>>>>>>> a bit >>>>>>>> off, as long as it's continuous and stable. >>>>>>>> >>>>>>>> My first thought was that the DSI is using non-continuous >>>>>>>> clock, but at >>>>>>>> least the driver has code to drop the >>>>>>>> MIPI_DSI_CLOCK_NON_CONTINUOUS flag. >>>>>>>> >>>>>>>>> the actual code implementation of it, I believe that the >>>>>>>>> datasheet is >>>>>>>>> not available without NDA. >>>>>>>>> >>>>>>>>> Maybe the ugly hack "works-without-pll" is the way to work? >>>>>>>>> It will >>>>>>>>> require a DT change, but this seems doable. >>>>>>>> >>>>>>>> Revert is easier than adding new hacky DT properties... At >>>>>>>> least until >>>>>>>> the problem is understood. >>>>>>>> >>>>>>>>> Please note that this is the outcome of a short investigation >>>>>>>>> done >>>>>>>>> yesterday afternoon, so maybe I am overlooking something, >>>>>>>>> unfortunately >>>>>>>>> I do not have the bandwidth to work on it more this week. >>>>>>>>> >>>>>>>>>> Which clock rates? >>>>>>>>> 71100000 >>>>>>>> It would be a good test to try out with a few different >>>>>>>> clocks. >>>>>>> >>>>>>> 50 MHz works, for example. >>>>>>> >>>>>>> It seems that the issue exists when the actual display clock is >>>>>>> different >>>>>>> from the dsi clock. And this can happen for the reason I >>>>>>> explained >>>>>>> before (the DSI clock is computed starting from this 25MHz >>>>>>> reference >>>>>>> clock). >>>>>> >>>>> >>>>> If there is no way to set a correct clock, I agree with Luca a quirk >>>>> should >>>>> be the best solution. >>>>> >>>>> For instance, in the dts: >>>>> ti,pll_may_unlock_quirk; >>>> >>>> I followed the discussion only loosely. But I once worked on bringing >>>> up the SN65DSI83 and from what I can remember is that there was a >>>> frequency range of the input clock where the PLL of SN65DSI83 just did >>>> not lock at all. >>>> >>>> I couldn't explain what was happening since the clock I fed was within >>>> the limits of the documentation I had. >>>> >>>> What I ultimately did was to just choose a clock that works. Given that >>>> experience I'm not sure about adding quirks on TI side. >>>> >>>> But anyway I'm not very familiar with the topic and it's a long time >>>> since I worked on it. Just wanted to point out this experience I had, >>>> maybe it helps. >>> >>> If the frequency is predictable, can we disable the error recovery if we >>> know we programmed the bridge in (one of) the affected range? >> >> This looks like the best solution in principle. However I'm not sure the >> ti-sn65dsi83 driver knows the exact clock it will receive, I suspect it is >> only known to the DSI host and there is an API for the DSI device to obtain > ^^^^^^^^ > there isn't > >> it from the DSI host. >> >> I'd be happy to be proven wrong though, and that the above idea can work. >> >> In case it doesn't we should reconsider the quirk. But as Maxime pointed >> out in another reply the quirk property in DT is not doable for backwards >> compatibility. Other options that have come to mind to use the quirk: >> >> * quirk based on the machine: ti-sn65dsi83 driver enabled the quirk >> if (of_machine_is_compatible("toradex,...")) >> * opt-out quirk instead of opt-in: ti-sn65dsi83 driver enabled the quirk >> if a DT property is absent, e.g. 'ti,pll-locking-capable' or similar to >> say "this hardware is able to provide a correct clock" >> >> Luca >> >> -- >> Luca Ceresoli, Bootlin >> Embedded Linux and Kernel engineering >> https://bootlin.com > > > > > -- > Luca Ceresoli, Bootlin > Embedded Linux and Kernel engineering > https://bootlin.com Hi, I'm debugging the RGB -> tc358778 -> sn65dsi84 pipeline Some observations: - If I avoid resetting the pipeline and only clear the status bit, the PLL unlock flag immediately comes back. Despite this, the display keeps working fine and the sn65dsi84 appears functional even when the PLL is reported as unlocked. - There’s no clear frequency boundary: working: 50000000, 68750000, 72750000, 75000000 not working: 69750000, 71100000, 72500000 - The tc358778 is configured for continuous-clock DSI. - I cannot measure the DSI clock directly, but the parallel RGB clock is stable. So far I haven’t found a rule that clearly explain why certain frequency are without problems while some other generate this issue. I'm struggling around the input clock frequency and the one generated by tc358778 using its PLL, and trying to find out how it is possible that the side effect is a not locked PLL on the sn65dsi84. I could run additional tests or gather more data if useful. Thanks, Emanuele ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-24 12:12 ` Luca Ceresoli 2025-11-24 14:12 ` Luca Ceresoli @ 2025-11-24 15:55 ` Maxime Ripard 2025-11-24 17:00 ` Luca Ceresoli 1 sibling, 1 reply; 22+ messages in thread From: Maxime Ripard @ 2025-11-24 15:55 UTC (permalink / raw) To: Luca Ceresoli Cc: Philippe Schenker, Herve Codina, Francesco Dolcini, Tomi Valkeinen, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, João Paulo Gonçalves, linux-kernel@vger.kernel.org, regressions@lists.linux.dev, thomas.petazzoni@bootlin.com [-- Attachment #1: Type: text/plain, Size: 6410 bytes --] On Mon, Nov 24, 2025 at 01:12:55PM +0100, Luca Ceresoli wrote: > Hello João, Francesco, Maxime, Hervé, > > On Fri Nov 21, 2025 at 10:58 AM CET, Maxime Ripard wrote: > > On Thu, Nov 20, 2025 at 09:50:27AM +0000, Philippe Schenker wrote: > >> > >> > >> On Wed, 2025-11-19 at 19:40 +0100, Herve Codina wrote: > >> > Hi Luca, Francesco, others > >> > > >> > On Wed, 19 Nov 2025 18:27:38 +0100 > >> > "Luca Ceresoli" <luca.ceresoli@bootlin.com> wrote: > >> > > >> > > Hello, > >> > > > >> > > On Wed Nov 19, 2025 at 1:24 PM CET, Francesco Dolcini wrote: > >> > > ... > >> > > > > I might be mistaken, but I don't think the PLL will work if > >> > > > > unlocked... > >> > > > > But maybe the case is that it unlocks and lock again right > >> > > > > afterwards. > >> > > > > > > João, Francesco, on what hardware do you observe the > >> > > > > > > problem? Which SoC? > >> > > > > > > Which encoder, any previous bridges? > >> > > > > > > >> > > > > > Verdin AM62, TI AM62 SOC, arch/arm64/boot/dts/ti/k3-am62- > >> > > > > > verdin.dtsi > >> > > > > > > >> > > > > > There is a DPI to DSI bridge in the module, tc358778, it has > >> > > > > > a 25MHz > >> > > > > > reference clock. > >> > > > > > > >> > > > > > TI AM62 DPI -> Toshiba TC358768 DSI -> TI SN65DSI83 -> > >> > > > > > Display > >> > > > > > > >> > > > > > From a preliminary investigation this is a HW limitation, we > >> > > > > > are not > >> > > > > > able to generate a "good enough" DSI clock, see > >> > > > > > tc358768_calc_pll() for > >> > > > >> > > Thanks Francesco for the feedback! > >> > > > >> > > I'm not sure I completely understand the issue described, but if > >> > > the TI > >> > > bridge requires a clock that cannot be provided by the hardware, > >> > > then this > >> > > actually looks like "a HW limitation" as you wrote, due to a HW > >> > > integration > >> > > limitation/bug/issue/whatever. In case this is confirmed, I think > >> > > quirks > >> > > are an appropriate tool to handle HW integration issues. > >> > > > >> > > > > I haven't studied the docs or done any testing, but I would > >> > > > > think that > >> > > > > it doesn't matter for the PLL even if the incoming DSI clock is > >> > > > > a bit > >> > > > > off, as long as it's continuous and stable. > >> > > > > > >> > > > > My first thought was that the DSI is using non-continuous > >> > > > > clock, but at > >> > > > > least the driver has code to drop the > >> > > > > MIPI_DSI_CLOCK_NON_CONTINUOUS flag. > >> > > > > > >> > > > > > the actual code implementation of it, I believe that the > >> > > > > > datasheet is > >> > > > > > not available without NDA. > >> > > > > > > >> > > > > > Maybe the ugly hack "works-without-pll" is the way to work? > >> > > > > > It will > >> > > > > > require a DT change, but this seems doable. > >> > > > > > >> > > > > Revert is easier than adding new hacky DT properties... At > >> > > > > least until > >> > > > > the problem is understood. > >> > > > > > >> > > > > > Please note that this is the outcome of a short investigation > >> > > > > > done > >> > > > > > yesterday afternoon, so maybe I am overlooking something, > >> > > > > > unfortunately > >> > > > > > I do not have the bandwidth to work on it more this week. > >> > > > > > > >> > > > > > > Which clock rates? > >> > > > > > 71100000 > >> > > > > It would be a good test to try out with a few different > >> > > > > clocks. > >> > > > > >> > > > 50 MHz works, for example. > >> > > > > >> > > > It seems that the issue exists when the actual display clock is > >> > > > different > >> > > > from the dsi clock. And this can happen for the reason I > >> > > > explained > >> > > > before (the DSI clock is computed starting from this 25MHz > >> > > > reference > >> > > > clock). > >> > > > >> > > >> > If there is no way to set a correct clock, I agree with Luca a quirk > >> > should > >> > be the best solution. > >> > > >> > For instance, in the dts: > >> > ti,pll_may_unlock_quirk; > >> > >> I followed the discussion only loosely. But I once worked on bringing > >> up the SN65DSI83 and from what I can remember is that there was a > >> frequency range of the input clock where the PLL of SN65DSI83 just did > >> not lock at all. > >> > >> I couldn't explain what was happening since the clock I fed was within > >> the limits of the documentation I had. > >> > >> What I ultimately did was to just choose a clock that works. Given that > >> experience I'm not sure about adding quirks on TI side. > >> > >> But anyway I'm not very familiar with the topic and it's a long time > >> since I worked on it. Just wanted to point out this experience I had, > >> maybe it helps. > > > > If the frequency is predictable, can we disable the error recovery if we > > know we programmed the bridge in (one of) the affected range? > > This looks like the best solution in principle. However I'm not sure the > ti-sn65dsi83 driver knows the exact clock it will receive, I suspect it is > only known to the DSI host and there is an API for the DSI device to obtain > it from the DSI host. > > I'd be happy to be proven wrong though, and that the above idea can work. > > In case it doesn't we should reconsider the quirk. But as Maxime pointed > out in another reply the quirk property in DT is not doable for backwards > compatibility. Other options that have come to mind to use the quirk: > > * quirk based on the machine: ti-sn65dsi83 driver enabled the quirk > if (of_machine_is_compatible("toradex,...")) There's nothing in that machine that is very specific if it's driven by the relationship between the clock the DSI controller can match and the panel connected to it. So it won't just affect a single board. > * opt-out quirk instead of opt-in: ti-sn65dsi83 driver enabled the quirk > if a DT property is absent, e.g. 'ti,pll-locking-capable' or similar to > say "this hardware is able to provide a correct clock" And similarly, if this depends on the resolution, and the rate the DSI driver is able to provide, it's not something the DT can express properly. Some panels can support multiple resolutions for example. What happens if one can lock and the other cannot? Either way, it's not something that will be solved overnight. Please send a revert. Maxime [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 273 bytes --] ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-24 15:55 ` Maxime Ripard @ 2025-11-24 17:00 ` Luca Ceresoli 0 siblings, 0 replies; 22+ messages in thread From: Luca Ceresoli @ 2025-11-24 17:00 UTC (permalink / raw) To: Maxime Ripard Cc: Philippe Schenker, Herve Codina, Francesco Dolcini, Tomi Valkeinen, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, João Paulo Gonçalves, linux-kernel@vger.kernel.org, regressions@lists.linux.dev, thomas.petazzoni@bootlin.com, Emanuele Ghidoli On Mon Nov 24, 2025 at 4:55 PM CET, Maxime Ripard wrote: > On Mon, Nov 24, 2025 at 01:12:55PM +0100, Luca Ceresoli wrote: >> Hello João, Francesco, Maxime, Hervé, >> >> On Fri Nov 21, 2025 at 10:58 AM CET, Maxime Ripard wrote: >> > On Thu, Nov 20, 2025 at 09:50:27AM +0000, Philippe Schenker wrote: >> >> >> >> >> >> On Wed, 2025-11-19 at 19:40 +0100, Herve Codina wrote: >> >> > Hi Luca, Francesco, others >> >> > >> >> > On Wed, 19 Nov 2025 18:27:38 +0100 >> >> > "Luca Ceresoli" <luca.ceresoli@bootlin.com> wrote: >> >> > >> >> > > Hello, >> >> > > >> >> > > On Wed Nov 19, 2025 at 1:24 PM CET, Francesco Dolcini wrote: >> >> > > ... >> >> > > > > I might be mistaken, but I don't think the PLL will work if >> >> > > > > unlocked... >> >> > > > > But maybe the case is that it unlocks and lock again right >> >> > > > > afterwards. >> >> > > > > > > João, Francesco, on what hardware do you observe the >> >> > > > > > > problem? Which SoC? >> >> > > > > > > Which encoder, any previous bridges? >> >> > > > > > >> >> > > > > > Verdin AM62, TI AM62 SOC, arch/arm64/boot/dts/ti/k3-am62- >> >> > > > > > verdin.dtsi >> >> > > > > > >> >> > > > > > There is a DPI to DSI bridge in the module, tc358778, it has >> >> > > > > > a 25MHz >> >> > > > > > reference clock. >> >> > > > > > >> >> > > > > > TI AM62 DPI -> Toshiba TC358768 DSI -> TI SN65DSI83 -> >> >> > > > > > Display >> >> > > > > > >> >> > > > > > From a preliminary investigation this is a HW limitation, we >> >> > > > > > are not >> >> > > > > > able to generate a "good enough" DSI clock, see >> >> > > > > > tc358768_calc_pll() for >> >> > > >> >> > > Thanks Francesco for the feedback! >> >> > > >> >> > > I'm not sure I completely understand the issue described, but if >> >> > > the TI >> >> > > bridge requires a clock that cannot be provided by the hardware, >> >> > > then this >> >> > > actually looks like "a HW limitation" as you wrote, due to a HW >> >> > > integration >> >> > > limitation/bug/issue/whatever. In case this is confirmed, I think >> >> > > quirks >> >> > > are an appropriate tool to handle HW integration issues. >> >> > > >> >> > > > > I haven't studied the docs or done any testing, but I would >> >> > > > > think that >> >> > > > > it doesn't matter for the PLL even if the incoming DSI clock is >> >> > > > > a bit >> >> > > > > off, as long as it's continuous and stable. >> >> > > > > >> >> > > > > My first thought was that the DSI is using non-continuous >> >> > > > > clock, but at >> >> > > > > least the driver has code to drop the >> >> > > > > MIPI_DSI_CLOCK_NON_CONTINUOUS flag. >> >> > > > > >> >> > > > > > the actual code implementation of it, I believe that the >> >> > > > > > datasheet is >> >> > > > > > not available without NDA. >> >> > > > > > >> >> > > > > > Maybe the ugly hack "works-without-pll" is the way to work? >> >> > > > > > It will >> >> > > > > > require a DT change, but this seems doable. >> >> > > > > >> >> > > > > Revert is easier than adding new hacky DT properties... At >> >> > > > > least until >> >> > > > > the problem is understood. >> >> > > > > >> >> > > > > > Please note that this is the outcome of a short investigation >> >> > > > > > done >> >> > > > > > yesterday afternoon, so maybe I am overlooking something, >> >> > > > > > unfortunately >> >> > > > > > I do not have the bandwidth to work on it more this week. >> >> > > > > > >> >> > > > > > > Which clock rates? >> >> > > > > > 71100000 >> >> > > > > It would be a good test to try out with a few different >> >> > > > > clocks. >> >> > > > >> >> > > > 50 MHz works, for example. >> >> > > > >> >> > > > It seems that the issue exists when the actual display clock is >> >> > > > different >> >> > > > from the dsi clock. And this can happen for the reason I >> >> > > > explained >> >> > > > before (the DSI clock is computed starting from this 25MHz >> >> > > > reference >> >> > > > clock). >> >> > > >> >> > >> >> > If there is no way to set a correct clock, I agree with Luca a quirk >> >> > should >> >> > be the best solution. >> >> > >> >> > For instance, in the dts: >> >> > ti,pll_may_unlock_quirk; >> >> >> >> I followed the discussion only loosely. But I once worked on bringing >> >> up the SN65DSI83 and from what I can remember is that there was a >> >> frequency range of the input clock where the PLL of SN65DSI83 just did >> >> not lock at all. >> >> >> >> I couldn't explain what was happening since the clock I fed was within >> >> the limits of the documentation I had. >> >> >> >> What I ultimately did was to just choose a clock that works. Given that >> >> experience I'm not sure about adding quirks on TI side. >> >> >> >> But anyway I'm not very familiar with the topic and it's a long time >> >> since I worked on it. Just wanted to point out this experience I had, >> >> maybe it helps. >> > >> > If the frequency is predictable, can we disable the error recovery if we >> > know we programmed the bridge in (one of) the affected range? >> >> This looks like the best solution in principle. However I'm not sure the >> ti-sn65dsi83 driver knows the exact clock it will receive, I suspect it is >> only known to the DSI host and there is an API for the DSI device to obtain >> it from the DSI host. >> >> I'd be happy to be proven wrong though, and that the above idea can work. >> >> In case it doesn't we should reconsider the quirk. But as Maxime pointed >> out in another reply the quirk property in DT is not doable for backwards >> compatibility. Other options that have come to mind to use the quirk: >> >> * quirk based on the machine: ti-sn65dsi83 driver enabled the quirk >> if (of_machine_is_compatible("toradex,...")) > > There's nothing in that machine that is very specific if it's driven by > the relationship between the clock the DSI controller can match and the > panel connected to it. So it won't just affect a single board. > >> * opt-out quirk instead of opt-in: ti-sn65dsi83 driver enabled the quirk >> if a DT property is absent, e.g. 'ti,pll-locking-capable' or similar to >> say "this hardware is able to provide a correct clock" > > And similarly, if this depends on the resolution, and the rate the DSI > driver is able to provide, it's not something the DT can express > properly. Some panels can support multiple resolutions for example. What > happens if one can lock and the other cannot? > > Either way, it's not something that will be solved overnight. Please > send a revert. I think the best thing (and what I was kind of expecting) is that Francesco/Emanuele/João send a revert patch adding to the commit message all the relevant info they are collecting. They definitely understand the issue much better than others right now. If that's not OK, I can do it. Luca -- Luca Ceresoli, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off 2025-11-19 18:40 ` Herve Codina 2025-11-20 9:50 ` Philippe Schenker @ 2025-11-21 9:57 ` Maxime Ripard 1 sibling, 0 replies; 22+ messages in thread From: Maxime Ripard @ 2025-11-21 9:57 UTC (permalink / raw) To: Herve Codina Cc: Luca Ceresoli, Francesco Dolcini, Tomi Valkeinen, João Paulo Gonçalves, Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter, João Paulo Gonçalves, linux-kernel, regressions, thomas.petazzoni [-- Attachment #1: Type: text/plain, Size: 3180 bytes --] On Wed, Nov 19, 2025 at 07:40:23PM +0100, Herve Codina wrote: > Hi Luca, Francesco, others > > On Wed, 19 Nov 2025 18:27:38 +0100 > "Luca Ceresoli" <luca.ceresoli@bootlin.com> wrote: > > > Hello, > > > > On Wed Nov 19, 2025 at 1:24 PM CET, Francesco Dolcini wrote: > > ... > > >> I might be mistaken, but I don't think the PLL will work if unlocked... > > >> But maybe the case is that it unlocks and lock again right afterwards. > > >> >> João, Francesco, on what hardware do you observe the problem? Which SoC? > > >> >> Which encoder, any previous bridges? > > >> > > > >> > Verdin AM62, TI AM62 SOC, arch/arm64/boot/dts/ti/k3-am62-verdin.dtsi > > >> > > > >> > There is a DPI to DSI bridge in the module, tc358778, it has a 25MHz > > >> > reference clock. > > >> > > > >> > TI AM62 DPI -> Toshiba TC358768 DSI -> TI SN65DSI83 -> Display > > >> > > > >> > From a preliminary investigation this is a HW limitation, we are not > > >> > able to generate a "good enough" DSI clock, see tc358768_calc_pll() for > > > > Thanks Francesco for the feedback! > > > > I'm not sure I completely understand the issue described, but if the TI > > bridge requires a clock that cannot be provided by the hardware, then this > > actually looks like "a HW limitation" as you wrote, due to a HW integration > > limitation/bug/issue/whatever. In case this is confirmed, I think quirks > > are an appropriate tool to handle HW integration issues. > > > > >> I haven't studied the docs or done any testing, but I would think that > > >> it doesn't matter for the PLL even if the incoming DSI clock is a bit > > >> off, as long as it's continuous and stable. > > >> > > >> My first thought was that the DSI is using non-continuous clock, but at > > >> least the driver has code to drop the MIPI_DSI_CLOCK_NON_CONTINUOUS flag. > > >> > > >> > the actual code implementation of it, I believe that the datasheet is > > >> > not available without NDA. > > >> > > > >> > Maybe the ugly hack "works-without-pll" is the way to work? It will > > >> > require a DT change, but this seems doable. > > >> > > >> Revert is easier than adding new hacky DT properties... At least until > > >> the problem is understood. > > >> > > >> > Please note that this is the outcome of a short investigation done > > >> > yesterday afternoon, so maybe I am overlooking something, unfortunately > > >> > I do not have the bandwidth to work on it more this week. > > >> > > > >> >> Which clock rates? > > >> > 71100000 > > >> It would be a good test to try out with a few different clocks. > > > > > > 50 MHz works, for example. > > > > > > It seems that the issue exists when the actual display clock is different > > > from the dsi clock. And this can happen for the reason I explained > > > before (the DSI clock is computed starting from this 25MHz reference > > > clock). > > > > If there is no way to set a correct clock, I agree with Luca a quirk should > be the best solution. > > For instance, in the dts: > ti,pll_may_unlock_quirk; That's not a solution, as it would break DT backward compatibility. Maxime [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 273 bytes --] ^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2025-11-24 17:01 UTC | newest] Thread overview: 22+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-11-10 19:03 [REGRESSION] TI SN65DSI83 is being reset making display to blink On/Off João Paulo Gonçalves 2025-11-13 7:49 ` Herve Codina 2025-11-13 9:19 ` Francesco Dolcini 2025-11-17 15:27 ` Luca Ceresoli 2025-11-18 16:56 ` Maxime Ripard 2025-11-19 7:51 ` Herve Codina 2025-11-19 8:40 ` Maxime Ripard 2025-11-19 9:39 ` Tomi Valkeinen 2025-11-19 10:08 ` Luca Ceresoli 2025-11-19 11:12 ` Francesco Dolcini 2025-11-19 12:09 ` Tomi Valkeinen 2025-11-19 12:24 ` Francesco Dolcini 2025-11-19 17:27 ` Luca Ceresoli 2025-11-19 18:40 ` Herve Codina 2025-11-20 9:50 ` Philippe Schenker 2025-11-21 9:58 ` Maxime Ripard 2025-11-24 12:12 ` Luca Ceresoli 2025-11-24 14:12 ` Luca Ceresoli 2025-11-24 16:44 ` Emanuele Ghidoli 2025-11-24 15:55 ` Maxime Ripard 2025-11-24 17:00 ` Luca Ceresoli 2025-11-21 9:57 ` Maxime Ripard
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox