A search of this community for "enable_wait_mode" reveals a number of posts, all of which point to or advise that "enable_wait_mode=off" be set in the kernel command line for i.MX6.
Obviously the next question is, what does this do? Well, the answer seems to be quite a lot. It disables some functionality that Freescale added in 3.0.35 related to the way that the device handles interrupts during some power mode state changes.
Here is the latest commit that I believe affects this:
The author of the commit describes it this way:
“Add the new WAIT mode workaround added for MX6Q1.2 and MX6DLTO1.1. A new bit is added to CCM_CGPR (bit 17). This bit needs to be enabled for the WAIT mode fix to be active and needs to be disabled before the system enters STOP mode with power gating enabled. Fix WAIT mode bug when system is in low power IDLE mode: In low power IDLE mode (AHB @ 24MHz), switch ARM to run from 24MHz on MX6QTO1.1 and MX6DLTO1.0 chips when ARM core enters WAIT mode. We still need to use the ARM:IPG_CLK ratio of 12:5. Since IPG_CLK is at 12MHz, we need to run ARM below 28.8MHz.”
That’s pretty much over my head at this point, without further research. But, what I gather is this. You can turn off the workaround using enable_wait_mode=off (it is on by default), and that has led others to see that some of their network latency issues are fixed. I’m not sure *why* this is. It seems to affect how the Linux idle loop works and it does seem to pertain to a feature introduced in TO1.2.
So - here are my questions:
- Is setting enable_wait_mode=off an acceptable long term solution? If so, why is this functionality even in the kernel?
- If it is not, then is Freescale looking into the issues that we are seeing with network latency when WAIT mode is enabled by default?