linux/drivers/tty/serial/stm32-usart.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) Maxime Coquelin 2015
   3 * Authors:  Maxime Coquelin <mcoquelin.stm32@gmail.com>
   4 *           Gerald Baeza <gerald.baeza@st.com>
   5 * License terms:  GNU General Public License (GPL), version 2
   6 *
   7 * Inspired by st-asc.c from STMicroelectronics (c)
   8 */
   9
  10#if defined(CONFIG_SERIAL_STM32_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
  11#define SUPPORT_SYSRQ
  12#endif
  13
  14#include <linux/clk.h>
  15#include <linux/console.h>
  16#include <linux/delay.h>
  17#include <linux/dma-direction.h>
  18#include <linux/dmaengine.h>
  19#include <linux/dma-mapping.h>
  20#include <linux/io.h>
  21#include <linux/iopoll.h>
  22#include <linux/irq.h>
  23#include <linux/module.h>
  24#include <linux/of.h>
  25#include <linux/of_platform.h>
  26#include <linux/platform_device.h>
  27#include <linux/pm_runtime.h>
  28#include <linux/serial_core.h>
  29#include <linux/serial.h>
  30#include <linux/spinlock.h>
  31#include <linux/sysrq.h>
  32#include <linux/tty_flip.h>
  33#include <linux/tty.h>
  34
  35#include "stm32-usart.h"
  36
  37static void stm32_stop_tx(struct uart_port *port);
  38static void stm32_transmit_chars(struct uart_port *port);
  39
  40static inline struct stm32_port *to_stm32_port(struct uart_port *port)
  41{
  42        return container_of(port, struct stm32_port, port);
  43}
  44
  45static void stm32_set_bits(struct uart_port *port, u32 reg, u32 bits)
  46{
  47        u32 val;
  48
  49        val = readl_relaxed(port->membase + reg);
  50        val |= bits;
  51        writel_relaxed(val, port->membase + reg);
  52}
  53
  54static void stm32_clr_bits(struct uart_port *port, u32 reg, u32 bits)
  55{
  56        u32 val;
  57
  58        val = readl_relaxed(port->membase + reg);
  59        val &= ~bits;
  60        writel_relaxed(val, port->membase + reg);
  61}
  62
  63static int stm32_pending_rx(struct uart_port *port, u32 *sr, int *last_res,
  64                            bool threaded)
  65{
  66        struct stm32_port *stm32_port = to_stm32_port(port);
  67        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
  68        enum dma_status status;
  69        struct dma_tx_state state;
  70
  71        *sr = readl_relaxed(port->membase + ofs->isr);
  72
  73        if (threaded && stm32_port->rx_ch) {
  74                status = dmaengine_tx_status(stm32_port->rx_ch,
  75                                             stm32_port->rx_ch->cookie,
  76                                             &state);
  77                if ((status == DMA_IN_PROGRESS) &&
  78                    (*last_res != state.residue))
  79                        return 1;
  80                else
  81                        return 0;
  82        } else if (*sr & USART_SR_RXNE) {
  83                return 1;
  84        }
  85        return 0;
  86}
  87
  88static unsigned long
  89stm32_get_char(struct uart_port *port, u32 *sr, int *last_res)
  90{
  91        struct stm32_port *stm32_port = to_stm32_port(port);
  92        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
  93        unsigned long c;
  94
  95        if (stm32_port->rx_ch) {
  96                c = stm32_port->rx_buf[RX_BUF_L - (*last_res)--];
  97                if ((*last_res) == 0)
  98                        *last_res = RX_BUF_L;
  99                return c;
 100        } else {
 101                return readl_relaxed(port->membase + ofs->rdr);
 102        }
 103}
 104
 105static void stm32_receive_chars(struct uart_port *port, bool threaded)
 106{
 107        struct tty_port *tport = &port->state->port;
 108        struct stm32_port *stm32_port = to_stm32_port(port);
 109        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 110        unsigned long c;
 111        u32 sr;
 112        char flag;
 113        static int last_res = RX_BUF_L;
 114
 115        if (port->irq_wake)
 116                pm_wakeup_event(tport->tty->dev, 0);
 117
 118        while (stm32_pending_rx(port, &sr, &last_res, threaded)) {
 119                sr |= USART_SR_DUMMY_RX;
 120                c = stm32_get_char(port, &sr, &last_res);
 121                flag = TTY_NORMAL;
 122                port->icount.rx++;
 123
 124                if (sr & USART_SR_ERR_MASK) {
 125                        if (sr & USART_SR_LBD) {
 126                                port->icount.brk++;
 127                                if (uart_handle_break(port))
 128                                        continue;
 129                        } else if (sr & USART_SR_ORE) {
 130                                if (ofs->icr != UNDEF_REG)
 131                                        writel_relaxed(USART_ICR_ORECF,
 132                                                       port->membase +
 133                                                       ofs->icr);
 134                                port->icount.overrun++;
 135                        } else if (sr & USART_SR_PE) {
 136                                port->icount.parity++;
 137                        } else if (sr & USART_SR_FE) {
 138                                port->icount.frame++;
 139                        }
 140
 141                        sr &= port->read_status_mask;
 142
 143                        if (sr & USART_SR_LBD)
 144                                flag = TTY_BREAK;
 145                        else if (sr & USART_SR_PE)
 146                                flag = TTY_PARITY;
 147                        else if (sr & USART_SR_FE)
 148                                flag = TTY_FRAME;
 149                }
 150
 151                if (uart_handle_sysrq_char(port, c))
 152                        continue;
 153                uart_insert_char(port, sr, USART_SR_ORE, c, flag);
 154        }
 155
 156        spin_unlock(&port->lock);
 157        tty_flip_buffer_push(tport);
 158        spin_lock(&port->lock);
 159}
 160
 161static void stm32_tx_dma_complete(void *arg)
 162{
 163        struct uart_port *port = arg;
 164        struct stm32_port *stm32port = to_stm32_port(port);
 165        struct stm32_usart_offsets *ofs = &stm32port->info->ofs;
 166        unsigned int isr;
 167        int ret;
 168
 169        ret = readl_relaxed_poll_timeout_atomic(port->membase + ofs->isr,
 170                                                isr,
 171                                                (isr & USART_SR_TC),
 172                                                10, 100000);
 173
 174        if (ret)
 175                dev_err(port->dev, "terminal count not set\n");
 176
 177        if (ofs->icr == UNDEF_REG)
 178                stm32_clr_bits(port, ofs->isr, USART_SR_TC);
 179        else
 180                stm32_set_bits(port, ofs->icr, USART_CR_TC);
 181
 182        stm32_clr_bits(port, ofs->cr3, USART_CR3_DMAT);
 183        stm32port->tx_dma_busy = false;
 184
 185        /* Let's see if we have pending data to send */
 186        stm32_transmit_chars(port);
 187}
 188
 189static void stm32_transmit_chars_pio(struct uart_port *port)
 190{
 191        struct stm32_port *stm32_port = to_stm32_port(port);
 192        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 193        struct circ_buf *xmit = &port->state->xmit;
 194        unsigned int isr;
 195        int ret;
 196
 197        if (stm32_port->tx_dma_busy) {
 198                stm32_clr_bits(port, ofs->cr3, USART_CR3_DMAT);
 199                stm32_port->tx_dma_busy = false;
 200        }
 201
 202        ret = readl_relaxed_poll_timeout_atomic(port->membase + ofs->isr,
 203                                                isr,
 204                                                (isr & USART_SR_TXE),
 205                                                10, 100);
 206
 207        if (ret)
 208                dev_err(port->dev, "tx empty not set\n");
 209
 210        stm32_set_bits(port, ofs->cr1, USART_CR1_TXEIE);
 211
 212        writel_relaxed(xmit->buf[xmit->tail], port->membase + ofs->tdr);
 213        xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
 214        port->icount.tx++;
 215}
 216
 217static void stm32_transmit_chars_dma(struct uart_port *port)
 218{
 219        struct stm32_port *stm32port = to_stm32_port(port);
 220        struct stm32_usart_offsets *ofs = &stm32port->info->ofs;
 221        struct circ_buf *xmit = &port->state->xmit;
 222        struct dma_async_tx_descriptor *desc = NULL;
 223        dma_cookie_t cookie;
 224        unsigned int count, i;
 225
 226        if (stm32port->tx_dma_busy)
 227                return;
 228
 229        stm32port->tx_dma_busy = true;
 230
 231        count = uart_circ_chars_pending(xmit);
 232
 233        if (count > TX_BUF_L)
 234                count = TX_BUF_L;
 235
 236        if (xmit->tail < xmit->head) {
 237                memcpy(&stm32port->tx_buf[0], &xmit->buf[xmit->tail], count);
 238        } else {
 239                size_t one = UART_XMIT_SIZE - xmit->tail;
 240                size_t two;
 241
 242                if (one > count)
 243                        one = count;
 244                two = count - one;
 245
 246                memcpy(&stm32port->tx_buf[0], &xmit->buf[xmit->tail], one);
 247                if (two)
 248                        memcpy(&stm32port->tx_buf[one], &xmit->buf[0], two);
 249        }
 250
 251        desc = dmaengine_prep_slave_single(stm32port->tx_ch,
 252                                           stm32port->tx_dma_buf,
 253                                           count,
 254                                           DMA_MEM_TO_DEV,
 255                                           DMA_PREP_INTERRUPT);
 256
 257        if (!desc) {
 258                for (i = count; i > 0; i--)
 259                        stm32_transmit_chars_pio(port);
 260                return;
 261        }
 262
 263        desc->callback = stm32_tx_dma_complete;
 264        desc->callback_param = port;
 265
 266        /* Push current DMA TX transaction in the pending queue */
 267        cookie = dmaengine_submit(desc);
 268
 269        /* Issue pending DMA TX requests */
 270        dma_async_issue_pending(stm32port->tx_ch);
 271
 272        stm32_clr_bits(port, ofs->isr, USART_SR_TC);
 273        stm32_set_bits(port, ofs->cr3, USART_CR3_DMAT);
 274
 275        xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
 276        port->icount.tx += count;
 277}
 278
 279static void stm32_transmit_chars(struct uart_port *port)
 280{
 281        struct stm32_port *stm32_port = to_stm32_port(port);
 282        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 283        struct circ_buf *xmit = &port->state->xmit;
 284
 285        if (port->x_char) {
 286                if (stm32_port->tx_dma_busy)
 287                        stm32_clr_bits(port, ofs->cr3, USART_CR3_DMAT);
 288                writel_relaxed(port->x_char, port->membase + ofs->tdr);
 289                port->x_char = 0;
 290                port->icount.tx++;
 291                if (stm32_port->tx_dma_busy)
 292                        stm32_set_bits(port, ofs->cr3, USART_CR3_DMAT);
 293                return;
 294        }
 295
 296        if (uart_tx_stopped(port)) {
 297                stm32_stop_tx(port);
 298                return;
 299        }
 300
 301        if (uart_circ_empty(xmit)) {
 302                stm32_stop_tx(port);
 303                return;
 304        }
 305
 306        if (stm32_port->tx_ch)
 307                stm32_transmit_chars_dma(port);
 308        else
 309                stm32_transmit_chars_pio(port);
 310
 311        if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
 312                uart_write_wakeup(port);
 313
 314        if (uart_circ_empty(xmit))
 315                stm32_stop_tx(port);
 316}
 317
 318static irqreturn_t stm32_interrupt(int irq, void *ptr)
 319{
 320        struct uart_port *port = ptr;
 321        struct stm32_port *stm32_port = to_stm32_port(port);
 322        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 323        u32 sr;
 324
 325        spin_lock(&port->lock);
 326
 327        sr = readl_relaxed(port->membase + ofs->isr);
 328
 329        if ((sr & USART_SR_RXNE) && !(stm32_port->rx_ch))
 330                stm32_receive_chars(port, false);
 331
 332        if ((sr & USART_SR_TXE) && !(stm32_port->tx_ch))
 333                stm32_transmit_chars(port);
 334
 335        spin_unlock(&port->lock);
 336
 337        if (stm32_port->rx_ch)
 338                return IRQ_WAKE_THREAD;
 339        else
 340                return IRQ_HANDLED;
 341}
 342
 343static irqreturn_t stm32_threaded_interrupt(int irq, void *ptr)
 344{
 345        struct uart_port *port = ptr;
 346        struct stm32_port *stm32_port = to_stm32_port(port);
 347
 348        spin_lock(&port->lock);
 349
 350        if (stm32_port->rx_ch)
 351                stm32_receive_chars(port, true);
 352
 353        spin_unlock(&port->lock);
 354
 355        return IRQ_HANDLED;
 356}
 357
 358static unsigned int stm32_tx_empty(struct uart_port *port)
 359{
 360        struct stm32_port *stm32_port = to_stm32_port(port);
 361        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 362
 363        return readl_relaxed(port->membase + ofs->isr) & USART_SR_TXE;
 364}
 365
 366static void stm32_set_mctrl(struct uart_port *port, unsigned int mctrl)
 367{
 368        struct stm32_port *stm32_port = to_stm32_port(port);
 369        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 370
 371        if ((mctrl & TIOCM_RTS) && (port->status & UPSTAT_AUTORTS))
 372                stm32_set_bits(port, ofs->cr3, USART_CR3_RTSE);
 373        else
 374                stm32_clr_bits(port, ofs->cr3, USART_CR3_RTSE);
 375}
 376
 377static unsigned int stm32_get_mctrl(struct uart_port *port)
 378{
 379        /* This routine is used to get signals of: DCD, DSR, RI, and CTS */
 380        return TIOCM_CAR | TIOCM_DSR | TIOCM_CTS;
 381}
 382
 383/* Transmit stop */
 384static void stm32_stop_tx(struct uart_port *port)
 385{
 386        struct stm32_port *stm32_port = to_stm32_port(port);
 387        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 388
 389        stm32_clr_bits(port, ofs->cr1, USART_CR1_TXEIE);
 390}
 391
 392/* There are probably characters waiting to be transmitted. */
 393static void stm32_start_tx(struct uart_port *port)
 394{
 395        struct circ_buf *xmit = &port->state->xmit;
 396
 397        if (uart_circ_empty(xmit))
 398                return;
 399
 400        stm32_transmit_chars(port);
 401}
 402
 403/* Throttle the remote when input buffer is about to overflow. */
 404static void stm32_throttle(struct uart_port *port)
 405{
 406        struct stm32_port *stm32_port = to_stm32_port(port);
 407        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 408        unsigned long flags;
 409
 410        spin_lock_irqsave(&port->lock, flags);
 411        stm32_clr_bits(port, ofs->cr1, USART_CR1_RXNEIE);
 412        spin_unlock_irqrestore(&port->lock, flags);
 413}
 414
 415/* Unthrottle the remote, the input buffer can now accept data. */
 416static void stm32_unthrottle(struct uart_port *port)
 417{
 418        struct stm32_port *stm32_port = to_stm32_port(port);
 419        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 420        unsigned long flags;
 421
 422        spin_lock_irqsave(&port->lock, flags);
 423        stm32_set_bits(port, ofs->cr1, USART_CR1_RXNEIE);
 424        spin_unlock_irqrestore(&port->lock, flags);
 425}
 426
 427/* Receive stop */
 428static void stm32_stop_rx(struct uart_port *port)
 429{
 430        struct stm32_port *stm32_port = to_stm32_port(port);
 431        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 432
 433        stm32_clr_bits(port, ofs->cr1, USART_CR1_RXNEIE);
 434}
 435
 436/* Handle breaks - ignored by us */
 437static void stm32_break_ctl(struct uart_port *port, int break_state)
 438{
 439}
 440
 441static int stm32_startup(struct uart_port *port)
 442{
 443        struct stm32_port *stm32_port = to_stm32_port(port);
 444        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 445        const char *name = to_platform_device(port->dev)->name;
 446        u32 val;
 447        int ret;
 448
 449        ret = request_threaded_irq(port->irq, stm32_interrupt,
 450                                   stm32_threaded_interrupt,
 451                                   IRQF_NO_SUSPEND, name, port);
 452        if (ret)
 453                return ret;
 454
 455        val = USART_CR1_RXNEIE | USART_CR1_TE | USART_CR1_RE;
 456        stm32_set_bits(port, ofs->cr1, val);
 457
 458        return 0;
 459}
 460
 461static void stm32_shutdown(struct uart_port *port)
 462{
 463        struct stm32_port *stm32_port = to_stm32_port(port);
 464        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 465        struct stm32_usart_config *cfg = &stm32_port->info->cfg;
 466        u32 val;
 467
 468        val = USART_CR1_TXEIE | USART_CR1_RXNEIE | USART_CR1_TE | USART_CR1_RE;
 469        val |= BIT(cfg->uart_enable_bit);
 470        stm32_clr_bits(port, ofs->cr1, val);
 471
 472        free_irq(port->irq, port);
 473}
 474
 475static void stm32_set_termios(struct uart_port *port, struct ktermios *termios,
 476                            struct ktermios *old)
 477{
 478        struct stm32_port *stm32_port = to_stm32_port(port);
 479        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 480        struct stm32_usart_config *cfg = &stm32_port->info->cfg;
 481        unsigned int baud;
 482        u32 usartdiv, mantissa, fraction, oversampling;
 483        tcflag_t cflag = termios->c_cflag;
 484        u32 cr1, cr2, cr3;
 485        unsigned long flags;
 486
 487        if (!stm32_port->hw_flow_control)
 488                cflag &= ~CRTSCTS;
 489
 490        baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 8);
 491
 492        spin_lock_irqsave(&port->lock, flags);
 493
 494        /* Stop serial port and reset value */
 495        writel_relaxed(0, port->membase + ofs->cr1);
 496
 497        cr1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_RXNEIE;
 498        cr1 |= BIT(cfg->uart_enable_bit);
 499        cr2 = 0;
 500        cr3 = 0;
 501
 502        if (cflag & CSTOPB)
 503                cr2 |= USART_CR2_STOP_2B;
 504
 505        if (cflag & PARENB) {
 506                cr1 |= USART_CR1_PCE;
 507                if ((cflag & CSIZE) == CS8) {
 508                        if (cfg->has_7bits_data)
 509                                cr1 |= USART_CR1_M0;
 510                        else
 511                                cr1 |= USART_CR1_M;
 512                }
 513        }
 514
 515        if (cflag & PARODD)
 516                cr1 |= USART_CR1_PS;
 517
 518        port->status &= ~(UPSTAT_AUTOCTS | UPSTAT_AUTORTS);
 519        if (cflag & CRTSCTS) {
 520                port->status |= UPSTAT_AUTOCTS | UPSTAT_AUTORTS;
 521                cr3 |= USART_CR3_CTSE;
 522        }
 523
 524        usartdiv = DIV_ROUND_CLOSEST(port->uartclk, baud);
 525
 526        /*
 527         * The USART supports 16 or 8 times oversampling.
 528         * By default we prefer 16 times oversampling, so that the receiver
 529         * has a better tolerance to clock deviations.
 530         * 8 times oversampling is only used to achieve higher speeds.
 531         */
 532        if (usartdiv < 16) {
 533                oversampling = 8;
 534                stm32_set_bits(port, ofs->cr1, USART_CR1_OVER8);
 535        } else {
 536                oversampling = 16;
 537                stm32_clr_bits(port, ofs->cr1, USART_CR1_OVER8);
 538        }
 539
 540        mantissa = (usartdiv / oversampling) << USART_BRR_DIV_M_SHIFT;
 541        fraction = usartdiv % oversampling;
 542        writel_relaxed(mantissa | fraction, port->membase + ofs->brr);
 543
 544        uart_update_timeout(port, cflag, baud);
 545
 546        port->read_status_mask = USART_SR_ORE;
 547        if (termios->c_iflag & INPCK)
 548                port->read_status_mask |= USART_SR_PE | USART_SR_FE;
 549        if (termios->c_iflag & (IGNBRK | BRKINT | PARMRK))
 550                port->read_status_mask |= USART_SR_LBD;
 551
 552        /* Characters to ignore */
 553        port->ignore_status_mask = 0;
 554        if (termios->c_iflag & IGNPAR)
 555                port->ignore_status_mask = USART_SR_PE | USART_SR_FE;
 556        if (termios->c_iflag & IGNBRK) {
 557                port->ignore_status_mask |= USART_SR_LBD;
 558                /*
 559                 * If we're ignoring parity and break indicators,
 560                 * ignore overruns too (for real raw support).
 561                 */
 562                if (termios->c_iflag & IGNPAR)
 563                        port->ignore_status_mask |= USART_SR_ORE;
 564        }
 565
 566        /* Ignore all characters if CREAD is not set */
 567        if ((termios->c_cflag & CREAD) == 0)
 568                port->ignore_status_mask |= USART_SR_DUMMY_RX;
 569
 570        if (stm32_port->rx_ch)
 571                cr3 |= USART_CR3_DMAR;
 572
 573        writel_relaxed(cr3, port->membase + ofs->cr3);
 574        writel_relaxed(cr2, port->membase + ofs->cr2);
 575        writel_relaxed(cr1, port->membase + ofs->cr1);
 576
 577        spin_unlock_irqrestore(&port->lock, flags);
 578}
 579
 580static const char *stm32_type(struct uart_port *port)
 581{
 582        return (port->type == PORT_STM32) ? DRIVER_NAME : NULL;
 583}
 584
 585static void stm32_release_port(struct uart_port *port)
 586{
 587}
 588
 589static int stm32_request_port(struct uart_port *port)
 590{
 591        return 0;
 592}
 593
 594static void stm32_config_port(struct uart_port *port, int flags)
 595{
 596        if (flags & UART_CONFIG_TYPE)
 597                port->type = PORT_STM32;
 598}
 599
 600static int
 601stm32_verify_port(struct uart_port *port, struct serial_struct *ser)
 602{
 603        /* No user changeable parameters */
 604        return -EINVAL;
 605}
 606
 607static void stm32_pm(struct uart_port *port, unsigned int state,
 608                unsigned int oldstate)
 609{
 610        struct stm32_port *stm32port = container_of(port,
 611                        struct stm32_port, port);
 612        struct stm32_usart_offsets *ofs = &stm32port->info->ofs;
 613        struct stm32_usart_config *cfg = &stm32port->info->cfg;
 614        unsigned long flags = 0;
 615
 616        switch (state) {
 617        case UART_PM_STATE_ON:
 618                clk_prepare_enable(stm32port->clk);
 619                break;
 620        case UART_PM_STATE_OFF:
 621                spin_lock_irqsave(&port->lock, flags);
 622                stm32_clr_bits(port, ofs->cr1, BIT(cfg->uart_enable_bit));
 623                spin_unlock_irqrestore(&port->lock, flags);
 624                clk_disable_unprepare(stm32port->clk);
 625                break;
 626        }
 627}
 628
 629static const struct uart_ops stm32_uart_ops = {
 630        .tx_empty       = stm32_tx_empty,
 631        .set_mctrl      = stm32_set_mctrl,
 632        .get_mctrl      = stm32_get_mctrl,
 633        .stop_tx        = stm32_stop_tx,
 634        .start_tx       = stm32_start_tx,
 635        .throttle       = stm32_throttle,
 636        .unthrottle     = stm32_unthrottle,
 637        .stop_rx        = stm32_stop_rx,
 638        .break_ctl      = stm32_break_ctl,
 639        .startup        = stm32_startup,
 640        .shutdown       = stm32_shutdown,
 641        .set_termios    = stm32_set_termios,
 642        .pm             = stm32_pm,
 643        .type           = stm32_type,
 644        .release_port   = stm32_release_port,
 645        .request_port   = stm32_request_port,
 646        .config_port    = stm32_config_port,
 647        .verify_port    = stm32_verify_port,
 648};
 649
 650static int stm32_init_port(struct stm32_port *stm32port,
 651                          struct platform_device *pdev)
 652{
 653        struct uart_port *port = &stm32port->port;
 654        struct resource *res;
 655        int ret;
 656
 657        port->iotype    = UPIO_MEM;
 658        port->flags     = UPF_BOOT_AUTOCONF;
 659        port->ops       = &stm32_uart_ops;
 660        port->dev       = &pdev->dev;
 661        port->irq       = platform_get_irq(pdev, 0);
 662
 663        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 664        port->membase = devm_ioremap_resource(&pdev->dev, res);
 665        if (IS_ERR(port->membase))
 666                return PTR_ERR(port->membase);
 667        port->mapbase = res->start;
 668
 669        spin_lock_init(&port->lock);
 670
 671        stm32port->clk = devm_clk_get(&pdev->dev, NULL);
 672        if (IS_ERR(stm32port->clk))
 673                return PTR_ERR(stm32port->clk);
 674
 675        /* Ensure that clk rate is correct by enabling the clk */
 676        ret = clk_prepare_enable(stm32port->clk);
 677        if (ret)
 678                return ret;
 679
 680        stm32port->port.uartclk = clk_get_rate(stm32port->clk);
 681        if (!stm32port->port.uartclk)
 682                ret = -EINVAL;
 683
 684        return ret;
 685}
 686
 687static struct stm32_port *stm32_of_get_stm32_port(struct platform_device *pdev)
 688{
 689        struct device_node *np = pdev->dev.of_node;
 690        int id;
 691
 692        if (!np)
 693                return NULL;
 694
 695        id = of_alias_get_id(np, "serial");
 696        if (id < 0)
 697                id = 0;
 698
 699        if (WARN_ON(id >= STM32_MAX_PORTS))
 700                return NULL;
 701
 702        stm32_ports[id].hw_flow_control = of_property_read_bool(np,
 703                                                        "st,hw-flow-ctrl");
 704        stm32_ports[id].port.line = id;
 705        return &stm32_ports[id];
 706}
 707
 708#ifdef CONFIG_OF
 709static const struct of_device_id stm32_match[] = {
 710        { .compatible = "st,stm32-usart", .data = &stm32f4_info},
 711        { .compatible = "st,stm32-uart", .data = &stm32f4_info},
 712        { .compatible = "st,stm32f7-usart", .data = &stm32f7_info},
 713        { .compatible = "st,stm32f7-uart", .data = &stm32f7_info},
 714        {},
 715};
 716
 717MODULE_DEVICE_TABLE(of, stm32_match);
 718#endif
 719
 720static int stm32_of_dma_rx_probe(struct stm32_port *stm32port,
 721                                 struct platform_device *pdev)
 722{
 723        struct stm32_usart_offsets *ofs = &stm32port->info->ofs;
 724        struct uart_port *port = &stm32port->port;
 725        struct device *dev = &pdev->dev;
 726        struct dma_slave_config config;
 727        struct dma_async_tx_descriptor *desc = NULL;
 728        dma_cookie_t cookie;
 729        int ret;
 730
 731        /* Request DMA RX channel */
 732        stm32port->rx_ch = dma_request_slave_channel(dev, "rx");
 733        if (!stm32port->rx_ch) {
 734                dev_info(dev, "rx dma alloc failed\n");
 735                return -ENODEV;
 736        }
 737        stm32port->rx_buf = dma_alloc_coherent(&pdev->dev, RX_BUF_L,
 738                                                 &stm32port->rx_dma_buf,
 739                                                 GFP_KERNEL);
 740        if (!stm32port->rx_buf) {
 741                ret = -ENOMEM;
 742                goto alloc_err;
 743        }
 744
 745        /* Configure DMA channel */
 746        memset(&config, 0, sizeof(config));
 747        config.src_addr = port->mapbase + ofs->rdr;
 748        config.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
 749
 750        ret = dmaengine_slave_config(stm32port->rx_ch, &config);
 751        if (ret < 0) {
 752                dev_err(dev, "rx dma channel config failed\n");
 753                ret = -ENODEV;
 754                goto config_err;
 755        }
 756
 757        /* Prepare a DMA cyclic transaction */
 758        desc = dmaengine_prep_dma_cyclic(stm32port->rx_ch,
 759                                         stm32port->rx_dma_buf,
 760                                         RX_BUF_L, RX_BUF_P, DMA_DEV_TO_MEM,
 761                                         DMA_PREP_INTERRUPT);
 762        if (!desc) {
 763                dev_err(dev, "rx dma prep cyclic failed\n");
 764                ret = -ENODEV;
 765                goto config_err;
 766        }
 767
 768        /* No callback as dma buffer is drained on usart interrupt */
 769        desc->callback = NULL;
 770        desc->callback_param = NULL;
 771
 772        /* Push current DMA transaction in the pending queue */
 773        cookie = dmaengine_submit(desc);
 774
 775        /* Issue pending DMA requests */
 776        dma_async_issue_pending(stm32port->rx_ch);
 777
 778        return 0;
 779
 780config_err:
 781        dma_free_coherent(&pdev->dev,
 782                          RX_BUF_L, stm32port->rx_buf,
 783                          stm32port->rx_dma_buf);
 784
 785alloc_err:
 786        dma_release_channel(stm32port->rx_ch);
 787        stm32port->rx_ch = NULL;
 788
 789        return ret;
 790}
 791
 792static int stm32_of_dma_tx_probe(struct stm32_port *stm32port,
 793                                 struct platform_device *pdev)
 794{
 795        struct stm32_usart_offsets *ofs = &stm32port->info->ofs;
 796        struct uart_port *port = &stm32port->port;
 797        struct device *dev = &pdev->dev;
 798        struct dma_slave_config config;
 799        int ret;
 800
 801        stm32port->tx_dma_busy = false;
 802
 803        /* Request DMA TX channel */
 804        stm32port->tx_ch = dma_request_slave_channel(dev, "tx");
 805        if (!stm32port->tx_ch) {
 806                dev_info(dev, "tx dma alloc failed\n");
 807                return -ENODEV;
 808        }
 809        stm32port->tx_buf = dma_alloc_coherent(&pdev->dev, TX_BUF_L,
 810                                                 &stm32port->tx_dma_buf,
 811                                                 GFP_KERNEL);
 812        if (!stm32port->tx_buf) {
 813                ret = -ENOMEM;
 814                goto alloc_err;
 815        }
 816
 817        /* Configure DMA channel */
 818        memset(&config, 0, sizeof(config));
 819        config.dst_addr = port->mapbase + ofs->tdr;
 820        config.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
 821
 822        ret = dmaengine_slave_config(stm32port->tx_ch, &config);
 823        if (ret < 0) {
 824                dev_err(dev, "tx dma channel config failed\n");
 825                ret = -ENODEV;
 826                goto config_err;
 827        }
 828
 829        return 0;
 830
 831config_err:
 832        dma_free_coherent(&pdev->dev,
 833                          TX_BUF_L, stm32port->tx_buf,
 834                          stm32port->tx_dma_buf);
 835
 836alloc_err:
 837        dma_release_channel(stm32port->tx_ch);
 838        stm32port->tx_ch = NULL;
 839
 840        return ret;
 841}
 842
 843static int stm32_serial_probe(struct platform_device *pdev)
 844{
 845        const struct of_device_id *match;
 846        struct stm32_port *stm32port;
 847        int ret;
 848
 849        stm32port = stm32_of_get_stm32_port(pdev);
 850        if (!stm32port)
 851                return -ENODEV;
 852
 853        match = of_match_device(stm32_match, &pdev->dev);
 854        if (match && match->data)
 855                stm32port->info = (struct stm32_usart_info *)match->data;
 856        else
 857                return -EINVAL;
 858
 859        ret = stm32_init_port(stm32port, pdev);
 860        if (ret)
 861                return ret;
 862
 863        ret = uart_add_one_port(&stm32_usart_driver, &stm32port->port);
 864        if (ret)
 865                return ret;
 866
 867        ret = stm32_of_dma_rx_probe(stm32port, pdev);
 868        if (ret)
 869                dev_info(&pdev->dev, "interrupt mode used for rx (no dma)\n");
 870
 871        ret = stm32_of_dma_tx_probe(stm32port, pdev);
 872        if (ret)
 873                dev_info(&pdev->dev, "interrupt mode used for tx (no dma)\n");
 874
 875        platform_set_drvdata(pdev, &stm32port->port);
 876
 877        return 0;
 878}
 879
 880static int stm32_serial_remove(struct platform_device *pdev)
 881{
 882        struct uart_port *port = platform_get_drvdata(pdev);
 883        struct stm32_port *stm32_port = to_stm32_port(port);
 884        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 885
 886        stm32_clr_bits(port, ofs->cr3, USART_CR3_DMAR);
 887
 888        if (stm32_port->rx_ch)
 889                dma_release_channel(stm32_port->rx_ch);
 890
 891        if (stm32_port->rx_dma_buf)
 892                dma_free_coherent(&pdev->dev,
 893                                  RX_BUF_L, stm32_port->rx_buf,
 894                                  stm32_port->rx_dma_buf);
 895
 896        stm32_clr_bits(port, ofs->cr3, USART_CR3_DMAT);
 897
 898        if (stm32_port->tx_ch)
 899                dma_release_channel(stm32_port->tx_ch);
 900
 901        if (stm32_port->tx_dma_buf)
 902                dma_free_coherent(&pdev->dev,
 903                                  TX_BUF_L, stm32_port->tx_buf,
 904                                  stm32_port->tx_dma_buf);
 905
 906        clk_disable_unprepare(stm32_port->clk);
 907
 908        return uart_remove_one_port(&stm32_usart_driver, port);
 909}
 910
 911
 912#ifdef CONFIG_SERIAL_STM32_CONSOLE
 913static void stm32_console_putchar(struct uart_port *port, int ch)
 914{
 915        struct stm32_port *stm32_port = to_stm32_port(port);
 916        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 917
 918        while (!(readl_relaxed(port->membase + ofs->isr) & USART_SR_TXE))
 919                cpu_relax();
 920
 921        writel_relaxed(ch, port->membase + ofs->tdr);
 922}
 923
 924static void stm32_console_write(struct console *co, const char *s, unsigned cnt)
 925{
 926        struct uart_port *port = &stm32_ports[co->index].port;
 927        struct stm32_port *stm32_port = to_stm32_port(port);
 928        struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
 929        struct stm32_usart_config *cfg = &stm32_port->info->cfg;
 930        unsigned long flags;
 931        u32 old_cr1, new_cr1;
 932        int locked = 1;
 933
 934        local_irq_save(flags);
 935        if (port->sysrq)
 936                locked = 0;
 937        else if (oops_in_progress)
 938                locked = spin_trylock(&port->lock);
 939        else
 940                spin_lock(&port->lock);
 941
 942        /* Save and disable interrupts, enable the transmitter */
 943        old_cr1 = readl_relaxed(port->membase + ofs->cr1);
 944        new_cr1 = old_cr1 & ~USART_CR1_IE_MASK;
 945        new_cr1 |=  USART_CR1_TE | BIT(cfg->uart_enable_bit);
 946        writel_relaxed(new_cr1, port->membase + ofs->cr1);
 947
 948        uart_console_write(port, s, cnt, stm32_console_putchar);
 949
 950        /* Restore interrupt state */
 951        writel_relaxed(old_cr1, port->membase + ofs->cr1);
 952
 953        if (locked)
 954                spin_unlock(&port->lock);
 955        local_irq_restore(flags);
 956}
 957
 958static int stm32_console_setup(struct console *co, char *options)
 959{
 960        struct stm32_port *stm32port;
 961        int baud = 9600;
 962        int bits = 8;
 963        int parity = 'n';
 964        int flow = 'n';
 965
 966        if (co->index >= STM32_MAX_PORTS)
 967                return -ENODEV;
 968
 969        stm32port = &stm32_ports[co->index];
 970
 971        /*
 972         * This driver does not support early console initialization
 973         * (use ARM early printk support instead), so we only expect
 974         * this to be called during the uart port registration when the
 975         * driver gets probed and the port should be mapped at that point.
 976         */
 977        if (stm32port->port.mapbase == 0 || stm32port->port.membase == NULL)
 978                return -ENXIO;
 979
 980        if (options)
 981                uart_parse_options(options, &baud, &parity, &bits, &flow);
 982
 983        return uart_set_options(&stm32port->port, co, baud, parity, bits, flow);
 984}
 985
 986static struct console stm32_console = {
 987        .name           = STM32_SERIAL_NAME,
 988        .device         = uart_console_device,
 989        .write          = stm32_console_write,
 990        .setup          = stm32_console_setup,
 991        .flags          = CON_PRINTBUFFER,
 992        .index          = -1,
 993        .data           = &stm32_usart_driver,
 994};
 995
 996#define STM32_SERIAL_CONSOLE (&stm32_console)
 997
 998#else
 999#define STM32_SERIAL_CONSOLE NULL
1000#endif /* CONFIG_SERIAL_STM32_CONSOLE */
1001
1002static struct uart_driver stm32_usart_driver = {
1003        .driver_name    = DRIVER_NAME,
1004        .dev_name       = STM32_SERIAL_NAME,
1005        .major          = 0,
1006        .minor          = 0,
1007        .nr             = STM32_MAX_PORTS,
1008        .cons           = STM32_SERIAL_CONSOLE,
1009};
1010
1011static struct platform_driver stm32_serial_driver = {
1012        .probe          = stm32_serial_probe,
1013        .remove         = stm32_serial_remove,
1014        .driver = {
1015                .name   = DRIVER_NAME,
1016                .of_match_table = of_match_ptr(stm32_match),
1017        },
1018};
1019
1020static int __init usart_init(void)
1021{
1022        static char banner[] __initdata = "STM32 USART driver initialized";
1023        int ret;
1024
1025        pr_info("%s\n", banner);
1026
1027        ret = uart_register_driver(&stm32_usart_driver);
1028        if (ret)
1029                return ret;
1030
1031        ret = platform_driver_register(&stm32_serial_driver);
1032        if (ret)
1033                uart_unregister_driver(&stm32_usart_driver);
1034
1035        return ret;
1036}
1037
1038static void __exit usart_exit(void)
1039{
1040        platform_driver_unregister(&stm32_serial_driver);
1041        uart_unregister_driver(&stm32_usart_driver);
1042}
1043
1044module_init(usart_init);
1045module_exit(usart_exit);
1046
1047MODULE_ALIAS("platform:" DRIVER_NAME);
1048MODULE_DESCRIPTION("STMicroelectronics STM32 serial port driver");
1049MODULE_LICENSE("GPL v2");
1050