root/drivers/tty/serial/pxa.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. serial_in
  2. serial_out
  3. serial_pxa_enable_ms
  4. serial_pxa_stop_tx
  5. serial_pxa_stop_rx
  6. receive_chars
  7. transmit_chars
  8. serial_pxa_start_tx
  9. check_modem_status
  10. serial_pxa_irq
  11. serial_pxa_tx_empty
  12. serial_pxa_get_mctrl
  13. serial_pxa_set_mctrl
  14. serial_pxa_break_ctl
  15. serial_pxa_startup
  16. serial_pxa_shutdown
  17. serial_pxa_set_termios
  18. serial_pxa_pm
  19. serial_pxa_release_port
  20. serial_pxa_request_port
  21. serial_pxa_config_port
  22. serial_pxa_verify_port
  23. serial_pxa_type
  24. wait_for_xmitr
  25. serial_pxa_console_putchar
  26. serial_pxa_console_write
  27. serial_pxa_get_poll_char
  28. serial_pxa_put_poll_char
  29. serial_pxa_console_setup
  30. serial_pxa_suspend
  31. serial_pxa_resume
  32. serial_pxa_probe_dt
  33. serial_pxa_probe
  34. serial_pxa_init

   1 // SPDX-License-Identifier: GPL-2.0+
   2 /*
   3  *  Based on drivers/serial/8250.c by Russell King.
   4  *
   5  *  Author:     Nicolas Pitre
   6  *  Created:    Feb 20, 2003
   7  *  Copyright:  (C) 2003 Monta Vista Software, Inc.
   8  *
   9  * Note 1: This driver is made separate from the already too overloaded
  10  * 8250.c because it needs some kirks of its own and that'll make it
  11  * easier to add DMA support.
  12  *
  13  * Note 2: I'm too sick of device allocation policies for serial ports.
  14  * If someone else wants to request an "official" allocation of major/minor
  15  * for this driver please be my guest.  And don't forget that new hardware
  16  * to come from Intel might have more than 3 or 4 of those UARTs.  Let's
  17  * hope for a better port registration and dynamic device allocation scheme
  18  * with the serial core maintainer satisfaction to appear soon.
  19  */
  20 
  21 
  22 #if defined(CONFIG_SERIAL_PXA_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
  23 #define SUPPORT_SYSRQ
  24 #endif
  25 
  26 #include <linux/ioport.h>
  27 #include <linux/init.h>
  28 #include <linux/console.h>
  29 #include <linux/sysrq.h>
  30 #include <linux/serial_reg.h>
  31 #include <linux/circ_buf.h>
  32 #include <linux/delay.h>
  33 #include <linux/interrupt.h>
  34 #include <linux/of.h>
  35 #include <linux/platform_device.h>
  36 #include <linux/tty.h>
  37 #include <linux/tty_flip.h>
  38 #include <linux/serial_core.h>
  39 #include <linux/clk.h>
  40 #include <linux/io.h>
  41 #include <linux/slab.h>
  42 
  43 #define PXA_NAME_LEN            8
  44 
  45 struct uart_pxa_port {
  46         struct uart_port        port;
  47         unsigned char           ier;
  48         unsigned char           lcr;
  49         unsigned char           mcr;
  50         unsigned int            lsr_break_flag;
  51         struct clk              *clk;
  52         char                    name[PXA_NAME_LEN];
  53 };
  54 
  55 static inline unsigned int serial_in(struct uart_pxa_port *up, int offset)
  56 {
  57         offset <<= 2;
  58         return readl(up->port.membase + offset);
  59 }
  60 
  61 static inline void serial_out(struct uart_pxa_port *up, int offset, int value)
  62 {
  63         offset <<= 2;
  64         writel(value, up->port.membase + offset);
  65 }
  66 
  67 static void serial_pxa_enable_ms(struct uart_port *port)
  68 {
  69         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
  70 
  71         up->ier |= UART_IER_MSI;
  72         serial_out(up, UART_IER, up->ier);
  73 }
  74 
  75 static void serial_pxa_stop_tx(struct uart_port *port)
  76 {
  77         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
  78 
  79         if (up->ier & UART_IER_THRI) {
  80                 up->ier &= ~UART_IER_THRI;
  81                 serial_out(up, UART_IER, up->ier);
  82         }
  83 }
  84 
  85 static void serial_pxa_stop_rx(struct uart_port *port)
  86 {
  87         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
  88 
  89         up->ier &= ~UART_IER_RLSI;
  90         up->port.read_status_mask &= ~UART_LSR_DR;
  91         serial_out(up, UART_IER, up->ier);
  92 }
  93 
  94 static inline void receive_chars(struct uart_pxa_port *up, int *status)
  95 {
  96         unsigned int ch, flag;
  97         int max_count = 256;
  98 
  99         do {
 100                 /* work around Errata #20 according to
 101                  * Intel(R) PXA27x Processor Family
 102                  * Specification Update (May 2005)
 103                  *
 104                  * Step 2
 105                  * Disable the Reciever Time Out Interrupt via IER[RTOEI]
 106                  */
 107                 up->ier &= ~UART_IER_RTOIE;
 108                 serial_out(up, UART_IER, up->ier);
 109 
 110                 ch = serial_in(up, UART_RX);
 111                 flag = TTY_NORMAL;
 112                 up->port.icount.rx++;
 113 
 114                 if (unlikely(*status & (UART_LSR_BI | UART_LSR_PE |
 115                                        UART_LSR_FE | UART_LSR_OE))) {
 116                         /*
 117                          * For statistics only
 118                          */
 119                         if (*status & UART_LSR_BI) {
 120                                 *status &= ~(UART_LSR_FE | UART_LSR_PE);
 121                                 up->port.icount.brk++;
 122                                 /*
 123                                  * We do the SysRQ and SAK checking
 124                                  * here because otherwise the break
 125                                  * may get masked by ignore_status_mask
 126                                  * or read_status_mask.
 127                                  */
 128                                 if (uart_handle_break(&up->port))
 129                                         goto ignore_char;
 130                         } else if (*status & UART_LSR_PE)
 131                                 up->port.icount.parity++;
 132                         else if (*status & UART_LSR_FE)
 133                                 up->port.icount.frame++;
 134                         if (*status & UART_LSR_OE)
 135                                 up->port.icount.overrun++;
 136 
 137                         /*
 138                          * Mask off conditions which should be ignored.
 139                          */
 140                         *status &= up->port.read_status_mask;
 141 
 142 #ifdef CONFIG_SERIAL_PXA_CONSOLE
 143                         if (up->port.line == up->port.cons->index) {
 144                                 /* Recover the break flag from console xmit */
 145                                 *status |= up->lsr_break_flag;
 146                                 up->lsr_break_flag = 0;
 147                         }
 148 #endif
 149                         if (*status & UART_LSR_BI) {
 150                                 flag = TTY_BREAK;
 151                         } else if (*status & UART_LSR_PE)
 152                                 flag = TTY_PARITY;
 153                         else if (*status & UART_LSR_FE)
 154                                 flag = TTY_FRAME;
 155                 }
 156 
 157                 if (uart_handle_sysrq_char(&up->port, ch))
 158                         goto ignore_char;
 159 
 160                 uart_insert_char(&up->port, *status, UART_LSR_OE, ch, flag);
 161 
 162         ignore_char:
 163                 *status = serial_in(up, UART_LSR);
 164         } while ((*status & UART_LSR_DR) && (max_count-- > 0));
 165         tty_flip_buffer_push(&up->port.state->port);
 166 
 167         /* work around Errata #20 according to
 168          * Intel(R) PXA27x Processor Family
 169          * Specification Update (May 2005)
 170          *
 171          * Step 6:
 172          * No more data in FIFO: Re-enable RTO interrupt via IER[RTOIE]
 173          */
 174         up->ier |= UART_IER_RTOIE;
 175         serial_out(up, UART_IER, up->ier);
 176 }
 177 
 178 static void transmit_chars(struct uart_pxa_port *up)
 179 {
 180         struct circ_buf *xmit = &up->port.state->xmit;
 181         int count;
 182 
 183         if (up->port.x_char) {
 184                 serial_out(up, UART_TX, up->port.x_char);
 185                 up->port.icount.tx++;
 186                 up->port.x_char = 0;
 187                 return;
 188         }
 189         if (uart_circ_empty(xmit) || uart_tx_stopped(&up->port)) {
 190                 serial_pxa_stop_tx(&up->port);
 191                 return;
 192         }
 193 
 194         count = up->port.fifosize / 2;
 195         do {
 196                 serial_out(up, UART_TX, xmit->buf[xmit->tail]);
 197                 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
 198                 up->port.icount.tx++;
 199                 if (uart_circ_empty(xmit))
 200                         break;
 201         } while (--count > 0);
 202 
 203         if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
 204                 uart_write_wakeup(&up->port);
 205 
 206 
 207         if (uart_circ_empty(xmit))
 208                 serial_pxa_stop_tx(&up->port);
 209 }
 210 
 211 static void serial_pxa_start_tx(struct uart_port *port)
 212 {
 213         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
 214 
 215         if (!(up->ier & UART_IER_THRI)) {
 216                 up->ier |= UART_IER_THRI;
 217                 serial_out(up, UART_IER, up->ier);
 218         }
 219 }
 220 
 221 /* should hold up->port.lock */
 222 static inline void check_modem_status(struct uart_pxa_port *up)
 223 {
 224         int status;
 225 
 226         status = serial_in(up, UART_MSR);
 227 
 228         if ((status & UART_MSR_ANY_DELTA) == 0)
 229                 return;
 230 
 231         if (status & UART_MSR_TERI)
 232                 up->port.icount.rng++;
 233         if (status & UART_MSR_DDSR)
 234                 up->port.icount.dsr++;
 235         if (status & UART_MSR_DDCD)
 236                 uart_handle_dcd_change(&up->port, status & UART_MSR_DCD);
 237         if (status & UART_MSR_DCTS)
 238                 uart_handle_cts_change(&up->port, status & UART_MSR_CTS);
 239 
 240         wake_up_interruptible(&up->port.state->port.delta_msr_wait);
 241 }
 242 
 243 /*
 244  * This handles the interrupt from one port.
 245  */
 246 static inline irqreturn_t serial_pxa_irq(int irq, void *dev_id)
 247 {
 248         struct uart_pxa_port *up = dev_id;
 249         unsigned int iir, lsr;
 250 
 251         iir = serial_in(up, UART_IIR);
 252         if (iir & UART_IIR_NO_INT)
 253                 return IRQ_NONE;
 254         spin_lock(&up->port.lock);
 255         lsr = serial_in(up, UART_LSR);
 256         if (lsr & UART_LSR_DR)
 257                 receive_chars(up, &lsr);
 258         check_modem_status(up);
 259         if (lsr & UART_LSR_THRE)
 260                 transmit_chars(up);
 261         spin_unlock(&up->port.lock);
 262         return IRQ_HANDLED;
 263 }
 264 
 265 static unsigned int serial_pxa_tx_empty(struct uart_port *port)
 266 {
 267         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
 268         unsigned long flags;
 269         unsigned int ret;
 270 
 271         spin_lock_irqsave(&up->port.lock, flags);
 272         ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0;
 273         spin_unlock_irqrestore(&up->port.lock, flags);
 274 
 275         return ret;
 276 }
 277 
 278 static unsigned int serial_pxa_get_mctrl(struct uart_port *port)
 279 {
 280         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
 281         unsigned char status;
 282         unsigned int ret;
 283 
 284         status = serial_in(up, UART_MSR);
 285 
 286         ret = 0;
 287         if (status & UART_MSR_DCD)
 288                 ret |= TIOCM_CAR;
 289         if (status & UART_MSR_RI)
 290                 ret |= TIOCM_RNG;
 291         if (status & UART_MSR_DSR)
 292                 ret |= TIOCM_DSR;
 293         if (status & UART_MSR_CTS)
 294                 ret |= TIOCM_CTS;
 295         return ret;
 296 }
 297 
 298 static void serial_pxa_set_mctrl(struct uart_port *port, unsigned int mctrl)
 299 {
 300         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
 301         unsigned char mcr = 0;
 302 
 303         if (mctrl & TIOCM_RTS)
 304                 mcr |= UART_MCR_RTS;
 305         if (mctrl & TIOCM_DTR)
 306                 mcr |= UART_MCR_DTR;
 307         if (mctrl & TIOCM_OUT1)
 308                 mcr |= UART_MCR_OUT1;
 309         if (mctrl & TIOCM_OUT2)
 310                 mcr |= UART_MCR_OUT2;
 311         if (mctrl & TIOCM_LOOP)
 312                 mcr |= UART_MCR_LOOP;
 313 
 314         mcr |= up->mcr;
 315 
 316         serial_out(up, UART_MCR, mcr);
 317 }
 318 
 319 static void serial_pxa_break_ctl(struct uart_port *port, int break_state)
 320 {
 321         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
 322         unsigned long flags;
 323 
 324         spin_lock_irqsave(&up->port.lock, flags);
 325         if (break_state == -1)
 326                 up->lcr |= UART_LCR_SBC;
 327         else
 328                 up->lcr &= ~UART_LCR_SBC;
 329         serial_out(up, UART_LCR, up->lcr);
 330         spin_unlock_irqrestore(&up->port.lock, flags);
 331 }
 332 
 333 static int serial_pxa_startup(struct uart_port *port)
 334 {
 335         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
 336         unsigned long flags;
 337         int retval;
 338 
 339         if (port->line == 3) /* HWUART */
 340                 up->mcr |= UART_MCR_AFE;
 341         else
 342                 up->mcr = 0;
 343 
 344         up->port.uartclk = clk_get_rate(up->clk);
 345 
 346         /*
 347          * Allocate the IRQ
 348          */
 349         retval = request_irq(up->port.irq, serial_pxa_irq, 0, up->name, up);
 350         if (retval)
 351                 return retval;
 352 
 353         /*
 354          * Clear the FIFO buffers and disable them.
 355          * (they will be reenabled in set_termios())
 356          */
 357         serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO);
 358         serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO |
 359                         UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
 360         serial_out(up, UART_FCR, 0);
 361 
 362         /*
 363          * Clear the interrupt registers.
 364          */
 365         (void) serial_in(up, UART_LSR);
 366         (void) serial_in(up, UART_RX);
 367         (void) serial_in(up, UART_IIR);
 368         (void) serial_in(up, UART_MSR);
 369 
 370         /*
 371          * Now, initialize the UART
 372          */
 373         serial_out(up, UART_LCR, UART_LCR_WLEN8);
 374 
 375         spin_lock_irqsave(&up->port.lock, flags);
 376         up->port.mctrl |= TIOCM_OUT2;
 377         serial_pxa_set_mctrl(&up->port, up->port.mctrl);
 378         spin_unlock_irqrestore(&up->port.lock, flags);
 379 
 380         /*
 381          * Finally, enable interrupts.  Note: Modem status interrupts
 382          * are set via set_termios(), which will be occurring imminently
 383          * anyway, so we don't enable them here.
 384          */
 385         up->ier = UART_IER_RLSI | UART_IER_RDI | UART_IER_RTOIE | UART_IER_UUE;
 386         serial_out(up, UART_IER, up->ier);
 387 
 388         /*
 389          * And clear the interrupt registers again for luck.
 390          */
 391         (void) serial_in(up, UART_LSR);
 392         (void) serial_in(up, UART_RX);
 393         (void) serial_in(up, UART_IIR);
 394         (void) serial_in(up, UART_MSR);
 395 
 396         return 0;
 397 }
 398 
 399 static void serial_pxa_shutdown(struct uart_port *port)
 400 {
 401         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
 402         unsigned long flags;
 403 
 404         free_irq(up->port.irq, up);
 405 
 406         /*
 407          * Disable interrupts from this port
 408          */
 409         up->ier = 0;
 410         serial_out(up, UART_IER, 0);
 411 
 412         spin_lock_irqsave(&up->port.lock, flags);
 413         up->port.mctrl &= ~TIOCM_OUT2;
 414         serial_pxa_set_mctrl(&up->port, up->port.mctrl);
 415         spin_unlock_irqrestore(&up->port.lock, flags);
 416 
 417         /*
 418          * Disable break condition and FIFOs
 419          */
 420         serial_out(up, UART_LCR, serial_in(up, UART_LCR) & ~UART_LCR_SBC);
 421         serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO |
 422                                   UART_FCR_CLEAR_RCVR |
 423                                   UART_FCR_CLEAR_XMIT);
 424         serial_out(up, UART_FCR, 0);
 425 }
 426 
 427 static void
 428 serial_pxa_set_termios(struct uart_port *port, struct ktermios *termios,
 429                        struct ktermios *old)
 430 {
 431         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
 432         unsigned char cval, fcr = 0;
 433         unsigned long flags;
 434         unsigned int baud, quot;
 435         unsigned int dll;
 436 
 437         switch (termios->c_cflag & CSIZE) {
 438         case CS5:
 439                 cval = UART_LCR_WLEN5;
 440                 break;
 441         case CS6:
 442                 cval = UART_LCR_WLEN6;
 443                 break;
 444         case CS7:
 445                 cval = UART_LCR_WLEN7;
 446                 break;
 447         default:
 448         case CS8:
 449                 cval = UART_LCR_WLEN8;
 450                 break;
 451         }
 452 
 453         if (termios->c_cflag & CSTOPB)
 454                 cval |= UART_LCR_STOP;
 455         if (termios->c_cflag & PARENB)
 456                 cval |= UART_LCR_PARITY;
 457         if (!(termios->c_cflag & PARODD))
 458                 cval |= UART_LCR_EPAR;
 459 
 460         /*
 461          * Ask the core to calculate the divisor for us.
 462          */
 463         baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
 464         quot = uart_get_divisor(port, baud);
 465 
 466         if ((up->port.uartclk / quot) < (2400 * 16))
 467                 fcr = UART_FCR_ENABLE_FIFO | UART_FCR_PXAR1;
 468         else if ((up->port.uartclk / quot) < (230400 * 16))
 469                 fcr = UART_FCR_ENABLE_FIFO | UART_FCR_PXAR8;
 470         else
 471                 fcr = UART_FCR_ENABLE_FIFO | UART_FCR_PXAR32;
 472 
 473         /*
 474          * Ok, we're now changing the port state.  Do it with
 475          * interrupts disabled.
 476          */
 477         spin_lock_irqsave(&up->port.lock, flags);
 478 
 479         /*
 480          * Ensure the port will be enabled.
 481          * This is required especially for serial console.
 482          */
 483         up->ier |= UART_IER_UUE;
 484 
 485         /*
 486          * Update the per-port timeout.
 487          */
 488         uart_update_timeout(port, termios->c_cflag, baud);
 489 
 490         up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR;
 491         if (termios->c_iflag & INPCK)
 492                 up->port.read_status_mask |= UART_LSR_FE | UART_LSR_PE;
 493         if (termios->c_iflag & (IGNBRK | BRKINT | PARMRK))
 494                 up->port.read_status_mask |= UART_LSR_BI;
 495 
 496         /*
 497          * Characters to ignore
 498          */
 499         up->port.ignore_status_mask = 0;
 500         if (termios->c_iflag & IGNPAR)
 501                 up->port.ignore_status_mask |= UART_LSR_PE | UART_LSR_FE;
 502         if (termios->c_iflag & IGNBRK) {
 503                 up->port.ignore_status_mask |= UART_LSR_BI;
 504                 /*
 505                  * If we're ignoring parity and break indicators,
 506                  * ignore overruns too (for real raw support).
 507                  */
 508                 if (termios->c_iflag & IGNPAR)
 509                         up->port.ignore_status_mask |= UART_LSR_OE;
 510         }
 511 
 512         /*
 513          * ignore all characters if CREAD is not set
 514          */
 515         if ((termios->c_cflag & CREAD) == 0)
 516                 up->port.ignore_status_mask |= UART_LSR_DR;
 517 
 518         /*
 519          * CTS flow control flag and modem status interrupts
 520          */
 521         up->ier &= ~UART_IER_MSI;
 522         if (UART_ENABLE_MS(&up->port, termios->c_cflag))
 523                 up->ier |= UART_IER_MSI;
 524 
 525         serial_out(up, UART_IER, up->ier);
 526 
 527         if (termios->c_cflag & CRTSCTS)
 528                 up->mcr |= UART_MCR_AFE;
 529         else
 530                 up->mcr &= ~UART_MCR_AFE;
 531 
 532         serial_out(up, UART_LCR, cval | UART_LCR_DLAB); /* set DLAB */
 533         serial_out(up, UART_DLL, quot & 0xff);          /* LS of divisor */
 534 
 535         /*
 536          * work around Errata #75 according to Intel(R) PXA27x Processor Family
 537          * Specification Update (Nov 2005)
 538          */
 539         dll = serial_in(up, UART_DLL);
 540         WARN_ON(dll != (quot & 0xff));
 541 
 542         serial_out(up, UART_DLM, quot >> 8);            /* MS of divisor */
 543         serial_out(up, UART_LCR, cval);                 /* reset DLAB */
 544         up->lcr = cval;                                 /* Save LCR */
 545         serial_pxa_set_mctrl(&up->port, up->port.mctrl);
 546         serial_out(up, UART_FCR, fcr);
 547         spin_unlock_irqrestore(&up->port.lock, flags);
 548 }
 549 
 550 static void
 551 serial_pxa_pm(struct uart_port *port, unsigned int state,
 552               unsigned int oldstate)
 553 {
 554         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
 555 
 556         if (!state)
 557                 clk_prepare_enable(up->clk);
 558         else
 559                 clk_disable_unprepare(up->clk);
 560 }
 561 
 562 static void serial_pxa_release_port(struct uart_port *port)
 563 {
 564 }
 565 
 566 static int serial_pxa_request_port(struct uart_port *port)
 567 {
 568         return 0;
 569 }
 570 
 571 static void serial_pxa_config_port(struct uart_port *port, int flags)
 572 {
 573         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
 574         up->port.type = PORT_PXA;
 575 }
 576 
 577 static int
 578 serial_pxa_verify_port(struct uart_port *port, struct serial_struct *ser)
 579 {
 580         /* we don't want the core code to modify any port params */
 581         return -EINVAL;
 582 }
 583 
 584 static const char *
 585 serial_pxa_type(struct uart_port *port)
 586 {
 587         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
 588         return up->name;
 589 }
 590 
 591 static struct uart_pxa_port *serial_pxa_ports[4];
 592 static struct uart_driver serial_pxa_reg;
 593 
 594 #ifdef CONFIG_SERIAL_PXA_CONSOLE
 595 
 596 #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
 597 
 598 /*
 599  *      Wait for transmitter & holding register to empty
 600  */
 601 static void wait_for_xmitr(struct uart_pxa_port *up)
 602 {
 603         unsigned int status, tmout = 10000;
 604 
 605         /* Wait up to 10ms for the character(s) to be sent. */
 606         do {
 607                 status = serial_in(up, UART_LSR);
 608 
 609                 if (status & UART_LSR_BI)
 610                         up->lsr_break_flag = UART_LSR_BI;
 611 
 612                 if (--tmout == 0)
 613                         break;
 614                 udelay(1);
 615         } while ((status & BOTH_EMPTY) != BOTH_EMPTY);
 616 
 617         /* Wait up to 1s for flow control if necessary */
 618         if (up->port.flags & UPF_CONS_FLOW) {
 619                 tmout = 1000000;
 620                 while (--tmout &&
 621                        ((serial_in(up, UART_MSR) & UART_MSR_CTS) == 0))
 622                         udelay(1);
 623         }
 624 }
 625 
 626 static void serial_pxa_console_putchar(struct uart_port *port, int ch)
 627 {
 628         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
 629 
 630         wait_for_xmitr(up);
 631         serial_out(up, UART_TX, ch);
 632 }
 633 
 634 /*
 635  * Print a string to the serial port trying not to disturb
 636  * any possible real use of the port...
 637  *
 638  *      The console_lock must be held when we get here.
 639  */
 640 static void
 641 serial_pxa_console_write(struct console *co, const char *s, unsigned int count)
 642 {
 643         struct uart_pxa_port *up = serial_pxa_ports[co->index];
 644         unsigned int ier;
 645         unsigned long flags;
 646         int locked = 1;
 647 
 648         clk_enable(up->clk);
 649         local_irq_save(flags);
 650         if (up->port.sysrq)
 651                 locked = 0;
 652         else if (oops_in_progress)
 653                 locked = spin_trylock(&up->port.lock);
 654         else
 655                 spin_lock(&up->port.lock);
 656 
 657         /*
 658          *      First save the IER then disable the interrupts
 659          */
 660         ier = serial_in(up, UART_IER);
 661         serial_out(up, UART_IER, UART_IER_UUE);
 662 
 663         uart_console_write(&up->port, s, count, serial_pxa_console_putchar);
 664 
 665         /*
 666          *      Finally, wait for transmitter to become empty
 667          *      and restore the IER
 668          */
 669         wait_for_xmitr(up);
 670         serial_out(up, UART_IER, ier);
 671 
 672         if (locked)
 673                 spin_unlock(&up->port.lock);
 674         local_irq_restore(flags);
 675         clk_disable(up->clk);
 676 
 677 }
 678 
 679 #ifdef CONFIG_CONSOLE_POLL
 680 /*
 681  * Console polling routines for writing and reading from the uart while
 682  * in an interrupt or debug context.
 683  */
 684 
 685 static int serial_pxa_get_poll_char(struct uart_port *port)
 686 {
 687         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
 688         unsigned char lsr = serial_in(up, UART_LSR);
 689 
 690         while (!(lsr & UART_LSR_DR))
 691                 lsr = serial_in(up, UART_LSR);
 692 
 693         return serial_in(up, UART_RX);
 694 }
 695 
 696 
 697 static void serial_pxa_put_poll_char(struct uart_port *port,
 698                          unsigned char c)
 699 {
 700         unsigned int ier;
 701         struct uart_pxa_port *up = (struct uart_pxa_port *)port;
 702 
 703         /*
 704          *      First save the IER then disable the interrupts
 705          */
 706         ier = serial_in(up, UART_IER);
 707         serial_out(up, UART_IER, UART_IER_UUE);
 708 
 709         wait_for_xmitr(up);
 710         /*
 711          *      Send the character out.
 712          */
 713         serial_out(up, UART_TX, c);
 714 
 715         /*
 716          *      Finally, wait for transmitter to become empty
 717          *      and restore the IER
 718          */
 719         wait_for_xmitr(up);
 720         serial_out(up, UART_IER, ier);
 721 }
 722 
 723 #endif /* CONFIG_CONSOLE_POLL */
 724 
 725 static int __init
 726 serial_pxa_console_setup(struct console *co, char *options)
 727 {
 728         struct uart_pxa_port *up;
 729         int baud = 9600;
 730         int bits = 8;
 731         int parity = 'n';
 732         int flow = 'n';
 733 
 734         if (co->index == -1 || co->index >= serial_pxa_reg.nr)
 735                 co->index = 0;
 736         up = serial_pxa_ports[co->index];
 737         if (!up)
 738                 return -ENODEV;
 739 
 740         if (options)
 741                 uart_parse_options(options, &baud, &parity, &bits, &flow);
 742 
 743         return uart_set_options(&up->port, co, baud, parity, bits, flow);
 744 }
 745 
 746 static struct console serial_pxa_console = {
 747         .name           = "ttyS",
 748         .write          = serial_pxa_console_write,
 749         .device         = uart_console_device,
 750         .setup          = serial_pxa_console_setup,
 751         .flags          = CON_PRINTBUFFER,
 752         .index          = -1,
 753         .data           = &serial_pxa_reg,
 754 };
 755 
 756 #define PXA_CONSOLE     &serial_pxa_console
 757 #else
 758 #define PXA_CONSOLE     NULL
 759 #endif
 760 
 761 static const struct uart_ops serial_pxa_pops = {
 762         .tx_empty       = serial_pxa_tx_empty,
 763         .set_mctrl      = serial_pxa_set_mctrl,
 764         .get_mctrl      = serial_pxa_get_mctrl,
 765         .stop_tx        = serial_pxa_stop_tx,
 766         .start_tx       = serial_pxa_start_tx,
 767         .stop_rx        = serial_pxa_stop_rx,
 768         .enable_ms      = serial_pxa_enable_ms,
 769         .break_ctl      = serial_pxa_break_ctl,
 770         .startup        = serial_pxa_startup,
 771         .shutdown       = serial_pxa_shutdown,
 772         .set_termios    = serial_pxa_set_termios,
 773         .pm             = serial_pxa_pm,
 774         .type           = serial_pxa_type,
 775         .release_port   = serial_pxa_release_port,
 776         .request_port   = serial_pxa_request_port,
 777         .config_port    = serial_pxa_config_port,
 778         .verify_port    = serial_pxa_verify_port,
 779 #if defined(CONFIG_CONSOLE_POLL) && defined(CONFIG_SERIAL_PXA_CONSOLE)
 780         .poll_get_char = serial_pxa_get_poll_char,
 781         .poll_put_char = serial_pxa_put_poll_char,
 782 #endif
 783 };
 784 
 785 static struct uart_driver serial_pxa_reg = {
 786         .owner          = THIS_MODULE,
 787         .driver_name    = "PXA serial",
 788         .dev_name       = "ttyS",
 789         .major          = TTY_MAJOR,
 790         .minor          = 64,
 791         .nr             = 4,
 792         .cons           = PXA_CONSOLE,
 793 };
 794 
 795 #ifdef CONFIG_PM
 796 static int serial_pxa_suspend(struct device *dev)
 797 {
 798         struct uart_pxa_port *sport = dev_get_drvdata(dev);
 799 
 800         if (sport)
 801                 uart_suspend_port(&serial_pxa_reg, &sport->port);
 802 
 803         return 0;
 804 }
 805 
 806 static int serial_pxa_resume(struct device *dev)
 807 {
 808         struct uart_pxa_port *sport = dev_get_drvdata(dev);
 809 
 810         if (sport)
 811                 uart_resume_port(&serial_pxa_reg, &sport->port);
 812 
 813         return 0;
 814 }
 815 
 816 static const struct dev_pm_ops serial_pxa_pm_ops = {
 817         .suspend        = serial_pxa_suspend,
 818         .resume         = serial_pxa_resume,
 819 };
 820 #endif
 821 
 822 static const struct of_device_id serial_pxa_dt_ids[] = {
 823         { .compatible = "mrvl,pxa-uart", },
 824         { .compatible = "mrvl,mmp-uart", },
 825         {}
 826 };
 827 
 828 static int serial_pxa_probe_dt(struct platform_device *pdev,
 829                                struct uart_pxa_port *sport)
 830 {
 831         struct device_node *np = pdev->dev.of_node;
 832         int ret;
 833 
 834         if (!np)
 835                 return 1;
 836 
 837         ret = of_alias_get_id(np, "serial");
 838         if (ret < 0) {
 839                 dev_err(&pdev->dev, "failed to get alias id, errno %d\n", ret);
 840                 return ret;
 841         }
 842         sport->port.line = ret;
 843         return 0;
 844 }
 845 
 846 static int serial_pxa_probe(struct platform_device *dev)
 847 {
 848         struct uart_pxa_port *sport;
 849         struct resource *mmres, *irqres;
 850         int ret;
 851 
 852         mmres = platform_get_resource(dev, IORESOURCE_MEM, 0);
 853         irqres = platform_get_resource(dev, IORESOURCE_IRQ, 0);
 854         if (!mmres || !irqres)
 855                 return -ENODEV;
 856 
 857         sport = kzalloc(sizeof(struct uart_pxa_port), GFP_KERNEL);
 858         if (!sport)
 859                 return -ENOMEM;
 860 
 861         sport->clk = clk_get(&dev->dev, NULL);
 862         if (IS_ERR(sport->clk)) {
 863                 ret = PTR_ERR(sport->clk);
 864                 goto err_free;
 865         }
 866 
 867         ret = clk_prepare(sport->clk);
 868         if (ret) {
 869                 clk_put(sport->clk);
 870                 goto err_free;
 871         }
 872 
 873         sport->port.type = PORT_PXA;
 874         sport->port.iotype = UPIO_MEM;
 875         sport->port.mapbase = mmres->start;
 876         sport->port.irq = irqres->start;
 877         sport->port.fifosize = 64;
 878         sport->port.ops = &serial_pxa_pops;
 879         sport->port.dev = &dev->dev;
 880         sport->port.flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF;
 881         sport->port.uartclk = clk_get_rate(sport->clk);
 882 
 883         ret = serial_pxa_probe_dt(dev, sport);
 884         if (ret > 0)
 885                 sport->port.line = dev->id;
 886         else if (ret < 0)
 887                 goto err_clk;
 888         if (sport->port.line >= ARRAY_SIZE(serial_pxa_ports)) {
 889                 dev_err(&dev->dev, "serial%d out of range\n", sport->port.line);
 890                 ret = -EINVAL;
 891                 goto err_clk;
 892         }
 893         snprintf(sport->name, PXA_NAME_LEN - 1, "UART%d", sport->port.line + 1);
 894 
 895         sport->port.membase = ioremap(mmres->start, resource_size(mmres));
 896         if (!sport->port.membase) {
 897                 ret = -ENOMEM;
 898                 goto err_clk;
 899         }
 900 
 901         serial_pxa_ports[sport->port.line] = sport;
 902 
 903         uart_add_one_port(&serial_pxa_reg, &sport->port);
 904         platform_set_drvdata(dev, sport);
 905 
 906         return 0;
 907 
 908  err_clk:
 909         clk_unprepare(sport->clk);
 910         clk_put(sport->clk);
 911  err_free:
 912         kfree(sport);
 913         return ret;
 914 }
 915 
 916 static struct platform_driver serial_pxa_driver = {
 917         .probe          = serial_pxa_probe,
 918 
 919         .driver         = {
 920                 .name   = "pxa2xx-uart",
 921 #ifdef CONFIG_PM
 922                 .pm     = &serial_pxa_pm_ops,
 923 #endif
 924                 .suppress_bind_attrs = true,
 925                 .of_match_table = serial_pxa_dt_ids,
 926         },
 927 };
 928 
 929 
 930 /* 8250 driver for PXA serial ports should be used */
 931 static int __init serial_pxa_init(void)
 932 {
 933         int ret;
 934 
 935         ret = uart_register_driver(&serial_pxa_reg);
 936         if (ret != 0)
 937                 return ret;
 938 
 939         ret = platform_driver_register(&serial_pxa_driver);
 940         if (ret != 0)
 941                 uart_unregister_driver(&serial_pxa_reg);
 942 
 943         return ret;
 944 }
 945 device_initcall(serial_pxa_init);

/* [<][>][^][v][top][bottom][index][help] */