GitHub/moto-9609/android_kernel_motorola_exynos9610.git
9 years agotty: serial: msm: Add mask value for UART_DM registers
Pramod Gurav [Wed, 30 Sep 2015 12:26:58 +0000 (15:26 +0300)]
tty: serial: msm: Add mask value for UART_DM registers

The bit masks for RFR_LEVEL1 and STALE_TIMEOUT_MSB values in MR1 and
IPR registers respectively are different for UART and UART_DM hardware
cores. We have been using UART core mask values for these. Add the same
for UART_DM core.

There is no bit setting as UART_IPR_RXSTALE_LAST for UART_DM core so do
it only for UART core.

Signed-off-by: Pramod Gurav <gpramod@codeaurora.org>
Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Ivan T. Ivanov <ivan.ivanov@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agosc16is7xx: null ptr check
Sean Nyekjaer [Sun, 4 Oct 2015 16:59:45 +0000 (18:59 +0200)]
sc16is7xx: null ptr check

If a wrong compatible flag in specified, the of_match_device
returning null.
Implemented check and if NULL then returning -ENODEV.

Signed-off-by: Sean Nyekjaer <sean.nyekjaer@prevas.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: omap: remove warnings about unused functions
Ezequiel Garcia [Sat, 3 Oct 2015 19:45:35 +0000 (16:45 -0300)]
serial: omap: remove warnings about unused functions

They're used by only if CONFIG_PM is enabled, so enclose them
with proper ifdefs. Removes these warnings:

drivers/tty/serial/omap-serial.c:202:12: warning: 'serial_omap_get_context_loss_count' defined but not used [-Wunused-function]
drivers/tty/serial/omap-serial.c:213:13: warning: 'serial_omap_enable_wakeup' defined but not used [-Wunused-function]

Signed-off-by: Guido Martínez <guido@vanguardiasur.com.ar>
Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agompsc: use dma_set_mask insted of dma_supported
Christoph Hellwig [Sat, 3 Oct 2015 15:19:33 +0000 (17:19 +0200)]
mpsc: use dma_set_mask insted of dma_supported

This ensures the dma mask that is supported by the driver is recorded
in the device structure.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250_dma: no need to sync RX buffer
Andy Shevchenko [Wed, 30 Sep 2015 07:04:17 +0000 (10:04 +0300)]
serial: 8250_dma: no need to sync RX buffer

RX buffer is allocated from DMA coherent memory. Thus there is no need to call
DMA sync API for it.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250: Refactor serial console restore-from-suspend
Peter Hurley [Fri, 25 Sep 2015 19:36:11 +0000 (15:36 -0400)]
serial: 8250: Refactor serial console restore-from-suspend

Move h/w reinit of serial console restore-from-suspend into
standalone helper function.

No functional change.

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250: Tolerate clock variance for max baud rate
James Hogan [Fri, 25 Sep 2015 19:36:10 +0000 (15:36 -0400)]
serial: 8250: Tolerate clock variance for max baud rate

When the UART clock is set slightly under 1.8432MHz, the 8250 driver
core doesn't permit the 115200 baud rate since it calculates the maximum
frequency to pass to uart_get_baud_rate by simply dividing the uart
clock by 16 which yields a value slightly under 115200, even though the
frequency is close enough for the UART to operate reliably.

Therefore add some tolerance in the calculation of the maximum baud
rate. 1% tolerance allows for marginally slower uart clk than nominal
without introducing transmission errors.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
[pjh: Forward-port & refactor original patch; change tolerance to 1%]
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial_core: support native endianness
Max Filippov [Tue, 22 Sep 2015 12:20:32 +0000 (15:20 +0300)]
serial_core: support native endianness

There are three natural ways in which devices may be wired to the system:
little endian (device receives correctly ordered bits of a word written
by little-endian CPU to its register, but big-endian CPU needs to swap
bytes of a word before writing it), big endian (same, but with big-endian
CPU in more favourable position) and native endian (CPU of either
endianness may do word-sized I/O without need for byteswapping).

Adding an option for native endianness allows using single kernel command
line for boards with native-endian serial ports on bi-endian
architectures. This goes in parallel with 'native-endian' DTS attribute.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agotty/serial: st-asc: drop the use of IRQF_NO_SUSPEND
Sudeep Holla [Mon, 21 Sep 2015 15:47:06 +0000 (16:47 +0100)]
tty/serial: st-asc: drop the use of IRQF_NO_SUSPEND

These drivers doesn't claim the serial device to be wakeup source. Even
if it is, it needs to use enable_irq_wake or other related PM wakeup
APIs to enable it.

This patch removes yet another misuse of IRQF_NO_SUSPEND.

Cc: Srinivas Kandagatla <srinivas.kandagatla@gmail.com>
Cc: Maxime Coquelin <maxime.coquelin@st.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: linux-arm-kernel@lists.infradead.org
Cc: kernel@stlinux.com
Cc: linux-serial@vger.kernel.org
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoMIPS: ttyFDC: replace IRQF_NO_SUSPEND with IRQF_COND_SUSPEND
Sudeep Holla [Mon, 21 Sep 2015 15:47:05 +0000 (16:47 +0100)]
MIPS: ttyFDC: replace IRQF_NO_SUSPEND with IRQF_COND_SUSPEND

Since the FD interrupt handler can discern spurious IRQs and it is
shared with timer interrupt, use IRQF_COND_SUSPEND instead of
IRQF_NO_SUSPEND.

Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jiri Slaby <jslaby@suse.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agotty: serial: lpc32xx_hs: fix handling platform_get_irq result
Andrzej Hajda [Mon, 21 Sep 2015 13:33:38 +0000 (15:33 +0200)]
tty: serial: lpc32xx_hs: fix handling platform_get_irq result

The function can return negative values.

The problem has been detected using proposed semantic patch
scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci [1].

[1]: http://permalink.gmane.org/gmane.linux.kernel/2038576

Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agotty: serial: cpm_uart: Fix module autoload for OF platform driver
Luis de Bethencourt [Fri, 18 Sep 2015 18:03:14 +0000 (20:03 +0200)]
tty: serial: cpm_uart: Fix module autoload for OF platform driver

This platform driver has a OF device ID table but the OF module
alias information is not created so module autoloading won't work.

Signed-off-by: Luis de Bethencourt <luisbg@osg.samsung.com>
Acked-by: Timur Tabi <timur@tabi.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agotty: serial: sprd: Fix module autoload for OF platform driver
Luis de Bethencourt [Fri, 18 Sep 2015 18:04:12 +0000 (20:04 +0200)]
tty: serial: sprd: Fix module autoload for OF platform driver

This platform driver has a OF device ID table but the OF module
alias information is not created so module autoloading won't work.

Signed-off-by: Luis de Bethencourt <luisbg@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agotty: serial: of_serial: Fix module autoload for OF platform driver
Luis de Bethencourt [Fri, 18 Sep 2015 18:03:43 +0000 (20:03 +0200)]
tty: serial: of_serial: Fix module autoload for OF platform driver

This platform driver has a OF device ID table but the OF module
alias information is not created so module autoloading won't work.

Signed-off-by: Luis de Bethencourt <luisbg@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agotty: serial: apbuart: Fix module autoload for OF platform driver
Luis de Bethencourt [Fri, 18 Sep 2015 18:02:44 +0000 (20:02 +0200)]
tty: serial: apbuart: Fix module autoload for OF platform driver

This platform driver has a OF device ID table but the OF module
alias information is not created so module autoloading won't work.

Signed-off-by: Luis de Bethencourt <luisbg@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250: simplify ralink/alchemy register remap selection
Mans Rullgard [Tue, 15 Sep 2015 16:54:13 +0000 (17:54 +0100)]
serial: 8250: simplify ralink/alchemy register remap selection

Some SoCs, including Ralink/Mediatek and Alchemy Au1xxx, have a
16550-like UART with a non-standard register layout.  These are
supported by a simple mapping table in 8250_port.c  Rather than
list every SoC type using this access mode in the ifdefs there,
allow selecting the SERIAL_8250_RT288X Kconfig option with any
system and default it to y for the known cases needing it.  The
help text is reworded accordingly.

This change simplifies adding support for other SoCs also using
the same UART.

The name of the option is a little misleading, but not knowing
the true origin of this UART, it is as good a choice as any.

Signed-off-by: Mans Rullgard <mans@mansr.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: mctrl_gpio: implement interrupt handling
Uwe Kleine-König [Wed, 30 Sep 2015 08:19:41 +0000 (10:19 +0200)]
serial: mctrl_gpio: implement interrupt handling

This allows to reduce the per-driver boiler plate considerably.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Reviewed-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: mctrl-gpio: rename init function
Uwe Kleine-König [Wed, 30 Sep 2015 08:19:40 +0000 (10:19 +0200)]
serial: mctrl-gpio: rename init function

This is done before adding more functionality to the init function with
the existing name. As this new functionality conflicts with stuff
drivers are required to implement themselves up to I want to convert
them one by one to make reviewing and reverting more easy in case I
broke something.

Once mctrl_gpio_init is there and all drivers are converted
mctrl_gpio_init_noauto can be removed again.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: mxs-auart+imx: allow compile testing on non-Freescale architectures
Uwe Kleine-König [Wed, 30 Sep 2015 08:19:39 +0000 (10:19 +0200)]
serial: mxs-auart+imx: allow compile testing on non-Freescale architectures

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: atmel: allow compile testing on non-atmel architectures
Uwe Kleine-König [Wed, 30 Sep 2015 08:19:38 +0000 (10:19 +0200)]
serial: atmel: allow compile testing on non-atmel architectures

This commit also fixes compiler warnings and errors seen when building
on x86_64.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: imx: also update RX stats in DMA path
Lucas Stach [Fri, 4 Sep 2015 15:52:43 +0000 (17:52 +0200)]
serial: imx: also update RX stats in DMA path

The RX bytecount was only updated in the PIO path and thus
the device erroneously reported a value of 0 if DMA is in
use.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Acked-by: Jiada Wang <jiada_wang@mentor.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: imx: re-enable DMA support without hardware flow control
Lucas Stach [Fri, 4 Sep 2015 15:52:42 +0000 (17:52 +0200)]
serial: imx: re-enable DMA support without hardware flow control

The commit enabling DMA support even if no flow control is present
was reverted on the grounds that it uncovered a number of bugs in
the code that lead to hanging tty devices and/or missing characters.

After tracking down the issues it is clear that those were generic
bugs and had nothing to do with flow control being present or not,
only that allowing DMA without hardware flow control increased
the exposure of that code a lot.

Now that those bugs are fixed, it should be safe to re-enable DMA
support.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Acked-by: Jiada Wang <jiada_wang@mentor.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: imx: don't use idle condition detect for DMA transfers
Lucas Stach [Fri, 4 Sep 2015 15:52:41 +0000 (17:52 +0200)]
serial: imx: don't use idle condition detect for DMA transfers

The reference manual states that idle condition detect should not be used
with DMA transfers, as the ROM SDMA scripts don't check those conditions.

The RAM SDMA scripts worked around this, but the change broke compatibility
with the ROM scripts.

The previous commits fixed the DMA burst sizes, so that the aging timer is
now working as described in the reference manual. With this fixed we can
remove the hack of using the idle condition detect to stop the DMA transfer
if there are no new characters incoming.

This should work with both the ROM and RAM SDMA scripts.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Acked-by: Jiada Wang <jiada_wang@mentor.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: imx: configure proper DMA burst sizes
Lucas Stach [Fri, 4 Sep 2015 15:52:40 +0000 (17:52 +0200)]
serial: imx: configure proper DMA burst sizes

Triggering the DMA engine for every byte is horribly inefficient.
Also it doesn't allow to use the aging timer for the RX FIFO as this
requires the DMA engine to leave one byte remaining in the FIFO when
doing a normal burst transfer.

Adjust watermark levels so that the DMA engine can do at least 8 byte
burst transfers. This is a conservative value, as the both TX and RX
FIFOs are able to contain 32 bytes.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Acked-by: Jiada Wang <jiada_wang@mentor.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: imx: always restart DMA if more data is available
Lucas Stach [Fri, 4 Sep 2015 15:52:39 +0000 (17:52 +0200)]
serial: imx: always restart DMA if more data is available

Simplify the DMA restart logic to always queue up the next transfer
immediately if there is at least one more byte available in the FIFO,
so that the transfer will finish in a limited time.

This way the driver stops to rely on zero length transfers to signal
transfers ends. Those will go away when the idle detect DMA requests
are disabled.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Acked-by: Jiada Wang <jiada_wang@mentor.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: imx: set up aging timer interrupt as DMA trigger
Lucas Stach [Fri, 4 Sep 2015 15:52:38 +0000 (17:52 +0200)]
serial: imx: set up aging timer interrupt as DMA trigger

The DMA transfer is only started once we are sure it will finish
in a limited time, i.e. only after we received a RRDY interrupt.

In order to allow the watermark level to be raised the aging
timer and the corresponding interrupt need to be set up as an
additional trigger, so that the transfer is also started if the
incoming amount of bytes never reach the watermark.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Acked-by: Jiada Wang <jiada_wang@mentor.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: imx: make setup_ufcr more useful
Lucas Stach [Fri, 4 Sep 2015 15:52:37 +0000 (17:52 +0200)]
serial: imx: make setup_ufcr more useful

This function currently doesn't use its parameter.

Change prototype to pass in watermark levels, so we can reuse this
function in the DMA setup paths. Also relocate to be near the calling
functions.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Acked-by: Jiada Wang <jiada_wang@mentor.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250_dw: don't set UPF_BOOT_AUTOCONF flag
Heikki Krogerus [Mon, 21 Sep 2015 11:17:33 +0000 (14:17 +0300)]
serial: 8250_dw: don't set UPF_BOOT_AUTOCONF flag

serial8250_register_8250_port adds it to all ports it
registers. No need to set it separately.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250_dw: cleanup dw8250_setup_port
Heikki Krogerus [Mon, 21 Sep 2015 11:17:32 +0000 (14:17 +0300)]
serial: 8250_dw: cleanup dw8250_setup_port

Using the same style of declaring variables as used in the
other functions of the driver. Passing uart_port to the
function instead of uart_8250_port, as it is the one mostly
needed.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250_dw: cleanup dw8250_idma_filter
Heikki Krogerus [Mon, 21 Sep 2015 11:17:31 +0000 (14:17 +0300)]
serial: 8250_dw: cleanup dw8250_idma_filter

Remove the extra return.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250_dw: rename and comment the fallback dma filter
Heikki Krogerus [Mon, 21 Sep 2015 11:17:30 +0000 (14:17 +0300)]
serial: 8250_dw: rename and comment the fallback dma filter

Adding comment where the purpose of the function is
explained.

The dma parameters are not used, so removing them, and also
moving the assignment of the function to the same place
where the other dw8250_data structures members are being set
in dw8250_probe.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250_dw: proper support for UARTs without busy functionality
Heikki Krogerus [Mon, 21 Sep 2015 11:17:29 +0000 (14:17 +0300)]
serial: 8250_dw: proper support for UARTs without busy functionality

If the DW_apb_uart is configured with UART_16550_COMPATIBLE
configuration parameter set, then the Busy Functionality is
not available. These UARTs will never generate the Busy
detect indication interrupt, and therefore don't need
handling for it.

This creates a small optimization for the DW_apb_uarts
configured without the busy functionality, but more
importantly, it removes the small but real risk of hitting
potential issues caused by busy functionality handling when
no busy functionality exist.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250_dw: add dw8250_quirks function
Heikki Krogerus [Mon, 21 Sep 2015 11:17:28 +0000 (14:17 +0300)]
serial: 8250_dw: add dw8250_quirks function

Merging the DT and ACPI specific probe functions into
dw8250_quirks. Those functions did not have that much code
any more and some of the quirks need to be shared. This
will also allow platforms without DT or ACPI to use the
driver.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250_dw: only setup the port from one place
Heikki Krogerus [Mon, 21 Sep 2015 11:17:27 +0000 (14:17 +0300)]
serial: 8250_dw: only setup the port from one place

This adds a flag "skip_autocfg" that the platforms that do
not have the ADDITIONAL_FEATURES implemented can use to skip
the port setup. It's then enough to call dw8250_setup_port
just from dw8250_probe based on that flag.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250_dw: hook the DMA in one place
Heikki Krogerus [Mon, 21 Sep 2015 11:17:26 +0000 (14:17 +0300)]
serial: 8250_dw: hook the DMA in one place

Instead of assigning the dma member in dw8250_probe_of and
dw8250_probe_acpi separately, assigning it in dw8250_probe.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250_dw: adapt to unified device property interface
Heikki Krogerus [Mon, 21 Sep 2015 11:17:25 +0000 (14:17 +0300)]
serial: 8250_dw: adapt to unified device property interface

This makes the properties available for all types of
platforms instead of just the ones using DT.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250_dw: add separate pointer for the uart_port to dw8250_probe
Heikki Krogerus [Mon, 21 Sep 2015 11:17:24 +0000 (14:17 +0300)]
serial: 8250_dw: add separate pointer for the uart_port to dw8250_probe

For convenience, adding separate pointer for the "port"
member of struct uart_8250_port that is being filled in the
probe function.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250: Add OF earlycon support
Scott Wood [Tue, 15 Sep 2015 00:56:03 +0000 (19:56 -0500)]
serial: 8250: Add OF earlycon support

This allows earlycon to be used without needing to specify the I/O
address on the kernel command line, if linux,stdout-path is specified
in the chosen node.

Signed-off-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: imx: add earlycon support
Lucas Stach [Fri, 28 Aug 2015 09:56:19 +0000 (11:56 +0200)]
serial: imx: add earlycon support

Earlycon allows to have an early debugging console that doesn't need
to be statically configured in the kernel config, like earlyprintk,
but is set up through the stdout-path DT property.

This allows to have the early debugging always built into the
kernel and enabled on demand without clashing between different boards
or architectures.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoARM64: TTY: hvc_dcc: Add support for ARM64 dcc
Abhimanyu Kapur [Sat, 12 Sep 2015 17:44:39 +0000 (12:44 -0500)]
ARM64: TTY: hvc_dcc: Add support for ARM64 dcc

Add support for debug communications channel based
hvc console for arm64 cpus.

Signed-off-by: Abhimanyu Kapur <abhimany@codeaurora.org>
Signed-off-by: Timur Tabi <timur@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agohvc_dcc: don't ignore errors during initialization
Timur Tabi [Sat, 12 Sep 2015 17:44:38 +0000 (12:44 -0500)]
hvc_dcc: don't ignore errors during initialization

hvc_instantiate() and hvc_alloc() return errors if they fail, so don't
ignore them.

Signed-off-by: Timur Tabi <timur@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agotty/serial: at91: move ATMEL_MAX_UART
Alexandre Belloni [Thu, 10 Sep 2015 09:29:03 +0000 (11:29 +0200)]
tty/serial: at91: move ATMEL_MAX_UART

Move ATMEL_MAX_UART from platform_data/atmel.h to atmel_serial.c as this is
the only file using it and it is common practise from tty/serial drivers to
define it directly in the driver file.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: of-serial: compile correctly when 8250 driver is compiled as module
Martin Sperl [Fri, 11 Sep 2015 11:38:03 +0000 (11:38 +0000)]
serial: of-serial: compile correctly when 8250 driver is compiled as module

If the 8250 driver is compiled as a module then
CONFIG_SERIAL_8250_MODULE is defined and not CONFIG_SERIAL_8250.

This results in all those code sections that require CONFIG_SERIAL_8250
to be defined are not included.

This patch fixes the situation and allows 8250 and of-serial to
be compiled as a module with the same functionality as when
compiled into the kernel.

Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: altera_uart: Use of_property_read_u32 instead of open-coding it
Tobias Klauser [Wed, 9 Sep 2015 18:34:12 +0000 (20:34 +0200)]
serial: altera_uart: Use of_property_read_u32 instead of open-coding it

Use of_property_read_u32 instead of of_get_property with return value
checks and endianness conversion. Also remove the !CONFIG_OF
implementation of altera_uart_get_of_uartclk as of_property_read_u32
will return a non-zero value for !CONFIG_OF.

Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agodevicetree: Add JZ4760/JZ4775 to Ingenic SoC UART binding
Matt Redfearn [Tue, 8 Sep 2015 15:55:36 +0000 (16:55 +0100)]
devicetree: Add JZ4760/JZ4775 to Ingenic SoC UART binding

Add these variants of the UART as compatible strings

Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
blah
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250_ingenic: Enable FIFO for Ingenic UARTs
Matt Redfearn [Tue, 8 Sep 2015 15:55:35 +0000 (16:55 +0100)]
serial: 8250_ingenic: Enable FIFO for Ingenic UARTs

Enable the TX/RX FIFOs present on UARTs in Ingenic SoCs.
FIFO sizes vary per device so match these based on
the OF compatible string

Enabling the FIFOs permits much faster transfer with
lower CPU overhead.

Tested on Ingenic JZ4780 on the MIPS Ci20 Creator board

Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250_ingenic: Enable hardware flow control
Matt Redfearn [Tue, 8 Sep 2015 15:55:34 +0000 (16:55 +0100)]
serial: 8250_ingenic: Enable hardware flow control

The Ingenic UART is similar to a standard 16550, but hardware flow control
requires setting a couple of additional, non-standard bits in the MCR.

The non-standard "modem control enable" and "hardware flow control
mode" bits are set when writing to the MCR register, based
on whether the modem control interrupt is active.

Additionally the non-16550 compliant parts of the uart need to be
masked from higher layers.

Tested on Ingenic JZ4780 on MIPS Creator Ci20 board

Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sc16is7xx: Remove unnecessary MODULE_ALIAS()
Javier Martinez Canillas [Sun, 30 Aug 2015 21:42:14 +0000 (23:42 +0200)]
serial: sc16is7xx: Remove unnecessary MODULE_ALIAS()

The driver has a I2C device id table that is used to create the modaliases
and also "sc16is7xx" is not a supported I2C id, so it's never used.

Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: mux: Convert to uart_console_device instead of open-coded
Axel Lin [Sat, 19 Sep 2015 03:43:07 +0000 (11:43 +0800)]
serial: mux: Convert to uart_console_device instead of open-coded

The implementation of mux_console_device() is very similar to
uart_console_device(). Setting .data field in mux_console then we can
convert to use uart_console_device().

Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 68328serial: Use NULL for pointers
Fabio Estevam [Tue, 25 Aug 2015 19:49:46 +0000 (16:49 -0300)]
serial: 68328serial: Use NULL for pointers

Compare pointer-typed values to NULL rather than 0

The semantic patch that makes this change is available
in scripts/coccinelle/null/badzero.cocci.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: samsung: Fix UART status handling in DMA mode
Robert Baldyga [Tue, 15 Sep 2015 12:49:00 +0000 (14:49 +0200)]
serial: samsung: Fix UART status handling in DMA mode

So far, when interrupt occured in DMA mode, it was handled by terminating
DMA transfer and draining data remaining in RX FIFO. It worked well
until interrupt was caused by timeout, but the same interrupt can be
alse caused by special condition (eg. 'break'), which requires special
handling. In such case handling mechanism was the same - DMA transaction
was terminated and FIFO was drained, but any special conditions were
ingnored. Because of this in DMA mode there was no ability to use,
for example, Magic SysRq.

This patch fixes this problem by using s3c24xx_serial_rx_drain_fifo()
function instead of uart_rx_drain_fifo(), which does the same thing
(drains RX FIFO) plus checks UART status to detect special conditions
(such as 'break'). Thanks to this we have exactly the same UART status
handling in both DMA and PIO mode.

This change additionally simplifies RX handling code, as we no longer
need uart_rx_drain_fifo() function, so we can remove it.

Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Robert Baldyga <r.baldyga@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: samsung: introduce s3c24xx_serial_rx_drain_fifo() function
Robert Baldyga [Tue, 15 Sep 2015 12:48:59 +0000 (14:48 +0200)]
serial: samsung: introduce s3c24xx_serial_rx_drain_fifo() function

This patch introduces s3c24xx_serial_rx_drain_fifo() which reads data
from RX FIFO and writes it to tty buffer. It also checks for special
conditions (such as 'break') and handles it. This function has been
separated from s3c24xx_serial_rx_chars_pio() as it contains code which
can be used also in DMA mode.

Signed-off-by: Robert Baldyga <r.baldyga@samsung.com>
Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: samsung: remove unneded 'ignore_char' label
Robert Baldyga [Tue, 15 Sep 2015 12:48:58 +0000 (14:48 +0200)]
serial: samsung: remove unneded 'ignore_char' label

This label does nothing special and we don't need to have it anymore.

Signed-off-by: Robert Baldyga <r.baldyga@samsung.com>
Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: samsung: remove unused 'irq' parameter
Robert Baldyga [Tue, 15 Sep 2015 12:48:57 +0000 (14:48 +0200)]
serial: samsung: remove unused 'irq' parameter

This parameter is not used anywhere, so we can get rid of it.

Signed-off-by: Robert Baldyga <r.baldyga@samsung.com>
Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Add DT support to DMA setup
Geert Uytterhoeven [Fri, 18 Sep 2015 11:08:33 +0000 (13:08 +0200)]
serial: sh-sci: Add DT support to DMA setup

Add support for obtaining DMA channel information from the device tree.

This requires switching from the legacy sh_dmae_slave structures with
hardcoded channel numbers and the corresponding filter function to:
  1. dma_request_slave_channel_compat(),
       - On legacy platforms, dma_request_slave_channel_compat() uses
 the passed DMA channel numbers that originate from platform
 device data,
       - On DT-based platforms, dma_request_slave_channel_compat() will
 retrieve the information from DT.
  2. and the generic dmaengine_slave_config() configuration method,
     which requires filling in DMA register ports and slave bus widths.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Pause DMA engine and get DMA status again
Muhammad Hamza Farooq [Fri, 18 Sep 2015 11:08:32 +0000 (13:08 +0200)]
serial: sh-sci: Pause DMA engine and get DMA status again

Occasionally, DMA transaction completes _after_ DMA engine is stopped.
Verify if the transaction has not finished before forcing the engine to
stop and push the data

Signed-off-by: Muhammad Hamza Farooq <mfarooq@visteon.com>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Do not terminate DMA engine when race condition occurs
Muhammad Hamza Farooq [Fri, 18 Sep 2015 11:08:31 +0000 (13:08 +0200)]
serial: sh-sci: Do not terminate DMA engine when race condition occurs

When DMA packet completion and timer expiry take place at the same time,
do not terminate the DMA engine, leading by submission of new
descriptors, as the DMA communication hasn't necessarily stopped here.

Signed-off-by: Muhammad Hamza Farooq <mfarooq@visteon.com>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Call dma_async_issue_pending when transaction completes
Muhammad Hamza Farooq [Fri, 18 Sep 2015 11:08:30 +0000 (13:08 +0200)]
serial: sh-sci: Call dma_async_issue_pending when transaction completes

dmaengine_submit() will not start the DMA operation, it merely adds
it to the pending queue.  If the queue is no longer running, it won't be
restarted until dma_async_issue_pending() is called.

Signed-off-by: Muhammad Hamza Farooq <mfarooq@visteon.com>
[geert: Add more description]
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Redirect port interrupts to CPU _only_ when DMA stops
Muhammad Hamza Farooq [Fri, 18 Sep 2015 11:08:29 +0000 (13:08 +0200)]
serial: sh-sci: Redirect port interrupts to CPU _only_ when DMA stops

Since the DMA engine is not stopped everytime rx_timer_fn is called, the
interrupts have to be redirected back to CPU only when incomplete DMA
transaction is handled

Signed-off-by: Muhammad Hamza Farooq <mfarooq@visteon.com>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Remove timer on shutdown of port
Aleksandar Mitev [Fri, 18 Sep 2015 11:08:28 +0000 (13:08 +0200)]
serial: sh-sci: Remove timer on shutdown of port

This prevents DMA timer timeout that can trigger after the port has
been closed.

Signed-off-by: Aleksandar Mitev <amitev@visteon.com>
[geert: Move del_timer_sync() outside spinlock to avoid circular locking
        dependency between rx_timer_fn() and del_timer_sync()]
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Stop calling sci_start_rx() from sci_request_dma()
Geert Uytterhoeven [Fri, 18 Sep 2015 11:08:27 +0000 (13:08 +0200)]
serial: sh-sci: Stop calling sci_start_rx() from sci_request_dma()

There's no need to call sci_start_rx() from sci_request_dma() when DMA
setup fails, as sci_startup() will call sci_start_rx() anyway.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Submit RX DMA from RX interrupt on (H)SCIF
Geert Uytterhoeven [Fri, 18 Sep 2015 11:08:26 +0000 (13:08 +0200)]
serial: sh-sci: Submit RX DMA from RX interrupt on (H)SCIF

For DMA receive requests, the driver is only notified by DMA completion
after the whole DMA request has been transferred.  If less data is
received, it will stay stuck until more data arrives.  The driver
handles this by setting up a timer handler from the receive interrupt,
after reception of the first character.

Unlike SCIFA and SCIFB, SCIF and HSCIF don't issue receive interrupts on
reception of individual characters if a receive DMA request is in
progress, so the timer is never set up.

To fix receive DMA on SCIF and HSCIF, submit the receive DMA request
from the receive interrupt handler instead.
In some sense this is similar to the SCIFA/SCIFB behavior, where the
RDRQE (Rx Data Transfer Request Enable) bit is also set from the receive
interrupt handler.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Get rid of the workqueue to handle receive DMA requests
Geert Uytterhoeven [Fri, 18 Sep 2015 11:08:25 +0000 (13:08 +0200)]
serial: sh-sci: Get rid of the workqueue to handle receive DMA requests

The receive DMA workqueue function work_fn_rx() handles two things:
  1. Reception of a full buffer on completion of a receive DMA request,
  2. Reception of a partial buffer on receive DMA time-out.
The workqueue is kicked by both the receive DMA completion handler, and
by a timer to handle DMA time-out.

As there are always two receive DMA requests active, it's possible that
the receive DMA completion handler is called a second time before the
workqueue function runs.

As the time-out handler re-enables the receive interrupt, an interrupt
may come in before time-out has been fully handled.

Move part 1 into the receive DMA completion handler, and move part 2
into the receive DMA time-out handler, to fix these race conditions.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Shuffle functions around
Geert Uytterhoeven [Fri, 18 Sep 2015 11:08:24 +0000 (13:08 +0200)]
serial: sh-sci: Shuffle functions around

This allows to:
  - Remove forward declarations of static functions,
  - Coalesce two sections protected by #ifdef CONFIG_SERIAL_SH_SCI_DMA,
  - Avoid shuffling functions around in the near future,
  - Avoid adding forward declarations in the near future.

No functional changes.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Add device tree support for r8a7795
Kuninori Morimoto [Wed, 30 Sep 2015 09:57:33 +0000 (11:57 +0200)]
serial: sh-sci: Add device tree support for r8a7795

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Simon Horman <horms+renesas@verge.net.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Don't call sci_dma_rx_push() if no data has arrived
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:57 +0000 (20:02 +0200)]
serial: sh-sci: Don't call sci_dma_rx_push() if no data has arrived

On receive DMA time-out, avoid calling sci_dma_rx_push() if no data was
transferred by the timed out DMA request.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Don't kick tx in sci_er_interrupt() when using DMA
Yoshihiro Shimoda [Fri, 21 Aug 2015 18:02:56 +0000 (20:02 +0200)]
serial: sh-sci: Don't kick tx in sci_er_interrupt() when using DMA

If CONFIG_SERIAL_SH_SCI_DMA is enabled, the driver doesn't enable TIE
on SCIF or HSCIF. However, this driver may call sci_tx_interrupt()
in sci_er_interrupt(). After that, the driver cannot care of the
interrupt, and then "irq 109: nobody cared" happens on r8a7791/koelsch
board. This patch fixes the issue.

Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
[geert] Keep kicking tx when using PIO
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Don't call sci_rx_interrupt() on error when using DMA
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:55 +0000 (20:02 +0200)]
serial: sh-sci: Don't call sci_rx_interrupt() on error when using DMA

The error handler calls sci_rx_interrupt() to drain the receive FIFO if
an error condition happens.

However, if DMA is enabled on SCIFA or SCIFB, this will call
disable_irq_nosync() twice. Due to this imbalance, the receive interrupt
will never be re-enabled, and reception stops forever.

To fix this, restrict draining the FIFO to PIO mode, and just call
sci_receive_chars() directly.

Inspired by a patch from Yoshihiro Shimoda
<yoshihiro.shimoda.uh@renesas.com>.

Reported-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Fix NULL pointer dereference if HIGHMEM is enabled
Yoshihiro Shimoda [Fri, 21 Aug 2015 18:02:54 +0000 (20:02 +0200)]
serial: sh-sci: Fix NULL pointer dereference if HIGHMEM is enabled

This patch fixes an issue that this driver causes a NULL pointer
dereference in the following conditions:
 - CONFIG_HIGHMEM and CONFIG_SERIAL_SH_SCI_DMA are enabled
 - This driver runs on the sci_dma_rx_push()

This issue was caused by virt_to_page(buf) in the sci_request_dma()
because this driver didn't check if the "buf" was valid or not.  So,
this patch uses the "buf" from dma_alloc_coherent() as is, not page.

This patch also fixes a WARNING issue in sci_rx_dma_release():

    WARNING: CPU: 0 PID: 1328 at lib/dma-debug.c:1125 check_unmap+0x444/0x848()
    rcar-dmac e6700000.dma-controller: DMA-API: device driver frees DMA memory with different CPU address [device address=0x000000006dd89000] [size=64 bytes] [cpu alloc address=0x000000016189c000] [cpu free address=0x0000000080000000]

    WARNING: CPU: 1 PID: 1 at drivers/base/dma-mapping.c:334 dma_common_free_remap+0x48/0x6c()
    trying to free invalid coherent area:   (null)

Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
[geert] Rebased
[geert] Reworded
[geert] Dropped .rx_chunk, as it's always identical to .rx_buf[0]
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Use incrementing pointers instead of stack array
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:53 +0000 (20:02 +0200)]
serial: sh-sci: Use incrementing pointers instead of stack array

There's no need to keep all buffer and DMA pointers on the stack.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Use tty_insert_flip_string() for DMA receive
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:52 +0000 (20:02 +0200)]
serial: sh-sci: Use tty_insert_flip_string() for DMA receive

Switch from using tty_buffer_request_room() and looping over
tty_insert_flip_char() to tty_insert_flip_string().
Keep track of buffer overruns in the icount structure, like
serial_core.c does.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Pass scatterlist to sci_dma_rx_push()
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:51 +0000 (20:02 +0200)]
serial: sh-sci: Pass scatterlist to sci_dma_rx_push()

Currently sci_dma_rx_push() has to find the active scatterlist itself,
but in some cases the caller already knows.

Hence let the caller pass the scatterlist, and introduce a helper to
find the active DMA request while we're at it.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Fix race condition between RX worker and cleanup
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:50 +0000 (20:02 +0200)]
serial: sh-sci: Fix race condition between RX worker and cleanup

During serial port shutdown, the DMA receive worker function may still
be called after the receive DMA cleanup function has been called.
Fix this race condition between work_fn_rx() and sci_rx_dma_release() by
acquiring the port's spinlock in sci_rx_dma_release().
This requires releasing the spinlock in work_fn_rx() before calling (any
function that may call) sci_rx_dma_release().

Terminate all active receive DMA descriptors to release them, and to
make sure no more completions come in.

Do the same in sci_tx_dma_release() for symmetry, although the serial
upper layer will no longer submit more data at this point of time.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Fix exclusion of work_fn_rx and sci_dma_rx_complete
Kazuya Mizuguchi [Fri, 21 Aug 2015 18:02:49 +0000 (20:02 +0200)]
serial: sh-sci: Fix exclusion of work_fn_rx and sci_dma_rx_complete

There is a problem when the sci_dma_rx_complete() is processed
before cancel process of work_fn_rx() completes by rx_timer_fn().
This patch locks work_fn_rx().

Signed-off-by: Kazuya Mizuguchi <kazuya.mizuguchi.ks@renesas.com>
Signed-off-by: Yoshihiro Kaneko <ykaneko0929@gmail.com>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Do not resubmit DMA descriptors
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:48 +0000 (20:02 +0200)]
serial: sh-sci: Do not resubmit DMA descriptors

Resubmission of DMA descriptors is explicitly forbidden by the DMA
engine API.

Hence pass DMA_CTRL_ACK to dmaengine_prep_slave_sg(), and prepare a new
DMA descriptor instead of reusing the old one.
Remove sci_port.desc_rx[], as there's no longer a need to access the
active descriptor.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Simplify sci_submit_rx() error handling
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:47 +0000 (20:02 +0200)]
serial: sh-sci: Simplify sci_submit_rx() error handling

Simplify the error handling in sci_submit_rx() by
  - Moving it to the end of the function,
  - Just calling dmaengine_terminate_all() instead of calling
    async_tx_ack() for all already submitted descriptors.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Stop acknowledging DMA transmit completions
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:46 +0000 (20:02 +0200)]
serial: sh-sci: Stop acknowledging DMA transmit completions

As dmaengine_prep_slave_sg() is called with the DMA_CTRL_ACK flag set
for DMA transmit requests, there's no need to explicitly acknowledge DMA
transmit requests in the DMA transmit completion callback.

Hence remove the call to async_tx_ack(), and remove the now unused
dma_async_tx_descriptor pointer in the sci_port structure.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Switch to generic DMA residue handling
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:45 +0000 (20:02 +0200)]
serial: sh-sci: Switch to generic DMA residue handling

Convert the SCI driver from the SHDMAE-specific partial DMA transfer
handling to the generic dmaengine residual data framework.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Use DMA submission helpers instead of open-coding
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:44 +0000 (20:02 +0200)]
serial: sh-sci: Use DMA submission helpers instead of open-coding

Replace open-coded
  - calls to dma_async_tx_descriptor.tx_submit() by calls to the
    dmaengine_submit() helper,
  - dma_cookie_t comparisons by calls to dma_submit_error().

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Fix TX buffer mapping leak
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:43 +0000 (20:02 +0200)]
serial: sh-sci: Fix TX buffer mapping leak

The mapped transmit buffer is never unmapped. This leaks quite some
mappings, as the mapping is done in uart_ops.startup(), i.e. every time
the device is opened. Unmap the buffer on device close.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Switch to dma_map_single() for DMA transmission
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:42 +0000 (20:02 +0200)]
serial: sh-sci: Switch to dma_map_single() for DMA transmission

Simplify the DMA transmit code by using dma_map_single() instead of
constantly modifying the single-entry scatterlist to match what's
currently being transmitted.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Use min_t()/max_t() instead of casts
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:41 +0000 (20:02 +0200)]
serial: sh-sci: Use min_t()/max_t() instead of casts

When comparing differently sized types, it's better to use
min_t()/max_t() than adding casts.

Also use "unsigned int" instead of "int", as that's the right type for
the length of an SG entry.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Use correct device for DMA mapping with IOMMU
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:40 +0000 (20:02 +0200)]
serial: sh-sci: Use correct device for DMA mapping with IOMMU

To function correctly in the presence of an IOMMU, the DMA buffers must
be managed using the DMA channel's device instead of the platform
device's device.

Make sure to free the DMA memory before releasing the channel, not
after.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Handle DMA init failures inside sci_request_dma()
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:39 +0000 (20:02 +0200)]
serial: sh-sci: Handle DMA init failures inside sci_request_dma()

Let sci_request_dma() handle failures to initialize DMA itself.
This way sci_tx_dma_release() and sci_rx_dma_release() don't have to
consider partial initialization, and thus don't need to reset DMA
addresses to DMA_ERROR_CODE, which is not 100% portable access
architectures.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Improve comments for DMA timeout calculation
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:38 +0000 (20:02 +0200)]
serial: sh-sci: Improve comments for DMA timeout calculation

Reformat, grammar improvements, use "ms" instead of "msec".

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Improve DMA error messages
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:37 +0000 (20:02 +0200)]
serial: sh-sci: Improve DMA error messages

Make the life of the driver developer/debugger easier:
  - Add __func__ prefix to identical messages,
  - Add DMA directions to messages,
  - Add TX failure messages,
  - Always use "cookie %d" for DMA cookies,
  - "#%d" is reserved for the DMA cookie/descriptor index.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Return IRQ_HANDLED when overrun if detected
Yoshihiro Shimoda [Fri, 21 Aug 2015 18:02:36 +0000 (20:02 +0200)]
serial: sh-sci: Return IRQ_HANDLED when overrun if detected

This patch fix an issue that the driver may cause "nobody cared" IRQ
when this driver detects the overrun flag only.

Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Remove bogus sci_handle_fifo_overrun() call on (H)SCIF
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:35 +0000 (20:02 +0200)]
serial: sh-sci: Remove bogus sci_handle_fifo_overrun() call on (H)SCIF

Commit 8b6ff84c2d445a47 ("serial: sh-sci: Fix R-Car SCIF and HSCIF
overrun handling") added overrun handling for (H)SCIF using the SCLSR
register, but also accidentally added a bogus call to
sci_handle_fifo_overrun() in the receive interrupt path.

Remove it again.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Remove useless memory allocation failure printks
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:34 +0000 (20:02 +0200)]
serial: sh-sci: Remove useless memory allocation failure printks

Printing an error on memory allocation failures is unnecessary.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Make sci_regmap[] const
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:33 +0000 (20:02 +0200)]
serial: sh-sci: Make sci_regmap[] const

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Make sci_irq_desc[] const
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:32 +0000 (20:02 +0200)]
serial: sh-sci: Make sci_irq_desc[] const

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Improve readability of sampling rate configuration
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:31 +0000 (20:02 +0200)]
serial: sh-sci: Improve readability of sampling rate configuration

Reorder sampling_rate assignment for consistency in all cases of the
switch statement.
Avoid using the ternary conditional operator to make it more clear that
the value is overridden by platform data.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Drop path in reference to serial_core.c
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:30 +0000 (20:02 +0200)]
serial: sh-sci: Drop path in reference to serial_core.c

serial_core.c was moved from drivers/serial/ to drivers/tty/serial/ a
while ago. Remove the path to make it move-proof.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Use SCSMR_CKS instead of hardcoded literal 3
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:29 +0000 (20:02 +0200)]
serial: sh-sci: Use SCSMR_CKS instead of hardcoded literal 3

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Use SCIF_DR instead of hardcoded literal 1
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:28 +0000 (20:02 +0200)]
serial: sh-sci: Use SCIF_DR instead of hardcoded literal 1

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Correct SCIF_ERROR_CLEAR for plain SCIF
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:27 +0000 (20:02 +0200)]
serial: sh-sci: Correct SCIF_ERROR_CLEAR for plain SCIF

SCIF_ERROR_CLEAR includes SCIFA_ORER, which exists only on SCIFA/SCIFB
and SCIF on sh7705/sh7720/sh7721.

To fix this:
  1. Remove SCIFA_ORER from the definition of SCIF_ERROR_CLEAR,
  2. During initialization, store the error clear mask to use,
     incorporating the overrun bit only if it applies to the SCxSR
     register.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Prevent compiler warnings on 64-bit
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:26 +0000 (20:02 +0200)]
serial: sh-sci: Prevent compiler warnings on 64-bit

Expressions involving "BIT(...)" create values of type "long", which is
64-bit on 64-bit.  Hence "~BIT(...)" no longer fits in 32-bit, which
will cause future compiler warnings when assigning to 32-bit variables:

    drivers/tty/serial/sh-sci.c: In function 'sci_init_single':
    drivers/tty/serial/sh-sci.h:58:25: warning: large integer implicitly truncated to unsigned type [-Woverflow]
     #define SCI_ERROR_CLEAR ~(SCI_RESERVED | SCI_PER | SCI_FER | SCI_ORER)
     ^
    drivers/tty/serial/sh-sci.c:2325:27: note: in expansion of macro 'SCI_ERROR_CLEAR'
       sci_port->error_clear = SCI_ERROR_CLEAR;

As these values are (at most) 32-bit register values anyway, cast them
to "u32" at the definition level to prevent such compiler warnings.

Reported-by: kbuild test robot <fengguang.wu@intel.com>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: sh-sci: Replace buggy big #ifdef by runtime logic
Geert Uytterhoeven [Fri, 21 Aug 2015 18:02:25 +0000 (20:02 +0200)]
serial: sh-sci: Replace buggy big #ifdef by runtime logic

The #ifdef logic to clear SCxSR bits using RMW on SCIFA/SCIFB and SCIF
variants with some SCIFA features (sh7705/SH7720/sh7721) has several
drawbacks:
  - It wasn't updated for newer R-Mobile variants (APE6),
  - It doesn't correctly handle SoCs with both SCIF and SCIFA/B (e.g.
    R-Car Gen2, but also legacy sh7723/sh7724),
  - It doesn't play well with ARM multi-platform kernels: on R-Car Gen2,
    SCIF/SCIFA/SCIFB/HSCIF were handled differently, depending on
    whether r8a7740 or sh73a0 support was enabled or not,

Replace the #ifdef logic by runtime logic to fix this.

SCIFA/SCIFB and SCIF on sh7705/sh7720/sh7721 use RMW to clear error
bits, other variants use plain stores, as before.

Note that this changes behavior for SCIFA on sh7723/sh7724 (these SoCs
have both SCIF and SCIFA), which didn't use RMW before.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: 8250: Fix autoconfig_irq() to avoid race conditions
Taichi Kageyama [Mon, 17 Aug 2015 02:45:29 +0000 (02:45 +0000)]
serial: 8250: Fix autoconfig_irq() to avoid race conditions

The following race conditions can happen when a serial port is used
as console.

Case1: CPU_B is used to detect an interrupt from a serial port,
       but it can have interrupts disabled during the waiting time.
Case2: CPU_B clears UART_IER just after CPU_A sets UART_IER and then
       a serial port may not make an interrupt.
Case3: CPU_A sets UART_IER just after CPU_B clears UART_IER.
       This is an unexpected behavior for serial8250_console_write().

CPU_A [autoconfig_irq]      |  CPU_B [serial8250_console_write]
----------------------------|---------------------------------------
                            |
probe_irq_on()              |  spin_lock_irqsave(&port->lock,)
serial_outp(,UART_IER,0x0f) |  serial_out(,UART_IER,0)
udelay(20);                 |  uart_console_write()
probe_irq_off()             |
                            |  spin_unlock_irqrestore(&port->lock,)

Case1 and 2 can make autoconfig_irq() failed.
In these cases, the console doesn't work in interrupt mode and
"input overrun" (which can make operation mistakes) can happen
on some systems. Especially in the Case1, It is known that the
problem happens with high rate every boot once it occurs
because the boot sequence is always almost same.

port mutex makes sure that the autoconfig operation is exclusive of
any other concurrent HW access except by the console operation.
console lock is required in autoconfig_irq().

Signed-off-by: Taichi Kageyama <t-kageyama@cp.jp.nec.com>
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
9 years agoserial: mpc52xx: add delay after resetting transmitter to fix broken chars
Uwe Kleine-König [Thu, 24 Sep 2015 19:18:34 +0000 (21:18 +0200)]
serial: mpc52xx: add delay after resetting transmitter to fix broken chars

This fixes receiving broken characters on the console from an MPC5125
system when systemd comes up which repeatedly opens and shuts down the
console device.

Trial and error with the needed interval showed that 500 us are good
enough most of the time when using 38400 Bd, so I think 1 ms is a good
compromise between fixing the issue and not penalize faster setups too
much.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>