1
2
3
4
5
6
7
8
9
10
11#include <linux/module.h>
12#include <linux/ioport.h>
13#include <linux/init.h>
14#include <linux/console.h>
15#include <linux/sysrq.h>
16#include <linux/platform_device.h>
17#include <linux/tty.h>
18#include <linux/tty_flip.h>
19#include <linux/serial_core.h>
20#include <linux/serial.h>
21#include <linux/clk.h>
22#include <linux/delay.h>
23#include <linux/ktime.h>
24#include <linux/pinctrl/consumer.h>
25#include <linux/rational.h>
26#include <linux/slab.h>
27#include <linux/of.h>
28#include <linux/of_device.h>
29#include <linux/io.h>
30#include <linux/dma-mapping.h>
31
32#include <asm/irq.h>
33#include <linux/platform_data/serial-imx.h>
34#include <linux/platform_data/dma-imx.h>
35
36#include "serial_mctrl_gpio.h"
37
38
39#define URXD0 0x0
40#define URTX0 0x40
41#define UCR1 0x80
42#define UCR2 0x84
43#define UCR3 0x88
44#define UCR4 0x8c
45#define UFCR 0x90
46#define USR1 0x94
47#define USR2 0x98
48#define UESC 0x9c
49#define UTIM 0xa0
50#define UBIR 0xa4
51#define UBMR 0xa8
52#define UBRC 0xac
53#define IMX21_ONEMS 0xb0
54#define IMX1_UTS 0xd0
55#define IMX21_UTS 0xb4
56
57
58#define URXD_DUMMY_READ (1<<16)
59#define URXD_CHARRDY (1<<15)
60#define URXD_ERR (1<<14)
61#define URXD_OVRRUN (1<<13)
62#define URXD_FRMERR (1<<12)
63#define URXD_BRK (1<<11)
64#define URXD_PRERR (1<<10)
65#define URXD_RX_DATA (0xFF<<0)
66#define UCR1_ADEN (1<<15)
67#define UCR1_ADBR (1<<14)
68#define UCR1_TRDYEN (1<<13)
69#define UCR1_IDEN (1<<12)
70#define UCR1_ICD_REG(x) (((x) & 3) << 10)
71#define UCR1_RRDYEN (1<<9)
72#define UCR1_RXDMAEN (1<<8)
73#define UCR1_IREN (1<<7)
74#define UCR1_TXMPTYEN (1<<6)
75#define UCR1_RTSDEN (1<<5)
76#define UCR1_SNDBRK (1<<4)
77#define UCR1_TXDMAEN (1<<3)
78#define IMX1_UCR1_UARTCLKEN (1<<2)
79#define UCR1_ATDMAEN (1<<2)
80#define UCR1_DOZE (1<<1)
81#define UCR1_UARTEN (1<<0)
82#define UCR2_ESCI (1<<15)
83#define UCR2_IRTS (1<<14)
84#define UCR2_CTSC (1<<13)
85#define UCR2_CTS (1<<12)
86#define UCR2_ESCEN (1<<11)
87#define UCR2_PREN (1<<8)
88#define UCR2_PROE (1<<7)
89#define UCR2_STPB (1<<6)
90#define UCR2_WS (1<<5)
91#define UCR2_RTSEN (1<<4)
92#define UCR2_ATEN (1<<3)
93#define UCR2_TXEN (1<<2)
94#define UCR2_RXEN (1<<1)
95#define UCR2_SRST (1<<0)
96#define UCR3_DTREN (1<<13)
97#define UCR3_PARERREN (1<<12)
98#define UCR3_FRAERREN (1<<11)
99#define UCR3_DSR (1<<10)
100#define UCR3_DCD (1<<9)
101#define UCR3_RI (1<<8)
102#define UCR3_ADNIMP (1<<7)
103#define UCR3_RXDSEN (1<<6)
104#define UCR3_AIRINTEN (1<<5)
105#define UCR3_AWAKEN (1<<4)
106#define UCR3_DTRDEN (1<<3)
107#define IMX21_UCR3_RXDMUXSEL (1<<2)
108#define UCR3_INVT (1<<1)
109#define UCR3_BPEN (1<<0)
110#define UCR4_CTSTL_SHF 10
111#define UCR4_CTSTL_MASK 0x3F
112#define UCR4_INVR (1<<9)
113#define UCR4_ENIRI (1<<8)
114#define UCR4_WKEN (1<<7)
115#define UCR4_REF16 (1<<6)
116#define UCR4_IDDMAEN (1<<6)
117#define UCR4_IRSC (1<<5)
118#define UCR4_TCEN (1<<3)
119#define UCR4_BKEN (1<<2)
120#define UCR4_OREN (1<<1)
121#define UCR4_DREN (1<<0)
122#define UFCR_RXTL_SHF 0
123#define UFCR_DCEDTE (1<<6)
124#define UFCR_RFDIV (7<<7)
125#define UFCR_RFDIV_REG(x) (((x) < 7 ? 6 - (x) : 6) << 7)
126#define UFCR_TXTL_SHF 10
127#define USR1_PARITYERR (1<<15)
128#define USR1_RTSS (1<<14)
129#define USR1_TRDY (1<<13)
130#define USR1_RTSD (1<<12)
131#define USR1_ESCF (1<<11)
132#define USR1_FRAMERR (1<<10)
133#define USR1_RRDY (1<<9)
134#define USR1_AGTIM (1<<8)
135#define USR1_DTRD (1<<7)
136#define USR1_RXDS (1<<6)
137#define USR1_AIRINT (1<<5)
138#define USR1_AWAKE (1<<4)
139#define USR2_ADET (1<<15)
140#define USR2_TXFE (1<<14)
141#define USR2_DTRF (1<<13)
142#define USR2_IDLE (1<<12)
143#define USR2_RIDELT (1<<10)
144#define USR2_RIIN (1<<9)
145#define USR2_IRINT (1<<8)
146#define USR2_WAKE (1<<7)
147#define USR2_DCDIN (1<<5)
148#define USR2_RTSF (1<<4)
149#define USR2_TXDC (1<<3)
150#define USR2_BRCD (1<<2)
151#define USR2_ORE (1<<1)
152#define USR2_RDR (1<<0)
153#define UTS_FRCPERR (1<<13)
154#define UTS_LOOP (1<<12)
155#define UTS_TXEMPTY (1<<6)
156#define UTS_RXEMPTY (1<<5)
157#define UTS_TXFULL (1<<4)
158#define UTS_RXFULL (1<<3)
159#define UTS_SOFTRST (1<<0)
160
161
162#define SERIAL_IMX_MAJOR 207
163#define MINOR_START 16
164#define DEV_NAME "ttymxc"
165
166
167
168
169
170
171
172#define MCTRL_TIMEOUT (250*HZ/1000)
173
174#define DRIVER_NAME "IMX-uart"
175
176#define UART_NR 8
177
178
179enum imx_uart_type {
180 IMX1_UART,
181 IMX21_UART,
182 IMX53_UART,
183 IMX6Q_UART,
184};
185
186
187struct imx_uart_data {
188 unsigned uts_reg;
189 enum imx_uart_type devtype;
190};
191
192enum imx_tx_state {
193 OFF,
194 WAIT_AFTER_RTS,
195 SEND,
196 WAIT_AFTER_SEND,
197};
198
199struct imx_port {
200 struct uart_port port;
201 struct timer_list timer;
202 unsigned int old_status;
203 unsigned int have_rtscts:1;
204 unsigned int have_rtsgpio:1;
205 unsigned int dte_mode:1;
206 unsigned int inverted_tx:1;
207 unsigned int inverted_rx:1;
208 struct clk *clk_ipg;
209 struct clk *clk_per;
210 const struct imx_uart_data *devdata;
211
212 struct mctrl_gpios *gpios;
213
214
215 unsigned int ucr1;
216 unsigned int ucr2;
217 unsigned int ucr3;
218 unsigned int ucr4;
219 unsigned int ufcr;
220
221
222 unsigned int dma_is_enabled:1;
223 unsigned int dma_is_rxing:1;
224 unsigned int dma_is_txing:1;
225 struct dma_chan *dma_chan_rx, *dma_chan_tx;
226 struct scatterlist rx_sgl, tx_sgl[2];
227 void *rx_buf;
228 struct circ_buf rx_ring;
229 unsigned int rx_periods;
230 dma_cookie_t rx_cookie;
231 unsigned int tx_bytes;
232 unsigned int dma_tx_nents;
233 unsigned int saved_reg[10];
234 bool context_saved;
235
236 enum imx_tx_state tx_state;
237 struct hrtimer trigger_start_tx;
238 struct hrtimer trigger_stop_tx;
239};
240
241struct imx_port_ucrs {
242 unsigned int ucr1;
243 unsigned int ucr2;
244 unsigned int ucr3;
245};
246
247static struct imx_uart_data imx_uart_devdata[] = {
248 [IMX1_UART] = {
249 .uts_reg = IMX1_UTS,
250 .devtype = IMX1_UART,
251 },
252 [IMX21_UART] = {
253 .uts_reg = IMX21_UTS,
254 .devtype = IMX21_UART,
255 },
256 [IMX53_UART] = {
257 .uts_reg = IMX21_UTS,
258 .devtype = IMX53_UART,
259 },
260 [IMX6Q_UART] = {
261 .uts_reg = IMX21_UTS,
262 .devtype = IMX6Q_UART,
263 },
264};
265
266static const struct platform_device_id imx_uart_devtype[] = {
267 {
268 .name = "imx1-uart",
269 .driver_data = (kernel_ulong_t) &imx_uart_devdata[IMX1_UART],
270 }, {
271 .name = "imx21-uart",
272 .driver_data = (kernel_ulong_t) &imx_uart_devdata[IMX21_UART],
273 }, {
274 .name = "imx53-uart",
275 .driver_data = (kernel_ulong_t) &imx_uart_devdata[IMX53_UART],
276 }, {
277 .name = "imx6q-uart",
278 .driver_data = (kernel_ulong_t) &imx_uart_devdata[IMX6Q_UART],
279 }, {
280
281 }
282};
283MODULE_DEVICE_TABLE(platform, imx_uart_devtype);
284
285static const struct of_device_id imx_uart_dt_ids[] = {
286 { .compatible = "fsl,imx6q-uart", .data = &imx_uart_devdata[IMX6Q_UART], },
287 { .compatible = "fsl,imx53-uart", .data = &imx_uart_devdata[IMX53_UART], },
288 { .compatible = "fsl,imx1-uart", .data = &imx_uart_devdata[IMX1_UART], },
289 { .compatible = "fsl,imx21-uart", .data = &imx_uart_devdata[IMX21_UART], },
290 { }
291};
292MODULE_DEVICE_TABLE(of, imx_uart_dt_ids);
293
294static void imx_uart_writel(struct imx_port *sport, u32 val, u32 offset)
295{
296 switch (offset) {
297 case UCR1:
298 sport->ucr1 = val;
299 break;
300 case UCR2:
301 sport->ucr2 = val;
302 break;
303 case UCR3:
304 sport->ucr3 = val;
305 break;
306 case UCR4:
307 sport->ucr4 = val;
308 break;
309 case UFCR:
310 sport->ufcr = val;
311 break;
312 default:
313 break;
314 }
315 writel(val, sport->port.membase + offset);
316}
317
318static u32 imx_uart_readl(struct imx_port *sport, u32 offset)
319{
320 switch (offset) {
321 case UCR1:
322 return sport->ucr1;
323 break;
324 case UCR2:
325
326
327
328
329
330
331 if (!(sport->ucr2 & UCR2_SRST))
332 sport->ucr2 = readl(sport->port.membase + offset);
333 return sport->ucr2;
334 break;
335 case UCR3:
336 return sport->ucr3;
337 break;
338 case UCR4:
339 return sport->ucr4;
340 break;
341 case UFCR:
342 return sport->ufcr;
343 break;
344 default:
345 return readl(sport->port.membase + offset);
346 }
347}
348
349static inline unsigned imx_uart_uts_reg(struct imx_port *sport)
350{
351 return sport->devdata->uts_reg;
352}
353
354static inline int imx_uart_is_imx1(struct imx_port *sport)
355{
356 return sport->devdata->devtype == IMX1_UART;
357}
358
359static inline int imx_uart_is_imx21(struct imx_port *sport)
360{
361 return sport->devdata->devtype == IMX21_UART;
362}
363
364static inline int imx_uart_is_imx53(struct imx_port *sport)
365{
366 return sport->devdata->devtype == IMX53_UART;
367}
368
369static inline int imx_uart_is_imx6q(struct imx_port *sport)
370{
371 return sport->devdata->devtype == IMX6Q_UART;
372}
373
374
375
376#if IS_ENABLED(CONFIG_SERIAL_IMX_CONSOLE)
377static void imx_uart_ucrs_save(struct imx_port *sport,
378 struct imx_port_ucrs *ucr)
379{
380
381 ucr->ucr1 = imx_uart_readl(sport, UCR1);
382 ucr->ucr2 = imx_uart_readl(sport, UCR2);
383 ucr->ucr3 = imx_uart_readl(sport, UCR3);
384}
385
386static void imx_uart_ucrs_restore(struct imx_port *sport,
387 struct imx_port_ucrs *ucr)
388{
389
390 imx_uart_writel(sport, ucr->ucr1, UCR1);
391 imx_uart_writel(sport, ucr->ucr2, UCR2);
392 imx_uart_writel(sport, ucr->ucr3, UCR3);
393}
394#endif
395
396
397static void imx_uart_rts_active(struct imx_port *sport, u32 *ucr2)
398{
399 *ucr2 &= ~(UCR2_CTSC | UCR2_CTS);
400
401 sport->port.mctrl |= TIOCM_RTS;
402 mctrl_gpio_set(sport->gpios, sport->port.mctrl);
403}
404
405
406static void imx_uart_rts_inactive(struct imx_port *sport, u32 *ucr2)
407{
408 *ucr2 &= ~UCR2_CTSC;
409 *ucr2 |= UCR2_CTS;
410
411 sport->port.mctrl &= ~TIOCM_RTS;
412 mctrl_gpio_set(sport->gpios, sport->port.mctrl);
413}
414
415static void start_hrtimer_ms(struct hrtimer *hrt, unsigned long msec)
416{
417 long sec = msec / MSEC_PER_SEC;
418 long nsec = (msec % MSEC_PER_SEC) * 1000000;
419 ktime_t t = ktime_set(sec, nsec);
420
421 hrtimer_start(hrt, t, HRTIMER_MODE_REL);
422}
423
424
425static void imx_uart_start_rx(struct uart_port *port)
426{
427 struct imx_port *sport = (struct imx_port *)port;
428 unsigned int ucr1, ucr2;
429
430 ucr1 = imx_uart_readl(sport, UCR1);
431 ucr2 = imx_uart_readl(sport, UCR2);
432
433 ucr2 |= UCR2_RXEN;
434
435 if (sport->dma_is_enabled) {
436 ucr1 |= UCR1_RXDMAEN | UCR1_ATDMAEN;
437 } else {
438 ucr1 |= UCR1_RRDYEN;
439 ucr2 |= UCR2_ATEN;
440 }
441
442
443 imx_uart_writel(sport, ucr2, UCR2);
444 imx_uart_writel(sport, ucr1, UCR1);
445}
446
447
448static void imx_uart_stop_tx(struct uart_port *port)
449{
450 struct imx_port *sport = (struct imx_port *)port;
451 u32 ucr1, ucr4, usr2;
452
453 if (sport->tx_state == OFF)
454 return;
455
456
457
458
459
460 if (sport->dma_is_txing)
461 return;
462
463 ucr1 = imx_uart_readl(sport, UCR1);
464 imx_uart_writel(sport, ucr1 & ~UCR1_TRDYEN, UCR1);
465
466 usr2 = imx_uart_readl(sport, USR2);
467 if (!(usr2 & USR2_TXDC)) {
468
469 return;
470 }
471
472 ucr4 = imx_uart_readl(sport, UCR4);
473 ucr4 &= ~UCR4_TCEN;
474 imx_uart_writel(sport, ucr4, UCR4);
475
476
477 if (port->rs485.flags & SER_RS485_ENABLED) {
478 if (sport->tx_state == SEND) {
479 sport->tx_state = WAIT_AFTER_SEND;
480 start_hrtimer_ms(&sport->trigger_stop_tx,
481 port->rs485.delay_rts_after_send);
482 return;
483 }
484
485 if (sport->tx_state == WAIT_AFTER_RTS ||
486 sport->tx_state == WAIT_AFTER_SEND) {
487 u32 ucr2;
488
489 hrtimer_try_to_cancel(&sport->trigger_start_tx);
490
491 ucr2 = imx_uart_readl(sport, UCR2);
492 if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
493 imx_uart_rts_active(sport, &ucr2);
494 else
495 imx_uart_rts_inactive(sport, &ucr2);
496 imx_uart_writel(sport, ucr2, UCR2);
497
498 imx_uart_start_rx(port);
499
500 sport->tx_state = OFF;
501 }
502 } else {
503 sport->tx_state = OFF;
504 }
505}
506
507
508static void imx_uart_stop_rx(struct uart_port *port)
509{
510 struct imx_port *sport = (struct imx_port *)port;
511 u32 ucr1, ucr2;
512
513 ucr1 = imx_uart_readl(sport, UCR1);
514 ucr2 = imx_uart_readl(sport, UCR2);
515
516 if (sport->dma_is_enabled) {
517 ucr1 &= ~(UCR1_RXDMAEN | UCR1_ATDMAEN);
518 } else {
519 ucr1 &= ~UCR1_RRDYEN;
520 ucr2 &= ~UCR2_ATEN;
521 }
522 imx_uart_writel(sport, ucr1, UCR1);
523
524 ucr2 &= ~UCR2_RXEN;
525 imx_uart_writel(sport, ucr2, UCR2);
526}
527
528
529static void imx_uart_enable_ms(struct uart_port *port)
530{
531 struct imx_port *sport = (struct imx_port *)port;
532
533 mod_timer(&sport->timer, jiffies);
534
535 mctrl_gpio_enable_ms(sport->gpios);
536}
537
538static void imx_uart_dma_tx(struct imx_port *sport);
539
540
541static inline void imx_uart_transmit_buffer(struct imx_port *sport)
542{
543 struct circ_buf *xmit = &sport->port.state->xmit;
544
545 if (sport->port.x_char) {
546
547 imx_uart_writel(sport, sport->port.x_char, URTX0);
548 sport->port.icount.tx++;
549 sport->port.x_char = 0;
550 return;
551 }
552
553 if (uart_circ_empty(xmit) || uart_tx_stopped(&sport->port)) {
554 imx_uart_stop_tx(&sport->port);
555 return;
556 }
557
558 if (sport->dma_is_enabled) {
559 u32 ucr1;
560
561
562
563
564 ucr1 = imx_uart_readl(sport, UCR1);
565 ucr1 &= ~UCR1_TRDYEN;
566 if (sport->dma_is_txing) {
567 ucr1 |= UCR1_TXDMAEN;
568 imx_uart_writel(sport, ucr1, UCR1);
569 } else {
570 imx_uart_writel(sport, ucr1, UCR1);
571 imx_uart_dma_tx(sport);
572 }
573
574 return;
575 }
576
577 while (!uart_circ_empty(xmit) &&
578 !(imx_uart_readl(sport, imx_uart_uts_reg(sport)) & UTS_TXFULL)) {
579
580
581 imx_uart_writel(sport, xmit->buf[xmit->tail], URTX0);
582 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
583 sport->port.icount.tx++;
584 }
585
586 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
587 uart_write_wakeup(&sport->port);
588
589 if (uart_circ_empty(xmit))
590 imx_uart_stop_tx(&sport->port);
591}
592
593static void imx_uart_dma_tx_callback(void *data)
594{
595 struct imx_port *sport = data;
596 struct scatterlist *sgl = &sport->tx_sgl[0];
597 struct circ_buf *xmit = &sport->port.state->xmit;
598 unsigned long flags;
599 u32 ucr1;
600
601 spin_lock_irqsave(&sport->port.lock, flags);
602
603 dma_unmap_sg(sport->port.dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE);
604
605 ucr1 = imx_uart_readl(sport, UCR1);
606 ucr1 &= ~UCR1_TXDMAEN;
607 imx_uart_writel(sport, ucr1, UCR1);
608
609
610 xmit->tail = (xmit->tail + sport->tx_bytes) & (UART_XMIT_SIZE - 1);
611 sport->port.icount.tx += sport->tx_bytes;
612
613 dev_dbg(sport->port.dev, "we finish the TX DMA.\n");
614
615 sport->dma_is_txing = 0;
616
617 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
618 uart_write_wakeup(&sport->port);
619
620 if (!uart_circ_empty(xmit) && !uart_tx_stopped(&sport->port))
621 imx_uart_dma_tx(sport);
622 else if (sport->port.rs485.flags & SER_RS485_ENABLED) {
623 u32 ucr4 = imx_uart_readl(sport, UCR4);
624 ucr4 |= UCR4_TCEN;
625 imx_uart_writel(sport, ucr4, UCR4);
626 }
627
628 spin_unlock_irqrestore(&sport->port.lock, flags);
629}
630
631
632static void imx_uart_dma_tx(struct imx_port *sport)
633{
634 struct circ_buf *xmit = &sport->port.state->xmit;
635 struct scatterlist *sgl = sport->tx_sgl;
636 struct dma_async_tx_descriptor *desc;
637 struct dma_chan *chan = sport->dma_chan_tx;
638 struct device *dev = sport->port.dev;
639 u32 ucr1, ucr4;
640 int ret;
641
642 if (sport->dma_is_txing)
643 return;
644
645 ucr4 = imx_uart_readl(sport, UCR4);
646 ucr4 &= ~UCR4_TCEN;
647 imx_uart_writel(sport, ucr4, UCR4);
648
649 sport->tx_bytes = uart_circ_chars_pending(xmit);
650
651 if (xmit->tail < xmit->head || xmit->head == 0) {
652 sport->dma_tx_nents = 1;
653 sg_init_one(sgl, xmit->buf + xmit->tail, sport->tx_bytes);
654 } else {
655 sport->dma_tx_nents = 2;
656 sg_init_table(sgl, 2);
657 sg_set_buf(sgl, xmit->buf + xmit->tail,
658 UART_XMIT_SIZE - xmit->tail);
659 sg_set_buf(sgl + 1, xmit->buf, xmit->head);
660 }
661
662 ret = dma_map_sg(dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE);
663 if (ret == 0) {
664 dev_err(dev, "DMA mapping error for TX.\n");
665 return;
666 }
667 desc = dmaengine_prep_slave_sg(chan, sgl, ret,
668 DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT);
669 if (!desc) {
670 dma_unmap_sg(dev, sgl, sport->dma_tx_nents,
671 DMA_TO_DEVICE);
672 dev_err(dev, "We cannot prepare for the TX slave dma!\n");
673 return;
674 }
675 desc->callback = imx_uart_dma_tx_callback;
676 desc->callback_param = sport;
677
678 dev_dbg(dev, "TX: prepare to send %lu bytes by DMA.\n",
679 uart_circ_chars_pending(xmit));
680
681 ucr1 = imx_uart_readl(sport, UCR1);
682 ucr1 |= UCR1_TXDMAEN;
683 imx_uart_writel(sport, ucr1, UCR1);
684
685
686 sport->dma_is_txing = 1;
687 dmaengine_submit(desc);
688 dma_async_issue_pending(chan);
689 return;
690}
691
692
693static void imx_uart_start_tx(struct uart_port *port)
694{
695 struct imx_port *sport = (struct imx_port *)port;
696 u32 ucr1;
697
698 if (!sport->port.x_char && uart_circ_empty(&port->state->xmit))
699 return;
700
701
702
703
704
705
706
707 if (port->rs485.flags & SER_RS485_ENABLED) {
708 if (sport->tx_state == OFF) {
709 u32 ucr2 = imx_uart_readl(sport, UCR2);
710 if (port->rs485.flags & SER_RS485_RTS_ON_SEND)
711 imx_uart_rts_active(sport, &ucr2);
712 else
713 imx_uart_rts_inactive(sport, &ucr2);
714 imx_uart_writel(sport, ucr2, UCR2);
715
716 if (!(port->rs485.flags & SER_RS485_RX_DURING_TX))
717 imx_uart_stop_rx(port);
718
719 sport->tx_state = WAIT_AFTER_RTS;
720 start_hrtimer_ms(&sport->trigger_start_tx,
721 port->rs485.delay_rts_before_send);
722 return;
723 }
724
725 if (sport->tx_state == WAIT_AFTER_SEND
726 || sport->tx_state == WAIT_AFTER_RTS) {
727
728 hrtimer_try_to_cancel(&sport->trigger_stop_tx);
729
730
731
732
733
734
735 if (!sport->dma_is_enabled) {
736 u32 ucr4 = imx_uart_readl(sport, UCR4);
737 ucr4 |= UCR4_TCEN;
738 imx_uart_writel(sport, ucr4, UCR4);
739 }
740
741 sport->tx_state = SEND;
742 }
743 } else {
744 sport->tx_state = SEND;
745 }
746
747 if (!sport->dma_is_enabled) {
748 ucr1 = imx_uart_readl(sport, UCR1);
749 imx_uart_writel(sport, ucr1 | UCR1_TRDYEN, UCR1);
750 }
751
752 if (sport->dma_is_enabled) {
753 if (sport->port.x_char) {
754
755
756 ucr1 = imx_uart_readl(sport, UCR1);
757 ucr1 &= ~UCR1_TXDMAEN;
758 ucr1 |= UCR1_TRDYEN;
759 imx_uart_writel(sport, ucr1, UCR1);
760 return;
761 }
762
763 if (!uart_circ_empty(&port->state->xmit) &&
764 !uart_tx_stopped(port))
765 imx_uart_dma_tx(sport);
766 return;
767 }
768}
769
770static irqreturn_t __imx_uart_rtsint(int irq, void *dev_id)
771{
772 struct imx_port *sport = dev_id;
773 u32 usr1;
774
775 imx_uart_writel(sport, USR1_RTSD, USR1);
776 usr1 = imx_uart_readl(sport, USR1) & USR1_RTSS;
777 uart_handle_cts_change(&sport->port, !!usr1);
778 wake_up_interruptible(&sport->port.state->port.delta_msr_wait);
779
780 return IRQ_HANDLED;
781}
782
783static irqreturn_t imx_uart_rtsint(int irq, void *dev_id)
784{
785 struct imx_port *sport = dev_id;
786 irqreturn_t ret;
787
788 spin_lock(&sport->port.lock);
789
790 ret = __imx_uart_rtsint(irq, dev_id);
791
792 spin_unlock(&sport->port.lock);
793
794 return ret;
795}
796
797static irqreturn_t imx_uart_txint(int irq, void *dev_id)
798{
799 struct imx_port *sport = dev_id;
800
801 spin_lock(&sport->port.lock);
802 imx_uart_transmit_buffer(sport);
803 spin_unlock(&sport->port.lock);
804 return IRQ_HANDLED;
805}
806
807static irqreturn_t __imx_uart_rxint(int irq, void *dev_id)
808{
809 struct imx_port *sport = dev_id;
810 unsigned int rx, flg, ignored = 0;
811 struct tty_port *port = &sport->port.state->port;
812
813 while (imx_uart_readl(sport, USR2) & USR2_RDR) {
814 u32 usr2;
815
816 flg = TTY_NORMAL;
817 sport->port.icount.rx++;
818
819 rx = imx_uart_readl(sport, URXD0);
820
821 usr2 = imx_uart_readl(sport, USR2);
822 if (usr2 & USR2_BRCD) {
823 imx_uart_writel(sport, USR2_BRCD, USR2);
824 if (uart_handle_break(&sport->port))
825 continue;
826 }
827
828 if (uart_handle_sysrq_char(&sport->port, (unsigned char)rx))
829 continue;
830
831 if (unlikely(rx & URXD_ERR)) {
832 if (rx & URXD_BRK)
833 sport->port.icount.brk++;
834 else if (rx & URXD_PRERR)
835 sport->port.icount.parity++;
836 else if (rx & URXD_FRMERR)
837 sport->port.icount.frame++;
838 if (rx & URXD_OVRRUN)
839 sport->port.icount.overrun++;
840
841 if (rx & sport->port.ignore_status_mask) {
842 if (++ignored > 100)
843 goto out;
844 continue;
845 }
846
847 rx &= (sport->port.read_status_mask | 0xFF);
848
849 if (rx & URXD_BRK)
850 flg = TTY_BREAK;
851 else if (rx & URXD_PRERR)
852 flg = TTY_PARITY;
853 else if (rx & URXD_FRMERR)
854 flg = TTY_FRAME;
855 if (rx & URXD_OVRRUN)
856 flg = TTY_OVERRUN;
857
858 sport->port.sysrq = 0;
859 }
860
861 if (sport->port.ignore_status_mask & URXD_DUMMY_READ)
862 goto out;
863
864 if (tty_insert_flip_char(port, rx, flg) == 0)
865 sport->port.icount.buf_overrun++;
866 }
867
868out:
869 tty_flip_buffer_push(port);
870
871 return IRQ_HANDLED;
872}
873
874static irqreturn_t imx_uart_rxint(int irq, void *dev_id)
875{
876 struct imx_port *sport = dev_id;
877 irqreturn_t ret;
878
879 spin_lock(&sport->port.lock);
880
881 ret = __imx_uart_rxint(irq, dev_id);
882
883 spin_unlock(&sport->port.lock);
884
885 return ret;
886}
887
888static void imx_uart_clear_rx_errors(struct imx_port *sport);
889
890
891
892
893static unsigned int imx_uart_get_hwmctrl(struct imx_port *sport)
894{
895 unsigned int tmp = TIOCM_DSR;
896 unsigned usr1 = imx_uart_readl(sport, USR1);
897 unsigned usr2 = imx_uart_readl(sport, USR2);
898
899 if (usr1 & USR1_RTSS)
900 tmp |= TIOCM_CTS;
901
902
903 if (!(usr2 & USR2_DCDIN))
904 tmp |= TIOCM_CAR;
905
906 if (sport->dte_mode)
907 if (!(imx_uart_readl(sport, USR2) & USR2_RIIN))
908 tmp |= TIOCM_RI;
909
910 return tmp;
911}
912
913
914
915
916static void imx_uart_mctrl_check(struct imx_port *sport)
917{
918 unsigned int status, changed;
919
920 status = imx_uart_get_hwmctrl(sport);
921 changed = status ^ sport->old_status;
922
923 if (changed == 0)
924 return;
925
926 sport->old_status = status;
927
928 if (changed & TIOCM_RI && status & TIOCM_RI)
929 sport->port.icount.rng++;
930 if (changed & TIOCM_DSR)
931 sport->port.icount.dsr++;
932 if (changed & TIOCM_CAR)
933 uart_handle_dcd_change(&sport->port, status & TIOCM_CAR);
934 if (changed & TIOCM_CTS)
935 uart_handle_cts_change(&sport->port, status & TIOCM_CTS);
936
937 wake_up_interruptible(&sport->port.state->port.delta_msr_wait);
938}
939
940static irqreturn_t imx_uart_int(int irq, void *dev_id)
941{
942 struct imx_port *sport = dev_id;
943 unsigned int usr1, usr2, ucr1, ucr2, ucr3, ucr4;
944 irqreturn_t ret = IRQ_NONE;
945 unsigned long flags = 0;
946
947
948
949
950
951
952 spin_lock_irqsave(&sport->port.lock, flags);
953
954 usr1 = imx_uart_readl(sport, USR1);
955 usr2 = imx_uart_readl(sport, USR2);
956 ucr1 = imx_uart_readl(sport, UCR1);
957 ucr2 = imx_uart_readl(sport, UCR2);
958 ucr3 = imx_uart_readl(sport, UCR3);
959 ucr4 = imx_uart_readl(sport, UCR4);
960
961
962
963
964
965
966
967
968
969 if ((ucr1 & UCR1_RRDYEN) == 0)
970 usr1 &= ~USR1_RRDY;
971 if ((ucr2 & UCR2_ATEN) == 0)
972 usr1 &= ~USR1_AGTIM;
973 if ((ucr1 & UCR1_TRDYEN) == 0)
974 usr1 &= ~USR1_TRDY;
975 if ((ucr4 & UCR4_TCEN) == 0)
976 usr2 &= ~USR2_TXDC;
977 if ((ucr3 & UCR3_DTRDEN) == 0)
978 usr1 &= ~USR1_DTRD;
979 if ((ucr1 & UCR1_RTSDEN) == 0)
980 usr1 &= ~USR1_RTSD;
981 if ((ucr3 & UCR3_AWAKEN) == 0)
982 usr1 &= ~USR1_AWAKE;
983 if ((ucr4 & UCR4_OREN) == 0)
984 usr2 &= ~USR2_ORE;
985
986 if (usr1 & (USR1_RRDY | USR1_AGTIM)) {
987 imx_uart_writel(sport, USR1_AGTIM, USR1);
988
989 __imx_uart_rxint(irq, dev_id);
990 ret = IRQ_HANDLED;
991 }
992
993 if ((usr1 & USR1_TRDY) || (usr2 & USR2_TXDC)) {
994 imx_uart_transmit_buffer(sport);
995 ret = IRQ_HANDLED;
996 }
997
998 if (usr1 & USR1_DTRD) {
999 imx_uart_writel(sport, USR1_DTRD, USR1);
1000
1001 imx_uart_mctrl_check(sport);
1002
1003 ret = IRQ_HANDLED;
1004 }
1005
1006 if (usr1 & USR1_RTSD) {
1007 __imx_uart_rtsint(irq, dev_id);
1008 ret = IRQ_HANDLED;
1009 }
1010
1011 if (usr1 & USR1_AWAKE) {
1012 imx_uart_writel(sport, USR1_AWAKE, USR1);
1013 ret = IRQ_HANDLED;
1014 }
1015
1016 if (usr2 & USR2_ORE) {
1017 sport->port.icount.overrun++;
1018 imx_uart_writel(sport, USR2_ORE, USR2);
1019 ret = IRQ_HANDLED;
1020 }
1021
1022 spin_unlock_irqrestore(&sport->port.lock, flags);
1023
1024 return ret;
1025}
1026
1027
1028
1029
1030static unsigned int imx_uart_tx_empty(struct uart_port *port)
1031{
1032 struct imx_port *sport = (struct imx_port *)port;
1033 unsigned int ret;
1034
1035 ret = (imx_uart_readl(sport, USR2) & USR2_TXDC) ? TIOCSER_TEMT : 0;
1036
1037
1038 if (sport->dma_is_txing)
1039 ret = 0;
1040
1041 return ret;
1042}
1043
1044
1045static unsigned int imx_uart_get_mctrl(struct uart_port *port)
1046{
1047 struct imx_port *sport = (struct imx_port *)port;
1048 unsigned int ret = imx_uart_get_hwmctrl(sport);
1049
1050 mctrl_gpio_get(sport->gpios, &ret);
1051
1052 return ret;
1053}
1054
1055
1056static void imx_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
1057{
1058 struct imx_port *sport = (struct imx_port *)port;
1059 u32 ucr3, uts;
1060
1061 if (!(port->rs485.flags & SER_RS485_ENABLED)) {
1062 u32 ucr2;
1063
1064
1065
1066
1067
1068 ucr2 = imx_uart_readl(sport, UCR2);
1069 ucr2 &= ~(UCR2_CTS | UCR2_CTSC);
1070 if (mctrl & TIOCM_RTS) {
1071 ucr2 |= UCR2_CTS;
1072
1073
1074
1075
1076
1077 if (!(ucr2 & UCR2_IRTS))
1078 ucr2 |= UCR2_CTSC;
1079 }
1080 imx_uart_writel(sport, ucr2, UCR2);
1081 }
1082
1083 ucr3 = imx_uart_readl(sport, UCR3) & ~UCR3_DSR;
1084 if (!(mctrl & TIOCM_DTR))
1085 ucr3 |= UCR3_DSR;
1086 imx_uart_writel(sport, ucr3, UCR3);
1087
1088 uts = imx_uart_readl(sport, imx_uart_uts_reg(sport)) & ~UTS_LOOP;
1089 if (mctrl & TIOCM_LOOP)
1090 uts |= UTS_LOOP;
1091 imx_uart_writel(sport, uts, imx_uart_uts_reg(sport));
1092
1093 mctrl_gpio_set(sport->gpios, mctrl);
1094}
1095
1096
1097
1098
1099static void imx_uart_break_ctl(struct uart_port *port, int break_state)
1100{
1101 struct imx_port *sport = (struct imx_port *)port;
1102 unsigned long flags;
1103 u32 ucr1;
1104
1105 spin_lock_irqsave(&sport->port.lock, flags);
1106
1107 ucr1 = imx_uart_readl(sport, UCR1) & ~UCR1_SNDBRK;
1108
1109 if (break_state != 0)
1110 ucr1 |= UCR1_SNDBRK;
1111
1112 imx_uart_writel(sport, ucr1, UCR1);
1113
1114 spin_unlock_irqrestore(&sport->port.lock, flags);
1115}
1116
1117
1118
1119
1120
1121static void imx_uart_timeout(struct timer_list *t)
1122{
1123 struct imx_port *sport = from_timer(sport, t, timer);
1124 unsigned long flags;
1125
1126 if (sport->port.state) {
1127 spin_lock_irqsave(&sport->port.lock, flags);
1128 imx_uart_mctrl_check(sport);
1129 spin_unlock_irqrestore(&sport->port.lock, flags);
1130
1131 mod_timer(&sport->timer, jiffies + MCTRL_TIMEOUT);
1132 }
1133}
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143static void imx_uart_dma_rx_callback(void *data)
1144{
1145 struct imx_port *sport = data;
1146 struct dma_chan *chan = sport->dma_chan_rx;
1147 struct scatterlist *sgl = &sport->rx_sgl;
1148 struct tty_port *port = &sport->port.state->port;
1149 struct dma_tx_state state;
1150 struct circ_buf *rx_ring = &sport->rx_ring;
1151 enum dma_status status;
1152 unsigned int w_bytes = 0;
1153 unsigned int r_bytes;
1154 unsigned int bd_size;
1155
1156 status = dmaengine_tx_status(chan, sport->rx_cookie, &state);
1157
1158 if (status == DMA_ERROR) {
1159 imx_uart_clear_rx_errors(sport);
1160 return;
1161 }
1162
1163 if (!(sport->port.ignore_status_mask & URXD_DUMMY_READ)) {
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177 rx_ring->head = sg_dma_len(sgl) - state.residue;
1178
1179
1180 bd_size = sg_dma_len(sgl) / sport->rx_periods;
1181 rx_ring->tail = ((rx_ring->head-1) / bd_size) * bd_size;
1182
1183 if (rx_ring->head <= sg_dma_len(sgl) &&
1184 rx_ring->head > rx_ring->tail) {
1185
1186
1187 r_bytes = rx_ring->head - rx_ring->tail;
1188
1189
1190 dma_sync_sg_for_cpu(sport->port.dev, sgl, 1,
1191 DMA_FROM_DEVICE);
1192
1193 w_bytes = tty_insert_flip_string(port,
1194 sport->rx_buf + rx_ring->tail, r_bytes);
1195
1196
1197 dma_sync_sg_for_device(sport->port.dev, sgl, 1,
1198 DMA_FROM_DEVICE);
1199
1200 if (w_bytes != r_bytes)
1201 sport->port.icount.buf_overrun++;
1202
1203 sport->port.icount.rx += w_bytes;
1204 } else {
1205 WARN_ON(rx_ring->head > sg_dma_len(sgl));
1206 WARN_ON(rx_ring->head <= rx_ring->tail);
1207 }
1208 }
1209
1210 if (w_bytes) {
1211 tty_flip_buffer_push(port);
1212 dev_dbg(sport->port.dev, "We get %d bytes.\n", w_bytes);
1213 }
1214}
1215
1216
1217#define RX_DMA_PERIODS 16
1218#define RX_BUF_SIZE (RX_DMA_PERIODS * PAGE_SIZE / 4)
1219
1220static int imx_uart_start_rx_dma(struct imx_port *sport)
1221{
1222 struct scatterlist *sgl = &sport->rx_sgl;
1223 struct dma_chan *chan = sport->dma_chan_rx;
1224 struct device *dev = sport->port.dev;
1225 struct dma_async_tx_descriptor *desc;
1226 int ret;
1227
1228 sport->rx_ring.head = 0;
1229 sport->rx_ring.tail = 0;
1230 sport->rx_periods = RX_DMA_PERIODS;
1231
1232 sg_init_one(sgl, sport->rx_buf, RX_BUF_SIZE);
1233 ret = dma_map_sg(dev, sgl, 1, DMA_FROM_DEVICE);
1234 if (ret == 0) {
1235 dev_err(dev, "DMA mapping error for RX.\n");
1236 return -EINVAL;
1237 }
1238
1239 desc = dmaengine_prep_dma_cyclic(chan, sg_dma_address(sgl),
1240 sg_dma_len(sgl), sg_dma_len(sgl) / sport->rx_periods,
1241 DMA_DEV_TO_MEM, DMA_PREP_INTERRUPT);
1242
1243 if (!desc) {
1244 dma_unmap_sg(dev, sgl, 1, DMA_FROM_DEVICE);
1245 dev_err(dev, "We cannot prepare for the RX slave dma!\n");
1246 return -EINVAL;
1247 }
1248 desc->callback = imx_uart_dma_rx_callback;
1249 desc->callback_param = sport;
1250
1251 dev_dbg(dev, "RX: prepare for the DMA.\n");
1252 sport->dma_is_rxing = 1;
1253 sport->rx_cookie = dmaengine_submit(desc);
1254 dma_async_issue_pending(chan);
1255 return 0;
1256}
1257
1258static void imx_uart_clear_rx_errors(struct imx_port *sport)
1259{
1260 struct tty_port *port = &sport->port.state->port;
1261 u32 usr1, usr2;
1262
1263 usr1 = imx_uart_readl(sport, USR1);
1264 usr2 = imx_uart_readl(sport, USR2);
1265
1266 if (usr2 & USR2_BRCD) {
1267 sport->port.icount.brk++;
1268 imx_uart_writel(sport, USR2_BRCD, USR2);
1269 uart_handle_break(&sport->port);
1270 if (tty_insert_flip_char(port, 0, TTY_BREAK) == 0)
1271 sport->port.icount.buf_overrun++;
1272 tty_flip_buffer_push(port);
1273 } else {
1274 if (usr1 & USR1_FRAMERR) {
1275 sport->port.icount.frame++;
1276 imx_uart_writel(sport, USR1_FRAMERR, USR1);
1277 } else if (usr1 & USR1_PARITYERR) {
1278 sport->port.icount.parity++;
1279 imx_uart_writel(sport, USR1_PARITYERR, USR1);
1280 }
1281 }
1282
1283 if (usr2 & USR2_ORE) {
1284 sport->port.icount.overrun++;
1285 imx_uart_writel(sport, USR2_ORE, USR2);
1286 }
1287
1288}
1289
1290#define TXTL_DEFAULT 2
1291#define RXTL_DEFAULT 1
1292#define TXTL_DMA 8
1293#define RXTL_DMA 9
1294
1295static void imx_uart_setup_ufcr(struct imx_port *sport,
1296 unsigned char txwl, unsigned char rxwl)
1297{
1298 unsigned int val;
1299
1300
1301 val = imx_uart_readl(sport, UFCR) & (UFCR_RFDIV | UFCR_DCEDTE);
1302 val |= txwl << UFCR_TXTL_SHF | rxwl;
1303 imx_uart_writel(sport, val, UFCR);
1304}
1305
1306static void imx_uart_dma_exit(struct imx_port *sport)
1307{
1308 if (sport->dma_chan_rx) {
1309 dmaengine_terminate_sync(sport->dma_chan_rx);
1310 dma_release_channel(sport->dma_chan_rx);
1311 sport->dma_chan_rx = NULL;
1312 sport->rx_cookie = -EINVAL;
1313 kfree(sport->rx_buf);
1314 sport->rx_buf = NULL;
1315 }
1316
1317 if (sport->dma_chan_tx) {
1318 dmaengine_terminate_sync(sport->dma_chan_tx);
1319 dma_release_channel(sport->dma_chan_tx);
1320 sport->dma_chan_tx = NULL;
1321 }
1322}
1323
1324static int imx_uart_dma_init(struct imx_port *sport)
1325{
1326 struct dma_slave_config slave_config = {};
1327 struct device *dev = sport->port.dev;
1328 int ret;
1329
1330
1331 sport->dma_chan_rx = dma_request_slave_channel(dev, "rx");
1332 if (!sport->dma_chan_rx) {
1333 dev_dbg(dev, "cannot get the DMA channel.\n");
1334 ret = -EINVAL;
1335 goto err;
1336 }
1337
1338 slave_config.direction = DMA_DEV_TO_MEM;
1339 slave_config.src_addr = sport->port.mapbase + URXD0;
1340 slave_config.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
1341
1342 slave_config.src_maxburst = RXTL_DMA - 1;
1343 ret = dmaengine_slave_config(sport->dma_chan_rx, &slave_config);
1344 if (ret) {
1345 dev_err(dev, "error in RX dma configuration.\n");
1346 goto err;
1347 }
1348
1349 sport->rx_buf = kzalloc(RX_BUF_SIZE, GFP_KERNEL);
1350 if (!sport->rx_buf) {
1351 ret = -ENOMEM;
1352 goto err;
1353 }
1354 sport->rx_ring.buf = sport->rx_buf;
1355
1356
1357 sport->dma_chan_tx = dma_request_slave_channel(dev, "tx");
1358 if (!sport->dma_chan_tx) {
1359 dev_err(dev, "cannot get the TX DMA channel!\n");
1360 ret = -EINVAL;
1361 goto err;
1362 }
1363
1364 slave_config.direction = DMA_MEM_TO_DEV;
1365 slave_config.dst_addr = sport->port.mapbase + URTX0;
1366 slave_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
1367 slave_config.dst_maxburst = TXTL_DMA;
1368 ret = dmaengine_slave_config(sport->dma_chan_tx, &slave_config);
1369 if (ret) {
1370 dev_err(dev, "error in TX dma configuration.");
1371 goto err;
1372 }
1373
1374 return 0;
1375err:
1376 imx_uart_dma_exit(sport);
1377 return ret;
1378}
1379
1380static void imx_uart_enable_dma(struct imx_port *sport)
1381{
1382 u32 ucr1;
1383
1384 imx_uart_setup_ufcr(sport, TXTL_DMA, RXTL_DMA);
1385
1386
1387 ucr1 = imx_uart_readl(sport, UCR1);
1388 ucr1 |= UCR1_RXDMAEN | UCR1_TXDMAEN | UCR1_ATDMAEN;
1389 imx_uart_writel(sport, ucr1, UCR1);
1390
1391 sport->dma_is_enabled = 1;
1392}
1393
1394static void imx_uart_disable_dma(struct imx_port *sport)
1395{
1396 u32 ucr1;
1397
1398
1399 ucr1 = imx_uart_readl(sport, UCR1);
1400 ucr1 &= ~(UCR1_RXDMAEN | UCR1_TXDMAEN | UCR1_ATDMAEN);
1401 imx_uart_writel(sport, ucr1, UCR1);
1402
1403 imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT);
1404
1405 sport->dma_is_enabled = 0;
1406}
1407
1408
1409#define CTSTL 16
1410
1411static int imx_uart_startup(struct uart_port *port)
1412{
1413 struct imx_port *sport = (struct imx_port *)port;
1414 int retval, i;
1415 unsigned long flags;
1416 int dma_is_inited = 0;
1417 u32 ucr1, ucr2, ucr3, ucr4;
1418
1419 retval = clk_prepare_enable(sport->clk_per);
1420 if (retval)
1421 return retval;
1422 retval = clk_prepare_enable(sport->clk_ipg);
1423 if (retval) {
1424 clk_disable_unprepare(sport->clk_per);
1425 return retval;
1426 }
1427
1428 imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT);
1429
1430
1431
1432
1433 ucr4 = imx_uart_readl(sport, UCR4);
1434
1435
1436 ucr4 &= ~(UCR4_CTSTL_MASK << UCR4_CTSTL_SHF);
1437 ucr4 |= CTSTL << UCR4_CTSTL_SHF;
1438
1439 imx_uart_writel(sport, ucr4 & ~UCR4_DREN, UCR4);
1440
1441
1442 if (!uart_console(port) && imx_uart_dma_init(sport) == 0)
1443 dma_is_inited = 1;
1444
1445 spin_lock_irqsave(&sport->port.lock, flags);
1446
1447 i = 100;
1448
1449 ucr2 = imx_uart_readl(sport, UCR2);
1450 ucr2 &= ~UCR2_SRST;
1451 imx_uart_writel(sport, ucr2, UCR2);
1452
1453 while (!(imx_uart_readl(sport, UCR2) & UCR2_SRST) && (--i > 0))
1454 udelay(1);
1455
1456
1457
1458
1459 imx_uart_writel(sport, USR1_RTSD | USR1_DTRD, USR1);
1460 imx_uart_writel(sport, USR2_ORE, USR2);
1461
1462 ucr1 = imx_uart_readl(sport, UCR1) & ~UCR1_RRDYEN;
1463 ucr1 |= UCR1_UARTEN;
1464 if (sport->have_rtscts)
1465 ucr1 |= UCR1_RTSDEN;
1466
1467 imx_uart_writel(sport, ucr1, UCR1);
1468
1469 ucr4 = imx_uart_readl(sport, UCR4) & ~(UCR4_OREN | UCR4_INVR);
1470 if (!sport->dma_is_enabled)
1471 ucr4 |= UCR4_OREN;
1472 if (sport->inverted_rx)
1473 ucr4 |= UCR4_INVR;
1474 imx_uart_writel(sport, ucr4, UCR4);
1475
1476 ucr3 = imx_uart_readl(sport, UCR3) & ~UCR3_INVT;
1477
1478
1479
1480 if (sport->inverted_tx)
1481 ucr3 |= UCR3_INVT;
1482
1483 if (!imx_uart_is_imx1(sport)) {
1484 ucr3 |= UCR3_DTRDEN | UCR3_RI | UCR3_DCD;
1485
1486 if (sport->dte_mode)
1487
1488 ucr3 &= ~(UCR3_RI | UCR3_DCD);
1489 }
1490 imx_uart_writel(sport, ucr3, UCR3);
1491
1492 ucr2 = imx_uart_readl(sport, UCR2) & ~UCR2_ATEN;
1493 ucr2 |= (UCR2_RXEN | UCR2_TXEN);
1494 if (!sport->have_rtscts)
1495 ucr2 |= UCR2_IRTS;
1496
1497
1498
1499
1500 if (!imx_uart_is_imx1(sport))
1501 ucr2 &= ~UCR2_RTSEN;
1502 imx_uart_writel(sport, ucr2, UCR2);
1503
1504
1505
1506
1507 imx_uart_enable_ms(&sport->port);
1508
1509 if (dma_is_inited) {
1510 imx_uart_enable_dma(sport);
1511 imx_uart_start_rx_dma(sport);
1512 } else {
1513 ucr1 = imx_uart_readl(sport, UCR1);
1514 ucr1 |= UCR1_RRDYEN;
1515 imx_uart_writel(sport, ucr1, UCR1);
1516
1517 ucr2 = imx_uart_readl(sport, UCR2);
1518 ucr2 |= UCR2_ATEN;
1519 imx_uart_writel(sport, ucr2, UCR2);
1520 }
1521
1522 spin_unlock_irqrestore(&sport->port.lock, flags);
1523
1524 return 0;
1525}
1526
1527static void imx_uart_shutdown(struct uart_port *port)
1528{
1529 struct imx_port *sport = (struct imx_port *)port;
1530 unsigned long flags;
1531 u32 ucr1, ucr2, ucr4;
1532
1533 if (sport->dma_is_enabled) {
1534 dmaengine_terminate_sync(sport->dma_chan_tx);
1535 if (sport->dma_is_txing) {
1536 dma_unmap_sg(sport->port.dev, &sport->tx_sgl[0],
1537 sport->dma_tx_nents, DMA_TO_DEVICE);
1538 sport->dma_is_txing = 0;
1539 }
1540 dmaengine_terminate_sync(sport->dma_chan_rx);
1541 if (sport->dma_is_rxing) {
1542 dma_unmap_sg(sport->port.dev, &sport->rx_sgl,
1543 1, DMA_FROM_DEVICE);
1544 sport->dma_is_rxing = 0;
1545 }
1546
1547 spin_lock_irqsave(&sport->port.lock, flags);
1548 imx_uart_stop_tx(port);
1549 imx_uart_stop_rx(port);
1550 imx_uart_disable_dma(sport);
1551 spin_unlock_irqrestore(&sport->port.lock, flags);
1552 imx_uart_dma_exit(sport);
1553 }
1554
1555 mctrl_gpio_disable_ms(sport->gpios);
1556
1557 spin_lock_irqsave(&sport->port.lock, flags);
1558 ucr2 = imx_uart_readl(sport, UCR2);
1559 ucr2 &= ~(UCR2_TXEN | UCR2_ATEN);
1560 imx_uart_writel(sport, ucr2, UCR2);
1561 spin_unlock_irqrestore(&sport->port.lock, flags);
1562
1563
1564
1565
1566 del_timer_sync(&sport->timer);
1567
1568
1569
1570
1571
1572 spin_lock_irqsave(&sport->port.lock, flags);
1573
1574 ucr1 = imx_uart_readl(sport, UCR1);
1575 ucr1 &= ~(UCR1_TRDYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_UARTEN | UCR1_RXDMAEN | UCR1_ATDMAEN);
1576 imx_uart_writel(sport, ucr1, UCR1);
1577
1578 ucr4 = imx_uart_readl(sport, UCR4);
1579 ucr4 &= ~(UCR4_OREN | UCR4_TCEN);
1580 imx_uart_writel(sport, ucr4, UCR4);
1581
1582 spin_unlock_irqrestore(&sport->port.lock, flags);
1583
1584 clk_disable_unprepare(sport->clk_per);
1585 clk_disable_unprepare(sport->clk_ipg);
1586}
1587
1588
1589static void imx_uart_flush_buffer(struct uart_port *port)
1590{
1591 struct imx_port *sport = (struct imx_port *)port;
1592 struct scatterlist *sgl = &sport->tx_sgl[0];
1593 u32 ucr2;
1594 int i = 100, ubir, ubmr, uts;
1595
1596 if (!sport->dma_chan_tx)
1597 return;
1598
1599 sport->tx_bytes = 0;
1600 dmaengine_terminate_all(sport->dma_chan_tx);
1601 if (sport->dma_is_txing) {
1602 u32 ucr1;
1603
1604 dma_unmap_sg(sport->port.dev, sgl, sport->dma_tx_nents,
1605 DMA_TO_DEVICE);
1606 ucr1 = imx_uart_readl(sport, UCR1);
1607 ucr1 &= ~UCR1_TXDMAEN;
1608 imx_uart_writel(sport, ucr1, UCR1);
1609 sport->dma_is_txing = 0;
1610 }
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623 ubir = imx_uart_readl(sport, UBIR);
1624 ubmr = imx_uart_readl(sport, UBMR);
1625 uts = imx_uart_readl(sport, IMX21_UTS);
1626
1627 ucr2 = imx_uart_readl(sport, UCR2);
1628 ucr2 &= ~UCR2_SRST;
1629 imx_uart_writel(sport, ucr2, UCR2);
1630
1631 while (!(imx_uart_readl(sport, UCR2) & UCR2_SRST) && (--i > 0))
1632 udelay(1);
1633
1634
1635 imx_uart_writel(sport, ubir, UBIR);
1636 imx_uart_writel(sport, ubmr, UBMR);
1637 imx_uart_writel(sport, uts, IMX21_UTS);
1638}
1639
1640static void
1641imx_uart_set_termios(struct uart_port *port, struct ktermios *termios,
1642 struct ktermios *old)
1643{
1644 struct imx_port *sport = (struct imx_port *)port;
1645 unsigned long flags;
1646 u32 ucr2, old_ucr2, ufcr;
1647 unsigned int baud, quot;
1648 unsigned int old_csize = old ? old->c_cflag & CSIZE : CS8;
1649 unsigned long div;
1650 unsigned long num, denom, old_ubir, old_ubmr;
1651 uint64_t tdiv64;
1652
1653
1654
1655
1656 while ((termios->c_cflag & CSIZE) != CS7 &&
1657 (termios->c_cflag & CSIZE) != CS8) {
1658 termios->c_cflag &= ~CSIZE;
1659 termios->c_cflag |= old_csize;
1660 old_csize = CS8;
1661 }
1662
1663 del_timer_sync(&sport->timer);
1664
1665
1666
1667
1668 baud = uart_get_baud_rate(port, termios, old, 50, port->uartclk / 16);
1669 quot = uart_get_divisor(port, baud);
1670
1671 spin_lock_irqsave(&sport->port.lock, flags);
1672
1673
1674
1675
1676
1677 old_ucr2 = imx_uart_readl(sport, UCR2);
1678 ucr2 = old_ucr2 & (UCR2_TXEN | UCR2_RXEN | UCR2_ATEN | UCR2_CTS);
1679
1680 ucr2 |= UCR2_SRST | UCR2_IRTS;
1681 if ((termios->c_cflag & CSIZE) == CS8)
1682 ucr2 |= UCR2_WS;
1683
1684 if (!sport->have_rtscts)
1685 termios->c_cflag &= ~CRTSCTS;
1686
1687 if (port->rs485.flags & SER_RS485_ENABLED) {
1688
1689
1690
1691
1692
1693 if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
1694 imx_uart_rts_active(sport, &ucr2);
1695 else
1696 imx_uart_rts_inactive(sport, &ucr2);
1697
1698 } else if (termios->c_cflag & CRTSCTS) {
1699
1700
1701
1702
1703 if (ucr2 & UCR2_CTS)
1704 ucr2 |= UCR2_CTSC;
1705 }
1706
1707 if (termios->c_cflag & CRTSCTS)
1708 ucr2 &= ~UCR2_IRTS;
1709 if (termios->c_cflag & CSTOPB)
1710 ucr2 |= UCR2_STPB;
1711 if (termios->c_cflag & PARENB) {
1712 ucr2 |= UCR2_PREN;
1713 if (termios->c_cflag & PARODD)
1714 ucr2 |= UCR2_PROE;
1715 }
1716
1717 sport->port.read_status_mask = 0;
1718 if (termios->c_iflag & INPCK)
1719 sport->port.read_status_mask |= (URXD_FRMERR | URXD_PRERR);
1720 if (termios->c_iflag & (BRKINT | PARMRK))
1721 sport->port.read_status_mask |= URXD_BRK;
1722
1723
1724
1725
1726 sport->port.ignore_status_mask = 0;
1727 if (termios->c_iflag & IGNPAR)
1728 sport->port.ignore_status_mask |= URXD_PRERR | URXD_FRMERR;
1729 if (termios->c_iflag & IGNBRK) {
1730 sport->port.ignore_status_mask |= URXD_BRK;
1731
1732
1733
1734
1735 if (termios->c_iflag & IGNPAR)
1736 sport->port.ignore_status_mask |= URXD_OVRRUN;
1737 }
1738
1739 if ((termios->c_cflag & CREAD) == 0)
1740 sport->port.ignore_status_mask |= URXD_DUMMY_READ;
1741
1742
1743
1744
1745 uart_update_timeout(port, termios->c_cflag, baud);
1746
1747
1748 div = sport->port.uartclk / (baud * 16);
1749 if (baud == 38400 && quot != div)
1750 baud = sport->port.uartclk / (quot * 16);
1751
1752 div = sport->port.uartclk / (baud * 16);
1753 if (div > 7)
1754 div = 7;
1755 if (!div)
1756 div = 1;
1757
1758 rational_best_approximation(16 * div * baud, sport->port.uartclk,
1759 1 << 16, 1 << 16, &num, &denom);
1760
1761 tdiv64 = sport->port.uartclk;
1762 tdiv64 *= num;
1763 do_div(tdiv64, denom * 16 * div);
1764 tty_termios_encode_baud_rate(termios,
1765 (speed_t)tdiv64, (speed_t)tdiv64);
1766
1767 num -= 1;
1768 denom -= 1;
1769
1770 ufcr = imx_uart_readl(sport, UFCR);
1771 ufcr = (ufcr & (~UFCR_RFDIV)) | UFCR_RFDIV_REG(div);
1772 imx_uart_writel(sport, ufcr, UFCR);
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783 old_ubir = imx_uart_readl(sport, UBIR);
1784 old_ubmr = imx_uart_readl(sport, UBMR);
1785 if (old_ubir != num || old_ubmr != denom) {
1786 imx_uart_writel(sport, num, UBIR);
1787 imx_uart_writel(sport, denom, UBMR);
1788 }
1789
1790 if (!imx_uart_is_imx1(sport))
1791 imx_uart_writel(sport, sport->port.uartclk / div / 1000,
1792 IMX21_ONEMS);
1793
1794 imx_uart_writel(sport, ucr2, UCR2);
1795
1796 if (UART_ENABLE_MS(&sport->port, termios->c_cflag))
1797 imx_uart_enable_ms(&sport->port);
1798
1799 spin_unlock_irqrestore(&sport->port.lock, flags);
1800}
1801
1802static const char *imx_uart_type(struct uart_port *port)
1803{
1804 struct imx_port *sport = (struct imx_port *)port;
1805
1806 return sport->port.type == PORT_IMX ? "IMX" : NULL;
1807}
1808
1809
1810
1811
1812static void imx_uart_config_port(struct uart_port *port, int flags)
1813{
1814 struct imx_port *sport = (struct imx_port *)port;
1815
1816 if (flags & UART_CONFIG_TYPE)
1817 sport->port.type = PORT_IMX;
1818}
1819
1820
1821
1822
1823
1824
1825static int
1826imx_uart_verify_port(struct uart_port *port, struct serial_struct *ser)
1827{
1828 struct imx_port *sport = (struct imx_port *)port;
1829 int ret = 0;
1830
1831 if (ser->type != PORT_UNKNOWN && ser->type != PORT_IMX)
1832 ret = -EINVAL;
1833 if (sport->port.irq != ser->irq)
1834 ret = -EINVAL;
1835 if (ser->io_type != UPIO_MEM)
1836 ret = -EINVAL;
1837 if (sport->port.uartclk / 16 != ser->baud_base)
1838 ret = -EINVAL;
1839 if (sport->port.mapbase != (unsigned long)ser->iomem_base)
1840 ret = -EINVAL;
1841 if (sport->port.iobase != ser->port)
1842 ret = -EINVAL;
1843 if (ser->hub6 != 0)
1844 ret = -EINVAL;
1845 return ret;
1846}
1847
1848#if defined(CONFIG_CONSOLE_POLL)
1849
1850static int imx_uart_poll_init(struct uart_port *port)
1851{
1852 struct imx_port *sport = (struct imx_port *)port;
1853 unsigned long flags;
1854 u32 ucr1, ucr2;
1855 int retval;
1856
1857 retval = clk_prepare_enable(sport->clk_ipg);
1858 if (retval)
1859 return retval;
1860 retval = clk_prepare_enable(sport->clk_per);
1861 if (retval)
1862 clk_disable_unprepare(sport->clk_ipg);
1863
1864 imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT);
1865
1866 spin_lock_irqsave(&sport->port.lock, flags);
1867
1868
1869
1870
1871
1872
1873
1874
1875 ucr1 = imx_uart_readl(sport, UCR1);
1876 ucr2 = imx_uart_readl(sport, UCR2);
1877
1878 if (imx_uart_is_imx1(sport))
1879 ucr1 |= IMX1_UCR1_UARTCLKEN;
1880
1881 ucr1 |= UCR1_UARTEN;
1882 ucr1 &= ~(UCR1_TRDYEN | UCR1_RTSDEN | UCR1_RRDYEN);
1883
1884 ucr2 |= UCR2_RXEN;
1885 ucr2 &= ~UCR2_ATEN;
1886
1887 imx_uart_writel(sport, ucr1, UCR1);
1888 imx_uart_writel(sport, ucr2, UCR2);
1889
1890
1891 imx_uart_writel(sport, ucr1 | UCR1_RRDYEN, UCR1);
1892 imx_uart_writel(sport, ucr2 | UCR2_ATEN, UCR2);
1893
1894 spin_unlock_irqrestore(&sport->port.lock, flags);
1895
1896 return 0;
1897}
1898
1899static int imx_uart_poll_get_char(struct uart_port *port)
1900{
1901 struct imx_port *sport = (struct imx_port *)port;
1902 if (!(imx_uart_readl(sport, USR2) & USR2_RDR))
1903 return NO_POLL_CHAR;
1904
1905 return imx_uart_readl(sport, URXD0) & URXD_RX_DATA;
1906}
1907
1908static void imx_uart_poll_put_char(struct uart_port *port, unsigned char c)
1909{
1910 struct imx_port *sport = (struct imx_port *)port;
1911 unsigned int status;
1912
1913
1914 do {
1915 status = imx_uart_readl(sport, USR1);
1916 } while (~status & USR1_TRDY);
1917
1918
1919 imx_uart_writel(sport, c, URTX0);
1920
1921
1922 do {
1923 status = imx_uart_readl(sport, USR2);
1924 } while (~status & USR2_TXDC);
1925}
1926#endif
1927
1928
1929static int imx_uart_rs485_config(struct uart_port *port,
1930 struct serial_rs485 *rs485conf)
1931{
1932 struct imx_port *sport = (struct imx_port *)port;
1933 u32 ucr2;
1934
1935
1936 if (!sport->have_rtscts && !sport->have_rtsgpio)
1937 rs485conf->flags &= ~SER_RS485_ENABLED;
1938
1939 if (rs485conf->flags & SER_RS485_ENABLED) {
1940
1941 if (sport->have_rtscts && !sport->have_rtsgpio &&
1942 !(rs485conf->flags & SER_RS485_RTS_ON_SEND))
1943 rs485conf->flags |= SER_RS485_RX_DURING_TX;
1944
1945
1946 ucr2 = imx_uart_readl(sport, UCR2);
1947 if (rs485conf->flags & SER_RS485_RTS_AFTER_SEND)
1948 imx_uart_rts_active(sport, &ucr2);
1949 else
1950 imx_uart_rts_inactive(sport, &ucr2);
1951 imx_uart_writel(sport, ucr2, UCR2);
1952 }
1953
1954
1955 if (!(rs485conf->flags & SER_RS485_ENABLED) ||
1956 rs485conf->flags & SER_RS485_RX_DURING_TX)
1957 imx_uart_start_rx(port);
1958
1959 port->rs485 = *rs485conf;
1960
1961 return 0;
1962}
1963
1964static const struct uart_ops imx_uart_pops = {
1965 .tx_empty = imx_uart_tx_empty,
1966 .set_mctrl = imx_uart_set_mctrl,
1967 .get_mctrl = imx_uart_get_mctrl,
1968 .stop_tx = imx_uart_stop_tx,
1969 .start_tx = imx_uart_start_tx,
1970 .stop_rx = imx_uart_stop_rx,
1971 .enable_ms = imx_uart_enable_ms,
1972 .break_ctl = imx_uart_break_ctl,
1973 .startup = imx_uart_startup,
1974 .shutdown = imx_uart_shutdown,
1975 .flush_buffer = imx_uart_flush_buffer,
1976 .set_termios = imx_uart_set_termios,
1977 .type = imx_uart_type,
1978 .config_port = imx_uart_config_port,
1979 .verify_port = imx_uart_verify_port,
1980#if defined(CONFIG_CONSOLE_POLL)
1981 .poll_init = imx_uart_poll_init,
1982 .poll_get_char = imx_uart_poll_get_char,
1983 .poll_put_char = imx_uart_poll_put_char,
1984#endif
1985};
1986
1987static struct imx_port *imx_uart_ports[UART_NR];
1988
1989#if IS_ENABLED(CONFIG_SERIAL_IMX_CONSOLE)
1990static void imx_uart_console_putchar(struct uart_port *port, int ch)
1991{
1992 struct imx_port *sport = (struct imx_port *)port;
1993
1994 while (imx_uart_readl(sport, imx_uart_uts_reg(sport)) & UTS_TXFULL)
1995 barrier();
1996
1997 imx_uart_writel(sport, ch, URTX0);
1998}
1999
2000
2001
2002
2003static void
2004imx_uart_console_write(struct console *co, const char *s, unsigned int count)
2005{
2006 struct imx_port *sport = imx_uart_ports[co->index];
2007 struct imx_port_ucrs old_ucr;
2008 unsigned int ucr1;
2009 unsigned long flags = 0;
2010 int locked = 1;
2011
2012 if (sport->port.sysrq)
2013 locked = 0;
2014 else if (oops_in_progress)
2015 locked = spin_trylock_irqsave(&sport->port.lock, flags);
2016 else
2017 spin_lock_irqsave(&sport->port.lock, flags);
2018
2019
2020
2021
2022 imx_uart_ucrs_save(sport, &old_ucr);
2023 ucr1 = old_ucr.ucr1;
2024
2025 if (imx_uart_is_imx1(sport))
2026 ucr1 |= IMX1_UCR1_UARTCLKEN;
2027 ucr1 |= UCR1_UARTEN;
2028 ucr1 &= ~(UCR1_TRDYEN | UCR1_RRDYEN | UCR1_RTSDEN);
2029
2030 imx_uart_writel(sport, ucr1, UCR1);
2031
2032 imx_uart_writel(sport, old_ucr.ucr2 | UCR2_TXEN, UCR2);
2033
2034 uart_console_write(&sport->port, s, count, imx_uart_console_putchar);
2035
2036
2037
2038
2039
2040 while (!(imx_uart_readl(sport, USR2) & USR2_TXDC));
2041
2042 imx_uart_ucrs_restore(sport, &old_ucr);
2043
2044 if (locked)
2045 spin_unlock_irqrestore(&sport->port.lock, flags);
2046}
2047
2048
2049
2050
2051
2052static void __init
2053imx_uart_console_get_options(struct imx_port *sport, int *baud,
2054 int *parity, int *bits)
2055{
2056
2057 if (imx_uart_readl(sport, UCR1) & UCR1_UARTEN) {
2058
2059 unsigned int ucr2, ubir, ubmr, uartclk;
2060 unsigned int baud_raw;
2061 unsigned int ucfr_rfdiv;
2062
2063 ucr2 = imx_uart_readl(sport, UCR2);
2064
2065 *parity = 'n';
2066 if (ucr2 & UCR2_PREN) {
2067 if (ucr2 & UCR2_PROE)
2068 *parity = 'o';
2069 else
2070 *parity = 'e';
2071 }
2072
2073 if (ucr2 & UCR2_WS)
2074 *bits = 8;
2075 else
2076 *bits = 7;
2077
2078 ubir = imx_uart_readl(sport, UBIR) & 0xffff;
2079 ubmr = imx_uart_readl(sport, UBMR) & 0xffff;
2080
2081 ucfr_rfdiv = (imx_uart_readl(sport, UFCR) & UFCR_RFDIV) >> 7;
2082 if (ucfr_rfdiv == 6)
2083 ucfr_rfdiv = 7;
2084 else
2085 ucfr_rfdiv = 6 - ucfr_rfdiv;
2086
2087 uartclk = clk_get_rate(sport->clk_per);
2088 uartclk /= ucfr_rfdiv;
2089
2090 {
2091
2092
2093
2094
2095
2096 unsigned int mul = ubir + 1;
2097 unsigned int div = 16 * (ubmr + 1);
2098 unsigned int rem = uartclk % div;
2099
2100 baud_raw = (uartclk / div) * mul;
2101 baud_raw += (rem * mul + div / 2) / div;
2102 *baud = (baud_raw + 50) / 100 * 100;
2103 }
2104
2105 if (*baud != baud_raw)
2106 dev_info(sport->port.dev, "Console IMX rounded baud rate from %d to %d\n",
2107 baud_raw, *baud);
2108 }
2109}
2110
2111static int __init
2112imx_uart_console_setup(struct console *co, char *options)
2113{
2114 struct imx_port *sport;
2115 int baud = 9600;
2116 int bits = 8;
2117 int parity = 'n';
2118 int flow = 'n';
2119 int retval;
2120
2121
2122
2123
2124
2125
2126 if (co->index == -1 || co->index >= ARRAY_SIZE(imx_uart_ports))
2127 co->index = 0;
2128 sport = imx_uart_ports[co->index];
2129 if (sport == NULL)
2130 return -ENODEV;
2131
2132
2133 retval = clk_prepare_enable(sport->clk_ipg);
2134 if (retval)
2135 goto error_console;
2136
2137 if (options)
2138 uart_parse_options(options, &baud, &parity, &bits, &flow);
2139 else
2140 imx_uart_console_get_options(sport, &baud, &parity, &bits);
2141
2142 imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT);
2143
2144 retval = uart_set_options(&sport->port, co, baud, parity, bits, flow);
2145
2146 if (retval) {
2147 clk_disable_unprepare(sport->clk_ipg);
2148 goto error_console;
2149 }
2150
2151 retval = clk_prepare_enable(sport->clk_per);
2152 if (retval)
2153 clk_disable_unprepare(sport->clk_ipg);
2154
2155error_console:
2156 return retval;
2157}
2158
2159static struct uart_driver imx_uart_uart_driver;
2160static struct console imx_uart_console = {
2161 .name = DEV_NAME,
2162 .write = imx_uart_console_write,
2163 .device = uart_console_device,
2164 .setup = imx_uart_console_setup,
2165 .flags = CON_PRINTBUFFER,
2166 .index = -1,
2167 .data = &imx_uart_uart_driver,
2168};
2169
2170#define IMX_CONSOLE &imx_uart_console
2171
2172#else
2173#define IMX_CONSOLE NULL
2174#endif
2175
2176static struct uart_driver imx_uart_uart_driver = {
2177 .owner = THIS_MODULE,
2178 .driver_name = DRIVER_NAME,
2179 .dev_name = DEV_NAME,
2180 .major = SERIAL_IMX_MAJOR,
2181 .minor = MINOR_START,
2182 .nr = ARRAY_SIZE(imx_uart_ports),
2183 .cons = IMX_CONSOLE,
2184};
2185
2186#ifdef CONFIG_OF
2187
2188
2189
2190
2191static int imx_uart_probe_dt(struct imx_port *sport,
2192 struct platform_device *pdev)
2193{
2194 struct device_node *np = pdev->dev.of_node;
2195 int ret;
2196
2197 sport->devdata = of_device_get_match_data(&pdev->dev);
2198 if (!sport->devdata)
2199
2200 return 1;
2201
2202 ret = of_alias_get_id(np, "serial");
2203 if (ret < 0) {
2204 dev_err(&pdev->dev, "failed to get alias id, errno %d\n", ret);
2205 return ret;
2206 }
2207 sport->port.line = ret;
2208
2209 if (of_get_property(np, "uart-has-rtscts", NULL) ||
2210 of_get_property(np, "fsl,uart-has-rtscts", NULL) )
2211 sport->have_rtscts = 1;
2212
2213 if (of_get_property(np, "fsl,dte-mode", NULL))
2214 sport->dte_mode = 1;
2215
2216 if (of_get_property(np, "rts-gpios", NULL))
2217 sport->have_rtsgpio = 1;
2218
2219 if (of_get_property(np, "fsl,inverted-tx", NULL))
2220 sport->inverted_tx = 1;
2221
2222 if (of_get_property(np, "fsl,inverted-rx", NULL))
2223 sport->inverted_rx = 1;
2224
2225 return 0;
2226}
2227#else
2228static inline int imx_uart_probe_dt(struct imx_port *sport,
2229 struct platform_device *pdev)
2230{
2231 return 1;
2232}
2233#endif
2234
2235static void imx_uart_probe_pdata(struct imx_port *sport,
2236 struct platform_device *pdev)
2237{
2238 struct imxuart_platform_data *pdata = dev_get_platdata(&pdev->dev);
2239
2240 sport->port.line = pdev->id;
2241 sport->devdata = (struct imx_uart_data *) pdev->id_entry->driver_data;
2242
2243 if (!pdata)
2244 return;
2245
2246 if (pdata->flags & IMXUART_HAVE_RTSCTS)
2247 sport->have_rtscts = 1;
2248}
2249
2250static enum hrtimer_restart imx_trigger_start_tx(struct hrtimer *t)
2251{
2252 struct imx_port *sport = container_of(t, struct imx_port, trigger_start_tx);
2253 unsigned long flags;
2254
2255 spin_lock_irqsave(&sport->port.lock, flags);
2256 if (sport->tx_state == WAIT_AFTER_RTS)
2257 imx_uart_start_tx(&sport->port);
2258 spin_unlock_irqrestore(&sport->port.lock, flags);
2259
2260 return HRTIMER_NORESTART;
2261}
2262
2263static enum hrtimer_restart imx_trigger_stop_tx(struct hrtimer *t)
2264{
2265 struct imx_port *sport = container_of(t, struct imx_port, trigger_stop_tx);
2266 unsigned long flags;
2267
2268 spin_lock_irqsave(&sport->port.lock, flags);
2269 if (sport->tx_state == WAIT_AFTER_SEND)
2270 imx_uart_stop_tx(&sport->port);
2271 spin_unlock_irqrestore(&sport->port.lock, flags);
2272
2273 return HRTIMER_NORESTART;
2274}
2275
2276static int imx_uart_probe(struct platform_device *pdev)
2277{
2278 struct imx_port *sport;
2279 void __iomem *base;
2280 int ret = 0;
2281 u32 ucr1;
2282 struct resource *res;
2283 int txirq, rxirq, rtsirq;
2284
2285 sport = devm_kzalloc(&pdev->dev, sizeof(*sport), GFP_KERNEL);
2286 if (!sport)
2287 return -ENOMEM;
2288
2289 ret = imx_uart_probe_dt(sport, pdev);
2290 if (ret > 0)
2291 imx_uart_probe_pdata(sport, pdev);
2292 else if (ret < 0)
2293 return ret;
2294
2295 if (sport->port.line >= ARRAY_SIZE(imx_uart_ports)) {
2296 dev_err(&pdev->dev, "serial%d out of range\n",
2297 sport->port.line);
2298 return -EINVAL;
2299 }
2300
2301 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2302 base = devm_ioremap_resource(&pdev->dev, res);
2303 if (IS_ERR(base))
2304 return PTR_ERR(base);
2305
2306 rxirq = platform_get_irq(pdev, 0);
2307 if (rxirq < 0)
2308 return rxirq;
2309 txirq = platform_get_irq_optional(pdev, 1);
2310 rtsirq = platform_get_irq_optional(pdev, 2);
2311
2312 sport->port.dev = &pdev->dev;
2313 sport->port.mapbase = res->start;
2314 sport->port.membase = base;
2315 sport->port.type = PORT_IMX,
2316 sport->port.iotype = UPIO_MEM;
2317 sport->port.irq = rxirq;
2318 sport->port.fifosize = 32;
2319 sport->port.has_sysrq = IS_ENABLED(CONFIG_SERIAL_IMX_CONSOLE);
2320 sport->port.ops = &imx_uart_pops;
2321 sport->port.rs485_config = imx_uart_rs485_config;
2322 sport->port.flags = UPF_BOOT_AUTOCONF;
2323 timer_setup(&sport->timer, imx_uart_timeout, 0);
2324
2325 sport->gpios = mctrl_gpio_init(&sport->port, 0);
2326 if (IS_ERR(sport->gpios))
2327 return PTR_ERR(sport->gpios);
2328
2329 sport->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
2330 if (IS_ERR(sport->clk_ipg)) {
2331 ret = PTR_ERR(sport->clk_ipg);
2332 dev_err(&pdev->dev, "failed to get ipg clk: %d\n", ret);
2333 return ret;
2334 }
2335
2336 sport->clk_per = devm_clk_get(&pdev->dev, "per");
2337 if (IS_ERR(sport->clk_per)) {
2338 ret = PTR_ERR(sport->clk_per);
2339 dev_err(&pdev->dev, "failed to get per clk: %d\n", ret);
2340 return ret;
2341 }
2342
2343 sport->port.uartclk = clk_get_rate(sport->clk_per);
2344
2345
2346 ret = clk_prepare_enable(sport->clk_ipg);
2347 if (ret) {
2348 dev_err(&pdev->dev, "failed to enable per clk: %d\n", ret);
2349 return ret;
2350 }
2351
2352
2353 sport->ucr1 = readl(sport->port.membase + UCR1);
2354 sport->ucr2 = readl(sport->port.membase + UCR2);
2355 sport->ucr3 = readl(sport->port.membase + UCR3);
2356 sport->ucr4 = readl(sport->port.membase + UCR4);
2357 sport->ufcr = readl(sport->port.membase + UFCR);
2358
2359 ret = uart_get_rs485_mode(&sport->port);
2360 if (ret) {
2361 clk_disable_unprepare(sport->clk_ipg);
2362 return ret;
2363 }
2364
2365 if (sport->port.rs485.flags & SER_RS485_ENABLED &&
2366 (!sport->have_rtscts && !sport->have_rtsgpio))
2367 dev_err(&pdev->dev, "no RTS control, disabling rs485\n");
2368
2369
2370
2371
2372
2373
2374 if (sport->port.rs485.flags & SER_RS485_ENABLED &&
2375 sport->have_rtscts && !sport->have_rtsgpio &&
2376 (!(sport->port.rs485.flags & SER_RS485_RTS_ON_SEND) &&
2377 !(sport->port.rs485.flags & SER_RS485_RX_DURING_TX)))
2378 dev_err(&pdev->dev,
2379 "low-active RTS not possible when receiver is off, enabling receiver\n");
2380
2381 imx_uart_rs485_config(&sport->port, &sport->port.rs485);
2382
2383
2384 ucr1 = imx_uart_readl(sport, UCR1);
2385 ucr1 &= ~(UCR1_ADEN | UCR1_TRDYEN | UCR1_IDEN | UCR1_RRDYEN | UCR1_RTSDEN);
2386 imx_uart_writel(sport, ucr1, UCR1);
2387
2388 if (!imx_uart_is_imx1(sport) && sport->dte_mode) {
2389
2390
2391
2392
2393
2394
2395 u32 ufcr = imx_uart_readl(sport, UFCR);
2396 if (!(ufcr & UFCR_DCEDTE))
2397 imx_uart_writel(sport, ufcr | UFCR_DCEDTE, UFCR);
2398
2399
2400
2401
2402
2403
2404 imx_uart_writel(sport,
2405 IMX21_UCR3_RXDMUXSEL | UCR3_ADNIMP | UCR3_DSR,
2406 UCR3);
2407
2408 } else {
2409 u32 ucr3 = UCR3_DSR;
2410 u32 ufcr = imx_uart_readl(sport, UFCR);
2411 if (ufcr & UFCR_DCEDTE)
2412 imx_uart_writel(sport, ufcr & ~UFCR_DCEDTE, UFCR);
2413
2414 if (!imx_uart_is_imx1(sport))
2415 ucr3 |= IMX21_UCR3_RXDMUXSEL | UCR3_ADNIMP;
2416 imx_uart_writel(sport, ucr3, UCR3);
2417 }
2418
2419 clk_disable_unprepare(sport->clk_ipg);
2420
2421 hrtimer_init(&sport->trigger_start_tx, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
2422 hrtimer_init(&sport->trigger_stop_tx, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
2423 sport->trigger_start_tx.function = imx_trigger_start_tx;
2424 sport->trigger_stop_tx.function = imx_trigger_stop_tx;
2425
2426
2427
2428
2429
2430 if (txirq > 0) {
2431 ret = devm_request_irq(&pdev->dev, rxirq, imx_uart_rxint, 0,
2432 dev_name(&pdev->dev), sport);
2433 if (ret) {
2434 dev_err(&pdev->dev, "failed to request rx irq: %d\n",
2435 ret);
2436 return ret;
2437 }
2438
2439 ret = devm_request_irq(&pdev->dev, txirq, imx_uart_txint, 0,
2440 dev_name(&pdev->dev), sport);
2441 if (ret) {
2442 dev_err(&pdev->dev, "failed to request tx irq: %d\n",
2443 ret);
2444 return ret;
2445 }
2446
2447 ret = devm_request_irq(&pdev->dev, rtsirq, imx_uart_rtsint, 0,
2448 dev_name(&pdev->dev), sport);
2449 if (ret) {
2450 dev_err(&pdev->dev, "failed to request rts irq: %d\n",
2451 ret);
2452 return ret;
2453 }
2454 } else {
2455 ret = devm_request_irq(&pdev->dev, rxirq, imx_uart_int, 0,
2456 dev_name(&pdev->dev), sport);
2457 if (ret) {
2458 dev_err(&pdev->dev, "failed to request irq: %d\n", ret);
2459 return ret;
2460 }
2461 }
2462
2463 imx_uart_ports[sport->port.line] = sport;
2464
2465 platform_set_drvdata(pdev, sport);
2466
2467 return uart_add_one_port(&imx_uart_uart_driver, &sport->port);
2468}
2469
2470static int imx_uart_remove(struct platform_device *pdev)
2471{
2472 struct imx_port *sport = platform_get_drvdata(pdev);
2473
2474 return uart_remove_one_port(&imx_uart_uart_driver, &sport->port);
2475}
2476
2477static void imx_uart_restore_context(struct imx_port *sport)
2478{
2479 unsigned long flags;
2480
2481 spin_lock_irqsave(&sport->port.lock, flags);
2482 if (!sport->context_saved) {
2483 spin_unlock_irqrestore(&sport->port.lock, flags);
2484 return;
2485 }
2486
2487 imx_uart_writel(sport, sport->saved_reg[4], UFCR);
2488 imx_uart_writel(sport, sport->saved_reg[5], UESC);
2489 imx_uart_writel(sport, sport->saved_reg[6], UTIM);
2490 imx_uart_writel(sport, sport->saved_reg[7], UBIR);
2491 imx_uart_writel(sport, sport->saved_reg[8], UBMR);
2492 imx_uart_writel(sport, sport->saved_reg[9], IMX21_UTS);
2493 imx_uart_writel(sport, sport->saved_reg[0], UCR1);
2494 imx_uart_writel(sport, sport->saved_reg[1] | UCR2_SRST, UCR2);
2495 imx_uart_writel(sport, sport->saved_reg[2], UCR3);
2496 imx_uart_writel(sport, sport->saved_reg[3], UCR4);
2497 sport->context_saved = false;
2498 spin_unlock_irqrestore(&sport->port.lock, flags);
2499}
2500
2501static void imx_uart_save_context(struct imx_port *sport)
2502{
2503 unsigned long flags;
2504
2505
2506 spin_lock_irqsave(&sport->port.lock, flags);
2507 sport->saved_reg[0] = imx_uart_readl(sport, UCR1);
2508 sport->saved_reg[1] = imx_uart_readl(sport, UCR2);
2509 sport->saved_reg[2] = imx_uart_readl(sport, UCR3);
2510 sport->saved_reg[3] = imx_uart_readl(sport, UCR4);
2511 sport->saved_reg[4] = imx_uart_readl(sport, UFCR);
2512 sport->saved_reg[5] = imx_uart_readl(sport, UESC);
2513 sport->saved_reg[6] = imx_uart_readl(sport, UTIM);
2514 sport->saved_reg[7] = imx_uart_readl(sport, UBIR);
2515 sport->saved_reg[8] = imx_uart_readl(sport, UBMR);
2516 sport->saved_reg[9] = imx_uart_readl(sport, IMX21_UTS);
2517 sport->context_saved = true;
2518 spin_unlock_irqrestore(&sport->port.lock, flags);
2519}
2520
2521static void imx_uart_enable_wakeup(struct imx_port *sport, bool on)
2522{
2523 u32 ucr3;
2524
2525 ucr3 = imx_uart_readl(sport, UCR3);
2526 if (on) {
2527 imx_uart_writel(sport, USR1_AWAKE, USR1);
2528 ucr3 |= UCR3_AWAKEN;
2529 } else {
2530 ucr3 &= ~UCR3_AWAKEN;
2531 }
2532 imx_uart_writel(sport, ucr3, UCR3);
2533
2534 if (sport->have_rtscts) {
2535 u32 ucr1 = imx_uart_readl(sport, UCR1);
2536 if (on)
2537 ucr1 |= UCR1_RTSDEN;
2538 else
2539 ucr1 &= ~UCR1_RTSDEN;
2540 imx_uart_writel(sport, ucr1, UCR1);
2541 }
2542}
2543
2544static int imx_uart_suspend_noirq(struct device *dev)
2545{
2546 struct imx_port *sport = dev_get_drvdata(dev);
2547
2548 imx_uart_save_context(sport);
2549
2550 clk_disable(sport->clk_ipg);
2551
2552 pinctrl_pm_select_sleep_state(dev);
2553
2554 return 0;
2555}
2556
2557static int imx_uart_resume_noirq(struct device *dev)
2558{
2559 struct imx_port *sport = dev_get_drvdata(dev);
2560 int ret;
2561
2562 pinctrl_pm_select_default_state(dev);
2563
2564 ret = clk_enable(sport->clk_ipg);
2565 if (ret)
2566 return ret;
2567
2568 imx_uart_restore_context(sport);
2569
2570 return 0;
2571}
2572
2573static int imx_uart_suspend(struct device *dev)
2574{
2575 struct imx_port *sport = dev_get_drvdata(dev);
2576 int ret;
2577
2578 uart_suspend_port(&imx_uart_uart_driver, &sport->port);
2579 disable_irq(sport->port.irq);
2580
2581 ret = clk_prepare_enable(sport->clk_ipg);
2582 if (ret)
2583 return ret;
2584
2585
2586 imx_uart_enable_wakeup(sport, true);
2587
2588 return 0;
2589}
2590
2591static int imx_uart_resume(struct device *dev)
2592{
2593 struct imx_port *sport = dev_get_drvdata(dev);
2594
2595
2596 imx_uart_enable_wakeup(sport, false);
2597
2598 uart_resume_port(&imx_uart_uart_driver, &sport->port);
2599 enable_irq(sport->port.irq);
2600
2601 clk_disable_unprepare(sport->clk_ipg);
2602
2603 return 0;
2604}
2605
2606static int imx_uart_freeze(struct device *dev)
2607{
2608 struct imx_port *sport = dev_get_drvdata(dev);
2609
2610 uart_suspend_port(&imx_uart_uart_driver, &sport->port);
2611
2612 return clk_prepare_enable(sport->clk_ipg);
2613}
2614
2615static int imx_uart_thaw(struct device *dev)
2616{
2617 struct imx_port *sport = dev_get_drvdata(dev);
2618
2619 uart_resume_port(&imx_uart_uart_driver, &sport->port);
2620
2621 clk_disable_unprepare(sport->clk_ipg);
2622
2623 return 0;
2624}
2625
2626static const struct dev_pm_ops imx_uart_pm_ops = {
2627 .suspend_noirq = imx_uart_suspend_noirq,
2628 .resume_noirq = imx_uart_resume_noirq,
2629 .freeze_noirq = imx_uart_suspend_noirq,
2630 .restore_noirq = imx_uart_resume_noirq,
2631 .suspend = imx_uart_suspend,
2632 .resume = imx_uart_resume,
2633 .freeze = imx_uart_freeze,
2634 .thaw = imx_uart_thaw,
2635 .restore = imx_uart_thaw,
2636};
2637
2638static struct platform_driver imx_uart_platform_driver = {
2639 .probe = imx_uart_probe,
2640 .remove = imx_uart_remove,
2641
2642 .id_table = imx_uart_devtype,
2643 .driver = {
2644 .name = "imx-uart",
2645 .of_match_table = imx_uart_dt_ids,
2646 .pm = &imx_uart_pm_ops,
2647 },
2648};
2649
2650static int __init imx_uart_init(void)
2651{
2652 int ret = uart_register_driver(&imx_uart_uart_driver);
2653
2654 if (ret)
2655 return ret;
2656
2657 ret = platform_driver_register(&imx_uart_platform_driver);
2658 if (ret != 0)
2659 uart_unregister_driver(&imx_uart_uart_driver);
2660
2661 return ret;
2662}
2663
2664static void __exit imx_uart_exit(void)
2665{
2666 platform_driver_unregister(&imx_uart_platform_driver);
2667 uart_unregister_driver(&imx_uart_uart_driver);
2668}
2669
2670module_init(imx_uart_init);
2671module_exit(imx_uart_exit);
2672
2673MODULE_AUTHOR("Sascha Hauer");
2674MODULE_DESCRIPTION("IMX generic serial port driver");
2675MODULE_LICENSE("GPL");
2676MODULE_ALIAS("platform:imx-uart");
2677