Re: [PATCH] serial: sh-sci: disable DMA for uart_console

From: George G. Davis
Date: Fri May 10 2019 - 14:40:49 EST


Hello Eugeniu,

On Fri, May 10, 2019 at 07:10:21PM +0200, Eugeniu Rosca wrote:
> Hi George,
>
> I am able to reproduce the SCIF2 console freeze described in the
> referenced patchwork link using M3-ES1.1-Salvator-XS and recent
> v5.1-9573-gb970afcfcabd kernel.
>
> I confirm the behavior is healed with this patch. Thanks!
> Hope to see it accepted soon, since it fixes a super annoying
> console breakage every fourth boot or so on lots of R-Car3 targets.
>
> Tested-by: Eugeniu Rosca <erosca@xxxxxxxxxxxxxx>

Thanks for testing.

Also note, for the record, that the problem is not limited to SCIF2, e.g. try
setting console=ttySC<n> wheren <n> is not SCIF2 on any other board which
includes support for other serial ports, e.g. r8a7795-salvator-x, and you will
observe the same problem on other SCIF ports too. It's just a concidence that
most boards use SCIF2 as the default serial console where the console hangs
(resolved by this patch) have been observed on multiple boards.

>
> On Thu, May 09, 2019 at 10:43:30AM -0400, George G. Davis wrote:
> > As noted in commit 84b40e3b57ee ("serial: 8250: omap: Disable DMA for
> > console UART"), UART console lines use low-level PIO only access functions
> > which will conflict with use of the line when DMA is enabled, e.g. when
> > the console line is also used for systemd messages. So disable DMA
> > support for UART console lines.
> >
> > Fixes: https://patchwork.kernel.org/patch/10929511/
> > Reported-by: Michael Rodin <mrodin@xxxxxxxxxxxxxx>
> > Cc: Eugeniu Rosca <erosca@xxxxxxxxxxxxxx>
> > Signed-off-by: George G. Davis <george_davis@xxxxxxxxxx>
> > ---
> > drivers/tty/serial/sh-sci.c | 3 +++
> > 1 file changed, 3 insertions(+)
> >
> > diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
> > index 3cd139752d3f..885b56b1d4e4 100644
> > --- a/drivers/tty/serial/sh-sci.c
> > +++ b/drivers/tty/serial/sh-sci.c
> > @@ -1557,6 +1557,9 @@ static void sci_request_dma(struct uart_port *port)
> >
> > dev_dbg(port->dev, "%s: port %d\n", __func__, port->line);
> >
> > + if (uart_console(port))
> > + return; /* Cannot use DMA on console */
> > +
> > if (!port->dev->of_node)
> > return;
> >
> > --
> > 2.7.4
> >
>
> --
> Best Regards,
> Eugeniu.

--
Regards,
George