* kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) @ 2022-09-12 19:59 Anders Blomdell 2022-09-13 8:21 ` Greg Kroah-Hartman 0 siblings, 1 reply; 25+ messages in thread From: Anders Blomdell @ 2022-09-12 19:59 UTC (permalink / raw) To: Greg Kroah-Hartman, linux-serial Reverting commits 366f6c955d4d1a5125ffcd6875ead26a3c7a2a1c 9c5c8aaed50bf3478073ab51b8b1f3f5327d3cfa fixes my problems. Regards Anders Blomdell -- Anders Blomdell Email: anders.blomdell@control.lth.se Department of Automatic Control Lund University Phone: +46 46 222 4625 P.O. Box 118 SE-221 00 Lund, Sweden ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-12 19:59 kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) Anders Blomdell @ 2022-09-13 8:21 ` Greg Kroah-Hartman 2022-09-13 12:16 ` Anders Blomdell 0 siblings, 1 reply; 25+ messages in thread From: Greg Kroah-Hartman @ 2022-09-13 8:21 UTC (permalink / raw) To: Anders Blomdell; +Cc: linux-serial On Mon, Sep 12, 2022 at 09:59:08PM +0200, Anders Blomdell wrote: > Reverting commits > 366f6c955d4d1a5125ffcd6875ead26a3c7a2a1c > 9c5c8aaed50bf3478073ab51b8b1f3f5327d3cfa > fixes my problems. What problems exactly? And why not cc: the developers of those commits? thanks, greg k-h ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-13 8:21 ` Greg Kroah-Hartman @ 2022-09-13 12:16 ` Anders Blomdell 2022-09-13 12:30 ` Greg Kroah-Hartman 2022-10-04 20:39 ` Grant Edwards 0 siblings, 2 replies; 25+ messages in thread From: Anders Blomdell @ 2022-09-13 12:16 UTC (permalink / raw) To: Greg Kroah-Hartman, Maciej W. Rozycki; +Cc: linux-serial I get incorrect baudrates, my oscilloscope gives: Programmed Measured 2400 5208 4800 13150 9600 10410 19200 71420 38400 142000 57600 201600 115200 138800 On 2022-09-13 10:21, Greg Kroah-Hartman wrote: > On Mon, Sep 12, 2022 at 09:59:08PM +0200, Anders Blomdell wrote: >> Reverting commits >> 366f6c955d4d1a5125ffcd6875ead26a3c7a2a1c >> 9c5c8aaed50bf3478073ab51b8b1f3f5327d3cfa >> fixes my problems. > > What problems exactly? > > And why not cc: the developers of those commits? > > thanks, > > greg k-h -- Anders Blomdell Email: anders.blomdell@control.lth.se Department of Automatic Control Lund University Phone: +46 46 222 4625 P.O. Box 118 SE-221 00 Lund, Sweden ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-13 12:16 ` Anders Blomdell @ 2022-09-13 12:30 ` Greg Kroah-Hartman 2022-09-13 12:43 ` Anders Blomdell 2022-10-04 20:39 ` Grant Edwards 1 sibling, 1 reply; 25+ messages in thread From: Greg Kroah-Hartman @ 2022-09-13 12:30 UTC (permalink / raw) To: Anders Blomdell; +Cc: Maciej W. Rozycki, linux-serial On Tue, Sep 13, 2022 at 02:16:39PM +0200, Anders Blomdell wrote: > I get incorrect baudrates, my oscilloscope gives: > > Programmed Measured > > 2400 5208 > 4800 13150 > 9600 10410 > 19200 71420 > 38400 142000 > 57600 201600 > 115200 138800 I'm sorry, I have no context here at all, what does this pertain to? confused, greg k-h ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-13 12:30 ` Greg Kroah-Hartman @ 2022-09-13 12:43 ` Anders Blomdell 2022-09-13 14:01 ` Greg Kroah-Hartman 0 siblings, 1 reply; 25+ messages in thread From: Anders Blomdell @ 2022-09-13 12:43 UTC (permalink / raw) To: Greg Kroah-Hartman; +Cc: Maciej W. Rozycki, linux-serial On 2022-09-13 14:30, Greg Kroah-Hartman wrote: > On Tue, Sep 13, 2022 at 02:16:39PM +0200, Anders Blomdell wrote: >> I get incorrect baudrates, my oscilloscope gives: >> >> Programmed Measured >> >> 2400 5208 >> 4800 13150 >> 9600 10410 >> 19200 71420 >> 38400 142000 >> 57600 201600 >> 115200 138800 > > I'm sorry, I have no context here at all, what does this pertain to? Programmed baudrate and the measured (actual) baudrate > > confused, > > greg k-h /Anders -- Anders Blomdell Email: anders.blomdell@control.lth.se Department of Automatic Control Lund University Phone: +46 46 222 4625 P.O. Box 118 SE-221 00 Lund, Sweden ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-13 12:43 ` Anders Blomdell @ 2022-09-13 14:01 ` Greg Kroah-Hartman 2022-09-13 15:34 ` Anders Blomdell 0 siblings, 1 reply; 25+ messages in thread From: Greg Kroah-Hartman @ 2022-09-13 14:01 UTC (permalink / raw) To: Anders Blomdell; +Cc: Maciej W. Rozycki, linux-serial On Tue, Sep 13, 2022 at 02:43:03PM +0200, Anders Blomdell wrote: > > > On 2022-09-13 14:30, Greg Kroah-Hartman wrote: > > On Tue, Sep 13, 2022 at 02:16:39PM +0200, Anders Blomdell wrote: > > > I get incorrect baudrates, my oscilloscope gives: > > > > > > Programmed Measured > > > > > > 2400 5208 > > > 4800 13150 > > > 9600 10410 > > > 19200 71420 > > > 38400 142000 > > > 57600 201600 > > > 115200 138800 > > > > I'm sorry, I have no context here at all, what does this pertain to? > Programmed baudrate and the measured (actual) baudrate I really don't know what to do here, sorry. Are you saying a specific commit has broken this? If so, did you test if you made a change it fixed the issue? What do you suggest happen here? still confused, greg k-h ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-13 14:01 ` Greg Kroah-Hartman @ 2022-09-13 15:34 ` Anders Blomdell 2022-09-13 16:19 ` Maciej W. Rozycki 0 siblings, 1 reply; 25+ messages in thread From: Anders Blomdell @ 2022-09-13 15:34 UTC (permalink / raw) To: Greg Kroah-Hartman; +Cc: Maciej W. Rozycki, linux-serial On 2022-09-13 16:01, Greg Kroah-Hartman wrote: > On Tue, Sep 13, 2022 at 02:43:03PM +0200, Anders Blomdell wrote: >> >> >> On 2022-09-13 14:30, Greg Kroah-Hartman wrote: >>> On Tue, Sep 13, 2022 at 02:16:39PM +0200, Anders Blomdell wrote: >>>> I get incorrect baudrates, my oscilloscope gives: >>>> >>>> Programmed Measured >>>> >>>> 2400 5208 >>>> 4800 13150 >>>> 9600 10410 >>>> 19200 71420 >>>> 38400 142000 >>>> 57600 201600 >>>> 115200 138800 >>> >>> I'm sorry, I have no context here at all, what does this pertain to? >> Programmed baudrate and the measured (actual) baudrate > > I really don't know what to do here, sorry. Are you saying a specific > commit has broken this? If so, did you test if you made a change it > fixed the issue? Yes, commit 366f6c955d4d1a5125ffcd6875ead26a3c7a2a1c broke the one to one correspondence between programmed and actual baudrate; reverting it (and 9c5c8aaed50bf3478073ab51b8b1f3f5327d3cfa that builds on that patch) restores the expected functionality (i.e. you get the baudrate you ask for) on 5.19.8. > What do you suggest happen here? Either there is a bug in the code, or the chipset on my card (a Delock 2xRS232 card) is not a true oxford chipset (the package and PCI id's says that they are). Since the chip seems to be discontinued since 2014 (see https://www.mouser.com/PCN/PLX_Technology_2013_8.pdf), I think a revert would not be uncalled for. > > still confused, So am I > > greg k-h /Anders -- Anders Blomdell Email: anders.blomdell@control.lth.se Department of Automatic Control Lund University Phone: +46 46 222 4625 P.O. Box 118 SE-221 00 Lund, Sweden ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-13 15:34 ` Anders Blomdell @ 2022-09-13 16:19 ` Maciej W. Rozycki 2022-09-13 17:17 ` Anders Blomdell ` (2 more replies) 0 siblings, 3 replies; 25+ messages in thread From: Maciej W. Rozycki @ 2022-09-13 16:19 UTC (permalink / raw) To: Anders Blomdell; +Cc: Greg Kroah-Hartman, linux-serial Hi Anders, Sorry to cause you trouble. > > I really don't know what to do here, sorry. Are you saying a specific > > commit has broken this? If so, did you test if you made a change it > > fixed the issue? > > Yes, commit 366f6c955d4d1a5125ffcd6875ead26a3c7a2a1c broke the one to one > correspondence > between programmed and actual baudrate; reverting it (and > 9c5c8aaed50bf3478073ab51b8b1f3f5327d3cfa > that builds on that patch) restores the expected functionality (i.e. you get > the baudrate you ask for) > on 5.19.8. I have implemented the calculation using parameters from original OxSemi datasheets and verified this code across three architectures available to me (POWER9, RISC-V, 32-bit x86) and a couple of cards made by different manufacturers connected to a non-OxSemi serial device each at the other end. I have checked the usual baud rates of up to 460800bps. Higher baud rates work too, though I could only try them between OxSemi devices, so actual rates were not verified for correctness. And offhand I can say it works just fine at 230400bps with 6.0.0-rc2 as at commit 10d4879f9ef0 and my RISC-V machine (using an EXSYS EX-44171 1S+1P port PCIe option card, built around the OXPCIe952 too) talking to a remote console server in my lab. I don't have an oscilloscope available to check actual waveforms produced. > > What do you suggest happen here? > Either there is a bug in the code, or the chipset on my card (a Delock 2xRS232 > card) is not a true oxford > chipset (the package and PCI id's says that they are). A bug can never be ruled out. I doubt that Delock would use a fake chip or indeed that anyone would choose to clone an OxSemi part, which seems fairly complex to me for a serial port. > Since the chip seems to be discontinued since 2014 (see > https://www.mouser.com/PCN/PLX_Technology_2013_8.pdf), > I think a revert would not be uncalled for. The problem is the original calculation is inaccurate enough for the serial interface not to communicate correctly at higher baud rates. I found setting two stop bits while talking to a remote end that has one stop bit set a possible workaround for some cases, but why not do the calculation correctly in the first place? If you're willing to debug it, then I'll be more than happy to supply you with diagnostic patches, some of which I made in the development of the fix. Also what processor architecture do you use the interface with? Maciej ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-13 16:19 ` Maciej W. Rozycki @ 2022-09-13 17:17 ` Anders Blomdell 2022-09-16 21:50 ` Maciej W. Rozycki 2022-09-13 18:59 ` Anders Blomdell 2022-09-13 21:07 ` Anders Blomdell 2 siblings, 1 reply; 25+ messages in thread From: Anders Blomdell @ 2022-09-13 17:17 UTC (permalink / raw) To: Maciej W. Rozycki; +Cc: Greg Kroah-Hartman, linux-serial On 2022-09-13 18:19, Maciej W. Rozycki wrote: > Hi Anders, > > Sorry to cause you trouble. > >>> I really don't know what to do here, sorry. Are you saying a specific >>> commit has broken this? If so, did you test if you made a change it >>> fixed the issue? >> >> Yes, commit 366f6c955d4d1a5125ffcd6875ead26a3c7a2a1c broke the one to one >> correspondence >> between programmed and actual baudrate; reverting it (and >> 9c5c8aaed50bf3478073ab51b8b1f3f5327d3cfa >> that builds on that patch) restores the expected functionality (i.e. you get >> the baudrate you ask for) >> on 5.19.8. > > I have implemented the calculation using parameters from original OxSemi > datasheets and verified this code across three architectures available to > me (POWER9, RISC-V, 32-bit x86) and a couple of cards made by different > manufacturers connected to a non-OxSemi serial device each at the other > end. I have checked the usual baud rates of up to 460800bps. Higher baud > rates work too, though I could only try them between OxSemi devices, so > actual rates were not verified for correctness. > > And offhand I can say it works just fine at 230400bps with 6.0.0-rc2 as > at commit 10d4879f9ef0 and my RISC-V machine (using an EXSYS EX-44171 > 1S+1P port PCIe option card, built around the OXPCIe952 too) talking to a > remote console server in my lab. I don't have an oscilloscope available > to check actual waveforms produced. I have the problem with 5.19.8 on x86_64 > >>> What do you suggest happen here? >> Either there is a bug in the code, or the chipset on my card (a Delock 2xRS232 >> card) is not a true oxford >> chipset (the package and PCI id's says that they are). > > A bug can never be ruled out. I doubt that Delock would use a fake chip > or indeed that anyone would choose to clone an OxSemi part, which seems > fairly complex to me for a serial port. > >> Since the chip seems to be discontinued since 2014 (see >> https://www.mouser.com/PCN/PLX_Technology_2013_8.pdf), >> I think a revert would not be uncalled for. > > The problem is the original calculation is inaccurate enough for the > serial interface not to communicate correctly at higher baud rates. I > found setting two stop bits while talking to a remote end that has one > stop bit set a possible workaround for some cases, but why not do the > calculation correctly in the first place? > > If you're willing to debug it, then I'll be more than happy to supply you > with diagnostic patches, some of which I made in the development of the > fix. Yes, please > Also what processor architecture do you use the interface with? The delock card is in an x86 machine, and it communicates with various RS232 devices (hence speeds above 230400 usually works badly with a few meters of cabling) The problem I have, is that the baudrate is very much off at the lower ranges I'm interested in (2400-115200 mostly), even though the register values seems to make sense. /Anders -- Anders Blomdell Email: anders.blomdell@control.lth.se Department of Automatic Control Lund University Phone: +46 46 222 4625 P.O. Box 118 SE-221 00 Lund, Sweden ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-13 17:17 ` Anders Blomdell @ 2022-09-16 21:50 ` Maciej W. Rozycki 0 siblings, 0 replies; 25+ messages in thread From: Maciej W. Rozycki @ 2022-09-16 21:50 UTC (permalink / raw) To: Anders Blomdell; +Cc: Greg Kroah-Hartman, linux-serial On Tue, 13 Sep 2022, Anders Blomdell wrote: > The delock card is in an x86 machine, and it communicates with various RS232 > devices > (hence speeds above 230400 usually works badly with a few meters of cabling) FWIW I was able to get reliable communication between a pair of OXPCIe952 devices over a ~1.5m connection (a flat Cisco console cable) using rates of up to 3500000bps despite the cards having line transceivers specified for up to 1MHz operation only (cards marketed for 921600bps operation). The only issue with rates above 576000bps were input overruns, asking for DMA operation really (which the OXPCIe952 does support; only we don't!). Cf.: <https://lore.kernel.org/linux-serial/alpine.DEB.2.21.2106071700090.1601@angie.orcam.me.uk/>. Maciej ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-13 16:19 ` Maciej W. Rozycki 2022-09-13 17:17 ` Anders Blomdell @ 2022-09-13 18:59 ` Anders Blomdell 2022-09-13 21:07 ` Anders Blomdell 2 siblings, 0 replies; 25+ messages in thread From: Anders Blomdell @ 2022-09-13 18:59 UTC (permalink / raw) To: Maciej W. Rozycki; +Cc: Greg Kroah-Hartman, linux-serial I honestly don't understand how to calculate the baudrate, the following hack: switch (baud) { case 9601: { tcr = 4; cpr = 32; quot = 406; } break; case 9602: { tcr = 8; cpr = 16; quot = 406; } break; case 9603: { tcr = 16; cpr = 8; quot = 406; } break; /* tcr will be masked to 0 */ } *frac = (cpr << 8) | (tcr & OXSEMI_TORNADO_TCR_MASK); I believed that they should give the same baudrate, but I get these baudrates: 9600 -> 10700 tcr = 9; cpr = 9; quot = 643; /* Use standard calculations, not hack */ 9601 -> 38400 tcr = 4; cpr = 32; quot = 406; 9602 -> 19200 tcr = 8; cpr = 16; quot = 406 9603 -> 9600 tcr = 16; cpr = 8; quot = 406; On 2022-09-13 18:19, Maciej W. Rozycki wrote: > Hi Anders, > > Sorry to cause you trouble. > >>> I really don't know what to do here, sorry. Are you saying a specific >>> commit has broken this? If so, did you test if you made a change it >>> fixed the issue? >> >> Yes, commit 366f6c955d4d1a5125ffcd6875ead26a3c7a2a1c broke the one to one >> correspondence >> between programmed and actual baudrate; reverting it (and >> 9c5c8aaed50bf3478073ab51b8b1f3f5327d3cfa >> that builds on that patch) restores the expected functionality (i.e. you get >> the baudrate you ask for) >> on 5.19.8. > > I have implemented the calculation using parameters from original OxSemi > datasheets and verified this code across three architectures available to > me (POWER9, RISC-V, 32-bit x86) and a couple of cards made by different > manufacturers connected to a non-OxSemi serial device each at the other > end. I have checked the usual baud rates of up to 460800bps. Higher baud > rates work too, though I could only try them between OxSemi devices, so > actual rates were not verified for correctness. > > And offhand I can say it works just fine at 230400bps with 6.0.0-rc2 as > at commit 10d4879f9ef0 and my RISC-V machine (using an EXSYS EX-44171 > 1S+1P port PCIe option card, built around the OXPCIe952 too) talking to a > remote console server in my lab. I don't have an oscilloscope available > to check actual waveforms produced. > >>> What do you suggest happen here? >> Either there is a bug in the code, or the chipset on my card (a Delock 2xRS232 >> card) is not a true oxford >> chipset (the package and PCI id's says that they are). > > A bug can never be ruled out. I doubt that Delock would use a fake chip > or indeed that anyone would choose to clone an OxSemi part, which seems > fairly complex to me for a serial port. > >> Since the chip seems to be discontinued since 2014 (see >> https://www.mouser.com/PCN/PLX_Technology_2013_8.pdf), >> I think a revert would not be uncalled for. > > The problem is the original calculation is inaccurate enough for the > serial interface not to communicate correctly at higher baud rates. I > found setting two stop bits while talking to a remote end that has one > stop bit set a possible workaround for some cases, but why not do the > calculation correctly in the first place? > > If you're willing to debug it, then I'll be more than happy to supply you > with diagnostic patches, some of which I made in the development of the > fix. Also what processor architecture do you use the interface with? > > Maciej -- Anders Blomdell Email: anders.blomdell@control.lth.se Department of Automatic Control Lund University Phone: +46 46 222 4625 P.O. Box 118 SE-221 00 Lund, Sweden ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-13 16:19 ` Maciej W. Rozycki 2022-09-13 17:17 ` Anders Blomdell 2022-09-13 18:59 ` Anders Blomdell @ 2022-09-13 21:07 ` Anders Blomdell 2022-09-14 0:00 ` Maciej W. Rozycki 2 siblings, 1 reply; 25+ messages in thread From: Anders Blomdell @ 2022-09-13 21:07 UTC (permalink / raw) To: Maciej W. Rozycki; +Cc: Greg Kroah-Hartman, linux-serial Seems like CPR/CPR2 does not affect baudrate, so maybe EFR bit 4 (enhance mode) is not set? If CPR is stuck at 8 (1.0 scaling), it all makes sense, these corresponds to what the oscilloscope gives: 2400 -> tcr: 9, cpr: 18, quot: 1286 62500000/9/(8*.125)/1286 -> 5400 4800 -> tcr: 7, cpr: 23, quot: 647 2500000/7/(8*.125)/647 -> 13799 9600 -> tcr: 9, cpr: 9, quot: 643 62500000/9/(8*.125)/643 -> 10800. 19200 -> tcr: 8, cpr: 31, quot: 105 62500000/7/(8*.125)/105 -> 85034 38400 -> 62500000/14/(8*.125)/30 -> 148809 /Anders On 2022-09-13 18:19, Maciej W. Rozycki wrote: > Hi Anders, > > Sorry to cause you trouble. > >>> I really don't know what to do here, sorry. Are you saying a specific >>> commit has broken this? If so, did you test if you made a change it >>> fixed the issue? >> >> Yes, commit 366f6c955d4d1a5125ffcd6875ead26a3c7a2a1c broke the one to one >> correspondence >> between programmed and actual baudrate; reverting it (and >> 9c5c8aaed50bf3478073ab51b8b1f3f5327d3cfa >> that builds on that patch) restores the expected functionality (i.e. you get >> the baudrate you ask for) >> on 5.19.8. > > I have implemented the calculation using parameters from original OxSemi > datasheets and verified this code across three architectures available to > me (POWER9, RISC-V, 32-bit x86) and a couple of cards made by different > manufacturers connected to a non-OxSemi serial device each at the other > end. I have checked the usual baud rates of up to 460800bps. Higher baud > rates work too, though I could only try them between OxSemi devices, so > actual rates were not verified for correctness. > > And offhand I can say it works just fine at 230400bps with 6.0.0-rc2 as > at commit 10d4879f9ef0 and my RISC-V machine (using an EXSYS EX-44171 > 1S+1P port PCIe option card, built around the OXPCIe952 too) talking to a > remote console server in my lab. I don't have an oscilloscope available > to check actual waveforms produced. > >>> What do you suggest happen here? >> Either there is a bug in the code, or the chipset on my card (a Delock 2xRS232 >> card) is not a true oxford >> chipset (the package and PCI id's says that they are). > > A bug can never be ruled out. I doubt that Delock would use a fake chip > or indeed that anyone would choose to clone an OxSemi part, which seems > fairly complex to me for a serial port. > >> Since the chip seems to be discontinued since 2014 (see >> https://www.mouser.com/PCN/PLX_Technology_2013_8.pdf), >> I think a revert would not be uncalled for. > > The problem is the original calculation is inaccurate enough for the > serial interface not to communicate correctly at higher baud rates. I > found setting two stop bits while talking to a remote end that has one > stop bit set a possible workaround for some cases, but why not do the > calculation correctly in the first place? > > If you're willing to debug it, then I'll be more than happy to supply you > with diagnostic patches, some of which I made in the development of the > fix. Also what processor architecture do you use the interface with? > > Maciej -- Anders Blomdell Email: anders.blomdell@control.lth.se Department of Automatic Control Lund University Phone: +46 46 222 4625 P.O. Box 118 SE-221 00 Lund, Sweden ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-13 21:07 ` Anders Blomdell @ 2022-09-14 0:00 ` Maciej W. Rozycki 2022-09-14 11:01 ` Anders Blomdell 0 siblings, 1 reply; 25+ messages in thread From: Maciej W. Rozycki @ 2022-09-14 0:00 UTC (permalink / raw) To: Anders Blomdell, Pavel Machek; +Cc: Greg Kroah-Hartman, linux-serial On Tue, 13 Sep 2022, Anders Blomdell wrote: > Seems like CPR/CPR2 does not affect baudrate, so maybe EFR bit 4 (enhance > mode) is not set? Thanks for assessing the problem. I've thought already it could be misconfiguration. > If CPR is stuck at 8 (1.0 scaling), it all makes sense, these corresponds to > what the oscilloscope gives: > > 2400 -> tcr: 9, cpr: 18, quot: 1286 > 62500000/9/(8*.125)/1286 -> 5400 > 4800 -> tcr: 7, cpr: 23, quot: 647 > 2500000/7/(8*.125)/647 -> 13799 > 9600 -> tcr: 9, cpr: 9, quot: 643 > 62500000/9/(8*.125)/643 -> 10800. > 19200 -> tcr: 8, cpr: 31, quot: 105 > 62500000/7/(8*.125)/105 -> 85034 > 38400 -> 62500000/14/(8*.125)/30 -> 148809 Agreed. As the first debug aid could you please enable DEBUG_AUTOCONF at the top of drivers/tty/serial/8250/8250_port.c and paste the relevant piece of 8250 initialisation recorded in the kernel log? This will confirm (or contradict) correct operation of the port configuration sequence. Also I have identified a code piece that handles the EFR in a destructive manner, which I must have previously missed, namely a conditional block guarded by UART_CAP_EFR in `serial8250_do_set_termios'. It should likely be fixed, however it is supposed not to matter for OxSemi chips due to: /* UART_CAP_EFR breaks billionon CF bluetooth card. */ .flags = UART_CAP_FIFO | UART_CAP_SLEEP, which then leads to: serial 0000:07:00.3: detected caps 00000700 should be 00000500 and consequently UART_CAP_EFR gets cleared and this code block isn't supposed to be reached. Can you confirm the presence of a similar message in your log? NB it seems to me too big a hammer to have a generic serial port feature globally disabled to work around an unidentified problem with an attached particular serial device. Pavel, as the originator of commit d0694e2aeb81 ("serial: unbreak billionton CF card") can you please explain what the motivation was here? I could only track down two message threads related to the problem: <https://lore.kernel.org/lkml/20110106134254.68fa27ac@lxorguk.ukuu.org.uk/> and: <https://lore.kernel.org/linux-serial/4D001AF1.80902@mainpine.com/> but no attempt to actually narrow the issue down (also ISTM like a feature such as flow control ought to be controlled via a termios call rather than globally disabled). Also could the corruption of the EFR in what is now `serial8250_do_set_termios' (and used to be `serial8250_set_termios' then) mentioned above be the culprit? Maciej ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-14 0:00 ` Maciej W. Rozycki @ 2022-09-14 11:01 ` Anders Blomdell 2022-09-14 11:41 ` Maciej W. Rozycki 0 siblings, 1 reply; 25+ messages in thread From: Anders Blomdell @ 2022-09-14 11:01 UTC (permalink / raw) To: Maciej W. Rozycki, Pavel Machek; +Cc: Greg Kroah-Hartman, linux-serial On 2022-09-14 02:00, Maciej W. Rozycki wrote: > On Tue, 13 Sep 2022, Anders Blomdell wrote: > >> Seems like CPR/CPR2 does not affect baudrate, so maybe EFR bit 4 (enhance >> mode) is not set? > > Thanks for assessing the problem. I've thought already it could be > misconfiguration. > >> If CPR is stuck at 8 (1.0 scaling), it all makes sense, these corresponds to >> what the oscilloscope gives: >> >> 2400 -> tcr: 9, cpr: 18, quot: 1286 >> 62500000/9/(8*.125)/1286 -> 5400 >> 4800 -> tcr: 7, cpr: 23, quot: 647 >> 2500000/7/(8*.125)/647 -> 13799 >> 9600 -> tcr: 9, cpr: 9, quot: 643 >> 62500000/9/(8*.125)/643 -> 10800. >> 19200 -> tcr: 8, cpr: 31, quot: 105 >> 62500000/7/(8*.125)/105 -> 85034 >> 38400 -> 62500000/14/(8*.125)/30 -> 148809 > > Agreed. > > As the first debug aid could you please enable DEBUG_AUTOCONF at the top > of drivers/tty/serial/8250/8250_port.c and paste the relevant piece of > 8250 initialisation recorded in the kernel log? This will confirm (or > contradict) correct operation of the port configuration sequence. Modifications done: diff --git a/drivers/tty/serial/8250/8250.h b/drivers/tty/serial/8250/8250.h index c89cb881d9b0..f25e824d626e 100644 --- a/drivers/tty/serial/8250/8250.h +++ b/drivers/tty/serial/8250/8250.h @@ -115,11 +115,17 @@ struct serial8250_config { static inline int serial_in(struct uart_8250_port *up, int offset) { - return up->port.serial_in(&up->port, offset); + int result; + result = up->port.serial_in(&up->port, offset); + printk(KERN_INFO "serial_in(%px, 0x%02x) -> 0x%02x\n", + up, offset, result); + return result; } static inline void serial_out(struct uart_8250_port *up, int offset, int value) { + printk(KERN_INFO "serial_out(%px, 0x%02x, 0x%02x)\n", + up, offset, value); up->port.serial_out(&up->port, offset, value); } diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c index 2b86c55ed374..b5c1b1faff34 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -44,7 +44,7 @@ /* * Debugging. */ -#if 0 +#if 1 #define DEBUG_AUTOCONF(fmt...) printk(fmt) #else #define DEBUG_AUTOCONF(fmt...) do { } while (0) Captured data: [ 3.830006] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled [ 3.830141] ttyS0: autoconf (0x03f8, 0x0000000000000000): [ 3.830146] serial_in(ffffffffb6b97520, 0x01) -> 0xff [ 3.830271] serial_out(ffffffffb6b97520, 0x01, 0x00) [ 3.830338] serial_in(ffffffffb6b97520, 0x01) -> 0xff [ 3.830400] serial_out(ffffffffb6b97520, 0x01, 0x0f) [ 3.830468] serial_in(ffffffffb6b97520, 0x01) -> 0xff [ 3.830530] serial_out(ffffffffb6b97520, 0x01, 0xff) [ 3.830594] IER test failed (0f, 0f) [ 3.830595] iir=255 [ 3.830656] type=unknown [ 3.830888] ttyS1: autoconf (0x02f8, 0x0000000000000000): [ 3.830892] serial_in(ffffffffb6b97800, 0x01) -> 0xff [ 3.831016] serial_out(ffffffffb6b97800, 0x01, 0x00) [ 3.831080] serial_in(ffffffffb6b97800, 0x01) -> 0xff [ 3.831141] serial_out(ffffffffb6b97800, 0x01, 0x0f) [ 3.831208] serial_in(ffffffffb6b97800, 0x01) -> 0xff [ 3.831269] serial_out(ffffffffb6b97800, 0x01, 0xff) [ 3.831332] IER test failed (0f, 0f) [ 3.831333] iir=255 [ 3.831393] type=unknown [ 3.831595] ttyS2: autoconf (0x03e8, 0x0000000000000000): [ 3.831598] serial_in(ffffffffb6b97ae0, 0x01) -> 0xff [ 3.831720] serial_out(ffffffffb6b97ae0, 0x01, 0x00) [ 3.831783] serial_in(ffffffffb6b97ae0, 0x01) -> 0xff [ 3.831844] serial_out(ffffffffb6b97ae0, 0x01, 0x0f) [ 3.831907] serial_in(ffffffffb6b97ae0, 0x01) -> 0xff [ 3.831969] serial_out(ffffffffb6b97ae0, 0x01, 0xff) [ 3.832040] IER test failed (0f, 0f) [ 3.832041] iir=255 [ 3.832101] type=unknown [ 3.832305] ttyS3: autoconf (0x02e8, 0x0000000000000000): [ 3.832309] serial_in(ffffffffb6b97dc0, 0x01) -> 0xff [ 3.832431] serial_out(ffffffffb6b97dc0, 0x01, 0x00) [ 3.832497] serial_in(ffffffffb6b97dc0, 0x01) -> 0xff [ 3.832562] serial_out(ffffffffb6b97dc0, 0x01, 0x0f) [ 3.832627] serial_in(ffffffffb6b97dc0, 0x01) -> 0xff [ 3.832688] serial_out(ffffffffb6b97dc0, 0x01, 0xff) [ 3.832760] IER test failed (0f, 0f) [ 3.832761] iir=255 [ 3.832820] type=unknown [ 3.835202] ttyS4: autoconf (0x0000, 0x(____ptrval____)): [ 3.835207] serial_in(ffffffffb6b980a0, 0x01) -> 0x00 [ 3.836170] serial_out(ffffffffb6b980a0, 0x01, 0x00) [ 3.836170] serial_in(ffffffffb6b980a0, 0x01) -> 0x00 [ 3.836170] serial_out(ffffffffb6b980a0, 0x01, 0x0f) [ 3.836170] serial_in(ffffffffb6b980a0, 0x01) -> 0x0f [ 3.836170] serial_out(ffffffffb6b980a0, 0x01, 0x00) [ 3.836170] serial_in(ffffffffb6b980a0, 0x04) -> 0x00 [ 3.836170] serial_in(ffffffffb6b980a0, 0x03) -> 0x00 [ 3.836170] serial_out(ffffffffb6b980a0, 0x03, 0xbf) [ 3.836170] serial_out(ffffffffb6b980a0, 0x02, 0x00) [ 3.836170] serial_out(ffffffffb6b980a0, 0x03, 0x00) [ 3.836170] serial_out(ffffffffb6b980a0, 0x02, 0x01) [ 3.836170] serial_in(ffffffffb6b980a0, 0x02) -> 0xc1 [ 3.836170] serial_out(ffffffffb6b980a0, 0x03, 0x00) [ 3.836170] serial_out(ffffffffb6b980a0, 0x04, 0x00) [ 3.836170] serial_out(ffffffffb6b980a0, 0x02, 0x01) [ 3.836170] serial_out(ffffffffb6b980a0, 0x02, 0x07) [ 3.836170] serial_out(ffffffffb6b980a0, 0x02, 0x00) [ 3.836170] serial_in(ffffffffb6b980a0, 0x00) -> 0x78 [ 3.836170] serial_out(ffffffffb6b980a0, 0x01, 0x00) [ 3.837488] iir=193 [ 3.837490] type=16550A [ 3.837606] 0000:07:00.0: ttyS4 at MMIO 0xe3601000 (irq = 17, base_baud = 15625000) is a 16550A [ 3.837685] serial_out(ffffffffb6b980a0, 0x04, 0x80) [ 3.837914] ttyS5: autoconf (0x0000, 0x(____ptrval____)): [ 3.837918] serial_in(ffffffffb6b98380, 0x01) -> 0x00 [ 3.838041] serial_out(ffffffffb6b98380, 0x01, 0x00) [ 3.838104] serial_in(ffffffffb6b98380, 0x01) -> 0x00 [ 3.838165] serial_out(ffffffffb6b98380, 0x01, 0x0f) [ 3.838229] serial_in(ffffffffb6b98380, 0x01) -> 0x0f [ 3.838290] serial_out(ffffffffb6b98380, 0x01, 0x00) [ 3.838353] serial_in(ffffffffb6b98380, 0x04) -> 0x00 [ 3.838417] serial_in(ffffffffb6b98380, 0x03) -> 0x00 [ 3.838479] serial_out(ffffffffb6b98380, 0x03, 0xbf) [ 3.838541] serial_out(ffffffffb6b98380, 0x02, 0x00) [ 3.838602] serial_out(ffffffffb6b98380, 0x03, 0x00) [ 3.838667] serial_out(ffffffffb6b98380, 0x02, 0x01) [ 3.838731] serial_in(ffffffffb6b98380, 0x02) -> 0xc1 [ 3.838791] serial_out(ffffffffb6b98380, 0x03, 0x00) [ 3.838853] serial_out(ffffffffb6b98380, 0x04, 0x00) [ 3.838891] serial_out(ffffffffb6b98380, 0x02, 0x01) [ 3.838891] serial_out(ffffffffb6b98380, 0x02, 0x07) [ 3.838891] serial_out(ffffffffb6b98380, 0x02, 0x00) [ 3.838891] serial_in(ffffffffb6b98380, 0x00) -> 0x1d [ 3.838891] serial_out(ffffffffb6b98380, 0x01, 0x00) [ 3.839232] iir=193 [ 3.839233] type=16550A [ 3.839347] 0000:07:00.0: ttyS5 at MMIO 0xe3601200 (irq = 17, base_baud = 15625000) is a 16550A [ 3.839424] serial_out(ffffffffb6b98380, 0x04, 0x80) Running this small test program: #!/usr/bin/python3 import serial p2 = serial.Serial('/dev/ttyS4', 19200) p2.write(b'\x55') Gives: [ 132.325041] serial_out(ffffffffb6b980a0, 0x02, 0x01) [ 132.325055] serial_out(ffffffffb6b980a0, 0x02, 0x07) [ 132.325060] serial_out(ffffffffb6b980a0, 0x02, 0x00) [ 132.325077] serial_in(ffffffffb6b980a0, 0x05) -> 0x60 [ 132.325105] serial_out(ffffffffb6b980a0, 0x04, 0x88) [ 132.325119] serial_in(ffffffffb6b980a0, 0x05) -> 0x60 [ 132.325134] serial_in(ffffffffb6b980a0, 0x06) -> 0xb0 [ 132.325140] serial_out(ffffffffb6b980a0, 0x07, 0x02) [ 132.325144] serial_out(ffffffffb6b980a0, 0x05, 0x09) [ 132.325148] serial_out(ffffffffb6b980a0, 0x07, 0x01) [ 132.325151] serial_out(ffffffffb6b980a0, 0x05, 0x09) [ 132.325155] serial_out(ffffffffb6b980a0, 0x07, 0x03) [ 132.325158] serial_out(ffffffffb6b980a0, 0x05, 0x00) [ 132.325162] serial_out(ffffffffb6b980a0, 0x00, 0x83) [ 132.325165] serial_out(ffffffffb6b980a0, 0x01, 0x02) [ 132.325169] serial_out(ffffffffb6b980a0, 0x04, 0x88) [ 132.325175] serial_out(ffffffffb6b980a0, 0x04, 0x8b) [ 132.325245] serial_out(ffffffffb6b980a0, 0x07, 0x02) [ 132.325251] serial_out(ffffffffb6b980a0, 0x05, 0x08) [ 132.325254] serial_out(ffffffffb6b980a0, 0x07, 0x01) [ 132.325257] serial_out(ffffffffb6b980a0, 0x05, 0x1f) [ 132.325261] serial_out(ffffffffb6b980a0, 0x07, 0x03) [ 132.325264] serial_out(ffffffffb6b980a0, 0x05, 0x00) [ 132.325267] serial_out(ffffffffb6b980a0, 0x00, 0x69) [ 132.325271] serial_out(ffffffffb6b980a0, 0x01, 0x00) [ 132.325274] serial_out(ffffffffb6b980a0, 0x04, 0x8b) [ 132.325377] serial_out(ffffffffb6b980a0, 0x01, 0x07) [ 132.325385] serial_in(ffffffffb6b980a0, 0x05) -> 0x60 [ 132.325389] serial_out(ffffffffb6b980a0, 0x00, 0x55) [ 132.325393] serial_out(ffffffffb6b980a0, 0x01, 0x05) [ 132.325623] serial_in(ffffffffb6b980a0, 0x05) -> 0xe9 [ 132.325633] serial_in(ffffffffb6b980a0, 0x00) -> 0x78 [ 132.325640] serial_in(ffffffffb6b980a0, 0x05) -> 0x60 [ 132.325647] serial_in(ffffffffb6b980a0, 0x06) -> 0xb0 [ 132.325758] serial_in(ffffffffb6b980a0, 0x05) -> 0xe9 [ 132.325768] serial_in(ffffffffb6b980a0, 0x00) -> 0x1e [ 132.325773] serial_in(ffffffffb6b980a0, 0x05) -> 0x60 [ 132.325780] serial_in(ffffffffb6b980a0, 0x06) -> 0xb0 [ 132.325935] serial_in(ffffffffb6b980a0, 0x05) -> 0xe9 [ 132.325943] serial_in(ffffffffb6b980a0, 0x00) -> 0x78 [ 132.325948] serial_in(ffffffffb6b980a0, 0x05) -> 0x60 [ 132.325955] serial_in(ffffffffb6b980a0, 0x06) -> 0xb0 [ 132.326602] serial_in(ffffffffb6b980a0, 0x05) -> 0x61 [ 132.326610] serial_in(ffffffffb6b980a0, 0x00) -> 0xfe [ 132.326615] serial_in(ffffffffb6b980a0, 0x05) -> 0x60 [ 132.326622] serial_in(ffffffffb6b980a0, 0x06) -> 0xb0 [ 132.473966] serial_in(ffffffffb6b980a0, 0x05) -> 0x60 [ 132.473978] serial_out(ffffffffb6b980a0, 0x04, 0x88) [ 132.473990] serial_out(ffffffffb6b980a0, 0x04, 0x80) [ 132.473996] serial_out(ffffffffb6b980a0, 0x02, 0x01) [ 132.474000] serial_out(ffffffffb6b980a0, 0x02, 0x07) [ 132.474004] serial_out(ffffffffb6b980a0, 0x02, 0x00) > Also I have identified a code piece that handles the EFR in a destructive > manner, which I must have previously missed, namely a conditional block > guarded by UART_CAP_EFR in `serial8250_do_set_termios'. It should likely > be fixed, however it is supposed not to matter for OxSemi chips due to: > > /* UART_CAP_EFR breaks billionon CF bluetooth card. */ > .flags = UART_CAP_FIFO | UART_CAP_SLEEP, > > which then leads to: > > serial 0000:07:00.3: detected caps 00000700 should be 00000500 > > and consequently UART_CAP_EFR gets cleared and this code block isn't > supposed to be reached. Can you confirm the presence of a similar message > in your log? Can not see any such message in my dmsg > NB it seems to me too big a hammer to have a generic serial port feature > globally disabled to work around an unidentified problem with an attached > particular serial device. Pavel, as the originator of commit d0694e2aeb81 > ("serial: unbreak billionton CF card") can you please explain what the > motivation was here? > > I could only track down two message threads related to the problem: > > <https://lore.kernel.org/lkml/20110106134254.68fa27ac@lxorguk.ukuu.org.uk/> > > and: > > <https://lore.kernel.org/linux-serial/4D001AF1.80902@mainpine.com/> > > but no attempt to actually narrow the issue down (also ISTM like a feature > such as flow control ought to be controlled via a termios call rather than > globally disabled). Also could the corruption of the EFR in what is now > `serial8250_do_set_termios' (and used to be `serial8250_set_termios' then) > mentioned above be the culprit? > /Anders -- Anders Blomdell Email: anders.blomdell@control.lth.se Department of Automatic Control Lund University Phone: +46 46 222 4625 P.O. Box 118 SE-221 00 Lund, Sweden ^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-14 11:01 ` Anders Blomdell @ 2022-09-14 11:41 ` Maciej W. Rozycki 2022-09-14 14:15 ` Maciej W. Rozycki 0 siblings, 1 reply; 25+ messages in thread From: Maciej W. Rozycki @ 2022-09-14 11:41 UTC (permalink / raw) To: Anders Blomdell; +Cc: Pavel Machek, Greg Kroah-Hartman, linux-serial On Wed, 14 Sep 2022, Anders Blomdell wrote: > [ 3.837914] ttyS5: autoconf (0x0000, 0x(____ptrval____)): > [ 3.837918] serial_in(ffffffffb6b98380, 0x01) -> 0x00 > [ 3.838041] serial_out(ffffffffb6b98380, 0x01, 0x00) > [ 3.838104] serial_in(ffffffffb6b98380, 0x01) -> 0x00 > [ 3.838165] serial_out(ffffffffb6b98380, 0x01, 0x0f) > [ 3.838229] serial_in(ffffffffb6b98380, 0x01) -> 0x0f > [ 3.838290] serial_out(ffffffffb6b98380, 0x01, 0x00) > [ 3.838353] serial_in(ffffffffb6b98380, 0x04) -> 0x00 > [ 3.838417] serial_in(ffffffffb6b98380, 0x03) -> 0x00 > [ 3.838479] serial_out(ffffffffb6b98380, 0x03, 0xbf) > [ 3.838541] serial_out(ffffffffb6b98380, 0x02, 0x00) > [ 3.838602] serial_out(ffffffffb6b98380, 0x03, 0x00) > [ 3.838667] serial_out(ffffffffb6b98380, 0x02, 0x01) > [ 3.838731] serial_in(ffffffffb6b98380, 0x02) -> 0xc1 > [ 3.838791] serial_out(ffffffffb6b98380, 0x03, 0x00) > [ 3.838853] serial_out(ffffffffb6b98380, 0x04, 0x00) > [ 3.838891] serial_out(ffffffffb6b98380, 0x02, 0x01) > [ 3.838891] serial_out(ffffffffb6b98380, 0x02, 0x07) > [ 3.838891] serial_out(ffffffffb6b98380, 0x02, 0x00) > [ 3.838891] serial_in(ffffffffb6b98380, 0x00) -> 0x1d > [ 3.838891] serial_out(ffffffffb6b98380, 0x01, 0x00) > [ 3.839232] iir=193 > [ 3.839233] type=16550A > [ 3.839347] 0000:07:00.0: ttyS5 at MMIO 0xe3601200 (irq = 17, base_baud = > 15625000) is a 16550A > [ 3.839424] serial_out(ffffffffb6b98380, 0x04, 0x80) Thank you. I gather your OxSemi devices are ttyS4 and ttyS5, right? So probing doesn't work for some reason and the port isn't even recognised as a 950 device, e.g. I have this for mine: ttyS0: autoconf (0x0000, 0x(____ptrval____)): EFRv2 950id=16:c9:50:0d serial 0000:07:00.3: detected caps 00000700 should be 00000500 iir=193 type=16C950/954 0000:07:00.3: ttyS0 at MMIO 0x60301000 (irq = 26, base_baud = 15625000) is a 16C950/954 I'll examine your I/O conversation log in detail and will see if I can come up with a possible explanation. NB I'm at the GNU Tools Cauldron conference from tomorrow through this coming Monday, so I may not be able to get to the bottom of this issue right away. Maciej ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-14 11:41 ` Maciej W. Rozycki @ 2022-09-14 14:15 ` Maciej W. Rozycki 2022-09-14 14:22 ` Anders Blomdell 2022-09-14 14:57 ` Greg Kroah-Hartman 0 siblings, 2 replies; 25+ messages in thread From: Maciej W. Rozycki @ 2022-09-14 14:15 UTC (permalink / raw) To: Anders Blomdell; +Cc: Pavel Machek, Greg Kroah-Hartman, linux-serial On Wed, 14 Sep 2022, Maciej W. Rozycki wrote: > I'll examine your I/O conversation log in detail and will see if I can > come up with a possible explanation. I think I know what is going on here. Can you please confirm that you have the CONFIG_SERIAL_8250_16550A_VARIANTS option disabled (default to "off" for x86 only)? That would explain things. Offhand I am not sure what to do here. There are several options to choose from I can think of right now: 1. Disable new OxSemi Tornado clock code iff !SERIAL_8250_16550A_VARIANTS, bringing back buggy calculation for rates above 115200bps and coarse BOTHER granularity. 2. Same as above, but additionally limit the baud rates to 115200bps to avoid buggy rates. 3. Force SERIAL_8250_16550A_VARIANTS to "y" if SERIAL_8250_PCI != "n". 4. Remove SERIAL_8250_16550A_VARIANTS altogether and execute code it guards unconditionally (does it still matter nowadays?). 5. Something else not yet determined. Greg, do you have any opinion? Maciej ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-14 14:15 ` Maciej W. Rozycki @ 2022-09-14 14:22 ` Anders Blomdell 2022-09-16 21:03 ` Maciej W. Rozycki 2022-09-14 14:57 ` Greg Kroah-Hartman 1 sibling, 1 reply; 25+ messages in thread From: Anders Blomdell @ 2022-09-14 14:22 UTC (permalink / raw) To: Maciej W. Rozycki; +Cc: Pavel Machek, Greg Kroah-Hartman, linux-serial On 2022-09-14 16:15, Maciej W. Rozycki wrote: > On Wed, 14 Sep 2022, Maciej W. Rozycki wrote: > >> I'll examine your I/O conversation log in detail and will see if I can >> come up with a possible explanation. > > I think I know what is going on here. Can you please confirm that you > have the CONFIG_SERIAL_8250_16550A_VARIANTS option disabled (default to > "off" for x86 only)? That would explain things. Just found that myself while going through the initializaton sequence (while now knowing what to look for) Thats what you get for choosing Fedora ;-) > > Offhand I am not sure what to do here. There are several options to > choose from I can think of right now: > > 1. Disable new OxSemi Tornado clock code iff !SERIAL_8250_16550A_VARIANTS, > bringing back buggy calculation for rates above 115200bps and coarse > BOTHER granularity. > > 2. Same as above, but additionally limit the baud rates to 115200bps to > avoid buggy rates. > > 3. Force SERIAL_8250_16550A_VARIANTS to "y" if SERIAL_8250_PCI != "n". > > 4. Remove SERIAL_8250_16550A_VARIANTS altogether and execute code it > guards unconditionally (does it still matter nowadays?). > > 5. Something else not yet determined. > > Greg, do you have any opinion? > > Maciej -- Anders Blomdell Email: anders.blomdell@control.lth.se Department of Automatic Control Lund University Phone: +46 46 222 4625 P.O. Box 118 SE-221 00 Lund, Sweden ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-14 14:22 ` Anders Blomdell @ 2022-09-16 21:03 ` Maciej W. Rozycki 2022-09-19 6:50 ` Anders Blomdell 0 siblings, 1 reply; 25+ messages in thread From: Maciej W. Rozycki @ 2022-09-16 21:03 UTC (permalink / raw) To: Anders Blomdell; +Cc: Pavel Machek, Greg Kroah-Hartman, linux-serial On Wed, 14 Sep 2022, Anders Blomdell wrote: > > I think I know what is going on here. Can you please confirm that you > > have the CONFIG_SERIAL_8250_16550A_VARIANTS option disabled (default to > > "off" for x86 only)? That would explain things. > Just found that myself while going through the initializaton sequence (while > now knowing what to look for) > > Thats what you get for choosing Fedora ;-) May I suggest that as a person directly affected you file a defect with the distribution? I think a distribution kernel should in principle have all the reasonable features enabled for the hardware handled. Maciej ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-16 21:03 ` Maciej W. Rozycki @ 2022-09-19 6:50 ` Anders Blomdell 0 siblings, 0 replies; 25+ messages in thread From: Anders Blomdell @ 2022-09-19 6:50 UTC (permalink / raw) To: Maciej W. Rozycki; +Cc: Pavel Machek, Greg Kroah-Hartman, linux-serial On 2022-09-16 23:03, Maciej W. Rozycki wrote: > On Wed, 14 Sep 2022, Anders Blomdell wrote: > >>> I think I know what is going on here. Can you please confirm that you >>> have the CONFIG_SERIAL_8250_16550A_VARIANTS option disabled (default to >>> "off" for x86 only)? That would explain things. >> Just found that myself while going through the initializaton sequence (while >> now knowing what to look for) >> >> Thats what you get for choosing Fedora ;-) > > May I suggest that as a person directly affected you file a defect with > the distribution? I think a distribution kernel should in principle have > all the reasonable features enabled for the hardware handled. First thing I did :-) https://bugzilla.redhat.com/show_bug.cgi?id=2126201 > > Maciej -- Anders Blomdell Email: anders.blomdell@control.lth.se Department of Automatic Control Lund University Phone: +46 46 222 4625 P.O. Box 118 SE-221 00 Lund, Sweden ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-14 14:15 ` Maciej W. Rozycki 2022-09-14 14:22 ` Anders Blomdell @ 2022-09-14 14:57 ` Greg Kroah-Hartman 2022-09-15 10:09 ` Anders Blomdell 1 sibling, 1 reply; 25+ messages in thread From: Greg Kroah-Hartman @ 2022-09-14 14:57 UTC (permalink / raw) To: Maciej W. Rozycki; +Cc: Anders Blomdell, Pavel Machek, linux-serial On Wed, Sep 14, 2022 at 03:15:52PM +0100, Maciej W. Rozycki wrote: > On Wed, 14 Sep 2022, Maciej W. Rozycki wrote: > > > I'll examine your I/O conversation log in detail and will see if I can > > come up with a possible explanation. > > I think I know what is going on here. Can you please confirm that you > have the CONFIG_SERIAL_8250_16550A_VARIANTS option disabled (default to > "off" for x86 only)? That would explain things. > > Offhand I am not sure what to do here. There are several options to > choose from I can think of right now: > > 1. Disable new OxSemi Tornado clock code iff !SERIAL_8250_16550A_VARIANTS, > bringing back buggy calculation for rates above 115200bps and coarse > BOTHER granularity. > > 2. Same as above, but additionally limit the baud rates to 115200bps to > avoid buggy rates. Maybe this one? That feels odd that we do different things for this old config option, that's not good. So making this "just work" should be the best idea if at all possible. > > 3. Force SERIAL_8250_16550A_VARIANTS to "y" if SERIAL_8250_PCI != "n". > > 4. Remove SERIAL_8250_16550A_VARIANTS altogether and execute code it > guards unconditionally (does it still matter nowadays?). > > 5. Something else not yet determined. We can't just remove it, as for x86 the default is disabled due to this only being relevant for very old hardware. thanks, greg k-h ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-14 14:57 ` Greg Kroah-Hartman @ 2022-09-15 10:09 ` Anders Blomdell 2022-09-16 21:03 ` Maciej W. Rozycki 0 siblings, 1 reply; 25+ messages in thread From: Anders Blomdell @ 2022-09-15 10:09 UTC (permalink / raw) To: Greg Kroah-Hartman, Maciej W. Rozycki; +Cc: Pavel Machek, linux-serial On 2022-09-14 16:57, Greg Kroah-Hartman wrote: > On Wed, Sep 14, 2022 at 03:15:52PM +0100, Maciej W. Rozycki wrote: >> On Wed, 14 Sep 2022, Maciej W. Rozycki wrote: >> >>> I'll examine your I/O conversation log in detail and will see if I can >>> come up with a possible explanation. >> >> I think I know what is going on here. Can you please confirm that you >> have the CONFIG_SERIAL_8250_16550A_VARIANTS option disabled (default to >> "off" for x86 only)? That would explain things. >> >> Offhand I am not sure what to do here. There are several options to >> choose from I can think of right now: >> >> 1. Disable new OxSemi Tornado clock code iff !SERIAL_8250_16550A_VARIANTS, >> bringing back buggy calculation for rates above 115200bps and coarse >> BOTHER granularity. >> >> 2. Same as above, but additionally limit the baud rates to 115200bps to >> avoid buggy rates. > > Maybe this one? That feels odd that we do different things for this old > config option, that's not good. So making this "just work" should be > the best idea if at all possible. > >> >> 3. Force SERIAL_8250_16550A_VARIANTS to "y" if SERIAL_8250_PCI != "n". >> >> 4. Remove SERIAL_8250_16550A_VARIANTS altogether and execute code it >> guards unconditionally (does it still matter nowadays?). >> >> 5. Something else not yet determined. We could force an EFR probe for this specific driver only. Pros: driver behaves the same regardless of CONFIG_SERIAL_8250_16550A_VARIANTS other chips/drivers will not get probed Cons: autoconfig code will be somewhat bigger since code after the test will be reachable change in unrelated part (8250_core.c) to propagate .probe flags diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c index 82726cda6066..b9f28f95cfd5 100644 --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c @@ -1011,6 +1011,7 @@ int serial8250_register_8250_port(const struct uart_8250_port *up) uart->rs485_start_tx = up->rs485_start_tx; uart->rs485_stop_tx = up->rs485_stop_tx; uart->dma = up->dma; + uart->probe = up->probe; /* Take tx_loadsz from fifosize if it wasn't set separately */ if (uart->port.fifosize && !uart->tx_loadsz) diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c index f6732c1ed238..b0b21e49ec6c 100644 --- a/drivers/tty/serial/8250/8250_pci.c +++ b/drivers/tty/serial/8250/8250_pci.c @@ -1242,6 +1242,7 @@ static int pci_oxsemi_tornado_setup(struct serial_private *priv, up->port.get_divisor = pci_oxsemi_tornado_get_divisor; up->port.set_divisor = pci_oxsemi_tornado_set_divisor; up->port.set_mctrl = pci_oxsemi_tornado_set_mctrl; + up->probe |= UART_PROBE_EFR; } return pci_default_setup(priv, board, up, idx); diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c index 2b86c55ed374..b207d9982936 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -1029,9 +1029,9 @@ static void autoconfig_16550a(struct uart_8250_port *up) up->port.type = PORT_16550A; up->capabilities |= UART_CAP_FIFO; - if (!IS_ENABLED(CONFIG_SERIAL_8250_16550A_VARIANTS)) + if (!IS_ENABLED(CONFIG_SERIAL_8250_16550A_VARIANTS) && + !(up->probe & UART_PROBE_EFR)) return; - /* * Check for presence of the EFR when DLAB is set. * Only ST16C650V1 UARTs pass this test. diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h index ff84a3ed10ea..0855316468e2 100644 --- a/include/linux/serial_8250.h +++ b/include/linux/serial_8250.h @@ -112,6 +112,7 @@ struct uart_8250_port { unsigned char probe; struct mctrl_gpios *gpios; #define UART_PROBE_RSA (1 << 0) +#define UART_PROBE_EFR (1 << 1) /* * Some bits in registers are cleared on a read, so they must > > We can't just remove it, as for x86 the default is disabled due to this > only being relevant for very old hardware. > > thanks, > > greg k-h -- Anders Blomdell Email: anders.blomdell@control.lth.se Department of Automatic Control Lund University Phone: +46 46 222 4625 P.O. Box 118 SE-221 00 Lund, Sweden ^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-15 10:09 ` Anders Blomdell @ 2022-09-16 21:03 ` Maciej W. Rozycki 0 siblings, 0 replies; 25+ messages in thread From: Maciej W. Rozycki @ 2022-09-16 21:03 UTC (permalink / raw) To: Anders Blomdell; +Cc: Greg Kroah-Hartman, Pavel Machek, linux-serial On Thu, 15 Sep 2022, Anders Blomdell wrote: > > > 1. Disable new OxSemi Tornado clock code iff !SERIAL_8250_16550A_VARIANTS, > > > bringing back buggy calculation for rates above 115200bps and coarse > > > BOTHER granularity. > > > > > > 2. Same as above, but additionally limit the baud rates to 115200bps to > > > avoid buggy rates. > > > > Maybe this one? That feels odd that we do different things for this old > > config option, that's not good. So making this "just work" should be > > the best idea if at all possible. Though quite an invasive one too IMO to deal with a corner case, plus distributions would likely get it wrong, just as this case indicates, and would ship a crippled (though at least working) driver. > > > 3. Force SERIAL_8250_16550A_VARIANTS to "y" if SERIAL_8250_PCI != "n". > > > > > > 4. Remove SERIAL_8250_16550A_VARIANTS altogether and execute code it > > > guards unconditionally (does it still matter nowadays?). > > > > > > 5. Something else not yet determined. > We could force an EFR probe for this specific driver only. Having investigated the history of SERIAL_8250_16550A_VARIANTS and the possible options I came to a similar conclusion. I wasn't aware the option has about only just been introduced and must have confused it with one of the older ones such as SERIAL_8250_EXTENDED, which has been there since forever. > Pros: driver behaves the same regardless of CONFIG_SERIAL_8250_16550A_VARIANTS > other chips/drivers will not get probed > Cons: autoconfig code will be somewhat bigger since code after the test will > be reachable > change in unrelated part (8250_core.c) to propagate .probe flags But SERIAL_8250_16550A_VARIANTS is quite a recent addition and the motivation wasn't code size, so I wouldn't be concerned here. Another pro is the change is small and sweet, so no large chunks of code to maintain. And it is expandable easily to other subdrivers should they need a similar arrangement. > diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h > index ff84a3ed10ea..0855316468e2 100644 > --- a/include/linux/serial_8250.h > +++ b/include/linux/serial_8250.h > @@ -112,6 +112,7 @@ struct uart_8250_port { > unsigned char probe; > struct mctrl_gpios *gpios; > #define UART_PROBE_RSA (1 << 0) > +#define UART_PROBE_EFR (1 << 1) > /* > * Some bits in registers are cleared on a read, so they must I chose to do it differently though. And I got stumped, because when I got to verifying it I decided to double-check my code with a 32-bit system too, that is my x86 box. And surprisingly existing code worked correctly despite having SERIAL_8250_16550A_VARIANTS unset as if the fix wasn't needed in the first place. After a lot of fiddling I realised there is a feature of the OxSemi ASIC that is not documented in the datasheet, the existence of which however you can read about between the lines: "Extending CPR for Legacy UART "When operating in Legacy UART mode, the system drivers will assume the industry standard 1.8432MHz reference clock. As the Reference clock for the UARTs in the OXPCIe952 is 62.5MHz, all DLL/DLM values will be incorrect if no pre-scaling is done by the UART. In order to correct this effect the CPR register must divide the reference clock by 33.90842 which is approximated to 33.875 by default after a reset. As such the CPR has been extended to support a larger 6 bit integer range by using bit-0 of CPR2 to represent bit-6 of the integer portion of the clock pre-scalar" What it doesn't say is that in the legacy UART mode the Divide-by-M N/8 prescaler is implicitly enabled despite that the MCR[7] bit is forced 0 in the non-enhanced mode. This is opposite to how things work in the native UART mode where the MCR[7] bit is respected regardless. It is only when the enhanced mode is enabled via EFR[4] that the MCR[7] bit is respected both in the legacy and the native UART mode. It makes sense, because legacy 8250 UART drivers will expect to work with `base_baud' set to 115200 while using the MCR the way it has been with the original 16450 chip. Conversely legacy 16450 UART drivers do not support the native UART mode anyway, so it doesn't have to implement this special case. And I have the option card jumpered to work in the legacy UART mode in my x86 system (just so that I can verify both modes of operation at any time): 0000:04:00.0: ttyS2 at I/O 0x1000 (irq = 10, base_baud = 15625000) is a 16C950/954 0000:04:00.1: ttyS3 at I/O 0x1008 (irq = 5, base_baud = 15625000) is a 16C950/954 04:00.0 Serial controller [0700]: Oxford Semiconductor Ltd OXPCIe952 Legacy 950 UART #1 [1415:c144] 04:00.1 Serial controller [0700]: Oxford Semiconductor Ltd OXPCIe952 Legacy 950 UART #2 [1415:c145] vs the native UART mode (here in POWER9): 0001:01:00.0: ttyS0 at MMIO 0x600c080401000 (irq = 40, base_baud = 15625000) is a 16C950/954 0001:01:00.0: ttyS1 at MMIO 0x600c080401200 (irq = 40, base_baud = 15625000) is a 16C950/954 0001:01:00.0 Serial controller [0700]: Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART [1415:c158] Oh well! With that phenomenon sorted I'll be posting the final fix shortly, as soon I have made a suitable change description referring the relevant sources. I take it you don't mind being mentioned by means of `Reported-by'? Maciej ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-09-13 12:16 ` Anders Blomdell 2022-09-13 12:30 ` Greg Kroah-Hartman @ 2022-10-04 20:39 ` Grant Edwards 2022-10-04 21:14 ` Grant Edwards 2022-10-05 10:02 ` Ilpo Järvinen 1 sibling, 2 replies; 25+ messages in thread From: Grant Edwards @ 2022-10-04 20:39 UTC (permalink / raw) To: linux-serial On 2022-09-13, Anders Blomdell <anders.blomdell@control.lth.se> wrote: > I get incorrect baudrates, my oscilloscope gives: > > Programmed Measured > > 2400 5208 > 4800 13150 > 9600 10410 > 19200 71420 > 38400 142000 > 57600 201600 > 115200 138800 I just ran into what I think is the same problem when upgrading from 5.10.76 to 5.15.68 (sorry I don't have any intermediate kernel versions to test with). This is an oxford quad 950 board that has worked flawlessly for many years. Now the baud rates are all wrong. $ lspci | grep OX 03:00.0 Serial controller: Oxford Semiconductor Ltd OXPCIe954 Quad Native 950 UART $ dmesg | grep ttyS [ 0.265026] 0000:03:00.0: ttyS0 at MMIO 0xf7801000 (irq = 19, base_baud = 15625000) is a 16550A [ 0.265130] 0000:03:00.0: ttyS1 at MMIO 0xf7801200 (irq = 19, base_baud = 15625000) is a 16550A [ 0.265231] 0000:03:00.0: ttyS2 at MMIO 0xf7801400 (irq = 19, base_baud = 15625000) is a 16550A [ 0.265358] 0000:03:00.0: ttyS3 at MMIO 0xf7801600 (irq = 19, base_baud = 15625000) is a 16550A The only change I could see in dmesg/setserial output is that the baud base changed from 4000000 to 15625000. However, changing the baud base back to 4000000 does not make the ports work again With the default baud base of 15625000, baud rates look like this: Programmed Measured 2400 5398 4800 13812 9600 10796 19200 74418 The curious thing is that the buad rate errors are non-linear, so you can't just adjust the base baud value to get correct baud rates. The algorithm used to calculate the baud divisors seems to be broken. I've read through the rest of this thread a couple times, but was unable to figure out what to do to fix this problem or if it got fixed in more recent kernel versions. Did this problem get fixed in more recent kernels? Is there something I can do with a 6.15 kernel to get it this board to work again? -- Grant ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-10-04 20:39 ` Grant Edwards @ 2022-10-04 21:14 ` Grant Edwards 2022-10-05 10:02 ` Ilpo Järvinen 1 sibling, 0 replies; 25+ messages in thread From: Grant Edwards @ 2022-10-04 21:14 UTC (permalink / raw) To: linux-serial On 2022-10-04, Grant Edwards <grant.b.edwards@gmail.com> wrote: > I just ran into what I think is the same problem when upgrading from > 5.10.76 to 5.15.68 (sorry I don't have any intermediate kernel > versions to test with). This is an oxford quad 950 board that has > worked flawlessly for many years. Now the baud rates are all wrong. > > [...] After reading through the thread a third time, I tried enabling CONFIG_SERIAL_8250_16550A_VARIANTS in my 6.15.69 kernel, and my quad Oxford board works again. The first two times I read through the thread I misunderstood the statement Can you please confirm that you have the CONFIG_SERIAL_8250_16550A_VARIANTS option disabled (default to "off" for x86 only)? as meaning that you should disable that option as a prerequisite to making it work. So I checked to make sure it was disabled (it was). Yes, it's obvious now what was meant was that having it disabled explains the previous observations. -- Grant ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) 2022-10-04 20:39 ` Grant Edwards 2022-10-04 21:14 ` Grant Edwards @ 2022-10-05 10:02 ` Ilpo Järvinen 1 sibling, 0 replies; 25+ messages in thread From: Ilpo Järvinen @ 2022-10-05 10:02 UTC (permalink / raw) To: Grant Edwards; +Cc: linux-serial On Tue, 4 Oct 2022, Grant Edwards wrote: > On 2022-09-13, Anders Blomdell <anders.blomdell@control.lth.se> wrote: > > I get incorrect baudrates, my oscilloscope gives: > > > > Programmed Measured > > > > 2400 5208 > > 4800 13150 > > 9600 10410 > > 19200 71420 > > 38400 142000 > > 57600 201600 > > 115200 138800 > > I just ran into what I think is the same problem when upgrading from > 5.10.76 to 5.15.68 (sorry I don't have any intermediate kernel > versions to test with). This is an oxford quad 950 board that has > worked flawlessly for many years. Now the baud rates are all wrong. > > $ lspci | grep OX > 03:00.0 Serial controller: Oxford Semiconductor Ltd OXPCIe954 Quad Native 950 UART > > $ dmesg | grep ttyS > [ 0.265026] 0000:03:00.0: ttyS0 at MMIO 0xf7801000 (irq = 19, base_baud = 15625000) is a 16550A > [ 0.265130] 0000:03:00.0: ttyS1 at MMIO 0xf7801200 (irq = 19, base_baud = 15625000) is a 16550A > [ 0.265231] 0000:03:00.0: ttyS2 at MMIO 0xf7801400 (irq = 19, base_baud = 15625000) is a 16550A > [ 0.265358] 0000:03:00.0: ttyS3 at MMIO 0xf7801600 (irq = 19, base_baud = 15625000) is a 16550A > > The only change I could see in dmesg/setserial output is that the > baud base changed from 4000000 to 15625000. However, changing the baud > base back to 4000000 does not make the ports work again > > With the default baud base of 15625000, baud rates look like this: > > Programmed Measured > 2400 5398 > 4800 13812 > 9600 10796 > 19200 74418 > > The curious thing is that the buad rate errors are non-linear, so you > can't just adjust the base baud value to get correct baud rates. The > algorithm used to calculate the baud divisors seems to be broken. > > I've read through the rest of this thread a couple times, but was > unable to figure out what to do to fix this problem or if it got fixed > in more recent kernel versions. > > Did this problem get fixed in more recent kernels? This series was used to fix the problem: https://lore.kernel.org/linux-serial/alpine.DEB.2.21.2209201659350.41633@angie.orcam.me.uk/T/#t Patch 2/3 went only for v5.19+. -- i. > Is there something I can do with a 6.15 kernel to get it this board to > work again? > > -- > Grant > ^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2022-10-05 10:02 UTC | newest] Thread overview: 25+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-09-12 19:59 kernel 5.19.8: "Oxford Semiconductor Ltd OXPCIe952 Dual Native 950 UART" gets wrong baudrate (PCI ID 1415:c158) Anders Blomdell 2022-09-13 8:21 ` Greg Kroah-Hartman 2022-09-13 12:16 ` Anders Blomdell 2022-09-13 12:30 ` Greg Kroah-Hartman 2022-09-13 12:43 ` Anders Blomdell 2022-09-13 14:01 ` Greg Kroah-Hartman 2022-09-13 15:34 ` Anders Blomdell 2022-09-13 16:19 ` Maciej W. Rozycki 2022-09-13 17:17 ` Anders Blomdell 2022-09-16 21:50 ` Maciej W. Rozycki 2022-09-13 18:59 ` Anders Blomdell 2022-09-13 21:07 ` Anders Blomdell 2022-09-14 0:00 ` Maciej W. Rozycki 2022-09-14 11:01 ` Anders Blomdell 2022-09-14 11:41 ` Maciej W. Rozycki 2022-09-14 14:15 ` Maciej W. Rozycki 2022-09-14 14:22 ` Anders Blomdell 2022-09-16 21:03 ` Maciej W. Rozycki 2022-09-19 6:50 ` Anders Blomdell 2022-09-14 14:57 ` Greg Kroah-Hartman 2022-09-15 10:09 ` Anders Blomdell 2022-09-16 21:03 ` Maciej W. Rozycki 2022-10-04 20:39 ` Grant Edwards 2022-10-04 21:14 ` Grant Edwards 2022-10-05 10:02 ` Ilpo Järvinen
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.