root/drivers/tty/serial/sprd_serial.c

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

DEFINITIONS

This source file includes following definitions.
  1. serial_in
  2. serial_out
  3. sprd_tx_empty
  4. sprd_get_mctrl
  5. sprd_set_mctrl
  6. sprd_stop_rx
  7. sprd_uart_dma_enable
  8. sprd_stop_tx_dma
  9. sprd_tx_buf_remap
  10. sprd_complete_tx_dma
  11. sprd_uart_dma_submit
  12. sprd_tx_dma_config
  13. sprd_start_tx_dma
  14. sprd_rx_full_thld
  15. sprd_rx_alloc_buf
  16. sprd_rx_free_buf
  17. sprd_rx_dma_config
  18. sprd_uart_dma_rx
  19. sprd_uart_dma_irq
  20. sprd_complete_rx_dma
  21. sprd_start_dma_rx
  22. sprd_release_dma
  23. sprd_request_dma
  24. sprd_stop_tx
  25. sprd_start_tx
  26. sprd_break_ctl
  27. handle_lsr_errors
  28. sprd_rx
  29. sprd_tx
  30. sprd_handle_irq
  31. sprd_uart_dma_startup
  32. sprd_startup
  33. sprd_shutdown
  34. sprd_set_termios
  35. sprd_type
  36. sprd_release_port
  37. sprd_request_port
  38. sprd_config_port
  39. sprd_verify_port
  40. sprd_pm
  41. wait_for_xmitr
  42. sprd_console_putchar
  43. sprd_console_write
  44. sprd_console_setup
  45. sprd_serial_console_init
  46. sprd_putc
  47. sprd_early_write
  48. sprd_early_console_setup
  49. sprd_probe_dt_alias
  50. sprd_remove
  51. sprd_uart_is_console
  52. sprd_clk_init
  53. sprd_probe
  54. sprd_suspend
  55. sprd_resume

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * Copyright (C) 2012-2015 Spreadtrum Communications Inc.
   4  */
   5 
   6 #if defined(CONFIG_SERIAL_SPRD_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
   7 #define SUPPORT_SYSRQ
   8 #endif
   9 
  10 #include <linux/clk.h>
  11 #include <linux/console.h>
  12 #include <linux/delay.h>
  13 #include <linux/dmaengine.h>
  14 #include <linux/dma-mapping.h>
  15 #include <linux/dma/sprd-dma.h>
  16 #include <linux/io.h>
  17 #include <linux/ioport.h>
  18 #include <linux/kernel.h>
  19 #include <linux/module.h>
  20 #include <linux/of.h>
  21 #include <linux/platform_device.h>
  22 #include <linux/serial_core.h>
  23 #include <linux/serial.h>
  24 #include <linux/slab.h>
  25 #include <linux/tty.h>
  26 #include <linux/tty_flip.h>
  27 
  28 /* device name */
  29 #define UART_NR_MAX             8
  30 #define SPRD_TTY_NAME           "ttyS"
  31 #define SPRD_FIFO_SIZE          128
  32 #define SPRD_DEF_RATE           26000000
  33 #define SPRD_BAUD_IO_LIMIT      3000000
  34 #define SPRD_TIMEOUT            256000
  35 
  36 /* the offset of serial registers and BITs for them */
  37 /* data registers */
  38 #define SPRD_TXD                0x0000
  39 #define SPRD_RXD                0x0004
  40 
  41 /* line status register and its BITs  */
  42 #define SPRD_LSR                0x0008
  43 #define SPRD_LSR_OE             BIT(4)
  44 #define SPRD_LSR_FE             BIT(3)
  45 #define SPRD_LSR_PE             BIT(2)
  46 #define SPRD_LSR_BI             BIT(7)
  47 #define SPRD_LSR_TX_OVER        BIT(15)
  48 
  49 /* data number in TX and RX fifo */
  50 #define SPRD_STS1               0x000C
  51 #define SPRD_RX_FIFO_CNT_MASK   GENMASK(7, 0)
  52 #define SPRD_TX_FIFO_CNT_MASK   GENMASK(15, 8)
  53 
  54 /* interrupt enable register and its BITs */
  55 #define SPRD_IEN                0x0010
  56 #define SPRD_IEN_RX_FULL        BIT(0)
  57 #define SPRD_IEN_TX_EMPTY       BIT(1)
  58 #define SPRD_IEN_BREAK_DETECT   BIT(7)
  59 #define SPRD_IEN_TIMEOUT        BIT(13)
  60 
  61 /* interrupt clear register */
  62 #define SPRD_ICLR               0x0014
  63 #define SPRD_ICLR_TIMEOUT       BIT(13)
  64 
  65 /* line control register */
  66 #define SPRD_LCR                0x0018
  67 #define SPRD_LCR_STOP_1BIT      0x10
  68 #define SPRD_LCR_STOP_2BIT      0x30
  69 #define SPRD_LCR_DATA_LEN       (BIT(2) | BIT(3))
  70 #define SPRD_LCR_DATA_LEN5      0x0
  71 #define SPRD_LCR_DATA_LEN6      0x4
  72 #define SPRD_LCR_DATA_LEN7      0x8
  73 #define SPRD_LCR_DATA_LEN8      0xc
  74 #define SPRD_LCR_PARITY         (BIT(0) | BIT(1))
  75 #define SPRD_LCR_PARITY_EN      0x2
  76 #define SPRD_LCR_EVEN_PAR       0x0
  77 #define SPRD_LCR_ODD_PAR        0x1
  78 
  79 /* control register 1 */
  80 #define SPRD_CTL1               0x001C
  81 #define SPRD_DMA_EN             BIT(15)
  82 #define SPRD_LOOPBACK_EN        BIT(14)
  83 #define RX_HW_FLOW_CTL_THLD     BIT(6)
  84 #define RX_HW_FLOW_CTL_EN       BIT(7)
  85 #define TX_HW_FLOW_CTL_EN       BIT(8)
  86 #define RX_TOUT_THLD_DEF        0x3E00
  87 #define RX_HFC_THLD_DEF         0x40
  88 
  89 /* fifo threshold register */
  90 #define SPRD_CTL2               0x0020
  91 #define THLD_TX_EMPTY           0x40
  92 #define THLD_TX_EMPTY_SHIFT     8
  93 #define THLD_RX_FULL            0x40
  94 #define THLD_RX_FULL_MASK       GENMASK(6, 0)
  95 
  96 /* config baud rate register */
  97 #define SPRD_CLKD0              0x0024
  98 #define SPRD_CLKD0_MASK         GENMASK(15, 0)
  99 #define SPRD_CLKD1              0x0028
 100 #define SPRD_CLKD1_MASK         GENMASK(20, 16)
 101 #define SPRD_CLKD1_SHIFT        16
 102 
 103 /* interrupt mask status register */
 104 #define SPRD_IMSR               0x002C
 105 #define SPRD_IMSR_RX_FIFO_FULL  BIT(0)
 106 #define SPRD_IMSR_TX_FIFO_EMPTY BIT(1)
 107 #define SPRD_IMSR_BREAK_DETECT  BIT(7)
 108 #define SPRD_IMSR_TIMEOUT       BIT(13)
 109 #define SPRD_DEFAULT_SOURCE_CLK 26000000
 110 
 111 #define SPRD_RX_DMA_STEP        1
 112 #define SPRD_RX_FIFO_FULL       1
 113 #define SPRD_TX_FIFO_FULL       0x20
 114 #define SPRD_UART_RX_SIZE       (UART_XMIT_SIZE / 4)
 115 
 116 struct sprd_uart_dma {
 117         struct dma_chan *chn;
 118         unsigned char *virt;
 119         dma_addr_t phys_addr;
 120         dma_cookie_t cookie;
 121         u32 trans_len;
 122         bool enable;
 123 };
 124 
 125 struct sprd_uart_port {
 126         struct uart_port port;
 127         char name[16];
 128         struct clk *clk;
 129         struct sprd_uart_dma tx_dma;
 130         struct sprd_uart_dma rx_dma;
 131         dma_addr_t pos;
 132         unsigned char *rx_buf_tail;
 133 };
 134 
 135 static struct sprd_uart_port *sprd_port[UART_NR_MAX];
 136 static int sprd_ports_num;
 137 
 138 static int sprd_start_dma_rx(struct uart_port *port);
 139 static int sprd_tx_dma_config(struct uart_port *port);
 140 
 141 static inline unsigned int serial_in(struct uart_port *port,
 142                                      unsigned int offset)
 143 {
 144         return readl_relaxed(port->membase + offset);
 145 }
 146 
 147 static inline void serial_out(struct uart_port *port, unsigned int offset,
 148                               int value)
 149 {
 150         writel_relaxed(value, port->membase + offset);
 151 }
 152 
 153 static unsigned int sprd_tx_empty(struct uart_port *port)
 154 {
 155         if (serial_in(port, SPRD_STS1) & SPRD_TX_FIFO_CNT_MASK)
 156                 return 0;
 157         else
 158                 return TIOCSER_TEMT;
 159 }
 160 
 161 static unsigned int sprd_get_mctrl(struct uart_port *port)
 162 {
 163         return TIOCM_DSR | TIOCM_CTS;
 164 }
 165 
 166 static void sprd_set_mctrl(struct uart_port *port, unsigned int mctrl)
 167 {
 168         u32 val = serial_in(port, SPRD_CTL1);
 169 
 170         if (mctrl & TIOCM_LOOP)
 171                 val |= SPRD_LOOPBACK_EN;
 172         else
 173                 val &= ~SPRD_LOOPBACK_EN;
 174 
 175         serial_out(port, SPRD_CTL1, val);
 176 }
 177 
 178 static void sprd_stop_rx(struct uart_port *port)
 179 {
 180         struct sprd_uart_port *sp =
 181                 container_of(port, struct sprd_uart_port, port);
 182         unsigned int ien, iclr;
 183 
 184         if (sp->rx_dma.enable)
 185                 dmaengine_terminate_all(sp->rx_dma.chn);
 186 
 187         iclr = serial_in(port, SPRD_ICLR);
 188         ien = serial_in(port, SPRD_IEN);
 189 
 190         ien &= ~(SPRD_IEN_RX_FULL | SPRD_IEN_BREAK_DETECT);
 191         iclr |= SPRD_IEN_RX_FULL | SPRD_IEN_BREAK_DETECT;
 192 
 193         serial_out(port, SPRD_IEN, ien);
 194         serial_out(port, SPRD_ICLR, iclr);
 195 }
 196 
 197 static void sprd_uart_dma_enable(struct uart_port *port, bool enable)
 198 {
 199         u32 val = serial_in(port, SPRD_CTL1);
 200 
 201         if (enable)
 202                 val |= SPRD_DMA_EN;
 203         else
 204                 val &= ~SPRD_DMA_EN;
 205 
 206         serial_out(port, SPRD_CTL1, val);
 207 }
 208 
 209 static void sprd_stop_tx_dma(struct uart_port *port)
 210 {
 211         struct sprd_uart_port *sp =
 212                 container_of(port, struct sprd_uart_port, port);
 213         struct circ_buf *xmit = &port->state->xmit;
 214         struct dma_tx_state state;
 215         u32 trans_len;
 216 
 217         dmaengine_pause(sp->tx_dma.chn);
 218 
 219         dmaengine_tx_status(sp->tx_dma.chn, sp->tx_dma.cookie, &state);
 220         if (state.residue) {
 221                 trans_len = state.residue - sp->tx_dma.phys_addr;
 222                 xmit->tail = (xmit->tail + trans_len) & (UART_XMIT_SIZE - 1);
 223                 port->icount.tx += trans_len;
 224                 dma_unmap_single(port->dev, sp->tx_dma.phys_addr,
 225                                  sp->tx_dma.trans_len, DMA_TO_DEVICE);
 226         }
 227 
 228         dmaengine_terminate_all(sp->tx_dma.chn);
 229         sp->tx_dma.trans_len = 0;
 230 }
 231 
 232 static int sprd_tx_buf_remap(struct uart_port *port)
 233 {
 234         struct sprd_uart_port *sp =
 235                 container_of(port, struct sprd_uart_port, port);
 236         struct circ_buf *xmit = &port->state->xmit;
 237 
 238         sp->tx_dma.trans_len =
 239                 CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
 240 
 241         sp->tx_dma.phys_addr = dma_map_single(port->dev,
 242                                               (void *)&(xmit->buf[xmit->tail]),
 243                                               sp->tx_dma.trans_len,
 244                                               DMA_TO_DEVICE);
 245         return dma_mapping_error(port->dev, sp->tx_dma.phys_addr);
 246 }
 247 
 248 static void sprd_complete_tx_dma(void *data)
 249 {
 250         struct uart_port *port = (struct uart_port *)data;
 251         struct sprd_uart_port *sp =
 252                 container_of(port, struct sprd_uart_port, port);
 253         struct circ_buf *xmit = &port->state->xmit;
 254         unsigned long flags;
 255 
 256         spin_lock_irqsave(&port->lock, flags);
 257         dma_unmap_single(port->dev, sp->tx_dma.phys_addr,
 258                          sp->tx_dma.trans_len, DMA_TO_DEVICE);
 259 
 260         xmit->tail = (xmit->tail + sp->tx_dma.trans_len) & (UART_XMIT_SIZE - 1);
 261         port->icount.tx += sp->tx_dma.trans_len;
 262 
 263         if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
 264                 uart_write_wakeup(port);
 265 
 266         if (uart_circ_empty(xmit) || sprd_tx_buf_remap(port) ||
 267             sprd_tx_dma_config(port))
 268                 sp->tx_dma.trans_len = 0;
 269 
 270         spin_unlock_irqrestore(&port->lock, flags);
 271 }
 272 
 273 static int sprd_uart_dma_submit(struct uart_port *port,
 274                                 struct sprd_uart_dma *ud, u32 trans_len,
 275                                 enum dma_transfer_direction direction,
 276                                 dma_async_tx_callback callback)
 277 {
 278         struct dma_async_tx_descriptor *dma_des;
 279         unsigned long flags;
 280 
 281         flags = SPRD_DMA_FLAGS(SPRD_DMA_CHN_MODE_NONE,
 282                                SPRD_DMA_NO_TRG,
 283                                SPRD_DMA_FRAG_REQ,
 284                                SPRD_DMA_TRANS_INT);
 285 
 286         dma_des = dmaengine_prep_slave_single(ud->chn, ud->phys_addr, trans_len,
 287                                               direction, flags);
 288         if (!dma_des)
 289                 return -ENODEV;
 290 
 291         dma_des->callback = callback;
 292         dma_des->callback_param = port;
 293 
 294         ud->cookie = dmaengine_submit(dma_des);
 295         if (dma_submit_error(ud->cookie))
 296                 return dma_submit_error(ud->cookie);
 297 
 298         dma_async_issue_pending(ud->chn);
 299 
 300         return 0;
 301 }
 302 
 303 static int sprd_tx_dma_config(struct uart_port *port)
 304 {
 305         struct sprd_uart_port *sp =
 306                 container_of(port, struct sprd_uart_port, port);
 307         u32 burst = sp->tx_dma.trans_len > SPRD_TX_FIFO_FULL ?
 308                 SPRD_TX_FIFO_FULL : sp->tx_dma.trans_len;
 309         int ret;
 310         struct dma_slave_config cfg = {
 311                 .dst_addr = port->mapbase + SPRD_TXD,
 312                 .src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE,
 313                 .dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE,
 314                 .src_maxburst = burst,
 315         };
 316 
 317         ret = dmaengine_slave_config(sp->tx_dma.chn, &cfg);
 318         if (ret < 0)
 319                 return ret;
 320 
 321         return sprd_uart_dma_submit(port, &sp->tx_dma, sp->tx_dma.trans_len,
 322                                     DMA_MEM_TO_DEV, sprd_complete_tx_dma);
 323 }
 324 
 325 static void sprd_start_tx_dma(struct uart_port *port)
 326 {
 327         struct sprd_uart_port *sp =
 328                 container_of(port, struct sprd_uart_port, port);
 329         struct circ_buf *xmit = &port->state->xmit;
 330 
 331         if (port->x_char) {
 332                 serial_out(port, SPRD_TXD, port->x_char);
 333                 port->icount.tx++;
 334                 port->x_char = 0;
 335                 return;
 336         }
 337 
 338         if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
 339                 sprd_stop_tx_dma(port);
 340                 return;
 341         }
 342 
 343         if (sp->tx_dma.trans_len)
 344                 return;
 345 
 346         if (sprd_tx_buf_remap(port) || sprd_tx_dma_config(port))
 347                 sp->tx_dma.trans_len = 0;
 348 }
 349 
 350 static void sprd_rx_full_thld(struct uart_port *port, u32 thld)
 351 {
 352         u32 val = serial_in(port, SPRD_CTL2);
 353 
 354         val &= ~THLD_RX_FULL_MASK;
 355         val |= thld & THLD_RX_FULL_MASK;
 356         serial_out(port, SPRD_CTL2, val);
 357 }
 358 
 359 static int sprd_rx_alloc_buf(struct sprd_uart_port *sp)
 360 {
 361         sp->rx_dma.virt = dma_alloc_coherent(sp->port.dev, SPRD_UART_RX_SIZE,
 362                                              &sp->rx_dma.phys_addr, GFP_KERNEL);
 363         if (!sp->rx_dma.virt)
 364                 return -ENOMEM;
 365 
 366         return 0;
 367 }
 368 
 369 static void sprd_rx_free_buf(struct sprd_uart_port *sp)
 370 {
 371         if (sp->rx_dma.virt)
 372                 dma_free_coherent(sp->port.dev, SPRD_UART_RX_SIZE,
 373                                   sp->rx_dma.virt, sp->rx_dma.phys_addr);
 374 
 375 }
 376 
 377 static int sprd_rx_dma_config(struct uart_port *port, u32 burst)
 378 {
 379         struct sprd_uart_port *sp =
 380                 container_of(port, struct sprd_uart_port, port);
 381         struct dma_slave_config cfg = {
 382                 .src_addr = port->mapbase + SPRD_RXD,
 383                 .src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE,
 384                 .dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE,
 385                 .src_maxburst = burst,
 386         };
 387 
 388         return dmaengine_slave_config(sp->rx_dma.chn, &cfg);
 389 }
 390 
 391 static void sprd_uart_dma_rx(struct uart_port *port)
 392 {
 393         struct sprd_uart_port *sp =
 394                 container_of(port, struct sprd_uart_port, port);
 395         struct tty_port *tty = &port->state->port;
 396 
 397         port->icount.rx += sp->rx_dma.trans_len;
 398         tty_insert_flip_string(tty, sp->rx_buf_tail, sp->rx_dma.trans_len);
 399         tty_flip_buffer_push(tty);
 400 }
 401 
 402 static void sprd_uart_dma_irq(struct uart_port *port)
 403 {
 404         struct sprd_uart_port *sp =
 405                 container_of(port, struct sprd_uart_port, port);
 406         struct dma_tx_state state;
 407         enum dma_status status;
 408 
 409         status = dmaengine_tx_status(sp->rx_dma.chn,
 410                                      sp->rx_dma.cookie, &state);
 411         if (status == DMA_ERROR)
 412                 sprd_stop_rx(port);
 413 
 414         if (!state.residue && sp->pos == sp->rx_dma.phys_addr)
 415                 return;
 416 
 417         if (!state.residue) {
 418                 sp->rx_dma.trans_len = SPRD_UART_RX_SIZE +
 419                         sp->rx_dma.phys_addr - sp->pos;
 420                 sp->pos = sp->rx_dma.phys_addr;
 421         } else {
 422                 sp->rx_dma.trans_len = state.residue - sp->pos;
 423                 sp->pos = state.residue;
 424         }
 425 
 426         sprd_uart_dma_rx(port);
 427         sp->rx_buf_tail += sp->rx_dma.trans_len;
 428 }
 429 
 430 static void sprd_complete_rx_dma(void *data)
 431 {
 432         struct uart_port *port = (struct uart_port *)data;
 433         struct sprd_uart_port *sp =
 434                 container_of(port, struct sprd_uart_port, port);
 435         struct dma_tx_state state;
 436         enum dma_status status;
 437         unsigned long flags;
 438 
 439         spin_lock_irqsave(&port->lock, flags);
 440 
 441         status = dmaengine_tx_status(sp->rx_dma.chn,
 442                                      sp->rx_dma.cookie, &state);
 443         if (status != DMA_COMPLETE) {
 444                 sprd_stop_rx(port);
 445                 spin_unlock_irqrestore(&port->lock, flags);
 446                 return;
 447         }
 448 
 449         if (sp->pos != sp->rx_dma.phys_addr) {
 450                 sp->rx_dma.trans_len =  SPRD_UART_RX_SIZE +
 451                         sp->rx_dma.phys_addr - sp->pos;
 452                 sprd_uart_dma_rx(port);
 453                 sp->rx_buf_tail += sp->rx_dma.trans_len;
 454         }
 455 
 456         if (sprd_start_dma_rx(port))
 457                 sprd_stop_rx(port);
 458 
 459         spin_unlock_irqrestore(&port->lock, flags);
 460 }
 461 
 462 static int sprd_start_dma_rx(struct uart_port *port)
 463 {
 464         struct sprd_uart_port *sp =
 465                 container_of(port, struct sprd_uart_port, port);
 466         int ret;
 467 
 468         if (!sp->rx_dma.enable)
 469                 return 0;
 470 
 471         sp->pos = sp->rx_dma.phys_addr;
 472         sp->rx_buf_tail = sp->rx_dma.virt;
 473         sprd_rx_full_thld(port, SPRD_RX_FIFO_FULL);
 474         ret = sprd_rx_dma_config(port, SPRD_RX_DMA_STEP);
 475         if (ret)
 476                 return ret;
 477 
 478         return sprd_uart_dma_submit(port, &sp->rx_dma, SPRD_UART_RX_SIZE,
 479                                     DMA_DEV_TO_MEM, sprd_complete_rx_dma);
 480 }
 481 
 482 static void sprd_release_dma(struct uart_port *port)
 483 {
 484         struct sprd_uart_port *sp =
 485                 container_of(port, struct sprd_uart_port, port);
 486 
 487         sprd_uart_dma_enable(port, false);
 488 
 489         if (sp->rx_dma.enable)
 490                 dma_release_channel(sp->rx_dma.chn);
 491 
 492         if (sp->tx_dma.enable)
 493                 dma_release_channel(sp->tx_dma.chn);
 494 
 495         sp->tx_dma.enable = false;
 496         sp->rx_dma.enable = false;
 497 }
 498 
 499 static void sprd_request_dma(struct uart_port *port)
 500 {
 501         struct sprd_uart_port *sp =
 502                 container_of(port, struct sprd_uart_port, port);
 503 
 504         sp->tx_dma.enable = true;
 505         sp->rx_dma.enable = true;
 506 
 507         sp->tx_dma.chn = dma_request_chan(port->dev, "tx");
 508         if (IS_ERR(sp->tx_dma.chn)) {
 509                 dev_err(port->dev, "request TX DMA channel failed, ret = %ld\n",
 510                         PTR_ERR(sp->tx_dma.chn));
 511                 sp->tx_dma.enable = false;
 512         }
 513 
 514         sp->rx_dma.chn = dma_request_chan(port->dev, "rx");
 515         if (IS_ERR(sp->rx_dma.chn)) {
 516                 dev_err(port->dev, "request RX DMA channel failed, ret = %ld\n",
 517                         PTR_ERR(sp->rx_dma.chn));
 518                 sp->rx_dma.enable = false;
 519         }
 520 }
 521 
 522 static void sprd_stop_tx(struct uart_port *port)
 523 {
 524         struct sprd_uart_port *sp = container_of(port, struct sprd_uart_port,
 525                                                  port);
 526         unsigned int ien, iclr;
 527 
 528         if (sp->tx_dma.enable) {
 529                 sprd_stop_tx_dma(port);
 530                 return;
 531         }
 532 
 533         iclr = serial_in(port, SPRD_ICLR);
 534         ien = serial_in(port, SPRD_IEN);
 535 
 536         iclr |= SPRD_IEN_TX_EMPTY;
 537         ien &= ~SPRD_IEN_TX_EMPTY;
 538 
 539         serial_out(port, SPRD_IEN, ien);
 540         serial_out(port, SPRD_ICLR, iclr);
 541 }
 542 
 543 static void sprd_start_tx(struct uart_port *port)
 544 {
 545         struct sprd_uart_port *sp = container_of(port, struct sprd_uart_port,
 546                                                  port);
 547         unsigned int ien;
 548 
 549         if (sp->tx_dma.enable) {
 550                 sprd_start_tx_dma(port);
 551                 return;
 552         }
 553 
 554         ien = serial_in(port, SPRD_IEN);
 555         if (!(ien & SPRD_IEN_TX_EMPTY)) {
 556                 ien |= SPRD_IEN_TX_EMPTY;
 557                 serial_out(port, SPRD_IEN, ien);
 558         }
 559 }
 560 
 561 /* The Sprd serial does not support this function. */
 562 static void sprd_break_ctl(struct uart_port *port, int break_state)
 563 {
 564         /* nothing to do */
 565 }
 566 
 567 static int handle_lsr_errors(struct uart_port *port,
 568                              unsigned int *flag,
 569                              unsigned int *lsr)
 570 {
 571         int ret = 0;
 572 
 573         /* statistics */
 574         if (*lsr & SPRD_LSR_BI) {
 575                 *lsr &= ~(SPRD_LSR_FE | SPRD_LSR_PE);
 576                 port->icount.brk++;
 577                 ret = uart_handle_break(port);
 578                 if (ret)
 579                         return ret;
 580         } else if (*lsr & SPRD_LSR_PE)
 581                 port->icount.parity++;
 582         else if (*lsr & SPRD_LSR_FE)
 583                 port->icount.frame++;
 584         if (*lsr & SPRD_LSR_OE)
 585                 port->icount.overrun++;
 586 
 587         /* mask off conditions which should be ignored */
 588         *lsr &= port->read_status_mask;
 589         if (*lsr & SPRD_LSR_BI)
 590                 *flag = TTY_BREAK;
 591         else if (*lsr & SPRD_LSR_PE)
 592                 *flag = TTY_PARITY;
 593         else if (*lsr & SPRD_LSR_FE)
 594                 *flag = TTY_FRAME;
 595 
 596         return ret;
 597 }
 598 
 599 static inline void sprd_rx(struct uart_port *port)
 600 {
 601         struct sprd_uart_port *sp = container_of(port, struct sprd_uart_port,
 602                                                  port);
 603         struct tty_port *tty = &port->state->port;
 604         unsigned int ch, flag, lsr, max_count = SPRD_TIMEOUT;
 605 
 606         if (sp->rx_dma.enable) {
 607                 sprd_uart_dma_irq(port);
 608                 return;
 609         }
 610 
 611         while ((serial_in(port, SPRD_STS1) & SPRD_RX_FIFO_CNT_MASK) &&
 612                max_count--) {
 613                 lsr = serial_in(port, SPRD_LSR);
 614                 ch = serial_in(port, SPRD_RXD);
 615                 flag = TTY_NORMAL;
 616                 port->icount.rx++;
 617 
 618                 if (lsr & (SPRD_LSR_BI | SPRD_LSR_PE |
 619                            SPRD_LSR_FE | SPRD_LSR_OE))
 620                         if (handle_lsr_errors(port, &flag, &lsr))
 621                                 continue;
 622                 if (uart_handle_sysrq_char(port, ch))
 623                         continue;
 624 
 625                 uart_insert_char(port, lsr, SPRD_LSR_OE, ch, flag);
 626         }
 627 
 628         tty_flip_buffer_push(tty);
 629 }
 630 
 631 static inline void sprd_tx(struct uart_port *port)
 632 {
 633         struct circ_buf *xmit = &port->state->xmit;
 634         int count;
 635 
 636         if (port->x_char) {
 637                 serial_out(port, SPRD_TXD, port->x_char);
 638                 port->icount.tx++;
 639                 port->x_char = 0;
 640                 return;
 641         }
 642 
 643         if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
 644                 sprd_stop_tx(port);
 645                 return;
 646         }
 647 
 648         count = THLD_TX_EMPTY;
 649         do {
 650                 serial_out(port, SPRD_TXD, xmit->buf[xmit->tail]);
 651                 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
 652                 port->icount.tx++;
 653                 if (uart_circ_empty(xmit))
 654                         break;
 655         } while (--count > 0);
 656 
 657         if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
 658                 uart_write_wakeup(port);
 659 
 660         if (uart_circ_empty(xmit))
 661                 sprd_stop_tx(port);
 662 }
 663 
 664 /* this handles the interrupt from one port */
 665 static irqreturn_t sprd_handle_irq(int irq, void *dev_id)
 666 {
 667         struct uart_port *port = dev_id;
 668         unsigned int ims;
 669 
 670         spin_lock(&port->lock);
 671 
 672         ims = serial_in(port, SPRD_IMSR);
 673 
 674         if (!ims) {
 675                 spin_unlock(&port->lock);
 676                 return IRQ_NONE;
 677         }
 678 
 679         if (ims & SPRD_IMSR_TIMEOUT)
 680                 serial_out(port, SPRD_ICLR, SPRD_ICLR_TIMEOUT);
 681 
 682         if (ims & SPRD_IMSR_BREAK_DETECT)
 683                 serial_out(port, SPRD_ICLR, SPRD_IMSR_BREAK_DETECT);
 684 
 685         if (ims & (SPRD_IMSR_RX_FIFO_FULL | SPRD_IMSR_BREAK_DETECT |
 686                    SPRD_IMSR_TIMEOUT))
 687                 sprd_rx(port);
 688 
 689         if (ims & SPRD_IMSR_TX_FIFO_EMPTY)
 690                 sprd_tx(port);
 691 
 692         spin_unlock(&port->lock);
 693 
 694         return IRQ_HANDLED;
 695 }
 696 
 697 static void sprd_uart_dma_startup(struct uart_port *port,
 698                                   struct sprd_uart_port *sp)
 699 {
 700         int ret;
 701 
 702         sprd_request_dma(port);
 703         if (!(sp->rx_dma.enable || sp->tx_dma.enable))
 704                 return;
 705 
 706         ret = sprd_start_dma_rx(port);
 707         if (ret) {
 708                 sp->rx_dma.enable = false;
 709                 dma_release_channel(sp->rx_dma.chn);
 710                 dev_warn(port->dev, "fail to start RX dma mode\n");
 711         }
 712 
 713         sprd_uart_dma_enable(port, true);
 714 }
 715 
 716 static int sprd_startup(struct uart_port *port)
 717 {
 718         int ret = 0;
 719         unsigned int ien, fc;
 720         unsigned int timeout;
 721         struct sprd_uart_port *sp;
 722         unsigned long flags;
 723 
 724         serial_out(port, SPRD_CTL2,
 725                    THLD_TX_EMPTY << THLD_TX_EMPTY_SHIFT | THLD_RX_FULL);
 726 
 727         /* clear rx fifo */
 728         timeout = SPRD_TIMEOUT;
 729         while (timeout-- && serial_in(port, SPRD_STS1) & SPRD_RX_FIFO_CNT_MASK)
 730                 serial_in(port, SPRD_RXD);
 731 
 732         /* clear tx fifo */
 733         timeout = SPRD_TIMEOUT;
 734         while (timeout-- && serial_in(port, SPRD_STS1) & SPRD_TX_FIFO_CNT_MASK)
 735                 cpu_relax();
 736 
 737         /* clear interrupt */
 738         serial_out(port, SPRD_IEN, 0);
 739         serial_out(port, SPRD_ICLR, ~0);
 740 
 741         /* allocate irq */
 742         sp = container_of(port, struct sprd_uart_port, port);
 743         snprintf(sp->name, sizeof(sp->name), "sprd_serial%d", port->line);
 744 
 745         sprd_uart_dma_startup(port, sp);
 746 
 747         ret = devm_request_irq(port->dev, port->irq, sprd_handle_irq,
 748                                IRQF_SHARED, sp->name, port);
 749         if (ret) {
 750                 dev_err(port->dev, "fail to request serial irq %d, ret=%d\n",
 751                         port->irq, ret);
 752                 return ret;
 753         }
 754         fc = serial_in(port, SPRD_CTL1);
 755         fc |= RX_TOUT_THLD_DEF | RX_HFC_THLD_DEF;
 756         serial_out(port, SPRD_CTL1, fc);
 757 
 758         /* enable interrupt */
 759         spin_lock_irqsave(&port->lock, flags);
 760         ien = serial_in(port, SPRD_IEN);
 761         ien |= SPRD_IEN_BREAK_DETECT | SPRD_IEN_TIMEOUT;
 762         if (!sp->rx_dma.enable)
 763                 ien |= SPRD_IEN_RX_FULL;
 764         serial_out(port, SPRD_IEN, ien);
 765         spin_unlock_irqrestore(&port->lock, flags);
 766 
 767         return 0;
 768 }
 769 
 770 static void sprd_shutdown(struct uart_port *port)
 771 {
 772         sprd_release_dma(port);
 773         serial_out(port, SPRD_IEN, 0);
 774         serial_out(port, SPRD_ICLR, ~0);
 775         devm_free_irq(port->dev, port->irq, port);
 776 }
 777 
 778 static void sprd_set_termios(struct uart_port *port,
 779                              struct ktermios *termios,
 780                              struct ktermios *old)
 781 {
 782         unsigned int baud, quot;
 783         unsigned int lcr = 0, fc;
 784         unsigned long flags;
 785 
 786         /* ask the core to calculate the divisor for us */
 787         baud = uart_get_baud_rate(port, termios, old, 0, SPRD_BAUD_IO_LIMIT);
 788 
 789         quot = port->uartclk / baud;
 790 
 791         /* set data length */
 792         switch (termios->c_cflag & CSIZE) {
 793         case CS5:
 794                 lcr |= SPRD_LCR_DATA_LEN5;
 795                 break;
 796         case CS6:
 797                 lcr |= SPRD_LCR_DATA_LEN6;
 798                 break;
 799         case CS7:
 800                 lcr |= SPRD_LCR_DATA_LEN7;
 801                 break;
 802         case CS8:
 803         default:
 804                 lcr |= SPRD_LCR_DATA_LEN8;
 805                 break;
 806         }
 807 
 808         /* calculate stop bits */
 809         lcr &= ~(SPRD_LCR_STOP_1BIT | SPRD_LCR_STOP_2BIT);
 810         if (termios->c_cflag & CSTOPB)
 811                 lcr |= SPRD_LCR_STOP_2BIT;
 812         else
 813                 lcr |= SPRD_LCR_STOP_1BIT;
 814 
 815         /* calculate parity */
 816         lcr &= ~SPRD_LCR_PARITY;
 817         termios->c_cflag &= ~CMSPAR;    /* no support mark/space */
 818         if (termios->c_cflag & PARENB) {
 819                 lcr |= SPRD_LCR_PARITY_EN;
 820                 if (termios->c_cflag & PARODD)
 821                         lcr |= SPRD_LCR_ODD_PAR;
 822                 else
 823                         lcr |= SPRD_LCR_EVEN_PAR;
 824         }
 825 
 826         spin_lock_irqsave(&port->lock, flags);
 827 
 828         /* update the per-port timeout */
 829         uart_update_timeout(port, termios->c_cflag, baud);
 830 
 831         port->read_status_mask = SPRD_LSR_OE;
 832         if (termios->c_iflag & INPCK)
 833                 port->read_status_mask |= SPRD_LSR_FE | SPRD_LSR_PE;
 834         if (termios->c_iflag & (IGNBRK | BRKINT | PARMRK))
 835                 port->read_status_mask |= SPRD_LSR_BI;
 836 
 837         /* characters to ignore */
 838         port->ignore_status_mask = 0;
 839         if (termios->c_iflag & IGNPAR)
 840                 port->ignore_status_mask |= SPRD_LSR_PE | SPRD_LSR_FE;
 841         if (termios->c_iflag & IGNBRK) {
 842                 port->ignore_status_mask |= SPRD_LSR_BI;
 843                 /*
 844                  * If we're ignoring parity and break indicators,
 845                  * ignore overruns too (for real raw support).
 846                  */
 847                 if (termios->c_iflag & IGNPAR)
 848                         port->ignore_status_mask |= SPRD_LSR_OE;
 849         }
 850 
 851         /* flow control */
 852         fc = serial_in(port, SPRD_CTL1);
 853         fc &= ~(RX_HW_FLOW_CTL_THLD | RX_HW_FLOW_CTL_EN | TX_HW_FLOW_CTL_EN);
 854         if (termios->c_cflag & CRTSCTS) {
 855                 fc |= RX_HW_FLOW_CTL_THLD;
 856                 fc |= RX_HW_FLOW_CTL_EN;
 857                 fc |= TX_HW_FLOW_CTL_EN;
 858         }
 859 
 860         /* clock divider bit0~bit15 */
 861         serial_out(port, SPRD_CLKD0, quot & SPRD_CLKD0_MASK);
 862 
 863         /* clock divider bit16~bit20 */
 864         serial_out(port, SPRD_CLKD1,
 865                    (quot & SPRD_CLKD1_MASK) >> SPRD_CLKD1_SHIFT);
 866         serial_out(port, SPRD_LCR, lcr);
 867         fc |= RX_TOUT_THLD_DEF | RX_HFC_THLD_DEF;
 868         serial_out(port, SPRD_CTL1, fc);
 869 
 870         spin_unlock_irqrestore(&port->lock, flags);
 871 
 872         /* Don't rewrite B0 */
 873         if (tty_termios_baud_rate(termios))
 874                 tty_termios_encode_baud_rate(termios, baud, baud);
 875 }
 876 
 877 static const char *sprd_type(struct uart_port *port)
 878 {
 879         return "SPX";
 880 }
 881 
 882 static void sprd_release_port(struct uart_port *port)
 883 {
 884         /* nothing to do */
 885 }
 886 
 887 static int sprd_request_port(struct uart_port *port)
 888 {
 889         return 0;
 890 }
 891 
 892 static void sprd_config_port(struct uart_port *port, int flags)
 893 {
 894         if (flags & UART_CONFIG_TYPE)
 895                 port->type = PORT_SPRD;
 896 }
 897 
 898 static int sprd_verify_port(struct uart_port *port, struct serial_struct *ser)
 899 {
 900         if (ser->type != PORT_SPRD)
 901                 return -EINVAL;
 902         if (port->irq != ser->irq)
 903                 return -EINVAL;
 904         if (port->iotype != ser->io_type)
 905                 return -EINVAL;
 906         return 0;
 907 }
 908 
 909 static void sprd_pm(struct uart_port *port, unsigned int state,
 910                 unsigned int oldstate)
 911 {
 912         struct sprd_uart_port *sup =
 913                 container_of(port, struct sprd_uart_port, port);
 914 
 915         switch (state) {
 916         case UART_PM_STATE_ON:
 917                 clk_prepare_enable(sup->clk);
 918                 break;
 919         case UART_PM_STATE_OFF:
 920                 clk_disable_unprepare(sup->clk);
 921                 break;
 922         }
 923 }
 924 
 925 static const struct uart_ops serial_sprd_ops = {
 926         .tx_empty = sprd_tx_empty,
 927         .get_mctrl = sprd_get_mctrl,
 928         .set_mctrl = sprd_set_mctrl,
 929         .stop_tx = sprd_stop_tx,
 930         .start_tx = sprd_start_tx,
 931         .stop_rx = sprd_stop_rx,
 932         .break_ctl = sprd_break_ctl,
 933         .startup = sprd_startup,
 934         .shutdown = sprd_shutdown,
 935         .set_termios = sprd_set_termios,
 936         .type = sprd_type,
 937         .release_port = sprd_release_port,
 938         .request_port = sprd_request_port,
 939         .config_port = sprd_config_port,
 940         .verify_port = sprd_verify_port,
 941         .pm = sprd_pm,
 942 };
 943 
 944 #ifdef CONFIG_SERIAL_SPRD_CONSOLE
 945 static void wait_for_xmitr(struct uart_port *port)
 946 {
 947         unsigned int status, tmout = 10000;
 948 
 949         /* wait up to 10ms for the character(s) to be sent */
 950         do {
 951                 status = serial_in(port, SPRD_STS1);
 952                 if (--tmout == 0)
 953                         break;
 954                 udelay(1);
 955         } while (status & SPRD_TX_FIFO_CNT_MASK);
 956 }
 957 
 958 static void sprd_console_putchar(struct uart_port *port, int ch)
 959 {
 960         wait_for_xmitr(port);
 961         serial_out(port, SPRD_TXD, ch);
 962 }
 963 
 964 static void sprd_console_write(struct console *co, const char *s,
 965                                unsigned int count)
 966 {
 967         struct uart_port *port = &sprd_port[co->index]->port;
 968         int locked = 1;
 969         unsigned long flags;
 970 
 971         if (port->sysrq)
 972                 locked = 0;
 973         else if (oops_in_progress)
 974                 locked = spin_trylock_irqsave(&port->lock, flags);
 975         else
 976                 spin_lock_irqsave(&port->lock, flags);
 977 
 978         uart_console_write(port, s, count, sprd_console_putchar);
 979 
 980         /* wait for transmitter to become empty */
 981         wait_for_xmitr(port);
 982 
 983         if (locked)
 984                 spin_unlock_irqrestore(&port->lock, flags);
 985 }
 986 
 987 static int __init sprd_console_setup(struct console *co, char *options)
 988 {
 989         struct sprd_uart_port *sprd_uart_port;
 990         int baud = 115200;
 991         int bits = 8;
 992         int parity = 'n';
 993         int flow = 'n';
 994 
 995         if (co->index >= UART_NR_MAX || co->index < 0)
 996                 co->index = 0;
 997 
 998         sprd_uart_port = sprd_port[co->index];
 999         if (!sprd_uart_port || !sprd_uart_port->port.membase) {
1000                 pr_info("serial port %d not yet initialized\n", co->index);
1001                 return -ENODEV;
1002         }
1003 
1004         if (options)
1005                 uart_parse_options(options, &baud, &parity, &bits, &flow);
1006 
1007         return uart_set_options(&sprd_uart_port->port, co, baud,
1008                                 parity, bits, flow);
1009 }
1010 
1011 static struct uart_driver sprd_uart_driver;
1012 static struct console sprd_console = {
1013         .name = SPRD_TTY_NAME,
1014         .write = sprd_console_write,
1015         .device = uart_console_device,
1016         .setup = sprd_console_setup,
1017         .flags = CON_PRINTBUFFER,
1018         .index = -1,
1019         .data = &sprd_uart_driver,
1020 };
1021 
1022 static int __init sprd_serial_console_init(void)
1023 {
1024         register_console(&sprd_console);
1025         return 0;
1026 }
1027 console_initcall(sprd_serial_console_init);
1028 
1029 #define SPRD_CONSOLE    (&sprd_console)
1030 
1031 /* Support for earlycon */
1032 static void sprd_putc(struct uart_port *port, int c)
1033 {
1034         unsigned int timeout = SPRD_TIMEOUT;
1035 
1036         while (timeout-- &&
1037                !(readl(port->membase + SPRD_LSR) & SPRD_LSR_TX_OVER))
1038                 cpu_relax();
1039 
1040         writeb(c, port->membase + SPRD_TXD);
1041 }
1042 
1043 static void sprd_early_write(struct console *con, const char *s, unsigned int n)
1044 {
1045         struct earlycon_device *dev = con->data;
1046 
1047         uart_console_write(&dev->port, s, n, sprd_putc);
1048 }
1049 
1050 static int __init sprd_early_console_setup(struct earlycon_device *device,
1051                                            const char *opt)
1052 {
1053         if (!device->port.membase)
1054                 return -ENODEV;
1055 
1056         device->con->write = sprd_early_write;
1057         return 0;
1058 }
1059 OF_EARLYCON_DECLARE(sprd_serial, "sprd,sc9836-uart",
1060                     sprd_early_console_setup);
1061 
1062 #else /* !CONFIG_SERIAL_SPRD_CONSOLE */
1063 #define SPRD_CONSOLE            NULL
1064 #endif
1065 
1066 static struct uart_driver sprd_uart_driver = {
1067         .owner = THIS_MODULE,
1068         .driver_name = "sprd_serial",
1069         .dev_name = SPRD_TTY_NAME,
1070         .major = 0,
1071         .minor = 0,
1072         .nr = UART_NR_MAX,
1073         .cons = SPRD_CONSOLE,
1074 };
1075 
1076 static int sprd_probe_dt_alias(int index, struct device *dev)
1077 {
1078         struct device_node *np;
1079         int ret = index;
1080 
1081         if (!IS_ENABLED(CONFIG_OF))
1082                 return ret;
1083 
1084         np = dev->of_node;
1085         if (!np)
1086                 return ret;
1087 
1088         ret = of_alias_get_id(np, "serial");
1089         if (ret < 0)
1090                 ret = index;
1091         else if (ret >= ARRAY_SIZE(sprd_port) || sprd_port[ret] != NULL) {
1092                 dev_warn(dev, "requested serial port %d not available.\n", ret);
1093                 ret = index;
1094         }
1095 
1096         return ret;
1097 }
1098 
1099 static int sprd_remove(struct platform_device *dev)
1100 {
1101         struct sprd_uart_port *sup = platform_get_drvdata(dev);
1102 
1103         if (sup) {
1104                 uart_remove_one_port(&sprd_uart_driver, &sup->port);
1105                 sprd_port[sup->port.line] = NULL;
1106                 sprd_rx_free_buf(sup);
1107                 sprd_ports_num--;
1108         }
1109 
1110         if (!sprd_ports_num)
1111                 uart_unregister_driver(&sprd_uart_driver);
1112 
1113         return 0;
1114 }
1115 
1116 static bool sprd_uart_is_console(struct uart_port *uport)
1117 {
1118         struct console *cons = sprd_uart_driver.cons;
1119 
1120         if (cons && cons->index >= 0 && cons->index == uport->line)
1121                 return true;
1122 
1123         return false;
1124 }
1125 
1126 static int sprd_clk_init(struct uart_port *uport)
1127 {
1128         struct clk *clk_uart, *clk_parent;
1129         struct sprd_uart_port *u = sprd_port[uport->line];
1130 
1131         clk_uart = devm_clk_get(uport->dev, "uart");
1132         if (IS_ERR(clk_uart)) {
1133                 dev_warn(uport->dev, "uart%d can't get uart clock\n",
1134                          uport->line);
1135                 clk_uart = NULL;
1136         }
1137 
1138         clk_parent = devm_clk_get(uport->dev, "source");
1139         if (IS_ERR(clk_parent)) {
1140                 dev_warn(uport->dev, "uart%d can't get source clock\n",
1141                          uport->line);
1142                 clk_parent = NULL;
1143         }
1144 
1145         if (!clk_uart || clk_set_parent(clk_uart, clk_parent))
1146                 uport->uartclk = SPRD_DEFAULT_SOURCE_CLK;
1147         else
1148                 uport->uartclk = clk_get_rate(clk_uart);
1149 
1150         u->clk = devm_clk_get(uport->dev, "enable");
1151         if (IS_ERR(u->clk)) {
1152                 if (PTR_ERR(u->clk) == -EPROBE_DEFER)
1153                         return -EPROBE_DEFER;
1154 
1155                 dev_warn(uport->dev, "uart%d can't get enable clock\n",
1156                         uport->line);
1157 
1158                 /* To keep console alive even if the error occurred */
1159                 if (!sprd_uart_is_console(uport))
1160                         return PTR_ERR(u->clk);
1161 
1162                 u->clk = NULL;
1163         }
1164 
1165         return 0;
1166 }
1167 
1168 static int sprd_probe(struct platform_device *pdev)
1169 {
1170         struct resource *res;
1171         struct uart_port *up;
1172         int irq;
1173         int index;
1174         int ret;
1175 
1176         for (index = 0; index < ARRAY_SIZE(sprd_port); index++)
1177                 if (sprd_port[index] == NULL)
1178                         break;
1179 
1180         if (index == ARRAY_SIZE(sprd_port))
1181                 return -EBUSY;
1182 
1183         index = sprd_probe_dt_alias(index, &pdev->dev);
1184 
1185         sprd_port[index] = devm_kzalloc(&pdev->dev, sizeof(*sprd_port[index]),
1186                                         GFP_KERNEL);
1187         if (!sprd_port[index])
1188                 return -ENOMEM;
1189 
1190         up = &sprd_port[index]->port;
1191         up->dev = &pdev->dev;
1192         up->line = index;
1193         up->type = PORT_SPRD;
1194         up->iotype = UPIO_MEM;
1195         up->uartclk = SPRD_DEF_RATE;
1196         up->fifosize = SPRD_FIFO_SIZE;
1197         up->ops = &serial_sprd_ops;
1198         up->flags = UPF_BOOT_AUTOCONF;
1199 
1200         ret = sprd_clk_init(up);
1201         if (ret)
1202                 return ret;
1203 
1204         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1205         up->membase = devm_ioremap_resource(&pdev->dev, res);
1206         if (IS_ERR(up->membase))
1207                 return PTR_ERR(up->membase);
1208 
1209         up->mapbase = res->start;
1210 
1211         irq = platform_get_irq(pdev, 0);
1212         if (irq < 0)
1213                 return irq;
1214         up->irq = irq;
1215 
1216         /*
1217          * Allocate one dma buffer to prepare for receive transfer, in case
1218          * memory allocation failure at runtime.
1219          */
1220         ret = sprd_rx_alloc_buf(sprd_port[index]);
1221         if (ret)
1222                 return ret;
1223 
1224         if (!sprd_ports_num) {
1225                 ret = uart_register_driver(&sprd_uart_driver);
1226                 if (ret < 0) {
1227                         pr_err("Failed to register SPRD-UART driver\n");
1228                         return ret;
1229                 }
1230         }
1231         sprd_ports_num++;
1232 
1233         ret = uart_add_one_port(&sprd_uart_driver, up);
1234         if (ret) {
1235                 sprd_port[index] = NULL;
1236                 sprd_remove(pdev);
1237         }
1238 
1239         platform_set_drvdata(pdev, up);
1240 
1241         return ret;
1242 }
1243 
1244 #ifdef CONFIG_PM_SLEEP
1245 static int sprd_suspend(struct device *dev)
1246 {
1247         struct sprd_uart_port *sup = dev_get_drvdata(dev);
1248 
1249         uart_suspend_port(&sprd_uart_driver, &sup->port);
1250 
1251         return 0;
1252 }
1253 
1254 static int sprd_resume(struct device *dev)
1255 {
1256         struct sprd_uart_port *sup = dev_get_drvdata(dev);
1257 
1258         uart_resume_port(&sprd_uart_driver, &sup->port);
1259 
1260         return 0;
1261 }
1262 #endif
1263 
1264 static SIMPLE_DEV_PM_OPS(sprd_pm_ops, sprd_suspend, sprd_resume);
1265 
1266 static const struct of_device_id serial_ids[] = {
1267         {.compatible = "sprd,sc9836-uart",},
1268         {}
1269 };
1270 MODULE_DEVICE_TABLE(of, serial_ids);
1271 
1272 static struct platform_driver sprd_platform_driver = {
1273         .probe          = sprd_probe,
1274         .remove         = sprd_remove,
1275         .driver         = {
1276                 .name   = "sprd_serial",
1277                 .of_match_table = of_match_ptr(serial_ids),
1278                 .pm     = &sprd_pm_ops,
1279         },
1280 };
1281 
1282 module_platform_driver(sprd_platform_driver);
1283 
1284 MODULE_LICENSE("GPL v2");
1285 MODULE_DESCRIPTION("Spreadtrum SoC serial driver series");

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