• C
    atmel_serial: add DMA support · a6670615
    Chip Coldwell 提交于
    This patch is based on the DMA-patch by Chip Coldwell for the AT91/AT32 serial
    USARTS, with some tweaks to make it apply neatly on top of the other patches
    in this series.
    
    The RX and TX code has been moved to a tasklet and reworked a bit.  Instead of
    depending on the ENDRX and TIMEOUT bits in CSR, we simply grab as much data as
    we can from the DMA buffers.  I think this closes a race where the ENDRX bit
    is set after we read CSR but before we read RPR, although I haven't confirmed
    this.
    
    Similarly, the two TX handlers (ENDTX and TXBUFE) have been combined into one.
     Since the current code only uses a single TX buffer, there's no point in
    handling those interrupts separately.
    
    This also fixes a DMA sync bug in the original patch.
    
    [linux@bohmer.net: rebased onto irq-splitup patch]
    [hskinnemoen@atmel.com: moved to tasklet, fixed dma bug, misc cleanups]
    [hskinnemoen@atmel.com: atmel_serial dma: Misc fixes and cleanups]
    Signed-off-by: NRemy Bohmer <linux@bohmer.net>
    Signed-off-by: NHaavard Skinnemoen <hskinnemoen@atmel.com>
    Cc: Andrew Victor <linux@maxim.org.za>
    Tested-by: NMarc Pignat <marc.pignat@hevs.ch>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    a6670615
atmel_serial.c 37.8 KB