Skip to content
  • Chip Coldwell's avatar
    atmel_serial: add DMA support · a6670615
    Chip Coldwell authored
    
    
    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: default avatarRemy Bohmer <linux@bohmer.net>
    Signed-off-by: default avatarHaavard Skinnemoen <hskinnemoen@atmel.com>
    Cc: Andrew Victor <linux@maxim.org.za>
    Tested-by: default avatarMarc Pignat <marc.pignat@hevs.ch>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a6670615