Skip to content

Draft: arm:imx:cpuidle-imx6sx: disable low power idle state for nallino

This is a workaround for issue https://secogroup.atlassian.net/browse/YT-201 (Nallino: rs485echo test fails on high baudrates when size of message to transmit is bigger than UART FIFO bufffer)

During investigation of the issue it was found that:

  • when kernel reaches a UART FIFO to get received data in interrupt handler, we got an Overran Error in status register and some data is lost already;
  • so, kernel/hardware is just too slow to process incoming data;
  • herewith when we increased CPU frequency to maximum value, it has not helped. The only solution was to launch some stress test in parallel - in this case, kernel was able to process data from UART despite heavy load;
  • after that, we checked a NXP kernel and found that it is not affected by this issue;
  • so, we bisected that the problem is in cpuilde driver for IMX6ULL CPU in vanilla kernel. By contrast with NXP kernel, there is no iMX6ULL specific driver and a universal one (cpuidle-imx6sx.c) is used;
  • this universal driver does not use all hardware capabilities of iMX6ULL CPU, and because of this it's too slow in waking up CPU from LOW-POWER-IDLE state;
  • and this sloppiness results in following problems at least: x overrun errors in RX FIFO when UART operates on speeds higher than 115200 bps (https://secogroup.atlassian.net/issues/YT-201) x delays when RS485 switches from RX to TX, which causes ordinary RS485 tests to fail (https://secogroup.atlassian.net/issues/YT-136)

The proper solution, would be to port cpuidle-imx6ul.c from NXP kernel, but it would require reasonable efforts, as it does not work in vanilla out of box.

So, in current MR, we:

  • just disable LOW-POWER-IDLE state in kernel for Nallino board. So, the existing cpuidle driver won't put device in this state any more;
  • revert a previous workaround/fix for RS485 turnaround issue on Nallino (f049bdc6).
Edited by Mikhail Vanyulin

Merge request reports

Loading