• C
    tty/serial: at91: use 32bit writes into TX FIFO when DMA is enabled · 5f258b3e
    Cyrille Pitchen 提交于
    For now this improvement is only used with TX DMA transfers. The data
    width must be set properly when configuring the DMA controller. Also
    the FIFO configuration must be set to match the DMA transfer data
    width:
    TXRDYM (Transmitter Ready Mode) and RXRDYM (Receiver Ready Mode) must
    be set into the FIFO Mode Register. These values are used by the
    USART to trigger the DMA controller. In single data mode they are not
    used and should be reset to 0.
    So the TXRDYM bits are changed to FOUR_DATA; then USART triggers the
    DMA controller when at least 4 data can be written into the TX FIFO
    througth the THR. On the other hand the RXRDYM bits are left unchanged
    to ONE_DATA.
    
    Atmel eXtended DMA controller allows us to set a different data width
    for each part of a scatter-gather transfer. So when calling
    dmaengine_slave_config() to configure the TX path, we just need to set
    dst_addr_width to the maximum data width. Then DMA writes into THR are
    split into up to two parts. The first part carries the first data to
    be sent and has a length equal to the greatest multiple of 4 (bytes)
    lower than or equal to the total length of the TX DMA transfer. The
    second part carries the trailing data (up to 3 bytes). The first part
    is written by the DMA into THR using 32 bit accesses, whereas 8bit
    accesses are used for the second part.
    Signed-off-by: NCyrille Pitchen <cyrille.pitchen@atmel.com>
    Acked-by: NNicolas Ferre <nicolas.ferre@atmel.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    5f258b3e
atmel_serial.c 73.3 KB