diff mbox

serial: samsung: Continue to work if DMA request fails

Message ID 20170225162442.31848-1-krzk@kernel.org (mailing list archive)
State Not Applicable
Headers show

Commit Message

Krzysztof Kozlowski Feb. 25, 2017, 4:24 p.m. UTC
If DMA is not available (even when configured in DeviceTree), the driver
will fail the startup procedure thus making serial console not
available.

For example this causes boot failure on QEMU ARMv7 (Exynos4210, SMDKC210):
    [    1.302575] OF: amba_device_add() failed (-19) for /amba/pdma@12680000
    ...
    [   11.435732] samsung-uart 13800000.serial: DMA request failed
    [   72.963893] samsung-uart 13800000.serial: DMA request failed
    [   73.143361] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000

DMA is not necessary for serial to work, so continue with UART startup
after emitting a warning.

Fixes: Fixes: 62c37eedb74c ("serial: samsung: add dma reqest/release functions")
Cc: <stable@vger.kernel.org>
Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
---
 drivers/tty/serial/samsung.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Tobias Jakobi Feb. 25, 2017, 4:28 p.m. UTC | #1
Hello Krzysztof,

Krzysztof Kozlowski wrote:
> If DMA is not available (even when configured in DeviceTree), the driver
> will fail the startup procedure thus making serial console not
> available.
> 
> For example this causes boot failure on QEMU ARMv7 (Exynos4210, SMDKC210):
>     [    1.302575] OF: amba_device_add() failed (-19) for /amba/pdma@12680000
>     ...
>     [   11.435732] samsung-uart 13800000.serial: DMA request failed
>     [   72.963893] samsung-uart 13800000.serial: DMA request failed
>     [   73.143361] Kernel panic - not syncing: Attempted to kill init! exitcode=00000000
> 
> DMA is not necessary for serial to work, so continue with UART startup
> after emitting a warning.
> 
> Fixes: Fixes: 62c37eedb74c ("serial: samsung: add dma reqest/release functions")
> Cc: <stable@vger.kernel.org>
> Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
> ---
>  drivers/tty/serial/samsung.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
> index b4f86c219db1..7a17aedbf902 100644
> --- a/drivers/tty/serial/samsung.c
> +++ b/drivers/tty/serial/samsung.c
> @@ -1031,8 +1031,10 @@ static int s3c64xx_serial_startup(struct uart_port *port)
>  	if (ourport->dma) {
>  		ret =3c24xx_serial_request_dma(ourport);
>  		if (ret < 0) {
> -			dev_warn(port->dev, "DMA request failed\n");
> -			return ret;
> +			dev_warn(port->dev,
> +				 "DMA request failed, DMA will not be used\n");
> +			devm_kfree(port->dev, ourport->dma);
> +			ourport->dma =ULL;
This line looks odd. Did you want to assign NULL here?
Also, whitespace on both sides of '='?

- Tobias

>  		}
>  	}
>  
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Krzysztof Kozlowski Feb. 25, 2017, 4:34 p.m. UTC | #2
On Sat, Feb 25, 2017 at 05:28:41PM +0100, Tobias Jakobi wrote:
> Hello Krzysztof,
> 
> Krzysztof Kozlowski wrote:
> > If DMA is not available (even when configured in DeviceTree), the driver
> > will fail the startup procedure thus making serial console not
> > available.
> > 
> > For example this causes boot failure on QEMU ARMv7 (Exynos4210, SMDKC210):
> >     [    1.302575] OF: amba_device_add() failed (-19) for /amba/pdma@12680000
> >     ...
> >     [   11.435732] samsung-uart 13800000.serial: DMA request failed
> >     [   72.963893] samsung-uart 13800000.serial: DMA request failed
> >     [   73.143361] Kernel panic - not syncing: Attempted to kill init! exitcode=00000000
> > 
> > DMA is not necessary for serial to work, so continue with UART startup
> > after emitting a warning.
> > 
> > Fixes: Fixes: 62c37eedb74c ("serial: samsung: add dma reqest/release functions")
> > Cc: <stable@vger.kernel.org>
> > Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
> > ---
> >  drivers/tty/serial/samsung.c | 6 ++++--
> >  1 file changed, 4 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
> > index b4f86c219db1..7a17aedbf902 100644
> > --- a/drivers/tty/serial/samsung.c
> > +++ b/drivers/tty/serial/samsung.c
> > @@ -1031,8 +1031,10 @@ static int s3c64xx_serial_startup(struct uart_port *port)
> >  	if (ourport->dma) {
> >  		ret =3c24xx_serial_request_dma(ourport);
> >  		if (ret < 0) {
> > -			dev_warn(port->dev, "DMA request failed\n");
> > -			return ret;
> > +			dev_warn(port->dev,
> > +				 "DMA request failed, DMA will not be used\n");
> > +			devm_kfree(port->dev, ourport->dma);
> > +			ourport->dma =ULL;
> This line looks odd. Did you want to assign NULL here?
> Also, whitespace on both sides of '='?

Ugh, I must ate it by mistake somehow because my git contains proper
"NULL" here.

Thanks for pointing this, I'll resend v3.


Best regards,
Krzysztof

--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
index b4f86c219db1..7a17aedbf902 100644
--- a/drivers/tty/serial/samsung.c
+++ b/drivers/tty/serial/samsung.c
@@ -1031,8 +1031,10 @@  static int s3c64xx_serial_startup(struct uart_port *port)
 	if (ourport->dma) {
 		ret = s3c24xx_serial_request_dma(ourport);
 		if (ret < 0) {
-			dev_warn(port->dev, "DMA request failed\n");
-			return ret;
+			dev_warn(port->dev,
+				 "DMA request failed, DMA will not be used\n");
+			devm_kfree(port->dev, ourport->dma);
+			ourport->dma = NULL;
 		}
 	}