linux_dsm_epyc7002/drivers/serial
Russell King 68b65f7305 ARM: PL011: Add support for transmit DMA
Add DMA engine support for transmit to the PL011 driver.  Based on a
patch from Linus Walliej, with the following changes:

- remove RX DMA support.  As PL011 doesn't give us receive timeout
  interrupts, we only get notified of received data when the RX DMA
  has completed.  This rather sucks for interactive use of the TTY.

- remove abuse of completions.  Completions are supposed to be for
  events, not to tell what condition buffers are in.  Replace it with
  a simple 'queued' bool.

- fix locking - it is only safe to access the circular buffer with the
  port lock held.

- only map the DMA buffer when required - if we're ever behind an IOMMU
  this helps keep IOMMU usage down, and also ensures that we're legal
  when we change the scatterlist entry length.

- fix XON/XOFF sending - we must send XON/XOFF characters out as soon
  as possible - waiting for up to 4095 characters in the DMA buffer
  to be sent first is not acceptable.

- fix XON/XOFF receive handling - we need to stop DMA when instructed
  to by the TTY layer, and restart it again when instructed to.  There
  is a subtle problem here: we must not completely empty the circular
  buffer with DMA, otherwise we will not be notified of XON.

- change the 'enable_dma' flag into a 'using DMA' flag, and track
  whether we can use TX DMA by whether the channel pointer is non-NULL.
  This gives us more control over whether we use DMA in the driver.

- we don't need to have the TX DMA buffer continually allocated for
  each port - instead, allocate it when the port starts up, and free
  it when it's shut down.  Update the 'using DMA' flag if we get
  the buffer, and adjust the TTY FIFO size appropriately.

- if we're going to use PIO to send characters, use the existing IRQ
  based functionality rather than reimplementing it.  This also ensures
  we call uart_write_wakeup() at the appropriate time, otherwise we'll
  stall.

- use DMA engine helper functions for type safety.

- fix init when built as a module - we can't have to initcall functions,
  so we must settle on one.  This means we can eliminate the deferred
  DMA initialization.

- there is no need to terminate transfers on a failed prep_slave_sg()
  call - nothing has been setup, so nothing needs to be terminated.
  This avoids a potential deadlock in the DMA engine code
  (tasklet->callback->failed prepare->terminate->tasklet_disable
   which then ends up waiting for the tasklet to finish running.)

- Dan says that the submission callback should not return an error:
  | dma_submit_error() is something I should have removed after commit
  | a0587bcf "ioat1: move descriptor allocation from submit to prep" all
  | errors should be notified by prep failing to return a descriptor
  | handle.  Negative dma_cookie_t values are only returned by the
  | dma_async_memcpy* calls which translate a prep failure into -ENOMEM.
  So remove the error handling at that point.  This also solves the
  potential deadlock mentioned in the previous comment.

Acked-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2011-01-05 16:58:48 +00:00
..
cpm_uart of/device: Replace struct of_device with struct platform_device 2010-08-06 09:25:50 -06:00
jsm jsm: Remove the uart port on errors 2010-10-22 10:20:10 -07:00
8250_accent.c
8250_acorn.c
8250_boca.c
8250_early.c serial: print early console device address in hex 2010-08-23 18:17:20 -07:00
8250_exar_st16c554.c
8250_fourport.c
8250_gsc.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
8250_hp300.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
8250_hub6.c
8250_mca.c
8250_pci.c serial: add support for OX16PCI958 card 2010-08-10 13:47:45 -07:00
8250_pnp.c serial: 8250_pnp - add Fujitsu Wacom device 2010-04-30 09:20:34 -07:00
8250.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-10-24 13:41:39 -07:00
8250.h
21285.c tty: serial - fix tty back references in termios 2010-08-10 13:47:41 -07:00
68328serial.c 68328serial: check return value of copy_*_user() instead of access_ok() 2010-08-23 18:17:22 -07:00
68328serial.h arch/m68knommu: Removing dead 68328_SERIAL_UART2 config option 2010-10-21 10:17:29 +10:00
68360serial.c tty: icount changeover for other main devices 2010-10-22 10:20:05 -07:00
altera_jtaguart.c serial: Add driver for the Altera JTAG UART 2010-05-21 09:34:30 -07:00
altera_uart.c altera_uart: Don't use plain integer as NULL pointer 2010-10-22 10:20:09 -07:00
amba-pl010.c serial: amba-pl010: fix set_ldisc 2010-09-20 16:30:00 -07:00
amba-pl011.c ARM: PL011: Add support for transmit DMA 2011-01-05 16:58:48 +00:00
apbuart.c of/device: Replace struct of_device with struct platform_device 2010-08-06 09:25:50 -06:00
apbuart.h
atmel_serial.c serial: general fixes in the serial_rs485 structure 2010-08-10 13:47:45 -07:00
bcm63xx_uart.c serial: bcm63xx_uart: allow more than one uart to be registered. 2010-03-02 14:43:19 -08:00
bfin_5xx.c tty: serial - fix tty referencing in set_ldisc 2010-08-10 13:47:41 -07:00
bfin_sport_uart.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-10-24 13:41:39 -07:00
bfin_sport_uart.h Update broken web addresses in the kernel. 2010-10-18 11:03:14 +02:00
clps711x.c
crisv10.c CRIS: Fix RS485 delay handling. 2010-10-28 12:13:27 +02:00
crisv10.h
dz.c
dz.h
icom.c tty: Fix up char drivers request_room usage 2010-03-02 14:43:22 -08:00
icom.h
imx.c serial/imx: check that the buffer is non-empty before sending it out 2010-10-22 10:20:10 -07:00
ioc3_serial.c Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6 2010-10-21 14:27:18 -07:00
ioc4_serial.c tty: serial - fix tty back references in termios 2010-08-10 13:47:41 -07:00
ip22zilog.c
ip22zilog.h
Kconfig Merge branch 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6 2010-10-25 13:46:56 -07:00
kgdboc.c kdb,kgdb: fix sparse fixups 2010-10-22 15:34:12 -05:00
m32r_sio_reg.h
m32r_sio.c
m32r_sio.h
Makefile serial: Add OMAP high-speed UART driver 2010-09-29 12:43:02 -07:00
max3100.c tty: serial - fix tty back references in termios 2010-08-10 13:47:41 -07:00
max3107-aava.c serial: max3107: Abstract out the platform specific bits 2010-08-10 13:47:44 -07:00
max3107.c serial: max3107: Fix memory leaks when returning on error 2010-10-22 10:20:03 -07:00
max3107.h serial: max3107: Fix gpiolib support 2010-08-10 13:47:46 -07:00
mcf.c serial: mcf: don't take spinlocks in already protected functions 2010-08-10 13:47:45 -07:00
mfd.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6 2010-10-22 19:59:04 -07:00
mpc52xx_uart.c powerpc/5200: mpc52xx_uart.c: Add of_node_put to avoid memory leak 2010-09-08 13:54:48 -06:00
mpsc.c powerpc/mpsc: Set the port device in the mpsc serial driver 2010-04-07 14:12:36 +10:00
mrst_max3110.c serial: mrst_max3110: Make the IRQ option runtime 2010-10-22 10:20:03 -07:00
mrst_max3110.h serial: mrst_max3110: some code cleanup 2010-10-22 10:20:03 -07:00
msm_serial.c msm_serial: fix serial on trout 2010-06-04 13:37:16 -07:00
msm_serial.h msm_serial: fix serial on trout 2010-06-04 13:37:16 -07:00
mux.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
netx-serial.c
nwpserial.c of/device: Replace struct of_device with struct platform_device 2010-08-06 09:25:50 -06:00
of_serial.c powerpc, of_serial: Endianness issues setting up the serial ports 2010-10-07 17:21:15 -06:00
omap-serial.c serial: omap-serial: fix signess error 2010-10-12 13:22:42 -07:00
pmac_zilog.c powerpc/macio: Fix probing of macio devices by using the right of match table 2010-06-02 17:50:38 +10:00
pmac_zilog.h pmac-zilog: add platform driver 2010-02-27 18:31:02 +01:00
pnx8xxx_uart.c
pxa.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
s3c24a0.c
s3c2400.c
s3c2410.c
s3c2412.c ARM: S3C2412: SoC has the fractional baud rate register 2010-02-03 01:55:01 +00:00
s3c2440.c
s3c6400.c
s5pv210.c ARM: S5PV310: Add serial port support 2010-08-05 18:32:42 +09:00
sa1100.c
samsung.c ARM: S5P64X0: Add UART serial support for S5P6450 2010-10-18 18:33:04 +09:00
samsung.h ARM: SAMSUNG: serial: Modify console initialization. 2010-01-19 17:50:47 +09:00
sb1250-duart.c
sc26xx.c
serial_core.c tty: Make tiocgicount a handler 2010-10-22 10:20:04 -07:00
serial_cs.c serial_cs: drop spurious flush_scheduled_work() call 2010-10-16 11:07:07 +02:00
serial_ks8695.c ARM: 6030/1: KS8695: enable console 2010-04-23 10:01:56 +01:00
serial_lh7a40x.c
serial_txx9.c
sh-sci.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2010-05-31 13:14:26 +09:00
sh-sci.h Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2010-08-16 13:32:24 +09:00
sn_console.c Input: sysrq - drop tty argument form handle_sysrq() 2010-08-21 00:34:45 -07:00
suncore.c sparc: Really fix "console=" for serial consoles. 2010-08-16 12:26:09 -07:00
suncore.h
sunhv.c of/device: Replace struct of_device with struct platform_device 2010-08-06 09:25:50 -06:00
sunsab.c of/device: Replace struct of_device with struct platform_device 2010-08-06 09:25:50 -06:00
sunsab.h
sunsu.c of/device: Replace struct of_device with struct platform_device 2010-08-06 09:25:50 -06:00
sunzilog.c of/device: Replace struct of_device with struct platform_device 2010-08-06 09:25:50 -06:00
sunzilog.h
timbuart.c timbuart: use __devinit and __devexit macros for probe and remove 2010-08-10 13:47:45 -07:00
timbuart.h
uartlite.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-10-24 13:41:39 -07:00
ucc_uart.c of/device: Replace struct of_device with struct platform_device 2010-08-06 09:25:50 -06:00
vr41xx_siu.c
zs.c
zs.h