On Tue, Apr 07, 2020 at 09:30:21AM +0200, gianluca wrote: > I have a BIG trouble having dataloss when using two internal serial ports of > my boards based on NXP/FreeScale iMX28 SoC ARMv5Te ARM920ej-s architecture. > > It runs at 454Mhz. > > Kernel used 4.9.x That's a very old kernel, you are going to have to get support for that from the vendor you bought it from :( > When using my test case unit software between two serial ports connect each > other by a null modem cable, it fails when the speed rate are different, Of course, how would that work? > and > dataloss is increasing higher the speed rate. What type of flow control are you using? > I suppose to have overruns (now I am modifying my software to check them > too), but I think it is due the way the ISR is called and all data are > passed to the uart circular buffer within the interrupt routine. Are you using flow control? > I am talking about the high latency from the IRQ up to the service routine > when flushing the FIFO and another IRQ is called by another uart in the same > time at different speed. > > The code I was looking is: drivers/tty/serial/mxs-auart.c __but__ all other > serial drivers are acting in the same way: they are reading one character at > time from the FIFO (if it exists) and put it into the circular buffer so > serial/tty driver can pass them to the user read routine. > > Each function call has some overhead and it is time-consuming, and if > another interrupt is invoked by the same UART Core but from another serial > port (different context) the continuos insertion done by hardware UART into > the FIFO cannot be served fast enough to have an overrun. I think this can > be applied __almost__ to every serial driver as they are written in the same > way. > > And it is __NOT__ an issue because of the CPU and its speed! Using two > serial converter (FTDI and Prolific PL2303 based) on each board, the problem > does not appear at all even after 24 hours running at more than 115200!!! usb-serial devices are totally different and send data to the host in a completly different way. Your hardware might just not be able to handle really high baud rates at a continous stream, what baud rate were you using? And again, this is what flow control was designed for, please use it. > It does work fine if I am using two different serial devices: one internal > uart (mxs-auart) and an external uart (ttyUSB). Again, different interrupt and protocols being used for the USB stuff. thanks, greg k-h