Angelo Dureghello
f4eef224a0
serial: fsl_lpuart: add sysrq support when using dma
...
Add handling of magic sysrq keys when using dma/edma.
Tested by sending BREAK followed by a sysrq command inside
a 5 secs time window, by:
echo 1 > /proc/sys/kernel/sysrq
BREAK + h, t, e, b, c
Tested also sending a command after 5 secs after BREAK, that's
properly ignored.
Signed-off-by: Angelo Dureghello <angelo.dureghello@timesys.com >
Link: https://lore.kernel.org/r/20201004161144.1307174-1-angelo.dureghello@timesys.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-10-05 13:32:30 +02:00
Peng Fan
29788ab1d2
tty: serial: fsl_lpuart: fix lpuart32_poll_get_char
...
The watermark is set to 1, so we need to input two chars to trigger RDRF
using the original logic. With the new logic, we could always get the
char when there is data in FIFO.
Suggested-by: Fugang Duan <fugang.duan@nxp.com >
Signed-off-by: Peng Fan <peng.fan@nxp.com >
Link: https://lore.kernel.org/r/20200929095509.21680-1-peng.fan@nxp.com
Cc: stable <stable@vger.kernel.org >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-09-30 14:29:36 +02:00
Peng Fan
9ea40db477
tty: serial: lpuart: fix lpuart32_write usage
...
The 2nd and 3rd parameter were wrongly used, and cause kernel abort when
doing kgdb debug.
Fixes: 1da17d7cf8
("tty: serial: fsl_lpuart: Use appropriate lpuart32_* I/O funcs")
Cc: stable <stable@vger.kernel.org >
Signed-off-by: Peng Fan <peng.fan@nxp.com >
Link: https://lore.kernel.org/r/20200929091920.22612-1-peng.fan@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-09-30 14:29:21 +02:00
Fabio Estevam
c9fe14ac8b
serial: fsl_lpuart: Fix typo in "transfer"
...
Fix two occurrences where "transfer" is spelled incorrectly.
Signed-off-by: Fabio Estevam <festevam@gmail.com >
Link: https://lore.kernel.org/r/20200818224457.16507-1-festevam@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-08-28 10:26:47 +02:00
Vabhav Sharma
d10ee1d191
tty: serial: fsl_lpuart: minimum baud rate support
...
The formula for the baud rate is
baud rate = "baud clock / ((OSR+1) × SBR)
Algorithm used in function lpuart32_serial_setbrg() only changes
the SBR. Even with maxmum value put in, OSR stays at 0x7 and the
lowest baud rate would be ~ 2600 bps
Update the algorithm to allow driver operation at 1200,2400 or 600 bps
Signed-off-by: Vabhav Sharma <vabhav.sharma@nxp.com >
Link: https://lore.kernel.org/r/1593170434-13524-1-git-send-email-vabhav.sharma@oss.nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-06-27 13:52:29 +02:00
Anson Huang
b14109f302
tty: serial: fsl_lpuart: Use __maybe_unused instead of #if CONFIG_PM_SLEEP
...
Use __maybe_unused for power management related functions to simplify
the code.
Signed-off-by: Anson Huang <Anson.Huang@nxp.com >
Link: https://lore.kernel.org/r/1589547481-25932-1-git-send-email-Anson.Huang@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-05-15 15:46:29 +02:00
Lukas Wunner
c150c0f362
serial: Allow uart_get_rs485_mode() to return errno
...
We're about to amend uart_get_rs485_mode() to support a GPIO pin for
rs485 bus termination. Retrieving the GPIO descriptor may fail, so
allow uart_get_rs485_mode() to return an errno and change all callers
to check for failure.
The GPIO descriptor is going to be stored in struct uart_port. Pass
that struct to uart_get_rs485_mode() in lieu of a struct device and
struct serial_rs485, both of which are directly accessible from struct
uart_port.
A few drivers call uart_get_rs485_mode() before setting the struct
device pointer in struct uart_port. Shuffle those calls around where
necessary.
[Heiko Stuebner did the ar933x_uart.c portion, hence his Signed-off-by.]
Signed-off-by: Heiko Stuebner <heiko@sntech.de >
Signed-off-by: Lukas Wunner <lukas@wunner.de >
Link: https://lore.kernel.org/r/271e814af4b0db3bffbbb74abf2b46b75add4516.1589285873.git.lukas@wunner.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-05-15 14:47:05 +02:00
Fabio Estevam
44da03628b
serial: fsl_lpuart: Change DMA failure messages to debug level
...
Currently the following messages are seen when booting i.MX8QXP:
fsl-lpuart 5a060000.serial: DMA tx channel request failed, operating without tx DMA (-19)
fsl-lpuart 5a060000.serial: DMA rx channel request failed, operating without rx DMA (-19)
It is not really useful to have such messages on every boot, so change
them to debug level instead.
Signed-off-by: Fabio Estevam <festevam@gmail.com >
Link: https://lore.kernel.org/r/20200416153453.18825-1-festevam@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-04-23 15:53:44 +02:00
Michael Walle
810bc0a5fa
tty: serial: fsl_lpuart: make coverity happy
...
Coverity reports the following:
var_compare_op: Comparing chan to null implies that chan might be null.
1234 if (chan)
1235 dmaengine_terminate_all(chan);
1236
Dereference after null check (FORWARD_NULL)
var_deref_op: Dereferencing null pointer chan.
1237 dma_unmap_sg(chan->device->dev, &sport->rx_sgl, 1, DMA_FROM_DEVICE);
Technically, this is correct. But lpuart_dma_rx_free() is guarded by
lpuart_dma_rx_use which is only true if there is a dma channel, see
lpuart_rx_dma_startup(). In any way, this looks bogus. So remove
the superfluous "if (chan)" check and make coverity happy.
Fixes: a092ab25fd
("tty: serial: fsl_lpuart: fix DMA mapping")
Signed-off-by: Michael Walle <michael@walle.cc >
Reported-by: Colin Ian King <colin.king@canonical.com >
Acked-by: Jiri Slaby <jslaby@suse.cz >
Reviewed-by: Fabio Estevam <festevam@gmail.com >
Link: https://lore.kernel.org/r/20200403174942.9594-1-michael@walle.cc
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-04-16 16:12:34 +02:00
Michael Walle
d7c53fb081
tty: serial: fsl_lpuart: fix return value checking
...
The return value of lpuart_dma_tx_request() is an negative errno on
failure and zero on success.
Fixes: 159381df14
("tty: serial: fsl_lpuart: fix DMA operation when using IOMMU")
Reported-by: Leonard Crestez <leonard.crestez@nxp.com >
Signed-off-by: Michael Walle <michael@walle.cc >
Reviewed-by: Fugang Duan <fugang.duan@nxp.com >
Link: https://lore.kernel.org/r/20200325090658.25967-2-michael@walle.cc
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-03-26 15:34:05 +01:00
Michael Walle
d0e7600b91
tty: serial: fsl_lpuart: move dma_request_chan()
...
Move dma_request_chan() out of the atomic context. First this call
should not be in the atomic context at all and second the
dev_info_once() may cause a hang because because the console takes this
spinlock, too.
Fixes: 159381df14
("tty: serial: fsl_lpuart: fix DMA operation when using IOMMU")
Reported-by: Leonard Crestez <leonard.crestez@nxp.com >
Signed-off-by: Michael Walle <michael@walle.cc >
Reviewed-by: Fugang Duan <fugang.duan@nxp.com >
Tested-by: Leonard Crestez <leonard.crestez@nxp.com >
Link: https://lore.kernel.org/r/20200325090658.25967-1-michael@walle.cc
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-03-26 15:34:05 +01:00
Michael Walle
e33253f3b7
tty: serial: fsl_lpuart: add LS1028A earlycon support
...
Add a early_console_setup() for the LS1028A SoC with 32bit, little
endian access. If the bootloader does a fixup of the clock-frequency
node the baudrate divisor register will automatically be set.
Signed-off-by: Michael Walle <michael@walle.cc >
Link: https://lore.kernel.org/r/20200306214433.23215-5-michael@walle.cc
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-03-12 10:02:00 +01:00
Michael Walle
c2f448cff2
tty: serial: fsl_lpuart: add LS1028A support
...
The LS1028A uses little endian register access and has a different FIFO
size encoding.
Signed-off-by: Michael Walle <michael@walle.cc >
Link: https://lore.kernel.org/r/20200306214433.23215-4-michael@walle.cc
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-03-12 10:02:00 +01:00
Michael Walle
a092ab25fd
tty: serial: fsl_lpuart: fix DMA mapping
...
Use the correct device to request the DMA mapping. Otherwise the IOMMU
doesn't get the mapping and it will generate a page fault.
The error messages look like:
[ 19.012140] arm-smmu 5000000.iommu: Unhandled context fault: fsr=0x402, iova=0xbbfff800, fsynr=0x3e0021, cbfrsynra=0x828, cb=9
[ 19.023593] arm-smmu 5000000.iommu: Unhandled context fault: fsr=0x402, iova=0xbbfff800, fsynr=0x3e0021, cbfrsynra=0x828, cb=9
This was tested on a custom board with a LS1028A SoC.
Signed-off-by: Michael Walle <michael@walle.cc >
Link: https://lore.kernel.org/r/20200306214433.23215-3-michael@walle.cc
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-03-12 10:02:00 +01:00
Michael Walle
159381df14
tty: serial: fsl_lpuart: fix DMA operation when using IOMMU
...
The DMA channel might not be available at probe time. This is esp. the
case if the DMA controller has an IOMMU mapping.
There is also another caveat. If there is no DMA controller at all,
dma_request_chan() will also return -EPROBE_DEFER. Thus we cannot test
for -EPROBE_DEFER in probe(). Otherwise the lpuart driver will fail to
probe if, for example, the DMA driver is not enabled in the kernel
configuration.
To workaround this, we request the DMA channel in _startup(). Other
serial drivers do it the same way.
Signed-off-by: Michael Walle <michael@walle.cc >
Link: https://lore.kernel.org/r/20200306214433.23215-2-michael@walle.cc
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-03-12 10:02:00 +01:00
Michael Walle
2b2e71fe65
tty: serial: fsl_lpuart: free IDs allocated by IDA
...
Since commit 3bc3206e1c
("serial: fsl_lpuart: Remove the alias node
dependence") the port line number can also be allocated by IDA, but in
case of an error the ID will no be removed again. More importantly, any
ID will be freed in remove(), even if it wasn't allocated but instead
fetched by of_alias_get_id(). If it was not allocated by IDA there will
be a warning:
WARN(1, "ida_free called for id=%d which is not allocated.\n", id);
Move the ID allocation more to the end of the probe() so that we still
can use plain return in the first error cases.
Fixes: 3bc3206e1c
("serial: fsl_lpuart: Remove the alias node dependence")
Signed-off-by: Michael Walle <michael@walle.cc >
Cc: stable <stable@vger.kernel.org >
Link: https://lore.kernel.org/r/20200303174306.6015-3-michael@walle.cc
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-03-06 14:10:44 +01:00
Michael Walle
0e28ed6c9d
Revert "tty: serial: fsl_lpuart: drop EARLYCON_DECLARE"
...
This reverts commit a659652f61
.
This broke the earlycon on LS1021A processors because the order of the
earlycon_setup() functions were changed. Before the commit the normal
lpuart32_early_console_setup() was called. After the commit the
lpuart32_imx_early_console_setup() is called instead.
Fixes: a659652f61
("tty: serial: fsl_lpuart: drop EARLYCON_DECLARE")
Signed-off-by: Michael Walle <michael@walle.cc >
Link: https://lore.kernel.org/r/20200303174306.6015-2-michael@walle.cc
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-03-06 14:10:44 +01:00
Peng Fan
b4b844930f
tty: serial: fsl_lpuart: drop earlycon entry for i.MX8QXP
...
i.MX8QXP lpuart is compatible with i.MX7ULP, so no need
an extra entry for i.MX8QXP.
Signed-off-by: Peng Fan <peng.fan@nxp.com >
Link: https://lore.kernel.org/r/1576822230-23125-4-git-send-email-peng.fan@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-01-06 20:22:36 +01:00
Peng Fan
3966f0846c
tty: serial: fsl_lpuart: support UPIO_MEM32 for lpuart32
...
"earlycon" no need to specify the value string since it uses
stdout-path parameters. However when earlycon and normal console
are not using the same uart port, we need specify value string
to earlycon, this is what we need to do when support dual linux
using jailhouse hypervisor. The 2nd linux will use the uart
of the 1st linux as earlycon.
earlycon=lpuart32,mmio32,0x5a060010,115200 not work for i.MX8QXP.
It is because lpuart32_early_console_setup not support little endian.
Since the original code is to support UPIO_MEM32BE, so if not
UPIO_MEM32, we still take it as UPIO_MEM32BE
Acked-by: Fugang Duan <fugang.duan@nxp.com >
Signed-off-by: Peng Fan <peng.fan@nxp.com >
Link: https://lore.kernel.org/r/1576822230-23125-3-git-send-email-peng.fan@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-01-06 20:22:36 +01:00
Peng Fan
a659652f61
tty: serial: fsl_lpuart: drop EARLYCON_DECLARE
...
EARLYCON_DECLARE is just a wrapper of OF_EARLYCON_DECLARE,
since we already have OF_EARLYCON_DECLARE for lpuart and lpuart32,
so no need EARLYCON_DECLARE.
Signed-off-by: Peng Fan <peng.fan@nxp.com >
Link: https://lore.kernel.org/r/1576822230-23125-2-git-send-email-peng.fan@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-01-06 20:22:35 +01:00
Dmitry Safonov
4d9ec1c0ce
tty/serial: Migrate fsl_lpuart to use has_sysrq
...
The SUPPORT_SYSRQ ifdeffery is not nice as:
- May create misunderstanding about sizeof(struct uart_port) between
different objects
- Prevents moving functions from serial_core.h
- Reduces readability (well, it's ifdeffery - it's hard to follow)
In order to remove SUPPORT_SYSRQ, has_sysrq variable has been added.
Initialise it in driver's probe and remove ifdeffery.
Signed-off-by: Dmitry Safonov <dima@arista.com >
Link: https://lore.kernel.org/r/20191213000657.931618-19-dima@arista.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-12-18 15:04:49 +01:00
Peng Fan
487ee861de
tty: serial: fsl_lpuart: use the sg count from dma_map_sg
...
The dmaengine_prep_slave_sg needs to use sg count returned
by dma_map_sg, not use sport->dma_tx_nents, because the return
value of dma_map_sg is not always same with "nents".
When enabling iommu for lpuart + edma, iommu framework may concatenate
two sgs into one.
Fixes: 6250cc30c4
("tty: serial: fsl_lpuart: Use scatter/gather DMA for Tx")
Cc: <stable@vger.kernel.org >
Signed-off-by: Peng Fan <peng.fan@nxp.com >
Link: https://lore.kernel.org/r/1572932977-17866-1-git-send-email-peng.fan@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-11-05 18:18:01 +01:00
Philippe Schenker
67b0183786
tty: serial: lpuart: Add RS485 support for 32-bit uart flavour
...
This commits adds RS485 support for LPUART hardware that uses 32-bit
registers. These are typically found in i.MX8 processors.
Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com >
Reviewed-by: Fugang Duan <fugang.duan@nxp.com >
Link: https://lore.kernel.org/r/20191017141428.10330-3-philippe.schenker@toradex.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-11-04 17:37:55 +01:00
Philippe Schenker
e3553fee81
tty: serial: lpuart: Use defines that correspond to correct register
...
Use define from the 32-bit register description UARTMODIR_* instead of
UARTMODEM_*. The value is the same, so there is no functional change.
Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com >
Reviewed-by: Stefan Agner <stefan.agner@toradex.com >
Reviewed-by: Fugang Duan <fugang.duan@nxp.com >
Link: https://lore.kernel.org/r/20191017141428.10330-2-philippe.schenker@toradex.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-11-04 17:37:54 +01:00
Philippe Schenker
2b30efe2e8
tty: serial: lpuart: Remove unnecessary code from set_mctrl
...
Currently flow control is not working due to lpuart32_set_mctrl that is
clearing TXCTSE bit in all cases. This bit gets earlier setup by
lpuart32_set_termios.
As I read in Documentation set_mctrl is also not meant for hardware
flow control rather than gpio setting and clearing a RTS signal.
Therefore I guess it is safe to remove the whole code in
lpuart32_set_mctrl.
This was tested with console on a i.MX8QXP SoC.
Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com >
Reviewed-by: Fugang Duan <fugang.duan@nxp.com >
Link: https://lore.kernel.org/r/20191017141428.10330-1-philippe.schenker@toradex.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-11-04 17:37:54 +01:00
Andrey Smirnov
5df884d4b8
tty: serial: fsl_lpuart: Fix lpuart_flush_buffer()
...
Fix incorrect read-modify-write sequence in lpuart_flush_buffer() that
was reading from UARTPFIFO and writing to UARTCFIFO instead of
operating solely on the latter.
Fixes: 9bc19af9da
("tty: serial: fsl_lpuart: Flush HW FIFOs in .flush_buffer")
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Reported-by: Vivien Didelot <vivien.didelot@gmail.com >
Tested-by: Vivien Didelot <vivien.didelot@gmail.com >
Tested-by: Andrew Lunn <andrew@lunn.ch >
Reviewed-by: Fabio Estevam <festevam@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Jiri Slaby <jslaby@suse.com >
Link: https://lore.kernel.org/r/20191004215537.5308-1-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-10-07 13:21:53 +02:00
Andrey Smirnov
6798e901ab
tty: serial: fsl_lpuart: Ignore TX/RX interrupts if DMA is enabled
...
In a mixed DMA/IRQ use-case (e.g.: DMA for TX, IRQ for RX), interrupt
handler might try to handle Rx/Tx condition it shouldn't. Change the
code to only handle TX/RX event if corresponding path isn't being
handled by DMA.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190805185701.22863-7-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:51 +02:00
Andrey Smirnov
f7ec1721b3
tty: serial: fsl_lpuart: Don't enable TIE in .startup() or .resume()
...
Enabling TIE in .startup() callback causes the driver to start (or at
least try) to transmit data before .start_tx() is called. Which, while
harmless (since TIE handler will immediately disable it), is a no-op
and shouldn't really happen. Drop UARTCR2_TIE from list of bits set in
lpuart_startup().
This change will also not enable TIE in .resume(), but it seems that,
similart to .startup(), transmit interrupt shouldn't be enabled there
either.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190805185701.22863-6-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:51 +02:00
Andrey Smirnov
352bd55e5d
tty: serial: fsl_lpuart: Introduce lpuart*_setup_watermark_enable()
...
Most users of lpuart*_setup_watermark() enable identical set of flags
right after the call, so combine those two action into a subroutine
and make use of it.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190805185701.22863-5-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:51 +02:00
Andrey Smirnov
4ff69041ec
tty: serial: fsl_lpuart: Introduce lpuart32_configure()
...
Code doing final steps of TX/RX configuration in lpuart32_startup()
and lpuart_resume() is identical, so move it into a standalone
subroutine.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190805185701.22863-4-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:51 +02:00
Andrey Smirnov
fd60e8e4a7
tty: serial: fsl_lpuart: Introduce lpuart_rx_dma_startup()
...
Code doing initial DMA RX configuration in lpuart_startup() and
lpuart32_startup() is exactly the same, so move it into a standalone
subroutine.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190805185701.22863-3-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:51 +02:00
Andrey Smirnov
5982199ca0
tty: serial: fsl_lpuart: Introduce lpuart_tx_dma_startup()
...
Code configure DMA TX path in lpuart_startup(), lpuart32_startup() and
lpuart_resume() is doing exactly the same thing, so move it into a
standalone subroutine.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190805185701.22863-2-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:51 +02:00
Stephen Boyd
1df2178681
tty: Remove dev_err() usage after platform_get_irq()
...
We don't need dev_err() messages when platform_get_irq() fails now that
platform_get_irq() prints an error message itself when something goes
wrong. Let's remove these prints with a simple semantic patch.
// <smpl>
@@
expression ret;
struct platform_device *E;
@@
ret =
(
platform_get_irq(E, ...)
|
platform_get_irq_byname(E, ...)
);
if ( \( ret < 0 \| ret <= 0 \) )
{
(
-if (ret != -EPROBE_DEFER)
-{ ...
-dev_err(...);
-... }
|
...
-dev_err(...);
)
...
}
// </smpl>
While we're here, remove braces on if statements that only have one
statement (manually).
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Signed-off-by: Stephen Boyd <swboyd@chromium.org >
Link: https://lore.kernel.org/r/20190730181557.90391-45-swboyd@chromium.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:49 +02:00
Andrey Smirnov
769d55c523
tty: serial: fsl_lpuart: Introduce lpuart_dma_shutdown()
...
Last steps of .shutdown() code are identical for lpuart and lpuart32
cases, so move it all into a standalone subroutine.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-19-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:48 +02:00
Andrey Smirnov
8a9b82422f
tty: serial: fsl_lpuart: Drop unnecessary lpuart*_stop_tx()
...
By the time lpuart_shutdown() calls lpuart_stop_tx() UARTCR2_TE and
UARTCR2_TIE (which the latter will clear) are already cleared, so that
function call should effectively be a no-op. Moreso, lpuart_stop_tx()
is expected to be executed with port spinlock held, which the caller
doesn't. Given all that, drop the call to lpuart_stop_tx() in
lpuart_shutdown().
In case of lpuart32_shutdown()/lpuart32_stop_tx(), TIE won't even be
set if lpuart_dma_tx_use is true. Drop it there as well.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-18-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:48 +02:00
Andrey Smirnov
a90fa53282
tty: serial: fsl_lpuart: Introduce lpuart_stopped_or_empty()
...
The check for
uart_circ_empty(xmit) || uart_tx_stopped(&sport->port)
appears in multiple places in the driver. Move it into a helper
function.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-17-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:48 +02:00
Andrey Smirnov
f2f5e04c75
tty: serial: fsl_lpuart: Use cpu_relax() instead of barrier()
...
Use cpu_relax() instead of barrier() in a tight polling loops to make
them a bit more idiomatic. Should also improve things on ARM64 a bit
since cpu_relax() will expand into "yield" instruction there.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-16-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:48 +02:00
Andrey Smirnov
56dd627fb2
tty: serial: fsl_lpuart: Introduce lpuart_wait_bit_set()
...
Busy polling on a bit in a register is used in multiple places in the
driver. Move it into a shared function.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-15-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:48 +02:00
Andrey Smirnov
1da17d7cf8
tty: serial: fsl_lpuart: Use appropriate lpuart32_* I/O funcs
...
When dealing with 32-bit variant of LPUART IP block appropriate I/O
helpers have to be used to properly deal with endianness
differences. Change all of the offending code to do that.
Fixes: a5fa2660d7
("tty/serial/fsl_lpuart: Add CONSOLE_POLL support
for lpuart32.")
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-14-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:48 +02:00
Andrey Smirnov
76e3f2ac4a
tty: serial: fsl_lpuart: Clear CSTOPB unconditionally
...
Clearing CSTOPB bit if it is set is functionally equivalent to jsut
clearing it unconditionally. Drop unnecessary check.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-13-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:48 +02:00
Andrey Smirnov
bcfa46bfb9
tty: serial: fsl_lpuart: Drop unnecessary extra parenthesis
...
Drop unnecessary extra parenthesis in the driver.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-12-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:48 +02:00
Andrey Smirnov
d26454ee3c
tty: serial: fsl_lpuart: Drop no-op bit opearation
...
The check for termios->c_cflag & CRTSCTS ensure that if we reach else
branch, CRTSCTS in termios->c_cflag is already going to be
cleard. Doing so explicitly there is not necessary. Drop it.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-11-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:47 +02:00
Andrey Smirnov
93b9523a8e
tty: serial: fls_lpuart: Split shared TX IRQ handler into two
...
While sharing code for Tx interrupt handler between 8 and 32 bit
variant of the peripheral saves a bit of code duplication it also adds
quite a number of lpuart_is_32() checks which makes it harder to
understand. Move shared bits back into corresponding
lpuart*_transmit_buffer functions, split lpuart_txint into
lpuart_txint and lpuart32_txint so we can drop all extra
lpuart_is_32() check and make the code flow more linear.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-10-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:47 +02:00
Andrey Smirnov
15dd287b28
tty: serial: fsl_lpuart: Fix issue in software flow control
...
Although I haven't observed this bug in practice, it seems that the
code for handling x_char of LPUART is pretty much identical to that of
i.MX. So the fix found in commit 7e2fb5aa8d
("serial: imx: Fix issue
in software flow control"):
serial: imx: Fix issue in software flow control
After send out x_char in UART driver, x_char needs to be cleared
by UART driver itself, otherwise data in TXFIFO can no longer be
sent out.
Also tx counter needs to be increased to keep track of correct
number of transmitted data.
Signed-off-by: Jiada Wang <jiada_wang@mentor.com >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
should apply here as well.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-9-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:47 +02:00
Andrey Smirnov
66127ec7e3
tty: serial: fsl_lpuart: Drop unnecessary uart_write_wakeup()
...
Uart_write_wakeup() will already be called as a part of
lpuart*_transmit_buffer() call, so there doesn't seem to be a reason
to call it again right after.
It also appears that second uart_write_wakeup() might potentially
cause unwanted write wakeup when transmitting an x_char. See commit
5e42e9a30c
("serial: imx: Fix x_char handling and tx flow control")
where this problem was fixed in a very similarly structured i.MX UART
driver.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-8-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:47 +02:00
Andrey Smirnov
834a974168
tty: serial: fsl_lpuart: Fix bogus indentation
...
Fix bogus indentation in rx_dma_timer_init().
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-6-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:47 +02:00
Andrey Smirnov
3993ddc236
tty: serial: fsl_lpuart: Simplify RX/TX IRQ handlers
...
It appears that lpuart_rxint, lpuart_txint and lpuart32_rxint were
modelled after identical function found in UART driver for
i.MX. However, while said functions are used as individual IRQ
handlers in i.MX driver (in case of i.MX1), it is not the case for
LPUART. Given that, there's no need for us to restrict the prototype
of the handler to irqreturn_t foo(int, void *) and we can drop all of
uneened boilerplate code by changing it void foo(struct lpuart_port *).
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-5-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:47 +02:00
Andrey Smirnov
9bc19af9da
tty: serial: fsl_lpuart: Flush HW FIFOs in .flush_buffer
...
Switching baud rate might cause bogus data to appear in HW
FIFO. Add code to do a HW FIFO flush to .flush_buffer callback to
avoid that.
Signed-off-by: Fugang Duan <fugang.duan@nxp.com >
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-4-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:47 +02:00
Stefan Agner
cc584ab860
tty: serial: fsl_lpuart: flush receive FIFO after overruns
...
After overruns the FIFO pointers become misaligned. This
typically shows by characters still being stuck in the FIFO
despite the empty flag being asserted. After the first
assertion of the overrun flag the empty flag still seems to
indicate FIFO state correctly and all data can be read.
However, after another overrun assertion the FIFO seems to
be off by one such that the last received character is still
in the FIFO (despite the empty flag being asserted).
Flushing the receive FIFO reinitializes pointers. Hence it
is recommended to flush the FIFO after overruns, see also:
https://community.nxp.com/thread/321175
Hence, on assertion of the overrun flag read the remaining
data from the FIFO and flush buffers.
Signed-off-by: Stefan Agner <stefan.agner@toradex.com >
Acked-by: Max Krummenacher <max.krummenacher@toradex.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-3-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:47 +02:00
Stefan Agner
656321793f
tty: serial: fsl_lpuart: fix framing error handling when using DMA
...
When using DMA framing error get cleared properly. However, due
to the additional read from the data register, an underflow in
the receive FIFO buffer occurs (the FIFO pointer gets out of
sync).
Clear the FIFO in case an underflow has occurred. Also disable the
receiver during this operation and when reading the data register to
minimize potential interference.
Signed-off-by: Stefan Agner <stefan.agner@toradex.com >
Acked-by: Max Krummenacher <max.krummenacher@toradex.com >
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com >
Cc: Stefan Agner <stefan@agner.ch >
Cc: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com >
Cc: Chris Healy <cphealy@gmail.com >
Cc: Cory Tusar <cory.tusar@zii.aero >
Cc: Lucas Stach <l.stach@pengutronix.de >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Jiri Slaby <jslaby@suse.com >
Cc: linux-imx@nxp.com
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20190729195226.8862-2-andrew.smirnov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-04 12:43:46 +02:00