Our system is based off the imx8mm and I am currently using the Android 10 2.5.0 build tree.
I have an issue with our Bluetooth UART. It uses UART1 with the CTS/RTS lines on UART3. The UART will stall at some point, and no more HCI/Bluetooth traffic will be sent from the controller to the host. I have tracked it down to the fact that the UART FIFO will hit the float level and assert CTS. the float level is set to 16, in the imx.c UART driver. This UART is configured to use SDMA (imx-sdma.c) to move the data to/from the UART RX and TX FIFO's. What appears to be happening is that we have some SDMA overrun/error that causes the SDMA driver to leave 16 bytes in the RX FIFO which forces the UART to assert CTS and halts all data flow. This stall does not self-correct.
Has this been seen by anyone else, and or an update in one of the newer Android or Linux builds ? I can I detect and self-correct this stall ?
Thanks,
Chris
Hi Chris
from team:
----------
Two quick suggestions on this issue:
1. Try other BSPs to verify this issue? For example, Linux Linux 5.10.52_2.1.0;
2. Checked the related pinmux.
By the way, does UART1 have the issue at the begining? Or it work at the begining then have the stall issue?
----------
Best regards
igor
Is there a place I can view the drivers online of the other BSP's without having to sync to the repo ?
I have made improvements by increasing the buffer descriptors in the imx.c file from 4 to 16. Also found this link which seems to be an attempt to fix this issue.
https://lore.kernel.org/linux-arm-kernel/20190911144943.21554-3-philipp.puschmann@emlix.com/
from team:
--------------------
you can check it online:
https://source.codeaurora.org/external/imx/linux-imx/
--------------------
attached is Linux Manual with description of all drivers.
Best regards
igor
for Android it is the same as it is based on Linux, for example for Android 10 2.5.0 it is L5.4.47_2.2.0 :
Best regards
igor