| From 772cc073ee28844cc20a48fe0f538b5aee8788bb Mon Sep 17 00:00:00 2001 |
| From: Krzysztof Kozlowski <krzk@kernel.org> |
| Date: Sat, 25 Feb 2017 18:36:44 +0200 |
| Subject: [PATCH] serial: samsung: Continue to work if DMA request fails |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| commit f98c7bce570bdbe344b74ff5daa7dfeef3f22929 upstream. |
| |
| 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: 62c37eedb74c ("serial: samsung: add dma reqest/release functions") |
| Cc: <stable@vger.kernel.org> |
| Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c |
| index ae2095a66708..1ca103c9ddef 100644 |
| --- a/drivers/tty/serial/samsung.c |
| +++ b/drivers/tty/serial/samsung.c |
| @@ -1036,8 +1036,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; |
| } |
| } |
| |
| -- |
| 2.12.0 |
| |