[PATCH 1/8] ARM: OMAP: fix DMA vs memory ordering

Russell King - ARM Linux linux at arm.linux.org.uk
Wed Apr 18 06:26:39 EDT 2012


On Wed, Apr 18, 2012 at 01:18:55PM +0300, Felipe Balbi wrote:
> On Wed, Apr 18, 2012 at 11:17:33AM +0100, Russell King - ARM Linux wrote:
> > Has anyone seen a problem (other than me when trying to get DMA engine
> > working with omap-serial transmit paths) ?
> 
> probably not since omap-serial isn't using DMA anyway. Nevermind

... which is a good thing because the driver is rather broken for DMA
support (take a look at what the set_termios() method does, and consider
what happens if that function is called when there's DMA activity
outstanding.)

I've come to the conclusion that it's not worth the effort to try to
convert omap-serial to DMAengine support.  Firstly, DMA support requires
hardware assisted flow control to work - which it currently doesn't for
many many reasons.  Not only because of wrong defines, but also because
the programming examples in the OMAP4430 TRM is wrong.  You'd do much
better going to the TI16C752B data sheet and seeing how the original IP
was described.  Why TI didn't include a copy of that in the TRM...

Secondly, the problem I mention above wrt set_termios(), with the flow
control fixed, results in a nice race condition causing the TX DMA to
write into registers other than the FIFO data register, corrupting the
UART configuration and halting system boot.

(I have a series of patches to fix the flow control issues, and this
requires some work outside of the omap-serial driver to achieve that.
I'll post those patches when they're fully ready.  At the moment, it's
probably better to rip out all the hardware assisted flow control code
from omap-serial so that we fall back on the standard software driven
flow control.)



More information about the linux-arm-kernel mailing list