serial: sh-sci: Make RX/TX DMA function names consistent
[platform/kernel/linux-starfive.git] / drivers / tty / serial / sh-sci.c
index 4c75468..cb3d5d3 100644 (file)
@@ -1253,7 +1253,7 @@ static void sci_dma_rx_chan_invalidate(struct sci_port *s)
        s->active_rx = 0;
 }
 
-static void sci_rx_dma_release(struct sci_port *s)
+static void sci_dma_rx_release(struct sci_port *s)
 {
        struct dma_chan *chan = s->chan_rx_saved;
 
@@ -1274,6 +1274,20 @@ static void start_hrtimer_us(struct hrtimer *hrt, unsigned long usec)
        hrtimer_start(hrt, t, HRTIMER_MODE_REL);
 }
 
+static void sci_dma_rx_reenable_irq(struct sci_port *s)
+{
+       struct uart_port *port = &s->port;
+       u16 scr;
+
+       /* Direct new serial port interrupts back to CPU */
+       scr = serial_port_in(port, SCSCR);
+       if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
+               scr &= ~SCSCR_RDRQE;
+               enable_irq(s->irqs[SCIx_RXI_IRQ]);
+       }
+       serial_port_out(port, SCSCR, scr | SCSCR_RIE);
+}
+
 static void sci_dma_rx_complete(void *arg)
 {
        struct sci_port *s = arg;
@@ -1323,12 +1337,13 @@ fail:
        dev_warn(port->dev, "Failed submitting Rx DMA descriptor\n");
        /* Switch to PIO */
        spin_lock_irqsave(&port->lock, flags);
-       s->chan_rx = NULL;
-       sci_start_rx(port);
+       dmaengine_terminate_async(chan);
+       sci_dma_rx_chan_invalidate(s);
+       sci_dma_rx_reenable_irq(s);
        spin_unlock_irqrestore(&port->lock, flags);
 }
 
-static void sci_tx_dma_release(struct sci_port *s)
+static void sci_dma_tx_release(struct sci_port *s)
 {
        struct dma_chan *chan = s->chan_tx_saved;
 
@@ -1341,7 +1356,7 @@ static void sci_tx_dma_release(struct sci_port *s)
        dma_release_channel(chan);
 }
 
-static int sci_submit_rx(struct sci_port *s, bool port_lock_held)
+static int sci_dma_rx_submit(struct sci_port *s, bool port_lock_held)
 {
        struct dma_chan *chan = s->chan_rx;
        struct uart_port *port = &s->port;
@@ -1384,7 +1399,7 @@ fail:
        return -EAGAIN;
 }
 
-static void work_fn_tx(struct work_struct *work)
+static void sci_dma_tx_work_fn(struct work_struct *work)
 {
        struct sci_port *s = container_of(work, struct sci_port, work_tx);
        struct dma_async_tx_descriptor *desc;
@@ -1443,7 +1458,7 @@ switch_to_pio:
        return;
 }
 
-static enum hrtimer_restart rx_timer_fn(struct hrtimer *t)
+static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t)
 {
        struct sci_port *s = container_of(t, struct sci_port, rx_timer);
        struct dma_chan *chan = s->chan_rx;
@@ -1453,7 +1468,6 @@ static enum hrtimer_restart rx_timer_fn(struct hrtimer *t)
        unsigned long flags;
        unsigned int read;
        int active, count;
-       u16 scr;
 
        dev_dbg(port->dev, "DMA Rx timed out\n");
 
@@ -1501,15 +1515,9 @@ static enum hrtimer_restart rx_timer_fn(struct hrtimer *t)
        }
 
        if (port->type == PORT_SCIFA || port->type == PORT_SCIFB)
-               sci_submit_rx(s, true);
+               sci_dma_rx_submit(s, true);
 
-       /* Direct new serial port interrupts back to CPU */
-       scr = serial_port_in(port, SCSCR);
-       if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
-               scr &= ~SCSCR_RDRQE;
-               enable_irq(s->irqs[SCIx_RXI_IRQ]);
-       }
-       serial_port_out(port, SCSCR, scr | SCSCR_RIE);
+       sci_dma_rx_reenable_irq(s);
 
        spin_unlock_irqrestore(&port->lock, flags);
 
@@ -1587,7 +1595,7 @@ static void sci_request_dma(struct uart_port *port)
                                __func__, UART_XMIT_SIZE,
                                port->state->xmit.buf, &s->tx_dma_addr);
 
-                       INIT_WORK(&s->work_tx, work_fn_tx);
+                       INIT_WORK(&s->work_tx, sci_dma_tx_work_fn);
                        s->chan_tx_saved = s->chan_tx = chan;
                }
        }
@@ -1622,12 +1630,12 @@ static void sci_request_dma(struct uart_port *port)
                }
 
                hrtimer_init(&s->rx_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
-               s->rx_timer.function = rx_timer_fn;
+               s->rx_timer.function = sci_dma_rx_timer_fn;
 
                s->chan_rx_saved = s->chan_rx = chan;
 
                if (port->type == PORT_SCIFA || port->type == PORT_SCIFB)
-                       sci_submit_rx(s, false);
+                       sci_dma_rx_submit(s, false);
        }
 }
 
@@ -1636,9 +1644,9 @@ static void sci_free_dma(struct uart_port *port)
        struct sci_port *s = to_sci_port(port);
 
        if (s->chan_tx_saved)
-               sci_tx_dma_release(s);
+               sci_dma_tx_release(s);
        if (s->chan_rx_saved)
-               sci_rx_dma_release(s);
+               sci_dma_rx_release(s);
 }
 
 static void sci_flush_buffer(struct uart_port *port)
@@ -1676,7 +1684,7 @@ static irqreturn_t sci_rx_interrupt(int irq, void *ptr)
                        disable_irq_nosync(irq);
                        scr |= SCSCR_RDRQE;
                } else {
-                       if (sci_submit_rx(s, false) < 0)
+                       if (sci_dma_rx_submit(s, false) < 0)
                                goto handle_pio;
 
                        scr &= ~SCSCR_RIE;