linux/drivers/tty/serial
Sebastian Andrzej Siewior 31a171328e tty: serial: 8250_omap: add custom DMA-TX callback
This patch provides mostly a copy of serial8250_tx_dma() +
__dma_tx_complete() with the following extensions:

- DMA bug
  At least on AM335x the following problem exists: Even if the TX FIFO is
  empty and a TX transfer is programmed (and started) the UART does not
  trigger the DMA transfer.
  After $TRESHOLD number of bytes have been written to the FIFO manually the
  UART reevaluates the whole situation and decides that now there is enough
  room in the FIFO and so the transfer begins.
  This problem has not been seen on DRA7 or beagle board xm (OMAP3). I am not
  sure if this is UART-IP core specific or DMA engine.

  The workaround is to use a threshold of one byte, program the DMA
  transfer minus one byte and then to put the first byte into the FIFO to
  kick start the transfer.

- support for runtime PM
  RPM is enabled on start_tx(). We can't disable RPM on DMA complete callback
  because there is still data in the FIFO which is being sent. We have to wait
  until the FIFO is empty before we disable it.
  For this to happen we fake a TX sent error and enable THRI. Once the
  FIFO is empty we receive an interrupt and since the TTY-buffer is still
  empty we "put RPM" via __stop_tx(). Should it been filed then in the
  start_tx() path we should program the DMA transfer and remove the error
  flag and the THRI bit.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-11-05 19:10:07 -08:00
..
8250 tty: serial: 8250_omap: add custom DMA-TX callback 2014-11-05 19:10:07 -08:00
cpm_uart serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
jsm jsm: add support for additional Neo cards 2014-09-08 13:15:49 -07:00
21285.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
68328serial.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu 2013-05-10 07:22:35 -07:00
altera_jtaguart.c serial: altera: Make of_device_id arrays const 2014-09-08 15:28:28 -07:00
altera_uart.c serial: altera: Make of_device_id arrays const 2014-09-08 15:28:28 -07:00
amba-pl010.c serial: amba-pl010: Use devres APIs 2014-07-09 17:13:54 -07:00
amba-pl011.c serial: Refactor uart_flush_buffer() from uart_close() 2014-11-05 18:53:54 -08:00
apbuart.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
apbuart.h
ar933x_uart.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
arc_uart.c Merge 3.16-rc5 into tty-next. 2014-07-13 15:52:12 -07:00
atmel_serial.c serial: Refactor uart_flush_buffer() from uart_close() 2014-11-05 18:53:54 -08:00
bcm63xx_uart.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
bfin_sport_uart.c serial: blackfin: Fix missing gpio.h 2014-09-08 16:22:42 -07:00
bfin_sport_uart.h
bfin_uart.c serial: bfin-uart: Fix auto CTS 2014-09-23 21:19:35 -07:00
clps711x.c serial: clps711x: Use mctrl_gpio helpers for handling modem signals 2014-09-08 15:35:03 -07:00
crisv10.c tty: Remove tty_hung_up_p() tests from tty drivers' open() 2014-07-10 16:06:49 -07:00
crisv10.h crisv10: use counts from tty_port 2013-03-18 16:26:33 -07:00
dz.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
dz.h
earlycon-arm-semihost.c tty/serial: add arm/arm64 semihosting earlycon 2014-04-24 16:32:27 -07:00
earlycon.c tty/serial: fix 8250 early console option passing to regular console 2014-06-19 13:07:26 -07:00
efm32-uart.c serial: efm32: correct namespacing of location property 2014-07-11 17:49:46 -07:00
fsl_lpuart.c tty: serial: fsl_lpuart: add 32-bit register interface support 2014-07-17 18:15:38 -07:00
icom.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
icom.h
ifx6x60.c serial: ifx6x60: Remove casting the return value which is a void pointer 2013-09-26 14:29:58 -07:00
ifx6x60.h
imx.c serial: imx: change the wait even to interruptiable 2014-09-28 21:26:38 -04:00
ioc3_serial.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
ioc4_serial.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
ip22zilog.c serial: Test for no tx data on tx restart 2014-07-10 16:31:34 -07:00
ip22zilog.h
Kconfig tty: serial: msm: Add earlycon support 2014-09-28 21:49:48 -04:00
kgdb_nmi.c serial: kgdb_nmi: No CON_ENABLED by default 2014-09-08 16:26:07 -07:00
kgdboc.c treewide: Convert retrun typos to return 2013-09-04 12:26:36 +02:00
lantiq.c serial: Use UPF_* constants with struct uart_port flags 2014-07-10 16:06:49 -07:00
lpc32xx_hs.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
m32r_sio_reg.h
m32r_sio.c serial: Test for no tx data on tx restart 2014-07-10 16:31:34 -07:00
m32r_sio.h
Makefile ARM: meson: serial: add MesonX SoC on-chip uart driver 2014-09-08 16:12:40 -07:00
max310x.c driver:gpio remove all usage of gpio_remove retval in driver 2014-09-18 11:03:10 -07:00
max3100.c serial: use dev_get_platdata() 2013-07-31 17:56:15 -07:00
mcf.c serial: Use UPF_* constants with struct uart_port flags 2014-07-10 16:06:49 -07:00
men_z135_uart.c tty: serial: men_z135_uart: Wakeup UART after transmitting 2014-07-09 17:35:42 -07:00
meson_uart.c ARM: meson: serial: add MesonX SoC on-chip uart driver 2014-09-08 16:12:40 -07:00
mfd.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
mpc52xx_uart.c serial: mpc52xx: Use default serial core x_char handler 2014-09-08 16:22:42 -07:00
mpsc.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
mrst_max3110.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
mrst_max3110.h
msm_serial_hs.c serial: use dev_get_platdata() 2013-07-31 17:56:15 -07:00
msm_serial.c tty: serial: msm: Add earlycon support 2014-09-28 21:49:48 -04:00
msm_serial.h tty: serial: msm: Support big-endian CPUs 2014-07-10 16:10:42 -07:00
msm_smd_tty.c TTY: msm_smd_tty, clean up activate/shutdown 2013-03-18 16:19:44 -07:00
mux.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
mxs-auart.c serial: mxs-auart: add sysrq support 2014-11-05 18:56:47 -08:00
netx-serial.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
nwpserial.c serial: Fix build failure caused by missing header file 2014-09-08 16:17:45 -07:00
of_serial.c serial: of-serial: fix up PM ops on no_console_suspend and port type 2014-11-05 16:23:34 -08:00
omap-serial.c tty: serial: omap: Remove probe error message 2014-11-05 18:56:47 -08:00
pch_uart.c pch_uart: don't hardcode PCI slot to get DMA device 2014-08-01 16:04:21 -07:00
pmac_zilog.c The branch contains the following device tree changes the v3.17 merge 2014-08-14 09:53:39 -06:00
pmac_zilog.h
pnx8xxx_uart.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
pxa.c serial: pxa: fix build with !SERIAL_PXA_CONSOLE 2014-07-10 15:48:41 -07:00
rp2.c tty: remove DEFINE_PCI_DEVICE_TABLE macro 2013-12-08 17:09:07 -08:00
sa1100.c serial: sa1100: delete .set_wake callback 2013-10-16 13:16:18 -07:00
samsung.c ARM: SoC platform changes for 3.17 2014-08-08 11:14:29 -07:00
samsung.h serial: samsung: Neaten dbg uses 2014-05-28 12:27:22 -07:00
sb1250-duart.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
sc16is7xx.c tty: sc16is7xx: remove retval from gpiochip_remove() 2014-09-23 17:51:36 +02:00
sccnxp.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
serial_core.c serial: core: Fix port count when uart_open() errors 2014-11-05 18:53:55 -08:00
serial_ks8695.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
serial_mctrl_gpio.c tty: serial_mctrl_gpio: Fix COMPILE_TEST build for architectures with custom termios.h 2014-09-20 06:56:55 -07:00
serial_mctrl_gpio.h tty/serial: Add GPIOLIB helpers for controlling modem lines 2014-05-28 12:49:14 -07:00
serial_txx9.c serial: txx9: remove duplicate TXX9_SIFCR_TDIL_MASK define 2014-07-10 16:10:42 -07:00
serial-tegra.c serial: Refactor uart_flush_buffer() from uart_close() 2014-11-05 18:53:54 -08:00
sh-sci.c serial: sh-sci: use dmaengine_terminate_all() API 2014-10-15 21:31:00 +05:30
sh-sci.h serial: sh-sci: Move overrun_bit and error_mask fields out of pdata 2013-12-24 11:17:48 +09:00
sirfsoc_uart.c serial: sirf: transfer more bytes once to decrease interrupts 2014-07-09 17:37:00 -07:00
sirfsoc_uart.h serial: sirf: transfer more bytes once to decrease interrupts 2014-07-09 17:37:00 -07:00
sn_console.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
st-asc.c serial: asc: Conditionally use readl_relaxed (COMPILE_TEST) 2014-09-28 21:49:48 -04:00
suncore.c
sunhv.c serial: Fix send_xchar() handlers 2014-09-08 16:22:42 -07:00
sunsab.c serial: sunsab: Don't enable tx if tx stopped 2014-09-08 16:22:42 -07:00
sunsab.h
sunsu.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
sunzilog.c serial: Test for no tx data on tx restart 2014-07-10 16:31:34 -07:00
sunzilog.h
tilegx.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
timbuart.c serial: Refactor uart_flush_buffer() from uart_close() 2014-11-05 18:53:54 -08:00
timbuart.h
uartlite.c tty: serial: uartlite: Remove .owner field for driver 2014-09-08 16:09:13 -07:00
ucc_uart.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
vr41xx_siu.c serial: vr41xx_siu: delete double assignment 2014-09-08 16:17:45 -07:00
vt8500_serial.c tty: vt8500_serial: explicitly calculate base baud rate 2014-09-08 16:29:36 -07:00
xilinx_uartps.c serial: cadence: Add generic earlycon support 2014-09-28 21:32:37 -04:00
zs.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
zs.h