From: Hannu Koivisto <[email protected]>

[Ported to newer kernel and added description by Martyn Welch
<[email protected]>]

Configuration of DMA operation on an imx UART can fail, though the return
value is never checked and this goes unnoticed. Add error checking and fail
if this operation doesn't succeed.

Signed-off-by: Martyn Welch <[email protected]>
Signed-off-by: Fabien Lahoudere <[email protected]>
---
 drivers/tty/serial/imx.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
index 08ccfe1..c190986 100644
--- a/drivers/tty/serial/imx.c
+++ b/drivers/tty/serial/imx.c
@@ -1255,8 +1255,14 @@ static int imx_startup(struct uart_port *port)
 
        /* Can we enable the DMA support? */
        if (is_imx6q_uart(sport) && !uart_console(port) &&
-           !sport->dma_is_inited)
-               imx_uart_dma_init(sport);
+           !sport->dma_is_inited) {
+               retval = imx_uart_dma_init(sport);
+               if (retval) {
+                       clk_disable_unprepare(sport->clk_per);
+                       clk_disable_unprepare(sport->clk_ipg);
+                       return retval;
+               }
+       }
 
        spin_lock_irqsave(&sport->port.lock, flags);
        /* Reset fifo's and state machines */
-- 
2.7.4

Reply via email to