3b706add81a9e82a2d24851efb13433651a055a4
[firefly-linux-kernel-4.4.55.git] / drivers / tty / serial / imx.c
1 /*
2  *  Driver for Motorola IMX serial ports
3  *
4  *  Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
5  *
6  *  Author: Sascha Hauer <sascha@saschahauer.de>
7  *  Copyright (C) 2004 Pengutronix
8  *
9  *  Copyright (C) 2009 emlix GmbH
10  *  Author: Fabian Godehardt (added IrDA support for iMX)
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License as published by
14  * the Free Software Foundation; either version 2 of the License, or
15  * (at your option) any later version.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, write to the Free Software
24  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
25  *
26  * [29-Mar-2005] Mike Lee
27  * Added hardware handshake
28  */
29
30 #if defined(CONFIG_SERIAL_IMX_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
31 #define SUPPORT_SYSRQ
32 #endif
33
34 #include <linux/module.h>
35 #include <linux/ioport.h>
36 #include <linux/init.h>
37 #include <linux/console.h>
38 #include <linux/sysrq.h>
39 #include <linux/platform_device.h>
40 #include <linux/tty.h>
41 #include <linux/tty_flip.h>
42 #include <linux/serial_core.h>
43 #include <linux/serial.h>
44 #include <linux/clk.h>
45 #include <linux/delay.h>
46 #include <linux/rational.h>
47 #include <linux/slab.h>
48 #include <linux/of.h>
49 #include <linux/of_device.h>
50 #include <linux/io.h>
51 #include <linux/dma-mapping.h>
52
53 #include <asm/irq.h>
54 #include <linux/platform_data/serial-imx.h>
55 #include <linux/platform_data/dma-imx.h>
56
57 /* Register definitions */
58 #define URXD0 0x0  /* Receiver Register */
59 #define URTX0 0x40 /* Transmitter Register */
60 #define UCR1  0x80 /* Control Register 1 */
61 #define UCR2  0x84 /* Control Register 2 */
62 #define UCR3  0x88 /* Control Register 3 */
63 #define UCR4  0x8c /* Control Register 4 */
64 #define UFCR  0x90 /* FIFO Control Register */
65 #define USR1  0x94 /* Status Register 1 */
66 #define USR2  0x98 /* Status Register 2 */
67 #define UESC  0x9c /* Escape Character Register */
68 #define UTIM  0xa0 /* Escape Timer Register */
69 #define UBIR  0xa4 /* BRM Incremental Register */
70 #define UBMR  0xa8 /* BRM Modulator Register */
71 #define UBRC  0xac /* Baud Rate Count Register */
72 #define IMX21_ONEMS 0xb0 /* One Millisecond register */
73 #define IMX1_UTS 0xd0 /* UART Test Register on i.mx1 */
74 #define IMX21_UTS 0xb4 /* UART Test Register on all other i.mx*/
75
76 /* UART Control Register Bit Fields.*/
77 #define URXD_CHARRDY    (1<<15)
78 #define URXD_ERR        (1<<14)
79 #define URXD_OVRRUN     (1<<13)
80 #define URXD_FRMERR     (1<<12)
81 #define URXD_BRK        (1<<11)
82 #define URXD_PRERR      (1<<10)
83 #define UCR1_ADEN       (1<<15) /* Auto detect interrupt */
84 #define UCR1_ADBR       (1<<14) /* Auto detect baud rate */
85 #define UCR1_TRDYEN     (1<<13) /* Transmitter ready interrupt enable */
86 #define UCR1_IDEN       (1<<12) /* Idle condition interrupt */
87 #define UCR1_ICD_REG(x) (((x) & 3) << 10) /* idle condition detect */
88 #define UCR1_RRDYEN     (1<<9)  /* Recv ready interrupt enable */
89 #define UCR1_RDMAEN     (1<<8)  /* Recv ready DMA enable */
90 #define UCR1_IREN       (1<<7)  /* Infrared interface enable */
91 #define UCR1_TXMPTYEN   (1<<6)  /* Transimitter empty interrupt enable */
92 #define UCR1_RTSDEN     (1<<5)  /* RTS delta interrupt enable */
93 #define UCR1_SNDBRK     (1<<4)  /* Send break */
94 #define UCR1_TDMAEN     (1<<3)  /* Transmitter ready DMA enable */
95 #define IMX1_UCR1_UARTCLKEN (1<<2) /* UART clock enabled, i.mx1 only */
96 #define UCR1_ATDMAEN    (1<<2)  /* Aging DMA Timer Enable */
97 #define UCR1_DOZE       (1<<1)  /* Doze */
98 #define UCR1_UARTEN     (1<<0)  /* UART enabled */
99 #define UCR2_ESCI       (1<<15) /* Escape seq interrupt enable */
100 #define UCR2_IRTS       (1<<14) /* Ignore RTS pin */
101 #define UCR2_CTSC       (1<<13) /* CTS pin control */
102 #define UCR2_CTS        (1<<12) /* Clear to send */
103 #define UCR2_ESCEN      (1<<11) /* Escape enable */
104 #define UCR2_PREN       (1<<8)  /* Parity enable */
105 #define UCR2_PROE       (1<<7)  /* Parity odd/even */
106 #define UCR2_STPB       (1<<6)  /* Stop */
107 #define UCR2_WS         (1<<5)  /* Word size */
108 #define UCR2_RTSEN      (1<<4)  /* Request to send interrupt enable */
109 #define UCR2_ATEN       (1<<3)  /* Aging Timer Enable */
110 #define UCR2_TXEN       (1<<2)  /* Transmitter enabled */
111 #define UCR2_RXEN       (1<<1)  /* Receiver enabled */
112 #define UCR2_SRST       (1<<0)  /* SW reset */
113 #define UCR3_DTREN      (1<<13) /* DTR interrupt enable */
114 #define UCR3_PARERREN   (1<<12) /* Parity enable */
115 #define UCR3_FRAERREN   (1<<11) /* Frame error interrupt enable */
116 #define UCR3_DSR        (1<<10) /* Data set ready */
117 #define UCR3_DCD        (1<<9)  /* Data carrier detect */
118 #define UCR3_RI         (1<<8)  /* Ring indicator */
119 #define UCR3_ADNIMP     (1<<7)  /* Autobaud Detection Not Improved */
120 #define UCR3_RXDSEN     (1<<6)  /* Receive status interrupt enable */
121 #define UCR3_AIRINTEN   (1<<5)  /* Async IR wake interrupt enable */
122 #define UCR3_AWAKEN     (1<<4)  /* Async wake interrupt enable */
123 #define IMX21_UCR3_RXDMUXSEL    (1<<2)  /* RXD Muxed Input Select */
124 #define UCR3_INVT       (1<<1)  /* Inverted Infrared transmission */
125 #define UCR3_BPEN       (1<<0)  /* Preset registers enable */
126 #define UCR4_CTSTL_SHF  10      /* CTS trigger level shift */
127 #define UCR4_CTSTL_MASK 0x3F    /* CTS trigger is 6 bits wide */
128 #define UCR4_INVR       (1<<9)  /* Inverted infrared reception */
129 #define UCR4_ENIRI      (1<<8)  /* Serial infrared interrupt enable */
130 #define UCR4_WKEN       (1<<7)  /* Wake interrupt enable */
131 #define UCR4_REF16      (1<<6)  /* Ref freq 16 MHz */
132 #define UCR4_IDDMAEN    (1<<6)  /* DMA IDLE Condition Detected */
133 #define UCR4_IRSC       (1<<5)  /* IR special case */
134 #define UCR4_TCEN       (1<<3)  /* Transmit complete interrupt enable */
135 #define UCR4_BKEN       (1<<2)  /* Break condition interrupt enable */
136 #define UCR4_OREN       (1<<1)  /* Receiver overrun interrupt enable */
137 #define UCR4_DREN       (1<<0)  /* Recv data ready interrupt enable */
138 #define UFCR_RXTL_SHF   0       /* Receiver trigger level shift */
139 #define UFCR_DCEDTE     (1<<6)  /* DCE/DTE mode select */
140 #define UFCR_RFDIV      (7<<7)  /* Reference freq divider mask */
141 #define UFCR_RFDIV_REG(x)       (((x) < 7 ? 6 - (x) : 6) << 7)
142 #define UFCR_TXTL_SHF   10      /* Transmitter trigger level shift */
143 #define USR1_PARITYERR  (1<<15) /* Parity error interrupt flag */
144 #define USR1_RTSS       (1<<14) /* RTS pin status */
145 #define USR1_TRDY       (1<<13) /* Transmitter ready interrupt/dma flag */
146 #define USR1_RTSD       (1<<12) /* RTS delta */
147 #define USR1_ESCF       (1<<11) /* Escape seq interrupt flag */
148 #define USR1_FRAMERR    (1<<10) /* Frame error interrupt flag */
149 #define USR1_RRDY       (1<<9)   /* Receiver ready interrupt/dma flag */
150 #define USR1_TIMEOUT    (1<<7)   /* Receive timeout interrupt status */
151 #define USR1_RXDS        (1<<6)  /* Receiver idle interrupt flag */
152 #define USR1_AIRINT      (1<<5)  /* Async IR wake interrupt flag */
153 #define USR1_AWAKE       (1<<4)  /* Aysnc wake interrupt flag */
154 #define USR2_ADET        (1<<15) /* Auto baud rate detect complete */
155 #define USR2_TXFE        (1<<14) /* Transmit buffer FIFO empty */
156 #define USR2_DTRF        (1<<13) /* DTR edge interrupt flag */
157 #define USR2_IDLE        (1<<12) /* Idle condition */
158 #define USR2_IRINT       (1<<8)  /* Serial infrared interrupt flag */
159 #define USR2_WAKE        (1<<7)  /* Wake */
160 #define USR2_RTSF        (1<<4)  /* RTS edge interrupt flag */
161 #define USR2_TXDC        (1<<3)  /* Transmitter complete */
162 #define USR2_BRCD        (1<<2)  /* Break condition */
163 #define USR2_ORE        (1<<1)   /* Overrun error */
164 #define USR2_RDR        (1<<0)   /* Recv data ready */
165 #define UTS_FRCPERR     (1<<13) /* Force parity error */
166 #define UTS_LOOP        (1<<12)  /* Loop tx and rx */
167 #define UTS_TXEMPTY      (1<<6)  /* TxFIFO empty */
168 #define UTS_RXEMPTY      (1<<5)  /* RxFIFO empty */
169 #define UTS_TXFULL       (1<<4)  /* TxFIFO full */
170 #define UTS_RXFULL       (1<<3)  /* RxFIFO full */
171 #define UTS_SOFTRST      (1<<0)  /* Software reset */
172
173 /* We've been assigned a range on the "Low-density serial ports" major */
174 #define SERIAL_IMX_MAJOR        207
175 #define MINOR_START             16
176 #define DEV_NAME                "ttymxc"
177
178 /*
179  * This determines how often we check the modem status signals
180  * for any change.  They generally aren't connected to an IRQ
181  * so we have to poll them.  We also check immediately before
182  * filling the TX fifo incase CTS has been dropped.
183  */
184 #define MCTRL_TIMEOUT   (250*HZ/1000)
185
186 #define DRIVER_NAME "IMX-uart"
187
188 #define UART_NR 8
189
190 /* i.mx21 type uart runs on all i.mx except i.mx1 */
191 enum imx_uart_type {
192         IMX1_UART,
193         IMX21_UART,
194         IMX6Q_UART,
195 };
196
197 /* device type dependent stuff */
198 struct imx_uart_data {
199         unsigned uts_reg;
200         enum imx_uart_type devtype;
201 };
202
203 struct imx_port {
204         struct uart_port        port;
205         struct timer_list       timer;
206         unsigned int            old_status;
207         int                     txirq, rxirq, rtsirq;
208         unsigned int            have_rtscts:1;
209         unsigned int            dte_mode:1;
210         unsigned int            use_irda:1;
211         unsigned int            irda_inv_rx:1;
212         unsigned int            irda_inv_tx:1;
213         unsigned short          trcv_delay; /* transceiver delay */
214         struct clk              *clk_ipg;
215         struct clk              *clk_per;
216         const struct imx_uart_data *devdata;
217
218         /* DMA fields */
219         unsigned int            dma_is_inited:1;
220         unsigned int            dma_is_enabled:1;
221         unsigned int            dma_is_rxing:1;
222         unsigned int            dma_is_txing:1;
223         struct dma_chan         *dma_chan_rx, *dma_chan_tx;
224         struct scatterlist      rx_sgl, tx_sgl[2];
225         void                    *rx_buf;
226         unsigned int            tx_bytes;
227         unsigned int            dma_tx_nents;
228 };
229
230 struct imx_port_ucrs {
231         unsigned int    ucr1;
232         unsigned int    ucr2;
233         unsigned int    ucr3;
234 };
235
236 #ifdef CONFIG_IRDA
237 #define USE_IRDA(sport) ((sport)->use_irda)
238 #else
239 #define USE_IRDA(sport) (0)
240 #endif
241
242 static struct imx_uart_data imx_uart_devdata[] = {
243         [IMX1_UART] = {
244                 .uts_reg = IMX1_UTS,
245                 .devtype = IMX1_UART,
246         },
247         [IMX21_UART] = {
248                 .uts_reg = IMX21_UTS,
249                 .devtype = IMX21_UART,
250         },
251         [IMX6Q_UART] = {
252                 .uts_reg = IMX21_UTS,
253                 .devtype = IMX6Q_UART,
254         },
255 };
256
257 static struct platform_device_id imx_uart_devtype[] = {
258         {
259                 .name = "imx1-uart",
260                 .driver_data = (kernel_ulong_t) &imx_uart_devdata[IMX1_UART],
261         }, {
262                 .name = "imx21-uart",
263                 .driver_data = (kernel_ulong_t) &imx_uart_devdata[IMX21_UART],
264         }, {
265                 .name = "imx6q-uart",
266                 .driver_data = (kernel_ulong_t) &imx_uart_devdata[IMX6Q_UART],
267         }, {
268                 /* sentinel */
269         }
270 };
271 MODULE_DEVICE_TABLE(platform, imx_uart_devtype);
272
273 static struct of_device_id imx_uart_dt_ids[] = {
274         { .compatible = "fsl,imx6q-uart", .data = &imx_uart_devdata[IMX6Q_UART], },
275         { .compatible = "fsl,imx1-uart", .data = &imx_uart_devdata[IMX1_UART], },
276         { .compatible = "fsl,imx21-uart", .data = &imx_uart_devdata[IMX21_UART], },
277         { /* sentinel */ }
278 };
279 MODULE_DEVICE_TABLE(of, imx_uart_dt_ids);
280
281 static inline unsigned uts_reg(struct imx_port *sport)
282 {
283         return sport->devdata->uts_reg;
284 }
285
286 static inline int is_imx1_uart(struct imx_port *sport)
287 {
288         return sport->devdata->devtype == IMX1_UART;
289 }
290
291 static inline int is_imx21_uart(struct imx_port *sport)
292 {
293         return sport->devdata->devtype == IMX21_UART;
294 }
295
296 static inline int is_imx6q_uart(struct imx_port *sport)
297 {
298         return sport->devdata->devtype == IMX6Q_UART;
299 }
300 /*
301  * Save and restore functions for UCR1, UCR2 and UCR3 registers
302  */
303 #if defined(CONFIG_CONSOLE_POLL) || defined(CONFIG_SERIAL_IMX_CONSOLE)
304 static void imx_port_ucrs_save(struct uart_port *port,
305                                struct imx_port_ucrs *ucr)
306 {
307         /* save control registers */
308         ucr->ucr1 = readl(port->membase + UCR1);
309         ucr->ucr2 = readl(port->membase + UCR2);
310         ucr->ucr3 = readl(port->membase + UCR3);
311 }
312
313 static void imx_port_ucrs_restore(struct uart_port *port,
314                                   struct imx_port_ucrs *ucr)
315 {
316         /* restore control registers */
317         writel(ucr->ucr1, port->membase + UCR1);
318         writel(ucr->ucr2, port->membase + UCR2);
319         writel(ucr->ucr3, port->membase + UCR3);
320 }
321 #endif
322
323 /*
324  * Handle any change of modem status signal since we were last called.
325  */
326 static void imx_mctrl_check(struct imx_port *sport)
327 {
328         unsigned int status, changed;
329
330         status = sport->port.ops->get_mctrl(&sport->port);
331         changed = status ^ sport->old_status;
332
333         if (changed == 0)
334                 return;
335
336         sport->old_status = status;
337
338         if (changed & TIOCM_RI)
339                 sport->port.icount.rng++;
340         if (changed & TIOCM_DSR)
341                 sport->port.icount.dsr++;
342         if (changed & TIOCM_CAR)
343                 uart_handle_dcd_change(&sport->port, status & TIOCM_CAR);
344         if (changed & TIOCM_CTS)
345                 uart_handle_cts_change(&sport->port, status & TIOCM_CTS);
346
347         wake_up_interruptible(&sport->port.state->port.delta_msr_wait);
348 }
349
350 /*
351  * This is our per-port timeout handler, for checking the
352  * modem status signals.
353  */
354 static void imx_timeout(unsigned long data)
355 {
356         struct imx_port *sport = (struct imx_port *)data;
357         unsigned long flags;
358
359         if (sport->port.state) {
360                 spin_lock_irqsave(&sport->port.lock, flags);
361                 imx_mctrl_check(sport);
362                 spin_unlock_irqrestore(&sport->port.lock, flags);
363
364                 mod_timer(&sport->timer, jiffies + MCTRL_TIMEOUT);
365         }
366 }
367
368 /*
369  * interrupts disabled on entry
370  */
371 static void imx_stop_tx(struct uart_port *port)
372 {
373         struct imx_port *sport = (struct imx_port *)port;
374         unsigned long temp;
375
376         if (USE_IRDA(sport)) {
377                 /* half duplex - wait for end of transmission */
378                 int n = 256;
379                 while ((--n > 0) &&
380                       !(readl(sport->port.membase + USR2) & USR2_TXDC)) {
381                         udelay(5);
382                         barrier();
383                 }
384                 /*
385                  * irda transceiver - wait a bit more to avoid
386                  * cutoff, hardware dependent
387                  */
388                 udelay(sport->trcv_delay);
389
390                 /*
391                  * half duplex - reactivate receive mode,
392                  * flush receive pipe echo crap
393                  */
394                 if (readl(sport->port.membase + USR2) & USR2_TXDC) {
395                         temp = readl(sport->port.membase + UCR1);
396                         temp &= ~(UCR1_TXMPTYEN | UCR1_TRDYEN);
397                         writel(temp, sport->port.membase + UCR1);
398
399                         temp = readl(sport->port.membase + UCR4);
400                         temp &= ~(UCR4_TCEN);
401                         writel(temp, sport->port.membase + UCR4);
402
403                         while (readl(sport->port.membase + URXD0) &
404                                URXD_CHARRDY)
405                                 barrier();
406
407                         temp = readl(sport->port.membase + UCR1);
408                         temp |= UCR1_RRDYEN;
409                         writel(temp, sport->port.membase + UCR1);
410
411                         temp = readl(sport->port.membase + UCR4);
412                         temp |= UCR4_DREN;
413                         writel(temp, sport->port.membase + UCR4);
414                 }
415                 return;
416         }
417
418         if (sport->dma_is_enabled && sport->dma_is_txing) {
419                 dmaengine_terminate_all(sport->dma_chan_tx);
420                 sport->dma_is_txing = 0;
421         }
422
423         temp = readl(sport->port.membase + UCR1);
424         writel(temp & ~UCR1_TXMPTYEN, sport->port.membase + UCR1);
425 }
426
427 /*
428  * interrupts disabled on entry
429  */
430 static void imx_stop_rx(struct uart_port *port)
431 {
432         struct imx_port *sport = (struct imx_port *)port;
433         unsigned long temp;
434
435         if (sport->dma_is_enabled && sport->dma_is_rxing) {
436                 dmaengine_terminate_all(sport->dma_chan_rx);
437                 sport->dma_is_rxing = 0;
438         }
439
440         temp = readl(sport->port.membase + UCR2);
441         writel(temp & ~UCR2_RXEN, sport->port.membase + UCR2);
442
443         /* disable the `Receiver Ready Interrrupt` */
444         temp = readl(sport->port.membase + UCR1);
445         writel(temp & ~UCR1_RRDYEN, sport->port.membase + UCR1);
446 }
447
448 /*
449  * Set the modem control timer to fire immediately.
450  */
451 static void imx_enable_ms(struct uart_port *port)
452 {
453         struct imx_port *sport = (struct imx_port *)port;
454
455         mod_timer(&sport->timer, jiffies);
456 }
457
458 static inline void imx_transmit_buffer(struct imx_port *sport)
459 {
460         struct circ_buf *xmit = &sport->port.state->xmit;
461
462         while (!uart_circ_empty(xmit) &&
463                         !(readl(sport->port.membase + uts_reg(sport))
464                                 & UTS_TXFULL)) {
465                 /* send xmit->buf[xmit->tail]
466                  * out the port here */
467                 writel(xmit->buf[xmit->tail], sport->port.membase + URTX0);
468                 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
469                 sport->port.icount.tx++;
470         }
471
472         if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
473                 uart_write_wakeup(&sport->port);
474
475         if (uart_circ_empty(xmit))
476                 imx_stop_tx(&sport->port);
477 }
478
479 static void dma_tx_callback(void *data)
480 {
481         struct imx_port *sport = data;
482         struct scatterlist *sgl = &sport->tx_sgl[0];
483         struct circ_buf *xmit = &sport->port.state->xmit;
484         unsigned long flags;
485
486         dma_unmap_sg(sport->port.dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE);
487
488         sport->dma_is_txing = 0;
489
490         /* update the stat */
491         spin_lock_irqsave(&sport->port.lock, flags);
492         xmit->tail = (xmit->tail + sport->tx_bytes) & (UART_XMIT_SIZE - 1);
493         sport->port.icount.tx += sport->tx_bytes;
494         spin_unlock_irqrestore(&sport->port.lock, flags);
495
496         dev_dbg(sport->port.dev, "we finish the TX DMA.\n");
497
498         uart_write_wakeup(&sport->port);
499 }
500
501 static void imx_dma_tx(struct imx_port *sport)
502 {
503         struct circ_buf *xmit = &sport->port.state->xmit;
504         struct scatterlist *sgl = sport->tx_sgl;
505         struct dma_async_tx_descriptor *desc;
506         struct dma_chan *chan = sport->dma_chan_tx;
507         struct device *dev = sport->port.dev;
508         enum dma_status status;
509         int ret;
510
511         status = dmaengine_tx_status(chan, (dma_cookie_t)0, NULL);
512         if (DMA_IN_PROGRESS == status)
513                 return;
514
515         sport->tx_bytes = uart_circ_chars_pending(xmit);
516
517         if (xmit->tail > xmit->head && xmit->head > 0) {
518                 sport->dma_tx_nents = 2;
519                 sg_init_table(sgl, 2);
520                 sg_set_buf(sgl, xmit->buf + xmit->tail,
521                                 UART_XMIT_SIZE - xmit->tail);
522                 sg_set_buf(sgl + 1, xmit->buf, xmit->head);
523         } else {
524                 sport->dma_tx_nents = 1;
525                 sg_init_one(sgl, xmit->buf + xmit->tail, sport->tx_bytes);
526         }
527
528         ret = dma_map_sg(dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE);
529         if (ret == 0) {
530                 dev_err(dev, "DMA mapping error for TX.\n");
531                 return;
532         }
533         desc = dmaengine_prep_slave_sg(chan, sgl, sport->dma_tx_nents,
534                                         DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT);
535         if (!desc) {
536                 dev_err(dev, "We cannot prepare for the TX slave dma!\n");
537                 return;
538         }
539         desc->callback = dma_tx_callback;
540         desc->callback_param = sport;
541
542         dev_dbg(dev, "TX: prepare to send %lu bytes by DMA.\n",
543                         uart_circ_chars_pending(xmit));
544         /* fire it */
545         sport->dma_is_txing = 1;
546         dmaengine_submit(desc);
547         dma_async_issue_pending(chan);
548         return;
549 }
550
551 /*
552  * interrupts disabled on entry
553  */
554 static void imx_start_tx(struct uart_port *port)
555 {
556         struct imx_port *sport = (struct imx_port *)port;
557         unsigned long temp;
558
559         if (USE_IRDA(sport)) {
560                 /* half duplex in IrDA mode; have to disable receive mode */
561                 temp = readl(sport->port.membase + UCR4);
562                 temp &= ~(UCR4_DREN);
563                 writel(temp, sport->port.membase + UCR4);
564
565                 temp = readl(sport->port.membase + UCR1);
566                 temp &= ~(UCR1_RRDYEN);
567                 writel(temp, sport->port.membase + UCR1);
568         }
569         /* Clear any pending ORE flag before enabling interrupt */
570         temp = readl(sport->port.membase + USR2);
571         writel(temp | USR2_ORE, sport->port.membase + USR2);
572
573         temp = readl(sport->port.membase + UCR4);
574         temp |= UCR4_OREN;
575         writel(temp, sport->port.membase + UCR4);
576
577         if (!sport->dma_is_enabled) {
578                 temp = readl(sport->port.membase + UCR1);
579                 writel(temp | UCR1_TXMPTYEN, sport->port.membase + UCR1);
580         }
581
582         if (USE_IRDA(sport)) {
583                 temp = readl(sport->port.membase + UCR1);
584                 temp |= UCR1_TRDYEN;
585                 writel(temp, sport->port.membase + UCR1);
586
587                 temp = readl(sport->port.membase + UCR4);
588                 temp |= UCR4_TCEN;
589                 writel(temp, sport->port.membase + UCR4);
590         }
591
592         if (sport->dma_is_enabled) {
593                 imx_dma_tx(sport);
594                 return;
595         }
596
597         if (readl(sport->port.membase + uts_reg(sport)) & UTS_TXEMPTY)
598                 imx_transmit_buffer(sport);
599 }
600
601 static irqreturn_t imx_rtsint(int irq, void *dev_id)
602 {
603         struct imx_port *sport = dev_id;
604         unsigned int val;
605         unsigned long flags;
606
607         spin_lock_irqsave(&sport->port.lock, flags);
608
609         writel(USR1_RTSD, sport->port.membase + USR1);
610         val = readl(sport->port.membase + USR1) & USR1_RTSS;
611         uart_handle_cts_change(&sport->port, !!val);
612         wake_up_interruptible(&sport->port.state->port.delta_msr_wait);
613
614         spin_unlock_irqrestore(&sport->port.lock, flags);
615         return IRQ_HANDLED;
616 }
617
618 static irqreturn_t imx_txint(int irq, void *dev_id)
619 {
620         struct imx_port *sport = dev_id;
621         struct circ_buf *xmit = &sport->port.state->xmit;
622         unsigned long flags;
623
624         spin_lock_irqsave(&sport->port.lock, flags);
625         if (sport->port.x_char) {
626                 /* Send next char */
627                 writel(sport->port.x_char, sport->port.membase + URTX0);
628                 goto out;
629         }
630
631         if (uart_circ_empty(xmit) || uart_tx_stopped(&sport->port)) {
632                 imx_stop_tx(&sport->port);
633                 goto out;
634         }
635
636         imx_transmit_buffer(sport);
637
638         if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
639                 uart_write_wakeup(&sport->port);
640
641 out:
642         spin_unlock_irqrestore(&sport->port.lock, flags);
643         return IRQ_HANDLED;
644 }
645
646 static irqreturn_t imx_rxint(int irq, void *dev_id)
647 {
648         struct imx_port *sport = dev_id;
649         unsigned int rx, flg, ignored = 0;
650         struct tty_port *port = &sport->port.state->port;
651         unsigned long flags, temp;
652
653         spin_lock_irqsave(&sport->port.lock, flags);
654
655         while (readl(sport->port.membase + USR2) & USR2_RDR) {
656                 flg = TTY_NORMAL;
657                 sport->port.icount.rx++;
658
659                 rx = readl(sport->port.membase + URXD0);
660
661                 temp = readl(sport->port.membase + USR2);
662                 if (temp & USR2_BRCD) {
663                         writel(USR2_BRCD, sport->port.membase + USR2);
664                         if (uart_handle_break(&sport->port))
665                                 continue;
666                 }
667
668                 if (uart_handle_sysrq_char(&sport->port, (unsigned char)rx))
669                         continue;
670
671                 if (unlikely(rx & URXD_ERR)) {
672                         if (rx & URXD_BRK)
673                                 sport->port.icount.brk++;
674                         else if (rx & URXD_PRERR)
675                                 sport->port.icount.parity++;
676                         else if (rx & URXD_FRMERR)
677                                 sport->port.icount.frame++;
678                         if (rx & URXD_OVRRUN)
679                                 sport->port.icount.overrun++;
680
681                         if (rx & sport->port.ignore_status_mask) {
682                                 if (++ignored > 100)
683                                         goto out;
684                                 continue;
685                         }
686
687                         rx &= sport->port.read_status_mask;
688
689                         if (rx & URXD_BRK)
690                                 flg = TTY_BREAK;
691                         else if (rx & URXD_PRERR)
692                                 flg = TTY_PARITY;
693                         else if (rx & URXD_FRMERR)
694                                 flg = TTY_FRAME;
695                         if (rx & URXD_OVRRUN)
696                                 flg = TTY_OVERRUN;
697
698 #ifdef SUPPORT_SYSRQ
699                         sport->port.sysrq = 0;
700 #endif
701                 }
702
703                 tty_insert_flip_char(port, rx, flg);
704         }
705
706 out:
707         spin_unlock_irqrestore(&sport->port.lock, flags);
708         tty_flip_buffer_push(port);
709         return IRQ_HANDLED;
710 }
711
712 static int start_rx_dma(struct imx_port *sport);
713 /*
714  * If the RXFIFO is filled with some data, and then we
715  * arise a DMA operation to receive them.
716  */
717 static void imx_dma_rxint(struct imx_port *sport)
718 {
719         unsigned long temp;
720
721         temp = readl(sport->port.membase + USR2);
722         if ((temp & USR2_RDR) && !sport->dma_is_rxing) {
723                 sport->dma_is_rxing = 1;
724
725                 /* disable the `Recerver Ready Interrrupt` */
726                 temp = readl(sport->port.membase + UCR1);
727                 temp &= ~(UCR1_RRDYEN);
728                 writel(temp, sport->port.membase + UCR1);
729
730                 /* tell the DMA to receive the data. */
731                 start_rx_dma(sport);
732         }
733 }
734
735 static irqreturn_t imx_int(int irq, void *dev_id)
736 {
737         struct imx_port *sport = dev_id;
738         unsigned int sts;
739         unsigned int sts2;
740
741         sts = readl(sport->port.membase + USR1);
742
743         if (sts & USR1_RRDY) {
744                 if (sport->dma_is_enabled)
745                         imx_dma_rxint(sport);
746                 else
747                         imx_rxint(irq, dev_id);
748         }
749
750         if (sts & USR1_TRDY &&
751                         readl(sport->port.membase + UCR1) & UCR1_TXMPTYEN)
752                 imx_txint(irq, dev_id);
753
754         if (sts & USR1_RTSD)
755                 imx_rtsint(irq, dev_id);
756
757         if (sts & USR1_AWAKE)
758                 writel(USR1_AWAKE, sport->port.membase + USR1);
759
760         sts2 = readl(sport->port.membase + USR2);
761         if (sts2 & USR2_ORE) {
762                 dev_err(sport->port.dev, "Rx FIFO overrun\n");
763                 sport->port.icount.overrun++;
764                 writel(sts2 | USR2_ORE, sport->port.membase + USR2);
765         }
766
767         return IRQ_HANDLED;
768 }
769
770 /*
771  * Return TIOCSER_TEMT when transmitter is not busy.
772  */
773 static unsigned int imx_tx_empty(struct uart_port *port)
774 {
775         struct imx_port *sport = (struct imx_port *)port;
776         unsigned int ret;
777
778         ret = (readl(sport->port.membase + USR2) & USR2_TXDC) ?  TIOCSER_TEMT : 0;
779
780         /* If the TX DMA is working, return 0. */
781         if (sport->dma_is_enabled && sport->dma_is_txing)
782                 ret = 0;
783
784         return ret;
785 }
786
787 /*
788  * We have a modem side uart, so the meanings of RTS and CTS are inverted.
789  */
790 static unsigned int imx_get_mctrl(struct uart_port *port)
791 {
792         struct imx_port *sport = (struct imx_port *)port;
793         unsigned int tmp = TIOCM_DSR | TIOCM_CAR;
794
795         if (readl(sport->port.membase + USR1) & USR1_RTSS)
796                 tmp |= TIOCM_CTS;
797
798         if (readl(sport->port.membase + UCR2) & UCR2_CTS)
799                 tmp |= TIOCM_RTS;
800
801         if (readl(sport->port.membase + uts_reg(sport)) & UTS_LOOP)
802                 tmp |= TIOCM_LOOP;
803
804         return tmp;
805 }
806
807 static void imx_set_mctrl(struct uart_port *port, unsigned int mctrl)
808 {
809         struct imx_port *sport = (struct imx_port *)port;
810         unsigned long temp;
811
812         temp = readl(sport->port.membase + UCR2) & ~UCR2_CTS;
813
814         if (mctrl & TIOCM_RTS)
815                 if (!sport->dma_is_enabled)
816                         temp |= UCR2_CTS;
817
818         writel(temp, sport->port.membase + UCR2);
819
820         temp = readl(sport->port.membase + uts_reg(sport)) & ~UTS_LOOP;
821         if (mctrl & TIOCM_LOOP)
822                 temp |= UTS_LOOP;
823         writel(temp, sport->port.membase + uts_reg(sport));
824 }
825
826 /*
827  * Interrupts always disabled.
828  */
829 static void imx_break_ctl(struct uart_port *port, int break_state)
830 {
831         struct imx_port *sport = (struct imx_port *)port;
832         unsigned long flags, temp;
833
834         spin_lock_irqsave(&sport->port.lock, flags);
835
836         temp = readl(sport->port.membase + UCR1) & ~UCR1_SNDBRK;
837
838         if (break_state != 0)
839                 temp |= UCR1_SNDBRK;
840
841         writel(temp, sport->port.membase + UCR1);
842
843         spin_unlock_irqrestore(&sport->port.lock, flags);
844 }
845
846 #define TXTL 2 /* reset default */
847 #define RXTL 1 /* reset default */
848
849 static int imx_setup_ufcr(struct imx_port *sport, unsigned int mode)
850 {
851         unsigned int val;
852
853         /* set receiver / transmitter trigger level */
854         val = readl(sport->port.membase + UFCR) & (UFCR_RFDIV | UFCR_DCEDTE);
855         val |= TXTL << UFCR_TXTL_SHF | RXTL;
856         writel(val, sport->port.membase + UFCR);
857         return 0;
858 }
859
860 #define RX_BUF_SIZE     (PAGE_SIZE)
861 static void imx_rx_dma_done(struct imx_port *sport)
862 {
863         unsigned long temp;
864
865         /* Enable this interrupt when the RXFIFO is empty. */
866         temp = readl(sport->port.membase + UCR1);
867         temp |= UCR1_RRDYEN;
868         writel(temp, sport->port.membase + UCR1);
869
870         sport->dma_is_rxing = 0;
871 }
872
873 /*
874  * There are three kinds of RX DMA interrupts(such as in the MX6Q):
875  *   [1] the RX DMA buffer is full.
876  *   [2] the Aging timer expires(wait for 8 bytes long)
877  *   [3] the Idle Condition Detect(enabled the UCR4_IDDMAEN).
878  *
879  * The [2] is trigger when a character was been sitting in the FIFO
880  * meanwhile [3] can wait for 32 bytes long when the RX line is
881  * on IDLE state and RxFIFO is empty.
882  */
883 static void dma_rx_callback(void *data)
884 {
885         struct imx_port *sport = data;
886         struct dma_chan *chan = sport->dma_chan_rx;
887         struct scatterlist *sgl = &sport->rx_sgl;
888         struct tty_port *port = &sport->port.state->port;
889         struct dma_tx_state state;
890         enum dma_status status;
891         unsigned int count;
892
893         /* unmap it first */
894         dma_unmap_sg(sport->port.dev, sgl, 1, DMA_FROM_DEVICE);
895
896         status = dmaengine_tx_status(chan, (dma_cookie_t)0, &state);
897         count = RX_BUF_SIZE - state.residue;
898         dev_dbg(sport->port.dev, "We get %d bytes.\n", count);
899
900         if (count) {
901                 tty_insert_flip_string(port, sport->rx_buf, count);
902                 tty_flip_buffer_push(port);
903
904                 start_rx_dma(sport);
905         } else
906                 imx_rx_dma_done(sport);
907 }
908
909 static int start_rx_dma(struct imx_port *sport)
910 {
911         struct scatterlist *sgl = &sport->rx_sgl;
912         struct dma_chan *chan = sport->dma_chan_rx;
913         struct device *dev = sport->port.dev;
914         struct dma_async_tx_descriptor *desc;
915         int ret;
916
917         sg_init_one(sgl, sport->rx_buf, RX_BUF_SIZE);
918         ret = dma_map_sg(dev, sgl, 1, DMA_FROM_DEVICE);
919         if (ret == 0) {
920                 dev_err(dev, "DMA mapping error for RX.\n");
921                 return -EINVAL;
922         }
923         desc = dmaengine_prep_slave_sg(chan, sgl, 1, DMA_DEV_TO_MEM,
924                                         DMA_PREP_INTERRUPT);
925         if (!desc) {
926                 dev_err(dev, "We cannot prepare for the RX slave dma!\n");
927                 return -EINVAL;
928         }
929         desc->callback = dma_rx_callback;
930         desc->callback_param = sport;
931
932         dev_dbg(dev, "RX: prepare for the DMA.\n");
933         dmaengine_submit(desc);
934         dma_async_issue_pending(chan);
935         return 0;
936 }
937
938 static void imx_uart_dma_exit(struct imx_port *sport)
939 {
940         if (sport->dma_chan_rx) {
941                 dma_release_channel(sport->dma_chan_rx);
942                 sport->dma_chan_rx = NULL;
943
944                 kfree(sport->rx_buf);
945                 sport->rx_buf = NULL;
946         }
947
948         if (sport->dma_chan_tx) {
949                 dma_release_channel(sport->dma_chan_tx);
950                 sport->dma_chan_tx = NULL;
951         }
952
953         sport->dma_is_inited = 0;
954 }
955
956 static int imx_uart_dma_init(struct imx_port *sport)
957 {
958         struct dma_slave_config slave_config = {};
959         struct device *dev = sport->port.dev;
960         int ret;
961
962         /* Prepare for RX : */
963         sport->dma_chan_rx = dma_request_slave_channel(dev, "rx");
964         if (!sport->dma_chan_rx) {
965                 dev_dbg(dev, "cannot get the DMA channel.\n");
966                 ret = -EINVAL;
967                 goto err;
968         }
969
970         slave_config.direction = DMA_DEV_TO_MEM;
971         slave_config.src_addr = sport->port.mapbase + URXD0;
972         slave_config.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
973         slave_config.src_maxburst = RXTL;
974         ret = dmaengine_slave_config(sport->dma_chan_rx, &slave_config);
975         if (ret) {
976                 dev_err(dev, "error in RX dma configuration.\n");
977                 goto err;
978         }
979
980         sport->rx_buf = kzalloc(PAGE_SIZE, GFP_KERNEL);
981         if (!sport->rx_buf) {
982                 dev_err(dev, "cannot alloc DMA buffer.\n");
983                 ret = -ENOMEM;
984                 goto err;
985         }
986
987         /* Prepare for TX : */
988         sport->dma_chan_tx = dma_request_slave_channel(dev, "tx");
989         if (!sport->dma_chan_tx) {
990                 dev_err(dev, "cannot get the TX DMA channel!\n");
991                 ret = -EINVAL;
992                 goto err;
993         }
994
995         slave_config.direction = DMA_MEM_TO_DEV;
996         slave_config.dst_addr = sport->port.mapbase + URTX0;
997         slave_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
998         slave_config.dst_maxburst = TXTL;
999         ret = dmaengine_slave_config(sport->dma_chan_tx, &slave_config);
1000         if (ret) {
1001                 dev_err(dev, "error in TX dma configuration.");
1002                 goto err;
1003         }
1004
1005         sport->dma_is_inited = 1;
1006
1007         return 0;
1008 err:
1009         imx_uart_dma_exit(sport);
1010         return ret;
1011 }
1012
1013 static void imx_enable_dma(struct imx_port *sport)
1014 {
1015         unsigned long temp;
1016
1017         /* set UCR1 */
1018         temp = readl(sport->port.membase + UCR1);
1019         temp |= UCR1_RDMAEN | UCR1_TDMAEN | UCR1_ATDMAEN |
1020                 /* wait for 32 idle frames for IDDMA interrupt */
1021                 UCR1_ICD_REG(3);
1022         writel(temp, sport->port.membase + UCR1);
1023
1024         /* set UCR4 */
1025         temp = readl(sport->port.membase + UCR4);
1026         temp |= UCR4_IDDMAEN;
1027         writel(temp, sport->port.membase + UCR4);
1028
1029         sport->dma_is_enabled = 1;
1030 }
1031
1032 static void imx_disable_dma(struct imx_port *sport)
1033 {
1034         unsigned long temp;
1035
1036         /* clear UCR1 */
1037         temp = readl(sport->port.membase + UCR1);
1038         temp &= ~(UCR1_RDMAEN | UCR1_TDMAEN | UCR1_ATDMAEN);
1039         writel(temp, sport->port.membase + UCR1);
1040
1041         /* clear UCR2 */
1042         temp = readl(sport->port.membase + UCR2);
1043         temp &= ~(UCR2_CTSC | UCR2_CTS);
1044         writel(temp, sport->port.membase + UCR2);
1045
1046         /* clear UCR4 */
1047         temp = readl(sport->port.membase + UCR4);
1048         temp &= ~UCR4_IDDMAEN;
1049         writel(temp, sport->port.membase + UCR4);
1050
1051         sport->dma_is_enabled = 0;
1052 }
1053
1054 /* half the RX buffer size */
1055 #define CTSTL 16
1056
1057 static int imx_startup(struct uart_port *port)
1058 {
1059         struct imx_port *sport = (struct imx_port *)port;
1060         int retval, i;
1061         unsigned long flags, temp;
1062
1063         retval = clk_prepare_enable(sport->clk_per);
1064         if (retval)
1065                 goto error_out1;
1066         retval = clk_prepare_enable(sport->clk_ipg);
1067         if (retval) {
1068                 clk_disable_unprepare(sport->clk_per);
1069                 goto error_out1;
1070         }
1071
1072         imx_setup_ufcr(sport, 0);
1073
1074         /* disable the DREN bit (Data Ready interrupt enable) before
1075          * requesting IRQs
1076          */
1077         temp = readl(sport->port.membase + UCR4);
1078
1079         if (USE_IRDA(sport))
1080                 temp |= UCR4_IRSC;
1081
1082         /* set the trigger level for CTS */
1083         temp &= ~(UCR4_CTSTL_MASK << UCR4_CTSTL_SHF);
1084         temp |= CTSTL << UCR4_CTSTL_SHF;
1085
1086         writel(temp & ~UCR4_DREN, sport->port.membase + UCR4);
1087
1088         /* Reset fifo's and state machines */
1089         i = 100;
1090
1091         temp = readl(sport->port.membase + UCR2);
1092         temp &= ~UCR2_SRST;
1093         writel(temp, sport->port.membase + UCR2);
1094
1095         while (!(readl(sport->port.membase + UCR2) & UCR2_SRST) && (--i > 0))
1096                 udelay(1);
1097
1098         /*
1099          * Allocate the IRQ(s) i.MX1 has three interrupts whereas later
1100          * chips only have one interrupt.
1101          */
1102         if (sport->txirq > 0) {
1103                 retval = request_irq(sport->rxirq, imx_rxint, 0,
1104                                      dev_name(port->dev), sport);
1105                 if (retval)
1106                         goto error_out1;
1107
1108                 retval = request_irq(sport->txirq, imx_txint, 0,
1109                                      dev_name(port->dev), sport);
1110                 if (retval)
1111                         goto error_out2;
1112
1113                 /* do not use RTS IRQ on IrDA */
1114                 if (!USE_IRDA(sport)) {
1115                         retval = request_irq(sport->rtsirq, imx_rtsint, 0,
1116                                              dev_name(port->dev), sport);
1117                         if (retval)
1118                                 goto error_out3;
1119                 }
1120         } else {
1121                 retval = request_irq(sport->port.irq, imx_int, 0,
1122                                      dev_name(port->dev), sport);
1123                 if (retval) {
1124                         free_irq(sport->port.irq, sport);
1125                         goto error_out1;
1126                 }
1127         }
1128
1129         spin_lock_irqsave(&sport->port.lock, flags);
1130         /*
1131          * Finally, clear and enable interrupts
1132          */
1133         writel(USR1_RTSD, sport->port.membase + USR1);
1134
1135         temp = readl(sport->port.membase + UCR1);
1136         temp |= UCR1_RRDYEN | UCR1_RTSDEN | UCR1_UARTEN;
1137
1138         if (USE_IRDA(sport)) {
1139                 temp |= UCR1_IREN;
1140                 temp &= ~(UCR1_RTSDEN);
1141         }
1142
1143         writel(temp, sport->port.membase + UCR1);
1144
1145         temp = readl(sport->port.membase + UCR2);
1146         temp |= (UCR2_RXEN | UCR2_TXEN);
1147         if (!sport->have_rtscts)
1148                 temp |= UCR2_IRTS;
1149         writel(temp, sport->port.membase + UCR2);
1150
1151         if (!is_imx1_uart(sport)) {
1152                 temp = readl(sport->port.membase + UCR3);
1153                 temp |= IMX21_UCR3_RXDMUXSEL | UCR3_ADNIMP;
1154                 writel(temp, sport->port.membase + UCR3);
1155         }
1156
1157         if (USE_IRDA(sport)) {
1158                 temp = readl(sport->port.membase + UCR4);
1159                 if (sport->irda_inv_rx)
1160                         temp |= UCR4_INVR;
1161                 else
1162                         temp &= ~(UCR4_INVR);
1163                 writel(temp | UCR4_DREN, sport->port.membase + UCR4);
1164
1165                 temp = readl(sport->port.membase + UCR3);
1166                 if (sport->irda_inv_tx)
1167                         temp |= UCR3_INVT;
1168                 else
1169                         temp &= ~(UCR3_INVT);
1170                 writel(temp, sport->port.membase + UCR3);
1171         }
1172
1173         /*
1174          * Enable modem status interrupts
1175          */
1176         imx_enable_ms(&sport->port);
1177         spin_unlock_irqrestore(&sport->port.lock, flags);
1178
1179         if (USE_IRDA(sport)) {
1180                 struct imxuart_platform_data *pdata;
1181                 pdata = dev_get_platdata(sport->port.dev);
1182                 sport->irda_inv_rx = pdata->irda_inv_rx;
1183                 sport->irda_inv_tx = pdata->irda_inv_tx;
1184                 sport->trcv_delay = pdata->transceiver_delay;
1185                 if (pdata->irda_enable)
1186                         pdata->irda_enable(1);
1187         }
1188
1189         return 0;
1190
1191 error_out3:
1192         if (sport->txirq)
1193                 free_irq(sport->txirq, sport);
1194 error_out2:
1195         if (sport->rxirq)
1196                 free_irq(sport->rxirq, sport);
1197 error_out1:
1198         return retval;
1199 }
1200
1201 static void imx_shutdown(struct uart_port *port)
1202 {
1203         struct imx_port *sport = (struct imx_port *)port;
1204         unsigned long temp;
1205         unsigned long flags;
1206
1207         if (sport->dma_is_enabled) {
1208                 /*
1209                  * The upper layer may does not call the @->stop_tx and
1210                  * @->stop_rx, so we call them ourselves.
1211                  */
1212                 imx_stop_tx(port);
1213                 imx_stop_rx(port);
1214
1215                 imx_disable_dma(sport);
1216                 imx_uart_dma_exit(sport);
1217         }
1218
1219         spin_lock_irqsave(&sport->port.lock, flags);
1220         temp = readl(sport->port.membase + UCR2);
1221         temp &= ~(UCR2_TXEN);
1222         writel(temp, sport->port.membase + UCR2);
1223         spin_unlock_irqrestore(&sport->port.lock, flags);
1224
1225         if (USE_IRDA(sport)) {
1226                 struct imxuart_platform_data *pdata;
1227                 pdata = dev_get_platdata(sport->port.dev);
1228                 if (pdata->irda_enable)
1229                         pdata->irda_enable(0);
1230         }
1231
1232         /*
1233          * Stop our timer.
1234          */
1235         del_timer_sync(&sport->timer);
1236
1237         /*
1238          * Free the interrupts
1239          */
1240         if (sport->txirq > 0) {
1241                 if (!USE_IRDA(sport))
1242                         free_irq(sport->rtsirq, sport);
1243                 free_irq(sport->txirq, sport);
1244                 free_irq(sport->rxirq, sport);
1245         } else
1246                 free_irq(sport->port.irq, sport);
1247
1248         /*
1249          * Disable all interrupts, port and break condition.
1250          */
1251
1252         spin_lock_irqsave(&sport->port.lock, flags);
1253         temp = readl(sport->port.membase + UCR1);
1254         temp &= ~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_UARTEN);
1255         if (USE_IRDA(sport))
1256                 temp &= ~(UCR1_IREN);
1257
1258         writel(temp, sport->port.membase + UCR1);
1259         spin_unlock_irqrestore(&sport->port.lock, flags);
1260
1261         clk_disable_unprepare(sport->clk_per);
1262         clk_disable_unprepare(sport->clk_ipg);
1263 }
1264
1265 static void imx_flush_buffer(struct uart_port *port)
1266 {
1267         struct imx_port *sport = (struct imx_port *)port;
1268
1269         if (sport->dma_is_enabled) {
1270                 sport->tx_bytes = 0;
1271                 dmaengine_terminate_all(sport->dma_chan_tx);
1272         }
1273 }
1274
1275 static void
1276 imx_set_termios(struct uart_port *port, struct ktermios *termios,
1277                    struct ktermios *old)
1278 {
1279         struct imx_port *sport = (struct imx_port *)port;
1280         unsigned long flags;
1281         unsigned int ucr2, old_ucr1, old_txrxen, baud, quot;
1282         unsigned int old_csize = old ? old->c_cflag & CSIZE : CS8;
1283         unsigned int div, ufcr;
1284         unsigned long num, denom;
1285         uint64_t tdiv64;
1286
1287         /*
1288          * If we don't support modem control lines, don't allow
1289          * these to be set.
1290          */
1291         if (0) {
1292                 termios->c_cflag &= ~(HUPCL | CRTSCTS | CMSPAR);
1293                 termios->c_cflag |= CLOCAL;
1294         }
1295
1296         /*
1297          * We only support CS7 and CS8.
1298          */
1299         while ((termios->c_cflag & CSIZE) != CS7 &&
1300                (termios->c_cflag & CSIZE) != CS8) {
1301                 termios->c_cflag &= ~CSIZE;
1302                 termios->c_cflag |= old_csize;
1303                 old_csize = CS8;
1304         }
1305
1306         if ((termios->c_cflag & CSIZE) == CS8)
1307                 ucr2 = UCR2_WS | UCR2_SRST | UCR2_IRTS;
1308         else
1309                 ucr2 = UCR2_SRST | UCR2_IRTS;
1310
1311         if (termios->c_cflag & CRTSCTS) {
1312                 if (sport->have_rtscts) {
1313                         ucr2 &= ~UCR2_IRTS;
1314                         ucr2 |= UCR2_CTSC;
1315
1316                         /* Can we enable the DMA support? */
1317                         if (is_imx6q_uart(sport) && !uart_console(port)
1318                                 && !sport->dma_is_inited)
1319                                 imx_uart_dma_init(sport);
1320                 } else {
1321                         termios->c_cflag &= ~CRTSCTS;
1322                 }
1323         }
1324
1325         if (termios->c_cflag & CSTOPB)
1326                 ucr2 |= UCR2_STPB;
1327         if (termios->c_cflag & PARENB) {
1328                 ucr2 |= UCR2_PREN;
1329                 if (termios->c_cflag & PARODD)
1330                         ucr2 |= UCR2_PROE;
1331         }
1332
1333         del_timer_sync(&sport->timer);
1334
1335         /*
1336          * Ask the core to calculate the divisor for us.
1337          */
1338         baud = uart_get_baud_rate(port, termios, old, 50, port->uartclk / 16);
1339         quot = uart_get_divisor(port, baud);
1340
1341         spin_lock_irqsave(&sport->port.lock, flags);
1342
1343         sport->port.read_status_mask = 0;
1344         if (termios->c_iflag & INPCK)
1345                 sport->port.read_status_mask |= (URXD_FRMERR | URXD_PRERR);
1346         if (termios->c_iflag & (BRKINT | PARMRK))
1347                 sport->port.read_status_mask |= URXD_BRK;
1348
1349         /*
1350          * Characters to ignore
1351          */
1352         sport->port.ignore_status_mask = 0;
1353         if (termios->c_iflag & IGNPAR)
1354                 sport->port.ignore_status_mask |= URXD_PRERR;
1355         if (termios->c_iflag & IGNBRK) {
1356                 sport->port.ignore_status_mask |= URXD_BRK;
1357                 /*
1358                  * If we're ignoring parity and break indicators,
1359                  * ignore overruns too (for real raw support).
1360                  */
1361                 if (termios->c_iflag & IGNPAR)
1362                         sport->port.ignore_status_mask |= URXD_OVRRUN;
1363         }
1364
1365         /*
1366          * Update the per-port timeout.
1367          */
1368         uart_update_timeout(port, termios->c_cflag, baud);
1369
1370         /*
1371          * disable interrupts and drain transmitter
1372          */
1373         old_ucr1 = readl(sport->port.membase + UCR1);
1374         writel(old_ucr1 & ~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN),
1375                         sport->port.membase + UCR1);
1376
1377         while (!(readl(sport->port.membase + USR2) & USR2_TXDC))
1378                 barrier();
1379
1380         /* then, disable everything */
1381         old_txrxen = readl(sport->port.membase + UCR2);
1382         writel(old_txrxen & ~(UCR2_TXEN | UCR2_RXEN),
1383                         sport->port.membase + UCR2);
1384         old_txrxen &= (UCR2_TXEN | UCR2_RXEN);
1385
1386         if (USE_IRDA(sport)) {
1387                 /*
1388                  * use maximum available submodule frequency to
1389                  * avoid missing short pulses due to low sampling rate
1390                  */
1391                 div = 1;
1392         } else {
1393                 /* custom-baudrate handling */
1394                 div = sport->port.uartclk / (baud * 16);
1395                 if (baud == 38400 && quot != div)
1396                         baud = sport->port.uartclk / (quot * 16);
1397
1398                 div = sport->port.uartclk / (baud * 16);
1399                 if (div > 7)
1400                         div = 7;
1401                 if (!div)
1402                         div = 1;
1403         }
1404
1405         rational_best_approximation(16 * div * baud, sport->port.uartclk,
1406                 1 << 16, 1 << 16, &num, &denom);
1407
1408         tdiv64 = sport->port.uartclk;
1409         tdiv64 *= num;
1410         do_div(tdiv64, denom * 16 * div);
1411         tty_termios_encode_baud_rate(termios,
1412                                 (speed_t)tdiv64, (speed_t)tdiv64);
1413
1414         num -= 1;
1415         denom -= 1;
1416
1417         ufcr = readl(sport->port.membase + UFCR);
1418         ufcr = (ufcr & (~UFCR_RFDIV)) | UFCR_RFDIV_REG(div);
1419         if (sport->dte_mode)
1420                 ufcr |= UFCR_DCEDTE;
1421         writel(ufcr, sport->port.membase + UFCR);
1422
1423         writel(num, sport->port.membase + UBIR);
1424         writel(denom, sport->port.membase + UBMR);
1425
1426         if (!is_imx1_uart(sport))
1427                 writel(sport->port.uartclk / div / 1000,
1428                                 sport->port.membase + IMX21_ONEMS);
1429
1430         writel(old_ucr1, sport->port.membase + UCR1);
1431
1432         /* set the parity, stop bits and data size */
1433         writel(ucr2 | old_txrxen, sport->port.membase + UCR2);
1434
1435         if (UART_ENABLE_MS(&sport->port, termios->c_cflag))
1436                 imx_enable_ms(&sport->port);
1437
1438         if (sport->dma_is_inited && !sport->dma_is_enabled)
1439                 imx_enable_dma(sport);
1440         spin_unlock_irqrestore(&sport->port.lock, flags);
1441 }
1442
1443 static const char *imx_type(struct uart_port *port)
1444 {
1445         struct imx_port *sport = (struct imx_port *)port;
1446
1447         return sport->port.type == PORT_IMX ? "IMX" : NULL;
1448 }
1449
1450 /*
1451  * Configure/autoconfigure the port.
1452  */
1453 static void imx_config_port(struct uart_port *port, int flags)
1454 {
1455         struct imx_port *sport = (struct imx_port *)port;
1456
1457         if (flags & UART_CONFIG_TYPE)
1458                 sport->port.type = PORT_IMX;
1459 }
1460
1461 /*
1462  * Verify the new serial_struct (for TIOCSSERIAL).
1463  * The only change we allow are to the flags and type, and
1464  * even then only between PORT_IMX and PORT_UNKNOWN
1465  */
1466 static int
1467 imx_verify_port(struct uart_port *port, struct serial_struct *ser)
1468 {
1469         struct imx_port *sport = (struct imx_port *)port;
1470         int ret = 0;
1471
1472         if (ser->type != PORT_UNKNOWN && ser->type != PORT_IMX)
1473                 ret = -EINVAL;
1474         if (sport->port.irq != ser->irq)
1475                 ret = -EINVAL;
1476         if (ser->io_type != UPIO_MEM)
1477                 ret = -EINVAL;
1478         if (sport->port.uartclk / 16 != ser->baud_base)
1479                 ret = -EINVAL;
1480         if (sport->port.mapbase != (unsigned long)ser->iomem_base)
1481                 ret = -EINVAL;
1482         if (sport->port.iobase != ser->port)
1483                 ret = -EINVAL;
1484         if (ser->hub6 != 0)
1485                 ret = -EINVAL;
1486         return ret;
1487 }
1488
1489 #if defined(CONFIG_CONSOLE_POLL)
1490 static int imx_poll_get_char(struct uart_port *port)
1491 {
1492         struct imx_port_ucrs old_ucr;
1493         unsigned int status;
1494         unsigned char c;
1495
1496         /* save control registers */
1497         imx_port_ucrs_save(port, &old_ucr);
1498
1499         /* disable interrupts */
1500         writel(UCR1_UARTEN, port->membase + UCR1);
1501         writel(old_ucr.ucr2 & ~(UCR2_ATEN | UCR2_RTSEN | UCR2_ESCI),
1502                port->membase + UCR2);
1503         writel(old_ucr.ucr3 & ~(UCR3_DCD | UCR3_RI | UCR3_DTREN),
1504                port->membase + UCR3);
1505
1506         /* poll */
1507         do {
1508                 status = readl(port->membase + USR2);
1509         } while (~status & USR2_RDR);
1510
1511         /* read */
1512         c = readl(port->membase + URXD0);
1513
1514         /* restore control registers */
1515         imx_port_ucrs_restore(port, &old_ucr);
1516
1517         return c;
1518 }
1519
1520 static void imx_poll_put_char(struct uart_port *port, unsigned char c)
1521 {
1522         struct imx_port_ucrs old_ucr;
1523         unsigned int status;
1524
1525         /* save control registers */
1526         imx_port_ucrs_save(port, &old_ucr);
1527
1528         /* disable interrupts */
1529         writel(UCR1_UARTEN, port->membase + UCR1);
1530         writel(old_ucr.ucr2 & ~(UCR2_ATEN | UCR2_RTSEN | UCR2_ESCI),
1531                port->membase + UCR2);
1532         writel(old_ucr.ucr3 & ~(UCR3_DCD | UCR3_RI | UCR3_DTREN),
1533                port->membase + UCR3);
1534
1535         /* drain */
1536         do {
1537                 status = readl(port->membase + USR1);
1538         } while (~status & USR1_TRDY);
1539
1540         /* write */
1541         writel(c, port->membase + URTX0);
1542
1543         /* flush */
1544         do {
1545                 status = readl(port->membase + USR2);
1546         } while (~status & USR2_TXDC);
1547
1548         /* restore control registers */
1549         imx_port_ucrs_restore(port, &old_ucr);
1550 }
1551 #endif
1552
1553 static struct uart_ops imx_pops = {
1554         .tx_empty       = imx_tx_empty,
1555         .set_mctrl      = imx_set_mctrl,
1556         .get_mctrl      = imx_get_mctrl,
1557         .stop_tx        = imx_stop_tx,
1558         .start_tx       = imx_start_tx,
1559         .stop_rx        = imx_stop_rx,
1560         .enable_ms      = imx_enable_ms,
1561         .break_ctl      = imx_break_ctl,
1562         .startup        = imx_startup,
1563         .shutdown       = imx_shutdown,
1564         .flush_buffer   = imx_flush_buffer,
1565         .set_termios    = imx_set_termios,
1566         .type           = imx_type,
1567         .config_port    = imx_config_port,
1568         .verify_port    = imx_verify_port,
1569 #if defined(CONFIG_CONSOLE_POLL)
1570         .poll_get_char  = imx_poll_get_char,
1571         .poll_put_char  = imx_poll_put_char,
1572 #endif
1573 };
1574
1575 static struct imx_port *imx_ports[UART_NR];
1576
1577 #ifdef CONFIG_SERIAL_IMX_CONSOLE
1578 static void imx_console_putchar(struct uart_port *port, int ch)
1579 {
1580         struct imx_port *sport = (struct imx_port *)port;
1581
1582         while (readl(sport->port.membase + uts_reg(sport)) & UTS_TXFULL)
1583                 barrier();
1584
1585         writel(ch, sport->port.membase + URTX0);
1586 }
1587
1588 /*
1589  * Interrupts are disabled on entering
1590  */
1591 static void
1592 imx_console_write(struct console *co, const char *s, unsigned int count)
1593 {
1594         struct imx_port *sport = imx_ports[co->index];
1595         struct imx_port_ucrs old_ucr;
1596         unsigned int ucr1;
1597         unsigned long flags = 0;
1598         int locked = 1;
1599         int retval;
1600
1601         retval = clk_enable(sport->clk_per);
1602         if (retval)
1603                 return;
1604         retval = clk_enable(sport->clk_ipg);
1605         if (retval) {
1606                 clk_disable(sport->clk_per);
1607                 return;
1608         }
1609
1610         if (sport->port.sysrq)
1611                 locked = 0;
1612         else if (oops_in_progress)
1613                 locked = spin_trylock_irqsave(&sport->port.lock, flags);
1614         else
1615                 spin_lock_irqsave(&sport->port.lock, flags);
1616
1617         /*
1618          *      First, save UCR1/2/3 and then disable interrupts
1619          */
1620         imx_port_ucrs_save(&sport->port, &old_ucr);
1621         ucr1 = old_ucr.ucr1;
1622
1623         if (is_imx1_uart(sport))
1624                 ucr1 |= IMX1_UCR1_UARTCLKEN;
1625         ucr1 |= UCR1_UARTEN;
1626         ucr1 &= ~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN);
1627
1628         writel(ucr1, sport->port.membase + UCR1);
1629
1630         writel(old_ucr.ucr2 | UCR2_TXEN, sport->port.membase + UCR2);
1631
1632         uart_console_write(&sport->port, s, count, imx_console_putchar);
1633
1634         /*
1635          *      Finally, wait for transmitter to become empty
1636          *      and restore UCR1/2/3
1637          */
1638         while (!(readl(sport->port.membase + USR2) & USR2_TXDC));
1639
1640         imx_port_ucrs_restore(&sport->port, &old_ucr);
1641
1642         if (locked)
1643                 spin_unlock_irqrestore(&sport->port.lock, flags);
1644
1645         clk_disable(sport->clk_ipg);
1646         clk_disable(sport->clk_per);
1647 }
1648
1649 /*
1650  * If the port was already initialised (eg, by a boot loader),
1651  * try to determine the current setup.
1652  */
1653 static void __init
1654 imx_console_get_options(struct imx_port *sport, int *baud,
1655                            int *parity, int *bits)
1656 {
1657
1658         if (readl(sport->port.membase + UCR1) & UCR1_UARTEN) {
1659                 /* ok, the port was enabled */
1660                 unsigned int ucr2, ubir, ubmr, uartclk;
1661                 unsigned int baud_raw;
1662                 unsigned int ucfr_rfdiv;
1663
1664                 ucr2 = readl(sport->port.membase + UCR2);
1665
1666                 *parity = 'n';
1667                 if (ucr2 & UCR2_PREN) {
1668                         if (ucr2 & UCR2_PROE)
1669                                 *parity = 'o';
1670                         else
1671                                 *parity = 'e';
1672                 }
1673
1674                 if (ucr2 & UCR2_WS)
1675                         *bits = 8;
1676                 else
1677                         *bits = 7;
1678
1679                 ubir = readl(sport->port.membase + UBIR) & 0xffff;
1680                 ubmr = readl(sport->port.membase + UBMR) & 0xffff;
1681
1682                 ucfr_rfdiv = (readl(sport->port.membase + UFCR) & UFCR_RFDIV) >> 7;
1683                 if (ucfr_rfdiv == 6)
1684                         ucfr_rfdiv = 7;
1685                 else
1686                         ucfr_rfdiv = 6 - ucfr_rfdiv;
1687
1688                 uartclk = clk_get_rate(sport->clk_per);
1689                 uartclk /= ucfr_rfdiv;
1690
1691                 {       /*
1692                          * The next code provides exact computation of
1693                          *   baud_raw = round(((uartclk/16) * (ubir + 1)) / (ubmr + 1))
1694                          * without need of float support or long long division,
1695                          * which would be required to prevent 32bit arithmetic overflow
1696                          */
1697                         unsigned int mul = ubir + 1;
1698                         unsigned int div = 16 * (ubmr + 1);
1699                         unsigned int rem = uartclk % div;
1700
1701                         baud_raw = (uartclk / div) * mul;
1702                         baud_raw += (rem * mul + div / 2) / div;
1703                         *baud = (baud_raw + 50) / 100 * 100;
1704                 }
1705
1706                 if (*baud != baud_raw)
1707                         pr_info("Console IMX rounded baud rate from %d to %d\n",
1708                                 baud_raw, *baud);
1709         }
1710 }
1711
1712 static int __init
1713 imx_console_setup(struct console *co, char *options)
1714 {
1715         struct imx_port *sport;
1716         int baud = 9600;
1717         int bits = 8;
1718         int parity = 'n';
1719         int flow = 'n';
1720         int retval;
1721
1722         /*
1723          * Check whether an invalid uart number has been specified, and
1724          * if so, search for the first available port that does have
1725          * console support.
1726          */
1727         if (co->index == -1 || co->index >= ARRAY_SIZE(imx_ports))
1728                 co->index = 0;
1729         sport = imx_ports[co->index];
1730         if (sport == NULL)
1731                 return -ENODEV;
1732
1733         /* For setting the registers, we only need to enable the ipg clock. */
1734         retval = clk_prepare_enable(sport->clk_ipg);
1735         if (retval)
1736                 goto error_console;
1737
1738         if (options)
1739                 uart_parse_options(options, &baud, &parity, &bits, &flow);
1740         else
1741                 imx_console_get_options(sport, &baud, &parity, &bits);
1742
1743         imx_setup_ufcr(sport, 0);
1744
1745         retval = uart_set_options(&sport->port, co, baud, parity, bits, flow);
1746
1747         clk_disable(sport->clk_ipg);
1748         if (retval) {
1749                 clk_unprepare(sport->clk_ipg);
1750                 goto error_console;
1751         }
1752
1753         retval = clk_prepare(sport->clk_per);
1754         if (retval)
1755                 clk_disable_unprepare(sport->clk_ipg);
1756
1757 error_console:
1758         return retval;
1759 }
1760
1761 static struct uart_driver imx_reg;
1762 static struct console imx_console = {
1763         .name           = DEV_NAME,
1764         .write          = imx_console_write,
1765         .device         = uart_console_device,
1766         .setup          = imx_console_setup,
1767         .flags          = CON_PRINTBUFFER,
1768         .index          = -1,
1769         .data           = &imx_reg,
1770 };
1771
1772 #define IMX_CONSOLE     &imx_console
1773 #else
1774 #define IMX_CONSOLE     NULL
1775 #endif
1776
1777 static struct uart_driver imx_reg = {
1778         .owner          = THIS_MODULE,
1779         .driver_name    = DRIVER_NAME,
1780         .dev_name       = DEV_NAME,
1781         .major          = SERIAL_IMX_MAJOR,
1782         .minor          = MINOR_START,
1783         .nr             = ARRAY_SIZE(imx_ports),
1784         .cons           = IMX_CONSOLE,
1785 };
1786
1787 static int serial_imx_suspend(struct platform_device *dev, pm_message_t state)
1788 {
1789         struct imx_port *sport = platform_get_drvdata(dev);
1790         unsigned int val;
1791
1792         /* enable wakeup from i.MX UART */
1793         val = readl(sport->port.membase + UCR3);
1794         val |= UCR3_AWAKEN;
1795         writel(val, sport->port.membase + UCR3);
1796
1797         uart_suspend_port(&imx_reg, &sport->port);
1798
1799         return 0;
1800 }
1801
1802 static int serial_imx_resume(struct platform_device *dev)
1803 {
1804         struct imx_port *sport = platform_get_drvdata(dev);
1805         unsigned int val;
1806
1807         /* disable wakeup from i.MX UART */
1808         val = readl(sport->port.membase + UCR3);
1809         val &= ~UCR3_AWAKEN;
1810         writel(val, sport->port.membase + UCR3);
1811
1812         uart_resume_port(&imx_reg, &sport->port);
1813
1814         return 0;
1815 }
1816
1817 #ifdef CONFIG_OF
1818 /*
1819  * This function returns 1 iff pdev isn't a device instatiated by dt, 0 iff it
1820  * could successfully get all information from dt or a negative errno.
1821  */
1822 static int serial_imx_probe_dt(struct imx_port *sport,
1823                 struct platform_device *pdev)
1824 {
1825         struct device_node *np = pdev->dev.of_node;
1826         const struct of_device_id *of_id =
1827                         of_match_device(imx_uart_dt_ids, &pdev->dev);
1828         int ret;
1829
1830         if (!np)
1831                 /* no device tree device */
1832                 return 1;
1833
1834         ret = of_alias_get_id(np, "serial");
1835         if (ret < 0) {
1836                 dev_err(&pdev->dev, "failed to get alias id, errno %d\n", ret);
1837                 return ret;
1838         }
1839         sport->port.line = ret;
1840
1841         if (of_get_property(np, "fsl,uart-has-rtscts", NULL))
1842                 sport->have_rtscts = 1;
1843
1844         if (of_get_property(np, "fsl,irda-mode", NULL))
1845                 sport->use_irda = 1;
1846
1847         if (of_get_property(np, "fsl,dte-mode", NULL))
1848                 sport->dte_mode = 1;
1849
1850         sport->devdata = of_id->data;
1851
1852         return 0;
1853 }
1854 #else
1855 static inline int serial_imx_probe_dt(struct imx_port *sport,
1856                 struct platform_device *pdev)
1857 {
1858         return 1;
1859 }
1860 #endif
1861
1862 static void serial_imx_probe_pdata(struct imx_port *sport,
1863                 struct platform_device *pdev)
1864 {
1865         struct imxuart_platform_data *pdata = dev_get_platdata(&pdev->dev);
1866
1867         sport->port.line = pdev->id;
1868         sport->devdata = (struct imx_uart_data  *) pdev->id_entry->driver_data;
1869
1870         if (!pdata)
1871                 return;
1872
1873         if (pdata->flags & IMXUART_HAVE_RTSCTS)
1874                 sport->have_rtscts = 1;
1875
1876         if (pdata->flags & IMXUART_IRDA)
1877                 sport->use_irda = 1;
1878 }
1879
1880 static int serial_imx_probe(struct platform_device *pdev)
1881 {
1882         struct imx_port *sport;
1883         void __iomem *base;
1884         int ret = 0;
1885         struct resource *res;
1886
1887         sport = devm_kzalloc(&pdev->dev, sizeof(*sport), GFP_KERNEL);
1888         if (!sport)
1889                 return -ENOMEM;
1890
1891         ret = serial_imx_probe_dt(sport, pdev);
1892         if (ret > 0)
1893                 serial_imx_probe_pdata(sport, pdev);
1894         else if (ret < 0)
1895                 return ret;
1896
1897         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1898         base = devm_ioremap_resource(&pdev->dev, res);
1899         if (IS_ERR(base))
1900                 return PTR_ERR(base);
1901
1902         sport->port.dev = &pdev->dev;
1903         sport->port.mapbase = res->start;
1904         sport->port.membase = base;
1905         sport->port.type = PORT_IMX,
1906         sport->port.iotype = UPIO_MEM;
1907         sport->port.irq = platform_get_irq(pdev, 0);
1908         sport->rxirq = platform_get_irq(pdev, 0);
1909         sport->txirq = platform_get_irq(pdev, 1);
1910         sport->rtsirq = platform_get_irq(pdev, 2);
1911         sport->port.fifosize = 32;
1912         sport->port.ops = &imx_pops;
1913         sport->port.flags = UPF_BOOT_AUTOCONF;
1914         init_timer(&sport->timer);
1915         sport->timer.function = imx_timeout;
1916         sport->timer.data     = (unsigned long)sport;
1917
1918         sport->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
1919         if (IS_ERR(sport->clk_ipg)) {
1920                 ret = PTR_ERR(sport->clk_ipg);
1921                 dev_err(&pdev->dev, "failed to get ipg clk: %d\n", ret);
1922                 return ret;
1923         }
1924
1925         sport->clk_per = devm_clk_get(&pdev->dev, "per");
1926         if (IS_ERR(sport->clk_per)) {
1927                 ret = PTR_ERR(sport->clk_per);
1928                 dev_err(&pdev->dev, "failed to get per clk: %d\n", ret);
1929                 return ret;
1930         }
1931
1932         sport->port.uartclk = clk_get_rate(sport->clk_per);
1933
1934         imx_ports[sport->port.line] = sport;
1935
1936         platform_set_drvdata(pdev, sport);
1937
1938         return uart_add_one_port(&imx_reg, &sport->port);
1939 }
1940
1941 static int serial_imx_remove(struct platform_device *pdev)
1942 {
1943         struct imx_port *sport = platform_get_drvdata(pdev);
1944
1945         return uart_remove_one_port(&imx_reg, &sport->port);
1946 }
1947
1948 static struct platform_driver serial_imx_driver = {
1949         .probe          = serial_imx_probe,
1950         .remove         = serial_imx_remove,
1951
1952         .suspend        = serial_imx_suspend,
1953         .resume         = serial_imx_resume,
1954         .id_table       = imx_uart_devtype,
1955         .driver         = {
1956                 .name   = "imx-uart",
1957                 .owner  = THIS_MODULE,
1958                 .of_match_table = imx_uart_dt_ids,
1959         },
1960 };
1961
1962 static int __init imx_serial_init(void)
1963 {
1964         int ret;
1965
1966         pr_info("Serial: IMX driver\n");
1967
1968         ret = uart_register_driver(&imx_reg);
1969         if (ret)
1970                 return ret;
1971
1972         ret = platform_driver_register(&serial_imx_driver);
1973         if (ret != 0)
1974                 uart_unregister_driver(&imx_reg);
1975
1976         return ret;
1977 }
1978
1979 static void __exit imx_serial_exit(void)
1980 {
1981         platform_driver_unregister(&serial_imx_driver);
1982         uart_unregister_driver(&imx_reg);
1983 }
1984
1985 module_init(imx_serial_init);
1986 module_exit(imx_serial_exit);
1987
1988 MODULE_AUTHOR("Sascha Hauer");
1989 MODULE_DESCRIPTION("IMX generic serial port driver");
1990 MODULE_LICENSE("GPL");
1991 MODULE_ALIAS("platform:imx-uart");