CPUIDLE impacts on the serial line


I've been searching for discussions and potential solutions to this
problem for a little while on this list and on the linux-omap mailing
list without much success, although it appears to be a known problem
(I recall reading someone report it on IRC #beagle).

It looks like CPUIDLE is interfering with the proper operation of the
serial connection with the BeagleBoard. When using CPUIDLE, the
following happens :

  * after boot up, if you login immediately, the serial console works
great. But if you let it idle for a few seconds, and then start typing
again (so waking up from CPU idle), the first character you type is
not registered and a junk character appears on the terminal ;
  * regardless of your previous action (either directly after boot up,
or after a login session), if you go back to the login prompt and wait
more than five seconds, when waking up from CPU idle the serial
console becomes entirely unusable, with junk characters appearing with
anything you type, and in place of anything you receive. Only a reboot
can get the serial console back in working order.

These two behaviors are reproducible everytime, and are present in the
latest linux-omap-2.6 tree (PM branch), and as far back as 2.6.29 at
least. Note that the board continues to operate correctly, and SSH
connections are working fine, so the problem clearly lies with the
UART. Maybe something in the waking up sequence from CPU idle
interferes with a UART line? I don't have the equipment here to verify
that theory, nor much of the knowledge I would need to actually make
sense out of what I measure :slight_smile:

For now, the workaround is to disable CPU idle, either by not
compiling the feature in the first place, or to disable the UART
timeout, preventing the CORE and PER powerdomains to reach low power
mode. But it's too bad loosing the CPU idle feature.

Are other people experiencing this behavior too? Is there a solution
currently in the works?

- Maxime Petazzoni


I have seen the exact same problem, but I have not been able to solve