From a66706158d6bc4d9eb29c37852001f78f4c8989c Mon Sep 17 00:00:00 2001 From: Chip Coldwell Date: Fri, 8 Feb 2008 04:21:06 -0800 Subject: atmel_serial: add DMA support 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: Remy Bohmer Signed-off-by: Haavard Skinnemoen Cc: Andrew Victor Tested-by: Marc Pignat Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- drivers/serial/Kconfig | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'drivers/serial/Kconfig') diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index 84a054d7e98..b82595cf13e 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -380,6 +380,21 @@ config SERIAL_ATMEL_CONSOLE console is the device which receives all kernel messages and warnings and which allows logins in single user mode). +config SERIAL_ATMEL_PDC + bool "Support DMA transfers on AT91 / AT32 serial port" + depends on SERIAL_ATMEL + default y + help + Say Y here if you wish to use the PDC to do DMA transfers to + and from the Atmel AT91 / AT32 serial port. In order to + actually use DMA transfers, make sure that the use_dma_tx + and use_dma_rx members in the atmel_uart_data struct is set + appropriately for each port. + + Note that break and error handling currently doesn't work + properly when DMA is enabled. Make sure that ports where + this matters don't use DMA. + config SERIAL_ATMEL_TTYAT bool "Install as device ttyATn instead of ttySn" depends on SERIAL_ATMEL=y -- cgit v1.2.3