I have a custom board using the i.MX6UL processor that is getting the following error repeated about 50-100 times a second:
imx-uart 21f0000.serial: Rx FIFO overrun
This message starts appearing about 10 seconds after I get a login prompt.
This problem is occurring using the imx_3.14.52_1.1.0_ga kernel, but it did not occur when using the imx_3.14.38_6ul_ga kernel with the 9x9_patch patches. I am using the same .dts file for my custom board between the two kernels and the same kernel .config between the two kernels.
Here is the relavant sections of my .dts file for uarts:
chosen {
stdout-path = &uart1;
};
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart1>;
status = "okay";
};
&uart4 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart4>;
status = "okay";
};
pinctrl_uart1: uart1grp {
fsl,pins = <
MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1
MX6UL_PAD_UART1_RX_DATA__UART1_DCE_RX 0x1b0b1
>;
};
pinctrl_uart4: uart4grp {
fsl,pins = <
MX6UL_PAD_LCD_CLK__UART4_DCE_TX 0x1b0b1
MX6UL_PAD_LCD_ENABLE__UART4_DCE_RX 0x1b0b1
>;
};
Does anyone have any ideas on how to resolve this issue?
Solved! Go to Solution.
I tried using the new rel_imx_4.1.15_1.1.0_ga Linux kernel and this seems to have resolved the issue. I know do not get the Rx FIFO overrun error and the serial port is working much better now.
Hi,
There were a few changes in the imx.c file located in the /drivers/tty/serial folder. The comments related to these changes apply to the rx path.
Are you getting the same problems with our EVK?
Best Regards,
Alejandro
Alejandro,
On my custom board I am using i.MX6UL pins A8 (LCD_CLK) and pin B8 (LCD_ENABLE) IOMuxed as UART4_TX and UART4_RX. On the i.MX6UL EVK board the pins are IOMuxed to LCD_CLK and LCD_ENABLE, so there is a different IOMuxing configuration which makes testing this not immediately possible without modifying the EVK board. Additionally it looks like the UART4 functionality is not actually IOMuxed anywhere on the EVK, so that UART is not used with its current configuration.
Regards,
Matthew Starr
Some additional information on the issue is the UART4 line is connected to a GPS unit at 9600 baud and the Rx FIFO overrun starts occurring about 15-20 seconds after gpsd is running on the /dev/ttymxc3 serial interface. If gpsd is killed, then the messages stop. When using minicom on /dev/ttymx3 at 9600 baud, the issue does not appear. It looks like gpsd is using some feature of the driver that causes it to encounter a buffer overrun in the newest imx_3.14.52_1.1.0_ga kernel. I am running gpsd with the following command:
gpsd -n -N -D 2 /dev/ttymcx3
Additionally UART1 is being used as a serial terminal to login to the custom board and does not seem to cause this issue when a serial terminal program from an attached PC is connected.
Hi,
The overrun occurs when one byte has been received and the FIFO is full, and the MPU discards the last byte.
A few things I would try are:
1.- Use the 3.14.38 imx.c serial tty driver
2.- Change or try to use a different UART module (one used for the console) and see if the error remains.
3.- Increase the RXTL_UART macro found in the imx.c file to increase the threshold of the RX FIFO.
Please try that and let me know how it goes.
Best Regards,
Alejandro
Alejandro,
None of the suggestions above seemed to fix the issue.
1. I reverted the commits between imx_3.14.38_6ul_ga and imx_3.14.52_1.1.0_ga tags for the imx.c driver. No change in issue.
2. Can't change UART since it is embedded on a board.
3. Delayed the issue occurring but the issue still occurred.
Any other suggestions?
Best Regards,
Matthew
I tried using the new rel_imx_4.1.15_1.1.0_ga Linux kernel and this seems to have resolved the issue. I know do not get the Rx FIFO overrun error and the serial port is working much better now.