• Qipan Li's avatar
    serial: sirf: add DMA support using dmaengine APIs · 8316d04c
    Qipan Li authored
    if we get the valid dma channels from dts, move to use dmaengine to do
    rx/tx. because the dma hardware requires dma address and length to be
    4bytes aligned, in this driver, we will still use PIO for non-aligned
    bytes, and use dma for aligned bytes.
    
    for rx, to keep the dmaengine always active, we use double-buffer, so
    we issue two dma_desc at first, and maintain the status of both
    1. dma transfer done: update in rx dma finish callback
    2. dma buffer is inserted into tty: update in rx dma finish tasklet and
       rx timeout tasklet
    so we re-issue the dma_desc only if both 1&2 are finished.
    
    for tx, as we know the actual length for every transfer, we don't need
    the above double buffering.
    Signed-off-by: default avatarQipan Li <Qipan.Li@csr.com>
    Signed-off-by: default avatarBarry Song <Baohua.Song@csr.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    8316d04c
sirfsoc_uart.c 48.3 KB