2 * Driver for OMAP-UART controller.
3 * Based on drivers/serial/8250.c
5 * Copyright (C) 2010 Texas Instruments.
8 * Govindraj R <govindraj.raja@ti.com>
9 * Thara Gopinath <thara@ti.com>
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * Note: This driver is made separate from 8250 driver as we cannot
17 * over load 8250 driver with omap platform specific configuration for
18 * features like DMA, it makes easier to implement features like DMA and
19 * hardware flow control and software flow control configuration with
20 * this driver as required for the omap-platform.
23 #if defined(CONFIG_SERIAL_OMAP_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
27 #include <linux/module.h>
28 #include <linux/init.h>
29 #include <linux/console.h>
30 #include <linux/serial_reg.h>
31 #include <linux/delay.h>
32 #include <linux/slab.h>
33 #include <linux/tty.h>
34 #include <linux/tty_flip.h>
36 #include <linux/dma-mapping.h>
37 #include <linux/clk.h>
38 #include <linux/serial_core.h>
39 #include <linux/irq.h>
40 #include <linux/pm_runtime.h>
44 #include <plat/dmtimer.h>
45 #include <plat/omap-serial.h>
47 #define DEFAULT_CLK_SPEED 48000000 /* 48Mhz*/
49 /* SCR register bitmasks */
50 #define OMAP_UART_SCR_RX_TRIG_GRANU1_MASK (1 << 7)
51 #define OMAP_UART_SCR_TX_TRIG_GRANU1_MASK (1 << 6)
53 /* FCR register bitmasks */
54 #define OMAP_UART_FCR_RX_FIFO_TRIG_SHIFT 6
55 #define OMAP_UART_FCR_RX_FIFO_TRIG_MASK (0x3 << 6)
56 #define OMAP_UART_FCR_TX_FIFO_TRIG_SHIFT 4
58 /* TLR register bitmasks */
59 #define OMAP_UART_TLR_TX_FIFO_TRIG_DMA_SHIFT 0
61 static struct uart_omap_port
*ui
[OMAP_MAX_HSUART_PORTS
];
63 /* Forward declaration of functions */
64 static void uart_tx_dma_callback(int lch
, u16 ch_status
, void *data
);
65 static void serial_omap_rxdma_poll(unsigned long uart_no
);
66 static int serial_omap_start_rxdma(struct uart_omap_port
*up
);
67 static void serial_omap_mdr1_errataset(struct uart_omap_port
*up
, u8 mdr1
);
69 static struct workqueue_struct
*serial_omap_uart_wq
;
71 static inline unsigned int serial_in(struct uart_omap_port
*up
, int offset
)
73 offset
<<= up
->port
.regshift
;
74 return readw(up
->port
.membase
+ offset
);
77 static inline void serial_out(struct uart_omap_port
*up
, int offset
, int value
)
79 offset
<<= up
->port
.regshift
;
80 writew(value
, up
->port
.membase
+ offset
);
83 static inline void serial_omap_clear_fifos(struct uart_omap_port
*up
)
85 serial_out(up
, UART_FCR
, UART_FCR_ENABLE_FIFO
);
86 serial_out(up
, UART_FCR
, UART_FCR_ENABLE_FIFO
|
87 UART_FCR_CLEAR_RCVR
| UART_FCR_CLEAR_XMIT
);
88 serial_out(up
, UART_FCR
, 0);
92 * serial_omap_get_divisor - calculate divisor value
93 * @port: uart port info
94 * @baud: baudrate for which divisor needs to be calculated.
96 * We have written our own function to get the divisor so as to support
97 * 13x mode. 3Mbps Baudrate as an different divisor.
98 * Reference OMAP TRM Chapter 17:
99 * Table 17-1. UART Mode Baud Rates, Divisor Values, and Error Rates
100 * referring to oversampling - divisor value
101 * baudrate 460,800 to 3,686,400 all have divisor 13
102 * except 3,000,000 which has divisor value 16
105 serial_omap_get_divisor(struct uart_port
*port
, unsigned int baud
)
107 unsigned int divisor
;
109 if (baud
> OMAP_MODE13X_SPEED
&& baud
!= 3000000)
113 return port
->uartclk
/(baud
* divisor
);
116 static void serial_omap_stop_rxdma(struct uart_omap_port
*up
)
118 if (up
->uart_dma
.rx_dma_used
) {
119 del_timer(&up
->uart_dma
.rx_timer
);
120 omap_stop_dma(up
->uart_dma
.rx_dma_channel
);
121 omap_free_dma(up
->uart_dma
.rx_dma_channel
);
122 up
->uart_dma
.rx_dma_channel
= OMAP_UART_DMA_CH_FREE
;
123 up
->uart_dma
.rx_dma_used
= false;
124 pm_runtime_mark_last_busy(&up
->pdev
->dev
);
125 pm_runtime_put_autosuspend(&up
->pdev
->dev
);
129 static void serial_omap_enable_ms(struct uart_port
*port
)
131 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
133 dev_dbg(up
->port
.dev
, "serial_omap_enable_ms+%d\n", up
->port
.line
);
135 pm_runtime_get_sync(&up
->pdev
->dev
);
136 up
->ier
|= UART_IER_MSI
;
137 serial_out(up
, UART_IER
, up
->ier
);
138 pm_runtime_put(&up
->pdev
->dev
);
141 static void serial_omap_stop_tx(struct uart_port
*port
)
143 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
146 up
->uart_dma
.tx_dma_channel
!= OMAP_UART_DMA_CH_FREE
) {
148 * Check if dma is still active. If yes do nothing,
149 * return. Else stop dma
151 if (omap_get_dma_active_status(up
->uart_dma
.tx_dma_channel
))
153 omap_stop_dma(up
->uart_dma
.tx_dma_channel
);
154 omap_free_dma(up
->uart_dma
.tx_dma_channel
);
155 up
->uart_dma
.tx_dma_channel
= OMAP_UART_DMA_CH_FREE
;
156 pm_runtime_mark_last_busy(&up
->pdev
->dev
);
157 pm_runtime_put_autosuspend(&up
->pdev
->dev
);
160 pm_runtime_get_sync(&up
->pdev
->dev
);
161 if (up
->ier
& UART_IER_THRI
) {
162 up
->ier
&= ~UART_IER_THRI
;
163 serial_out(up
, UART_IER
, up
->ier
);
166 pm_runtime_mark_last_busy(&up
->pdev
->dev
);
167 pm_runtime_put_autosuspend(&up
->pdev
->dev
);
170 static void serial_omap_stop_rx(struct uart_port
*port
)
172 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
174 pm_runtime_get_sync(&up
->pdev
->dev
);
176 serial_omap_stop_rxdma(up
);
177 up
->ier
&= ~UART_IER_RLSI
;
178 up
->port
.read_status_mask
&= ~UART_LSR_DR
;
179 serial_out(up
, UART_IER
, up
->ier
);
180 pm_runtime_mark_last_busy(&up
->pdev
->dev
);
181 pm_runtime_put_autosuspend(&up
->pdev
->dev
);
184 static inline void receive_chars(struct uart_omap_port
*up
,
185 unsigned int *status
)
187 struct tty_struct
*tty
= up
->port
.state
->port
.tty
;
188 unsigned int flag
, lsr
= *status
;
189 unsigned char ch
= 0;
193 if (likely(lsr
& UART_LSR_DR
))
194 ch
= serial_in(up
, UART_RX
);
196 up
->port
.icount
.rx
++;
198 if (unlikely(lsr
& UART_LSR_BRK_ERROR_BITS
)) {
200 * For statistics only
202 if (lsr
& UART_LSR_BI
) {
203 lsr
&= ~(UART_LSR_FE
| UART_LSR_PE
);
204 up
->port
.icount
.brk
++;
206 * We do the SysRQ and SAK checking
207 * here because otherwise the break
208 * may get masked by ignore_status_mask
209 * or read_status_mask.
211 if (uart_handle_break(&up
->port
))
213 } else if (lsr
& UART_LSR_PE
) {
214 up
->port
.icount
.parity
++;
215 } else if (lsr
& UART_LSR_FE
) {
216 up
->port
.icount
.frame
++;
219 if (lsr
& UART_LSR_OE
)
220 up
->port
.icount
.overrun
++;
223 * Mask off conditions which should be ignored.
225 lsr
&= up
->port
.read_status_mask
;
227 #ifdef CONFIG_SERIAL_OMAP_CONSOLE
228 if (up
->port
.line
== up
->port
.cons
->index
) {
229 /* Recover the break flag from console xmit */
230 lsr
|= up
->lsr_break_flag
;
233 if (lsr
& UART_LSR_BI
)
235 else if (lsr
& UART_LSR_PE
)
237 else if (lsr
& UART_LSR_FE
)
241 if (uart_handle_sysrq_char(&up
->port
, ch
))
243 uart_insert_char(&up
->port
, lsr
, UART_LSR_OE
, ch
, flag
);
245 lsr
= serial_in(up
, UART_LSR
);
246 } while ((lsr
& (UART_LSR_DR
| UART_LSR_BI
)) && (max_count
-- > 0));
247 spin_unlock(&up
->port
.lock
);
248 tty_flip_buffer_push(tty
);
249 spin_lock(&up
->port
.lock
);
252 static void transmit_chars(struct uart_omap_port
*up
)
254 struct circ_buf
*xmit
= &up
->port
.state
->xmit
;
257 if (up
->port
.x_char
) {
258 serial_out(up
, UART_TX
, up
->port
.x_char
);
259 up
->port
.icount
.tx
++;
263 if (uart_circ_empty(xmit
) || uart_tx_stopped(&up
->port
)) {
264 serial_omap_stop_tx(&up
->port
);
267 count
= up
->port
.fifosize
/ 4;
269 serial_out(up
, UART_TX
, xmit
->buf
[xmit
->tail
]);
270 xmit
->tail
= (xmit
->tail
+ 1) & (UART_XMIT_SIZE
- 1);
271 up
->port
.icount
.tx
++;
272 if (uart_circ_empty(xmit
))
274 } while (--count
> 0);
276 if (uart_circ_chars_pending(xmit
) < WAKEUP_CHARS
)
277 uart_write_wakeup(&up
->port
);
279 if (uart_circ_empty(xmit
))
280 serial_omap_stop_tx(&up
->port
);
283 static inline void serial_omap_enable_ier_thri(struct uart_omap_port
*up
)
285 if (!(up
->ier
& UART_IER_THRI
)) {
286 up
->ier
|= UART_IER_THRI
;
287 serial_out(up
, UART_IER
, up
->ier
);
291 static void serial_omap_start_tx(struct uart_port
*port
)
293 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
294 struct circ_buf
*xmit
;
299 pm_runtime_get_sync(&up
->pdev
->dev
);
300 serial_omap_enable_ier_thri(up
);
301 pm_runtime_mark_last_busy(&up
->pdev
->dev
);
302 pm_runtime_put_autosuspend(&up
->pdev
->dev
);
306 if (up
->uart_dma
.tx_dma_used
)
309 xmit
= &up
->port
.state
->xmit
;
311 if (up
->uart_dma
.tx_dma_channel
== OMAP_UART_DMA_CH_FREE
) {
312 pm_runtime_get_sync(&up
->pdev
->dev
);
313 ret
= omap_request_dma(up
->uart_dma
.uart_dma_tx
,
315 (void *)uart_tx_dma_callback
, up
,
316 &(up
->uart_dma
.tx_dma_channel
));
319 serial_omap_enable_ier_thri(up
);
323 spin_lock(&(up
->uart_dma
.tx_lock
));
324 up
->uart_dma
.tx_dma_used
= true;
325 spin_unlock(&(up
->uart_dma
.tx_lock
));
327 start
= up
->uart_dma
.tx_buf_dma_phys
+
328 (xmit
->tail
& (UART_XMIT_SIZE
- 1));
330 up
->uart_dma
.tx_buf_size
= uart_circ_chars_pending(xmit
);
332 * It is a circular buffer. See if the buffer has wounded back.
333 * If yes it will have to be transferred in two separate dma
336 if (start
+ up
->uart_dma
.tx_buf_size
>=
337 up
->uart_dma
.tx_buf_dma_phys
+ UART_XMIT_SIZE
)
338 up
->uart_dma
.tx_buf_size
=
339 (up
->uart_dma
.tx_buf_dma_phys
+
340 UART_XMIT_SIZE
) - start
;
342 omap_set_dma_dest_params(up
->uart_dma
.tx_dma_channel
, 0,
343 OMAP_DMA_AMODE_CONSTANT
,
344 up
->uart_dma
.uart_base
, 0, 0);
345 omap_set_dma_src_params(up
->uart_dma
.tx_dma_channel
, 0,
346 OMAP_DMA_AMODE_POST_INC
, start
, 0, 0);
347 omap_set_dma_transfer_params(up
->uart_dma
.tx_dma_channel
,
348 OMAP_DMA_DATA_TYPE_S8
,
349 up
->uart_dma
.tx_buf_size
, 1,
350 OMAP_DMA_SYNC_ELEMENT
,
351 up
->uart_dma
.uart_dma_tx
, 0);
352 /* FIXME: Cache maintenance needed here? */
353 omap_start_dma(up
->uart_dma
.tx_dma_channel
);
356 static unsigned int check_modem_status(struct uart_omap_port
*up
)
360 status
= serial_in(up
, UART_MSR
);
361 status
|= up
->msr_saved_flags
;
362 up
->msr_saved_flags
= 0;
363 if ((status
& UART_MSR_ANY_DELTA
) == 0)
366 if (status
& UART_MSR_ANY_DELTA
&& up
->ier
& UART_IER_MSI
&&
367 up
->port
.state
!= NULL
) {
368 if (status
& UART_MSR_TERI
)
369 up
->port
.icount
.rng
++;
370 if (status
& UART_MSR_DDSR
)
371 up
->port
.icount
.dsr
++;
372 if (status
& UART_MSR_DDCD
)
373 uart_handle_dcd_change
374 (&up
->port
, status
& UART_MSR_DCD
);
375 if (status
& UART_MSR_DCTS
)
376 uart_handle_cts_change
377 (&up
->port
, status
& UART_MSR_CTS
);
378 wake_up_interruptible(&up
->port
.state
->port
.delta_msr_wait
);
385 * serial_omap_irq() - This handles the interrupt from one port
386 * @irq: uart port irq number
387 * @dev_id: uart port info
389 static inline irqreturn_t
serial_omap_irq(int irq
, void *dev_id
)
391 struct uart_omap_port
*up
= dev_id
;
392 unsigned int iir
, lsr
;
395 pm_runtime_get_sync(&up
->pdev
->dev
);
396 iir
= serial_in(up
, UART_IIR
);
397 if (iir
& UART_IIR_NO_INT
) {
398 pm_runtime_mark_last_busy(&up
->pdev
->dev
);
399 pm_runtime_put_autosuspend(&up
->pdev
->dev
);
403 spin_lock_irqsave(&up
->port
.lock
, flags
);
404 lsr
= serial_in(up
, UART_LSR
);
405 if (iir
& UART_IIR_RLSI
) {
407 if (lsr
& UART_LSR_DR
)
408 receive_chars(up
, &lsr
);
410 up
->ier
&= ~(UART_IER_RDI
| UART_IER_RLSI
);
411 serial_out(up
, UART_IER
, up
->ier
);
412 if ((serial_omap_start_rxdma(up
) != 0) &&
414 receive_chars(up
, &lsr
);
418 check_modem_status(up
);
419 if ((lsr
& UART_LSR_THRE
) && (iir
& UART_IIR_THRI
))
422 spin_unlock_irqrestore(&up
->port
.lock
, flags
);
423 pm_runtime_mark_last_busy(&up
->pdev
->dev
);
424 pm_runtime_put_autosuspend(&up
->pdev
->dev
);
426 up
->port_activity
= jiffies
;
430 static unsigned int serial_omap_tx_empty(struct uart_port
*port
)
432 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
433 unsigned long flags
= 0;
434 unsigned int ret
= 0;
436 pm_runtime_get_sync(&up
->pdev
->dev
);
437 dev_dbg(up
->port
.dev
, "serial_omap_tx_empty+%d\n", up
->port
.line
);
438 spin_lock_irqsave(&up
->port
.lock
, flags
);
439 ret
= serial_in(up
, UART_LSR
) & UART_LSR_TEMT
? TIOCSER_TEMT
: 0;
440 spin_unlock_irqrestore(&up
->port
.lock
, flags
);
441 pm_runtime_put(&up
->pdev
->dev
);
445 static unsigned int serial_omap_get_mctrl(struct uart_port
*port
)
447 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
449 unsigned int ret
= 0;
451 pm_runtime_get_sync(&up
->pdev
->dev
);
452 status
= check_modem_status(up
);
453 pm_runtime_put(&up
->pdev
->dev
);
455 dev_dbg(up
->port
.dev
, "serial_omap_get_mctrl+%d\n", up
->port
.line
);
457 if (status
& UART_MSR_DCD
)
459 if (status
& UART_MSR_RI
)
461 if (status
& UART_MSR_DSR
)
463 if (status
& UART_MSR_CTS
)
468 static void serial_omap_set_mctrl(struct uart_port
*port
, unsigned int mctrl
)
470 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
471 unsigned char mcr
= 0;
473 dev_dbg(up
->port
.dev
, "serial_omap_set_mctrl+%d\n", up
->port
.line
);
474 if (mctrl
& TIOCM_RTS
)
476 if (mctrl
& TIOCM_DTR
)
478 if (mctrl
& TIOCM_OUT1
)
479 mcr
|= UART_MCR_OUT1
;
480 if (mctrl
& TIOCM_OUT2
)
481 mcr
|= UART_MCR_OUT2
;
482 if (mctrl
& TIOCM_LOOP
)
483 mcr
|= UART_MCR_LOOP
;
485 pm_runtime_get_sync(&up
->pdev
->dev
);
486 up
->mcr
= serial_in(up
, UART_MCR
);
488 serial_out(up
, UART_MCR
, up
->mcr
);
489 pm_runtime_put(&up
->pdev
->dev
);
492 static void serial_omap_break_ctl(struct uart_port
*port
, int break_state
)
494 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
495 unsigned long flags
= 0;
497 dev_dbg(up
->port
.dev
, "serial_omap_break_ctl+%d\n", up
->port
.line
);
498 pm_runtime_get_sync(&up
->pdev
->dev
);
499 spin_lock_irqsave(&up
->port
.lock
, flags
);
500 if (break_state
== -1)
501 up
->lcr
|= UART_LCR_SBC
;
503 up
->lcr
&= ~UART_LCR_SBC
;
504 serial_out(up
, UART_LCR
, up
->lcr
);
505 spin_unlock_irqrestore(&up
->port
.lock
, flags
);
506 pm_runtime_put(&up
->pdev
->dev
);
509 static int serial_omap_startup(struct uart_port
*port
)
511 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
512 unsigned long flags
= 0;
518 retval
= request_irq(up
->port
.irq
, serial_omap_irq
, up
->port
.irqflags
,
523 dev_dbg(up
->port
.dev
, "serial_omap_startup+%d\n", up
->port
.line
);
525 pm_runtime_get_sync(&up
->pdev
->dev
);
527 * Clear the FIFO buffers and disable them.
528 * (they will be reenabled in set_termios())
530 serial_omap_clear_fifos(up
);
531 /* For Hardware flow control */
532 serial_out(up
, UART_MCR
, UART_MCR_RTS
);
535 * Clear the interrupt registers.
537 (void) serial_in(up
, UART_LSR
);
538 if (serial_in(up
, UART_LSR
) & UART_LSR_DR
)
539 (void) serial_in(up
, UART_RX
);
540 (void) serial_in(up
, UART_IIR
);
541 (void) serial_in(up
, UART_MSR
);
544 * Now, initialize the UART
546 serial_out(up
, UART_LCR
, UART_LCR_WLEN8
);
547 spin_lock_irqsave(&up
->port
.lock
, flags
);
549 * Most PC uarts need OUT2 raised to enable interrupts.
551 up
->port
.mctrl
|= TIOCM_OUT2
;
552 serial_omap_set_mctrl(&up
->port
, up
->port
.mctrl
);
553 spin_unlock_irqrestore(&up
->port
.lock
, flags
);
555 up
->msr_saved_flags
= 0;
557 free_page((unsigned long)up
->port
.state
->xmit
.buf
);
558 up
->port
.state
->xmit
.buf
= dma_alloc_coherent(NULL
,
560 (dma_addr_t
*)&(up
->uart_dma
.tx_buf_dma_phys
),
562 init_timer(&(up
->uart_dma
.rx_timer
));
563 up
->uart_dma
.rx_timer
.function
= serial_omap_rxdma_poll
;
564 up
->uart_dma
.rx_timer
.data
= up
->port
.line
;
565 /* Currently the buffer size is 4KB. Can increase it */
566 up
->uart_dma
.rx_buf
= dma_alloc_coherent(NULL
,
567 up
->uart_dma
.rx_buf_size
,
568 (dma_addr_t
*)&(up
->uart_dma
.rx_buf_dma_phys
), 0);
571 * Finally, enable interrupts. Note: Modem status interrupts
572 * are set via set_termios(), which will be occurring imminently
573 * anyway, so we don't enable them here.
575 up
->ier
= UART_IER_RLSI
| UART_IER_RDI
;
576 serial_out(up
, UART_IER
, up
->ier
);
578 /* Enable module level wake up */
579 serial_out(up
, UART_OMAP_WER
, OMAP_UART_WER_MOD_WKUP
);
581 pm_runtime_mark_last_busy(&up
->pdev
->dev
);
582 pm_runtime_put_autosuspend(&up
->pdev
->dev
);
583 up
->port_activity
= jiffies
;
587 static void serial_omap_shutdown(struct uart_port
*port
)
589 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
590 unsigned long flags
= 0;
592 dev_dbg(up
->port
.dev
, "serial_omap_shutdown+%d\n", up
->port
.line
);
594 pm_runtime_get_sync(&up
->pdev
->dev
);
596 * Disable interrupts from this port
599 serial_out(up
, UART_IER
, 0);
601 spin_lock_irqsave(&up
->port
.lock
, flags
);
602 up
->port
.mctrl
&= ~TIOCM_OUT2
;
603 serial_omap_set_mctrl(&up
->port
, up
->port
.mctrl
);
604 spin_unlock_irqrestore(&up
->port
.lock
, flags
);
607 * Disable break condition and FIFOs
609 serial_out(up
, UART_LCR
, serial_in(up
, UART_LCR
) & ~UART_LCR_SBC
);
610 serial_omap_clear_fifos(up
);
613 * Read data port to reset things, and then free the irq
615 if (serial_in(up
, UART_LSR
) & UART_LSR_DR
)
616 (void) serial_in(up
, UART_RX
);
618 dma_free_coherent(up
->port
.dev
,
619 UART_XMIT_SIZE
, up
->port
.state
->xmit
.buf
,
620 up
->uart_dma
.tx_buf_dma_phys
);
621 up
->port
.state
->xmit
.buf
= NULL
;
622 serial_omap_stop_rx(port
);
623 dma_free_coherent(up
->port
.dev
,
624 up
->uart_dma
.rx_buf_size
, up
->uart_dma
.rx_buf
,
625 up
->uart_dma
.rx_buf_dma_phys
);
626 up
->uart_dma
.rx_buf
= NULL
;
629 pm_runtime_put(&up
->pdev
->dev
);
630 free_irq(up
->port
.irq
, up
);
634 serial_omap_configure_xonxoff
635 (struct uart_omap_port
*up
, struct ktermios
*termios
)
637 up
->lcr
= serial_in(up
, UART_LCR
);
638 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
);
639 up
->efr
= serial_in(up
, UART_EFR
);
640 serial_out(up
, UART_EFR
, up
->efr
& ~UART_EFR_ECB
);
642 serial_out(up
, UART_XON1
, termios
->c_cc
[VSTART
]);
643 serial_out(up
, UART_XOFF1
, termios
->c_cc
[VSTOP
]);
645 /* clear SW control mode bits */
646 up
->efr
&= OMAP_UART_SW_CLR
;
650 * Enable XON/XOFF flow control on output.
651 * Transmit XON1, XOFF1
653 if (termios
->c_iflag
& IXON
)
654 up
->efr
|= OMAP_UART_SW_TX
;
658 * Enable XON/XOFF flow control on input.
659 * Receiver compares XON1, XOFF1.
661 if (termios
->c_iflag
& IXOFF
)
662 up
->efr
|= OMAP_UART_SW_RX
;
664 serial_out(up
, UART_EFR
, up
->efr
| UART_EFR_ECB
);
665 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_A
);
667 up
->mcr
= serial_in(up
, UART_MCR
);
671 * Enable any character to restart output.
672 * Operation resumes after receiving any
673 * character after recognition of the XOFF character
675 if (termios
->c_iflag
& IXANY
)
676 up
->mcr
|= UART_MCR_XONANY
;
678 serial_out(up
, UART_MCR
, up
->mcr
| UART_MCR_TCRTLR
);
679 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
);
680 serial_out(up
, UART_TI752_TCR
, OMAP_UART_TCR_TRIG
);
681 /* Enable special char function UARTi.EFR_REG[5] and
682 * load the new software flow control mode IXON or IXOFF
683 * and restore the UARTi.EFR_REG[4] ENHANCED_EN value.
685 serial_out(up
, UART_EFR
, up
->efr
| UART_EFR_SCD
);
686 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_A
);
688 serial_out(up
, UART_MCR
, up
->mcr
& ~UART_MCR_TCRTLR
);
689 serial_out(up
, UART_LCR
, up
->lcr
);
692 static void serial_omap_uart_qos_work(struct work_struct
*work
)
694 struct uart_omap_port
*up
= container_of(work
, struct uart_omap_port
,
697 pm_qos_update_request(&up
->pm_qos_request
, up
->latency
);
701 serial_omap_set_termios(struct uart_port
*port
, struct ktermios
*termios
,
702 struct ktermios
*old
)
704 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
705 unsigned char cval
= 0;
706 unsigned char efr
= 0;
707 unsigned long flags
= 0;
708 unsigned int baud
, quot
;
711 switch (termios
->c_cflag
& CSIZE
) {
713 cval
= UART_LCR_WLEN5
;
716 cval
= UART_LCR_WLEN6
;
719 cval
= UART_LCR_WLEN7
;
723 cval
= UART_LCR_WLEN8
;
727 if (termios
->c_cflag
& CSTOPB
)
728 cval
|= UART_LCR_STOP
;
729 if (termios
->c_cflag
& PARENB
)
730 cval
|= UART_LCR_PARITY
;
731 if (!(termios
->c_cflag
& PARODD
))
732 cval
|= UART_LCR_EPAR
;
735 * Ask the core to calculate the divisor for us.
738 baud
= uart_get_baud_rate(port
, termios
, old
, 0, port
->uartclk
/13);
739 quot
= serial_omap_get_divisor(port
, baud
);
741 /* calculate wakeup latency constraint */
742 up
->calc_latency
= (1000000 * up
->port
.fifosize
) /
744 up
->latency
= up
->calc_latency
;
745 schedule_work(&up
->qos_work
);
747 up
->dll
= quot
& 0xff;
749 up
->mdr1
= UART_OMAP_MDR1_DISABLE
;
751 up
->fcr
= UART_FCR_R_TRIG_01
| UART_FCR_T_TRIG_01
|
752 UART_FCR_ENABLE_FIFO
;
754 up
->fcr
|= UART_FCR_DMA_SELECT
;
757 * Ok, we're now changing the port state. Do it with
758 * interrupts disabled.
760 pm_runtime_get_sync(&up
->pdev
->dev
);
761 spin_lock_irqsave(&up
->port
.lock
, flags
);
764 * Update the per-port timeout.
766 uart_update_timeout(port
, termios
->c_cflag
, baud
);
768 up
->port
.read_status_mask
= UART_LSR_OE
| UART_LSR_THRE
| UART_LSR_DR
;
769 if (termios
->c_iflag
& INPCK
)
770 up
->port
.read_status_mask
|= UART_LSR_FE
| UART_LSR_PE
;
771 if (termios
->c_iflag
& (BRKINT
| PARMRK
))
772 up
->port
.read_status_mask
|= UART_LSR_BI
;
775 * Characters to ignore
777 up
->port
.ignore_status_mask
= 0;
778 if (termios
->c_iflag
& IGNPAR
)
779 up
->port
.ignore_status_mask
|= UART_LSR_PE
| UART_LSR_FE
;
780 if (termios
->c_iflag
& IGNBRK
) {
781 up
->port
.ignore_status_mask
|= UART_LSR_BI
;
783 * If we're ignoring parity and break indicators,
784 * ignore overruns too (for real raw support).
786 if (termios
->c_iflag
& IGNPAR
)
787 up
->port
.ignore_status_mask
|= UART_LSR_OE
;
791 * ignore all characters if CREAD is not set
793 if ((termios
->c_cflag
& CREAD
) == 0)
794 up
->port
.ignore_status_mask
|= UART_LSR_DR
;
797 * Modem status interrupts
799 up
->ier
&= ~UART_IER_MSI
;
800 if (UART_ENABLE_MS(&up
->port
, termios
->c_cflag
))
801 up
->ier
|= UART_IER_MSI
;
802 serial_out(up
, UART_IER
, up
->ier
);
803 serial_out(up
, UART_LCR
, cval
); /* reset DLAB */
805 up
->scr
= OMAP_UART_SCR_TX_EMPTY
;
807 /* FIFOs and DMA Settings */
809 /* FCR can be changed only when the
810 * baud clock is not running
811 * DLL_REG and DLH_REG set to 0.
813 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_A
);
814 serial_out(up
, UART_DLL
, 0);
815 serial_out(up
, UART_DLM
, 0);
816 serial_out(up
, UART_LCR
, 0);
818 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
);
820 up
->efr
= serial_in(up
, UART_EFR
);
821 serial_out(up
, UART_EFR
, up
->efr
| UART_EFR_ECB
);
823 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_A
);
824 up
->mcr
= serial_in(up
, UART_MCR
);
825 serial_out(up
, UART_MCR
, up
->mcr
| UART_MCR_TCRTLR
);
826 /* FIFO ENABLE, DMA MODE */
828 up
->scr
|= OMAP_UART_SCR_TX_TRIG_GRANU1_MASK
;
829 up
->scr
|= OMAP_UART_SCR_RX_TRIG_GRANU1_MASK
;
834 up
->scr
&= ~OMAP_UART_SCR_TX_EMPTY
;
836 /* Set receive FIFO threshold to 1 */
837 up
->fcr
&= ~OMAP_UART_FCR_RX_FIFO_TRIG_MASK
;
838 up
->fcr
|= (0x1 << OMAP_UART_FCR_RX_FIFO_TRIG_SHIFT
);
840 /* Set TX FIFO threshold to "63" (actually 1) */
841 up
->fcr
|= (0x3 << OMAP_UART_FCR_TX_FIFO_TRIG_SHIFT
);
842 tlr
= (0xf << OMAP_UART_TLR_TX_FIFO_TRIG_DMA_SHIFT
);
845 serial_out(up
, UART_TI752_TLR
, tlr
);
846 serial_out(up
, UART_FCR
, up
->fcr
);
847 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
);
849 serial_out(up
, UART_OMAP_SCR
, up
->scr
);
851 serial_out(up
, UART_EFR
, up
->efr
);
852 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_A
);
853 serial_out(up
, UART_MCR
, up
->mcr
);
855 /* Protocol, Baud Rate, and Interrupt Settings */
857 if (up
->errata
& UART_ERRATA_i202_MDR1_ACCESS
)
858 serial_omap_mdr1_errataset(up
, up
->mdr1
);
860 serial_out(up
, UART_OMAP_MDR1
, up
->mdr1
);
862 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
);
864 up
->efr
= serial_in(up
, UART_EFR
);
865 serial_out(up
, UART_EFR
, up
->efr
| UART_EFR_ECB
);
867 serial_out(up
, UART_LCR
, 0);
868 serial_out(up
, UART_IER
, 0);
869 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
);
871 serial_out(up
, UART_DLL
, up
->dll
); /* LS of divisor */
872 serial_out(up
, UART_DLM
, up
->dlh
); /* MS of divisor */
874 serial_out(up
, UART_LCR
, 0);
875 serial_out(up
, UART_IER
, up
->ier
);
876 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
);
878 serial_out(up
, UART_EFR
, up
->efr
);
879 serial_out(up
, UART_LCR
, cval
);
881 if (baud
> 230400 && baud
!= 3000000)
882 up
->mdr1
= UART_OMAP_MDR1_13X_MODE
;
884 up
->mdr1
= UART_OMAP_MDR1_16X_MODE
;
886 if (up
->errata
& UART_ERRATA_i202_MDR1_ACCESS
)
887 serial_omap_mdr1_errataset(up
, up
->mdr1
);
889 serial_out(up
, UART_OMAP_MDR1
, up
->mdr1
);
891 /* Hardware Flow Control Configuration */
893 if (termios
->c_cflag
& CRTSCTS
) {
894 efr
|= (UART_EFR_CTS
| UART_EFR_RTS
);
895 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_A
);
897 up
->mcr
= serial_in(up
, UART_MCR
);
898 serial_out(up
, UART_MCR
, up
->mcr
| UART_MCR_TCRTLR
);
900 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
);
901 up
->efr
= serial_in(up
, UART_EFR
);
902 serial_out(up
, UART_EFR
, up
->efr
| UART_EFR_ECB
);
904 serial_out(up
, UART_TI752_TCR
, OMAP_UART_TCR_TRIG
);
905 serial_out(up
, UART_EFR
, efr
); /* Enable AUTORTS and AUTOCTS */
906 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_A
);
907 serial_out(up
, UART_MCR
, up
->mcr
| UART_MCR_RTS
);
908 serial_out(up
, UART_LCR
, cval
);
911 serial_omap_set_mctrl(&up
->port
, up
->port
.mctrl
);
912 /* Software Flow Control Configuration */
913 serial_omap_configure_xonxoff(up
, termios
);
915 spin_unlock_irqrestore(&up
->port
.lock
, flags
);
916 pm_runtime_put(&up
->pdev
->dev
);
917 dev_dbg(up
->port
.dev
, "serial_omap_set_termios+%d\n", up
->port
.line
);
921 serial_omap_pm(struct uart_port
*port
, unsigned int state
,
922 unsigned int oldstate
)
924 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
927 dev_dbg(up
->port
.dev
, "serial_omap_pm+%d\n", up
->port
.line
);
929 pm_runtime_get_sync(&up
->pdev
->dev
);
930 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
);
931 efr
= serial_in(up
, UART_EFR
);
932 serial_out(up
, UART_EFR
, efr
| UART_EFR_ECB
);
933 serial_out(up
, UART_LCR
, 0);
935 serial_out(up
, UART_IER
, (state
!= 0) ? UART_IERX_SLEEP
: 0);
936 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
);
937 serial_out(up
, UART_EFR
, efr
);
938 serial_out(up
, UART_LCR
, 0);
940 if (!device_may_wakeup(&up
->pdev
->dev
)) {
942 pm_runtime_forbid(&up
->pdev
->dev
);
944 pm_runtime_allow(&up
->pdev
->dev
);
947 pm_runtime_put(&up
->pdev
->dev
);
950 static void serial_omap_release_port(struct uart_port
*port
)
952 dev_dbg(port
->dev
, "serial_omap_release_port+\n");
955 static int serial_omap_request_port(struct uart_port
*port
)
957 dev_dbg(port
->dev
, "serial_omap_request_port+\n");
961 static void serial_omap_config_port(struct uart_port
*port
, int flags
)
963 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
965 dev_dbg(up
->port
.dev
, "serial_omap_config_port+%d\n",
967 up
->port
.type
= PORT_OMAP
;
971 serial_omap_verify_port(struct uart_port
*port
, struct serial_struct
*ser
)
973 /* we don't want the core code to modify any port params */
974 dev_dbg(port
->dev
, "serial_omap_verify_port+\n");
979 serial_omap_type(struct uart_port
*port
)
981 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
983 dev_dbg(up
->port
.dev
, "serial_omap_type+%d\n", up
->port
.line
);
987 #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
989 static inline void wait_for_xmitr(struct uart_omap_port
*up
)
991 unsigned int status
, tmout
= 10000;
993 /* Wait up to 10ms for the character(s) to be sent. */
995 status
= serial_in(up
, UART_LSR
);
997 if (status
& UART_LSR_BI
)
998 up
->lsr_break_flag
= UART_LSR_BI
;
1003 } while ((status
& BOTH_EMPTY
) != BOTH_EMPTY
);
1005 /* Wait up to 1s for flow control if necessary */
1006 if (up
->port
.flags
& UPF_CONS_FLOW
) {
1008 for (tmout
= 1000000; tmout
; tmout
--) {
1009 unsigned int msr
= serial_in(up
, UART_MSR
);
1011 up
->msr_saved_flags
|= msr
& MSR_SAVE_FLAGS
;
1012 if (msr
& UART_MSR_CTS
)
1020 #ifdef CONFIG_CONSOLE_POLL
1022 static void serial_omap_poll_put_char(struct uart_port
*port
, unsigned char ch
)
1024 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
1026 pm_runtime_get_sync(&up
->pdev
->dev
);
1028 serial_out(up
, UART_TX
, ch
);
1029 pm_runtime_put(&up
->pdev
->dev
);
1032 static int serial_omap_poll_get_char(struct uart_port
*port
)
1034 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
1035 unsigned int status
;
1037 pm_runtime_get_sync(&up
->pdev
->dev
);
1038 status
= serial_in(up
, UART_LSR
);
1039 if (!(status
& UART_LSR_DR
))
1040 return NO_POLL_CHAR
;
1042 status
= serial_in(up
, UART_RX
);
1043 pm_runtime_put(&up
->pdev
->dev
);
1047 #endif /* CONFIG_CONSOLE_POLL */
1049 #ifdef CONFIG_SERIAL_OMAP_CONSOLE
1051 static struct uart_omap_port
*serial_omap_console_ports
[4];
1053 static struct uart_driver serial_omap_reg
;
1055 static void serial_omap_console_putchar(struct uart_port
*port
, int ch
)
1057 struct uart_omap_port
*up
= (struct uart_omap_port
*)port
;
1060 serial_out(up
, UART_TX
, ch
);
1064 serial_omap_console_write(struct console
*co
, const char *s
,
1067 struct uart_omap_port
*up
= serial_omap_console_ports
[co
->index
];
1068 unsigned long flags
;
1072 pm_runtime_get_sync(&up
->pdev
->dev
);
1074 local_irq_save(flags
);
1077 else if (oops_in_progress
)
1078 locked
= spin_trylock(&up
->port
.lock
);
1080 spin_lock(&up
->port
.lock
);
1083 * First save the IER then disable the interrupts
1085 ier
= serial_in(up
, UART_IER
);
1086 serial_out(up
, UART_IER
, 0);
1088 uart_console_write(&up
->port
, s
, count
, serial_omap_console_putchar
);
1091 * Finally, wait for transmitter to become empty
1092 * and restore the IER
1095 serial_out(up
, UART_IER
, ier
);
1097 * The receive handling will happen properly because the
1098 * receive ready bit will still be set; it is not cleared
1099 * on read. However, modem control will not, we must
1100 * call it if we have saved something in the saved flags
1101 * while processing with interrupts off.
1103 if (up
->msr_saved_flags
)
1104 check_modem_status(up
);
1106 pm_runtime_mark_last_busy(&up
->pdev
->dev
);
1107 pm_runtime_put_autosuspend(&up
->pdev
->dev
);
1109 spin_unlock(&up
->port
.lock
);
1110 local_irq_restore(flags
);
1114 serial_omap_console_setup(struct console
*co
, char *options
)
1116 struct uart_omap_port
*up
;
1122 if (serial_omap_console_ports
[co
->index
] == NULL
)
1124 up
= serial_omap_console_ports
[co
->index
];
1127 uart_parse_options(options
, &baud
, &parity
, &bits
, &flow
);
1129 return uart_set_options(&up
->port
, co
, baud
, parity
, bits
, flow
);
1132 static struct console serial_omap_console
= {
1133 .name
= OMAP_SERIAL_NAME
,
1134 .write
= serial_omap_console_write
,
1135 .device
= uart_console_device
,
1136 .setup
= serial_omap_console_setup
,
1137 .flags
= CON_PRINTBUFFER
,
1139 .data
= &serial_omap_reg
,
1142 static void serial_omap_add_console_port(struct uart_omap_port
*up
)
1144 serial_omap_console_ports
[up
->port
.line
] = up
;
1147 #define OMAP_CONSOLE (&serial_omap_console)
1151 #define OMAP_CONSOLE NULL
1153 static inline void serial_omap_add_console_port(struct uart_omap_port
*up
)
1158 static struct uart_ops serial_omap_pops
= {
1159 .tx_empty
= serial_omap_tx_empty
,
1160 .set_mctrl
= serial_omap_set_mctrl
,
1161 .get_mctrl
= serial_omap_get_mctrl
,
1162 .stop_tx
= serial_omap_stop_tx
,
1163 .start_tx
= serial_omap_start_tx
,
1164 .stop_rx
= serial_omap_stop_rx
,
1165 .enable_ms
= serial_omap_enable_ms
,
1166 .break_ctl
= serial_omap_break_ctl
,
1167 .startup
= serial_omap_startup
,
1168 .shutdown
= serial_omap_shutdown
,
1169 .set_termios
= serial_omap_set_termios
,
1170 .pm
= serial_omap_pm
,
1171 .type
= serial_omap_type
,
1172 .release_port
= serial_omap_release_port
,
1173 .request_port
= serial_omap_request_port
,
1174 .config_port
= serial_omap_config_port
,
1175 .verify_port
= serial_omap_verify_port
,
1176 #ifdef CONFIG_CONSOLE_POLL
1177 .poll_put_char
= serial_omap_poll_put_char
,
1178 .poll_get_char
= serial_omap_poll_get_char
,
1182 static struct uart_driver serial_omap_reg
= {
1183 .owner
= THIS_MODULE
,
1184 .driver_name
= "OMAP-SERIAL",
1185 .dev_name
= OMAP_SERIAL_NAME
,
1186 .nr
= OMAP_MAX_HSUART_PORTS
,
1187 .cons
= OMAP_CONSOLE
,
1190 #ifdef CONFIG_PM_SLEEP
1191 static int serial_omap_suspend(struct device
*dev
)
1193 struct uart_omap_port
*up
= dev_get_drvdata(dev
);
1196 uart_suspend_port(&serial_omap_reg
, &up
->port
);
1197 flush_work_sync(&up
->qos_work
);
1203 static int serial_omap_resume(struct device
*dev
)
1205 struct uart_omap_port
*up
= dev_get_drvdata(dev
);
1208 uart_resume_port(&serial_omap_reg
, &up
->port
);
1213 static void serial_omap_rxdma_poll(unsigned long uart_no
)
1215 struct uart_omap_port
*up
= ui
[uart_no
];
1216 unsigned int curr_dma_pos
, curr_transmitted_size
;
1219 curr_dma_pos
= omap_get_dma_dst_pos(up
->uart_dma
.rx_dma_channel
);
1220 if ((curr_dma_pos
== up
->uart_dma
.prev_rx_dma_pos
) ||
1221 (curr_dma_pos
== 0)) {
1222 if (jiffies_to_msecs(jiffies
- up
->port_activity
) <
1223 up
->uart_dma
.rx_timeout
) {
1224 mod_timer(&up
->uart_dma
.rx_timer
, jiffies
+
1225 usecs_to_jiffies(up
->uart_dma
.rx_poll_rate
));
1227 serial_omap_stop_rxdma(up
);
1228 up
->ier
|= (UART_IER_RDI
| UART_IER_RLSI
);
1229 serial_out(up
, UART_IER
, up
->ier
);
1234 curr_transmitted_size
= curr_dma_pos
-
1235 up
->uart_dma
.prev_rx_dma_pos
;
1236 up
->port
.icount
.rx
+= curr_transmitted_size
;
1237 tty_insert_flip_string(up
->port
.state
->port
.tty
,
1238 up
->uart_dma
.rx_buf
+
1239 (up
->uart_dma
.prev_rx_dma_pos
-
1240 up
->uart_dma
.rx_buf_dma_phys
),
1241 curr_transmitted_size
);
1242 tty_flip_buffer_push(up
->port
.state
->port
.tty
);
1243 up
->uart_dma
.prev_rx_dma_pos
= curr_dma_pos
;
1244 if (up
->uart_dma
.rx_buf_size
+
1245 up
->uart_dma
.rx_buf_dma_phys
== curr_dma_pos
) {
1246 ret
= serial_omap_start_rxdma(up
);
1248 serial_omap_stop_rxdma(up
);
1249 up
->ier
|= (UART_IER_RDI
| UART_IER_RLSI
);
1250 serial_out(up
, UART_IER
, up
->ier
);
1253 mod_timer(&up
->uart_dma
.rx_timer
, jiffies
+
1254 usecs_to_jiffies(up
->uart_dma
.rx_poll_rate
));
1256 up
->port_activity
= jiffies
;
1259 static void uart_rx_dma_callback(int lch
, u16 ch_status
, void *data
)
1264 static int serial_omap_start_rxdma(struct uart_omap_port
*up
)
1268 if (up
->uart_dma
.rx_dma_channel
== -1) {
1269 pm_runtime_get_sync(&up
->pdev
->dev
);
1270 ret
= omap_request_dma(up
->uart_dma
.uart_dma_rx
,
1272 (void *)uart_rx_dma_callback
, up
,
1273 &(up
->uart_dma
.rx_dma_channel
));
1277 omap_set_dma_src_params(up
->uart_dma
.rx_dma_channel
, 0,
1278 OMAP_DMA_AMODE_CONSTANT
,
1279 up
->uart_dma
.uart_base
, 0, 0);
1280 omap_set_dma_dest_params(up
->uart_dma
.rx_dma_channel
, 0,
1281 OMAP_DMA_AMODE_POST_INC
,
1282 up
->uart_dma
.rx_buf_dma_phys
, 0, 0);
1283 omap_set_dma_transfer_params(up
->uart_dma
.rx_dma_channel
,
1284 OMAP_DMA_DATA_TYPE_S8
,
1285 up
->uart_dma
.rx_buf_size
, 1,
1286 OMAP_DMA_SYNC_ELEMENT
,
1287 up
->uart_dma
.uart_dma_rx
, 0);
1289 up
->uart_dma
.prev_rx_dma_pos
= up
->uart_dma
.rx_buf_dma_phys
;
1290 /* FIXME: Cache maintenance needed here? */
1291 omap_start_dma(up
->uart_dma
.rx_dma_channel
);
1292 mod_timer(&up
->uart_dma
.rx_timer
, jiffies
+
1293 usecs_to_jiffies(up
->uart_dma
.rx_poll_rate
));
1294 up
->uart_dma
.rx_dma_used
= true;
1298 static void serial_omap_continue_tx(struct uart_omap_port
*up
)
1300 struct circ_buf
*xmit
= &up
->port
.state
->xmit
;
1301 unsigned int start
= up
->uart_dma
.tx_buf_dma_phys
1302 + (xmit
->tail
& (UART_XMIT_SIZE
- 1));
1304 if (uart_circ_empty(xmit
))
1307 up
->uart_dma
.tx_buf_size
= uart_circ_chars_pending(xmit
);
1309 * It is a circular buffer. See if the buffer has wounded back.
1310 * If yes it will have to be transferred in two separate dma
1313 if (start
+ up
->uart_dma
.tx_buf_size
>=
1314 up
->uart_dma
.tx_buf_dma_phys
+ UART_XMIT_SIZE
)
1315 up
->uart_dma
.tx_buf_size
=
1316 (up
->uart_dma
.tx_buf_dma_phys
+ UART_XMIT_SIZE
) - start
;
1317 omap_set_dma_dest_params(up
->uart_dma
.tx_dma_channel
, 0,
1318 OMAP_DMA_AMODE_CONSTANT
,
1319 up
->uart_dma
.uart_base
, 0, 0);
1320 omap_set_dma_src_params(up
->uart_dma
.tx_dma_channel
, 0,
1321 OMAP_DMA_AMODE_POST_INC
, start
, 0, 0);
1322 omap_set_dma_transfer_params(up
->uart_dma
.tx_dma_channel
,
1323 OMAP_DMA_DATA_TYPE_S8
,
1324 up
->uart_dma
.tx_buf_size
, 1,
1325 OMAP_DMA_SYNC_ELEMENT
,
1326 up
->uart_dma
.uart_dma_tx
, 0);
1327 /* FIXME: Cache maintenance needed here? */
1328 omap_start_dma(up
->uart_dma
.tx_dma_channel
);
1331 static void uart_tx_dma_callback(int lch
, u16 ch_status
, void *data
)
1333 struct uart_omap_port
*up
= (struct uart_omap_port
*)data
;
1334 struct circ_buf
*xmit
= &up
->port
.state
->xmit
;
1336 xmit
->tail
= (xmit
->tail
+ up
->uart_dma
.tx_buf_size
) & \
1337 (UART_XMIT_SIZE
- 1);
1338 up
->port
.icount
.tx
+= up
->uart_dma
.tx_buf_size
;
1340 if (uart_circ_chars_pending(xmit
) < WAKEUP_CHARS
)
1341 uart_write_wakeup(&up
->port
);
1343 if (uart_circ_empty(xmit
)) {
1344 spin_lock(&(up
->uart_dma
.tx_lock
));
1345 serial_omap_stop_tx(&up
->port
);
1346 up
->uart_dma
.tx_dma_used
= false;
1347 spin_unlock(&(up
->uart_dma
.tx_lock
));
1349 omap_stop_dma(up
->uart_dma
.tx_dma_channel
);
1350 serial_omap_continue_tx(up
);
1352 up
->port_activity
= jiffies
;
1356 static struct omap_uart_port_info
*of_get_uart_port_info(struct device
*dev
)
1358 struct omap_uart_port_info
*omap_up_info
;
1360 omap_up_info
= devm_kzalloc(dev
, sizeof(*omap_up_info
), GFP_KERNEL
);
1362 return NULL
; /* out of memory */
1364 of_property_read_u32(dev
->of_node
, "clock-frequency",
1365 &omap_up_info
->uartclk
);
1366 return omap_up_info
;
1369 static int serial_omap_probe(struct platform_device
*pdev
)
1371 struct uart_omap_port
*up
;
1372 struct resource
*mem
, *irq
, *dma_tx
, *dma_rx
;
1373 struct omap_uart_port_info
*omap_up_info
= pdev
->dev
.platform_data
;
1376 if (pdev
->dev
.of_node
)
1377 omap_up_info
= of_get_uart_port_info(&pdev
->dev
);
1379 mem
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1381 dev_err(&pdev
->dev
, "no mem resource?\n");
1385 irq
= platform_get_resource(pdev
, IORESOURCE_IRQ
, 0);
1387 dev_err(&pdev
->dev
, "no irq resource?\n");
1391 if (!request_mem_region(mem
->start
, resource_size(mem
),
1392 pdev
->dev
.driver
->name
)) {
1393 dev_err(&pdev
->dev
, "memory region already claimed\n");
1397 dma_rx
= platform_get_resource_byname(pdev
, IORESOURCE_DMA
, "rx");
1403 dma_tx
= platform_get_resource_byname(pdev
, IORESOURCE_DMA
, "tx");
1409 up
= kzalloc(sizeof(*up
), GFP_KERNEL
);
1412 goto do_release_region
;
1415 up
->port
.dev
= &pdev
->dev
;
1416 up
->port
.type
= PORT_OMAP
;
1417 up
->port
.iotype
= UPIO_MEM
;
1418 up
->port
.irq
= irq
->start
;
1420 up
->port
.regshift
= 2;
1421 up
->port
.fifosize
= 64;
1422 up
->port
.ops
= &serial_omap_pops
;
1424 if (pdev
->dev
.of_node
)
1425 up
->port
.line
= of_alias_get_id(pdev
->dev
.of_node
, "serial");
1427 up
->port
.line
= pdev
->id
;
1429 if (up
->port
.line
< 0) {
1430 dev_err(&pdev
->dev
, "failed to get alias/pdev id, errno %d\n",
1436 sprintf(up
->name
, "OMAP UART%d", up
->port
.line
);
1437 up
->port
.mapbase
= mem
->start
;
1438 up
->port
.membase
= ioremap(mem
->start
, resource_size(mem
));
1439 if (!up
->port
.membase
) {
1440 dev_err(&pdev
->dev
, "can't ioremap UART\n");
1445 up
->port
.flags
= omap_up_info
->flags
;
1446 up
->port
.uartclk
= omap_up_info
->uartclk
;
1447 if (!up
->port
.uartclk
) {
1448 up
->port
.uartclk
= DEFAULT_CLK_SPEED
;
1449 dev_warn(&pdev
->dev
, "No clock speed specified: using default:"
1450 "%d\n", DEFAULT_CLK_SPEED
);
1452 up
->uart_dma
.uart_base
= mem
->start
;
1453 up
->errata
= omap_up_info
->errata
;
1455 if (omap_up_info
->dma_enabled
) {
1456 up
->uart_dma
.uart_dma_tx
= dma_tx
->start
;
1457 up
->uart_dma
.uart_dma_rx
= dma_rx
->start
;
1459 up
->uart_dma
.rx_buf_size
= omap_up_info
->dma_rx_buf_size
;
1460 up
->uart_dma
.rx_timeout
= omap_up_info
->dma_rx_timeout
;
1461 up
->uart_dma
.rx_poll_rate
= omap_up_info
->dma_rx_poll_rate
;
1462 spin_lock_init(&(up
->uart_dma
.tx_lock
));
1463 spin_lock_init(&(up
->uart_dma
.rx_lock
));
1464 up
->uart_dma
.tx_dma_channel
= OMAP_UART_DMA_CH_FREE
;
1465 up
->uart_dma
.rx_dma_channel
= OMAP_UART_DMA_CH_FREE
;
1468 up
->latency
= PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE
;
1469 up
->calc_latency
= PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE
;
1470 pm_qos_add_request(&up
->pm_qos_request
,
1471 PM_QOS_CPU_DMA_LATENCY
, up
->latency
);
1472 serial_omap_uart_wq
= create_singlethread_workqueue(up
->name
);
1473 INIT_WORK(&up
->qos_work
, serial_omap_uart_qos_work
);
1475 pm_runtime_use_autosuspend(&pdev
->dev
);
1476 pm_runtime_set_autosuspend_delay(&pdev
->dev
,
1477 omap_up_info
->autosuspend_timeout
);
1479 pm_runtime_irq_safe(&pdev
->dev
);
1480 pm_runtime_enable(&pdev
->dev
);
1481 pm_runtime_get_sync(&pdev
->dev
);
1483 ui
[up
->port
.line
] = up
;
1484 serial_omap_add_console_port(up
);
1486 ret
= uart_add_one_port(&serial_omap_reg
, &up
->port
);
1488 goto do_release_region
;
1490 pm_runtime_put(&pdev
->dev
);
1491 platform_set_drvdata(pdev
, up
);
1494 dev_err(&pdev
->dev
, "[UART%d]: failure [%s]: %d\n",
1495 pdev
->id
, __func__
, ret
);
1497 release_mem_region(mem
->start
, resource_size(mem
));
1501 static int serial_omap_remove(struct platform_device
*dev
)
1503 struct uart_omap_port
*up
= platform_get_drvdata(dev
);
1506 pm_runtime_disable(&up
->pdev
->dev
);
1507 uart_remove_one_port(&serial_omap_reg
, &up
->port
);
1508 pm_qos_remove_request(&up
->pm_qos_request
);
1513 platform_set_drvdata(dev
, NULL
);
1518 * Work Around for Errata i202 (2430, 3430, 3630, 4430 and 4460)
1519 * The access to uart register after MDR1 Access
1520 * causes UART to corrupt data.
1523 * 5 L4 clock cycles + 5 UART functional clock cycle (@48MHz = ~0.2uS)
1524 * give 10 times as much
1526 static void serial_omap_mdr1_errataset(struct uart_omap_port
*up
, u8 mdr1
)
1530 serial_out(up
, UART_OMAP_MDR1
, mdr1
);
1532 serial_out(up
, UART_FCR
, up
->fcr
| UART_FCR_CLEAR_XMIT
|
1533 UART_FCR_CLEAR_RCVR
);
1535 * Wait for FIFO to empty: when empty, RX_FIFO_E bit is 0 and
1536 * TX_FIFO_E bit is 1.
1538 while (UART_LSR_THRE
!= (serial_in(up
, UART_LSR
) &
1539 (UART_LSR_THRE
| UART_LSR_DR
))) {
1542 /* Should *never* happen. we warn and carry on */
1543 dev_crit(&up
->pdev
->dev
, "Errata i202: timedout %x\n",
1544 serial_in(up
, UART_LSR
));
1551 #ifdef CONFIG_PM_RUNTIME
1552 static void serial_omap_restore_context(struct uart_omap_port
*up
)
1554 if (up
->errata
& UART_ERRATA_i202_MDR1_ACCESS
)
1555 serial_omap_mdr1_errataset(up
, UART_OMAP_MDR1_DISABLE
);
1557 serial_out(up
, UART_OMAP_MDR1
, UART_OMAP_MDR1_DISABLE
);
1559 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
); /* Config B mode */
1560 serial_out(up
, UART_EFR
, UART_EFR_ECB
);
1561 serial_out(up
, UART_LCR
, 0x0); /* Operational mode */
1562 serial_out(up
, UART_IER
, 0x0);
1563 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
); /* Config B mode */
1564 serial_out(up
, UART_DLL
, up
->dll
);
1565 serial_out(up
, UART_DLM
, up
->dlh
);
1566 serial_out(up
, UART_LCR
, 0x0); /* Operational mode */
1567 serial_out(up
, UART_IER
, up
->ier
);
1568 serial_out(up
, UART_FCR
, up
->fcr
);
1569 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_A
);
1570 serial_out(up
, UART_MCR
, up
->mcr
);
1571 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
); /* Config B mode */
1572 serial_out(up
, UART_OMAP_SCR
, up
->scr
);
1573 serial_out(up
, UART_EFR
, up
->efr
);
1574 serial_out(up
, UART_LCR
, up
->lcr
);
1575 if (up
->errata
& UART_ERRATA_i202_MDR1_ACCESS
)
1576 serial_omap_mdr1_errataset(up
, up
->mdr1
);
1578 serial_out(up
, UART_OMAP_MDR1
, up
->mdr1
);
1581 static int serial_omap_runtime_suspend(struct device
*dev
)
1583 struct uart_omap_port
*up
= dev_get_drvdata(dev
);
1584 struct omap_uart_port_info
*pdata
= dev
->platform_data
;
1589 if (!pdata
|| !pdata
->enable_wakeup
)
1592 if (pdata
->get_context_loss_count
)
1593 up
->context_loss_cnt
= pdata
->get_context_loss_count(dev
);
1595 if (device_may_wakeup(dev
)) {
1596 if (!up
->wakeups_enabled
) {
1597 pdata
->enable_wakeup(up
->pdev
, true);
1598 up
->wakeups_enabled
= true;
1601 if (up
->wakeups_enabled
) {
1602 pdata
->enable_wakeup(up
->pdev
, false);
1603 up
->wakeups_enabled
= false;
1608 if (up
->use_dma
&& pdata
->set_forceidle
&&
1609 (up
->errata
& UART_ERRATA_i291_DMA_FORCEIDLE
))
1610 pdata
->set_forceidle(up
->pdev
);
1612 up
->latency
= PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE
;
1613 schedule_work(&up
->qos_work
);
1618 static int serial_omap_runtime_resume(struct device
*dev
)
1620 struct uart_omap_port
*up
= dev_get_drvdata(dev
);
1621 struct omap_uart_port_info
*pdata
= dev
->platform_data
;
1624 if (pdata
->get_context_loss_count
) {
1625 u32 loss_cnt
= pdata
->get_context_loss_count(dev
);
1627 if (up
->context_loss_cnt
!= loss_cnt
)
1628 serial_omap_restore_context(up
);
1632 if (up
->use_dma
&& pdata
->set_noidle
&&
1633 (up
->errata
& UART_ERRATA_i291_DMA_FORCEIDLE
))
1634 pdata
->set_noidle(up
->pdev
);
1636 up
->latency
= up
->calc_latency
;
1637 schedule_work(&up
->qos_work
);
1644 static const struct dev_pm_ops serial_omap_dev_pm_ops
= {
1645 SET_SYSTEM_SLEEP_PM_OPS(serial_omap_suspend
, serial_omap_resume
)
1646 SET_RUNTIME_PM_OPS(serial_omap_runtime_suspend
,
1647 serial_omap_runtime_resume
, NULL
)
1650 #if defined(CONFIG_OF)
1651 static const struct of_device_id omap_serial_of_match
[] = {
1652 { .compatible
= "ti,omap2-uart" },
1653 { .compatible
= "ti,omap3-uart" },
1654 { .compatible
= "ti,omap4-uart" },
1657 MODULE_DEVICE_TABLE(of
, omap_serial_of_match
);
1660 static struct platform_driver serial_omap_driver
= {
1661 .probe
= serial_omap_probe
,
1662 .remove
= serial_omap_remove
,
1664 .name
= DRIVER_NAME
,
1665 .pm
= &serial_omap_dev_pm_ops
,
1666 .of_match_table
= of_match_ptr(omap_serial_of_match
),
1670 static int __init
serial_omap_init(void)
1674 ret
= uart_register_driver(&serial_omap_reg
);
1677 ret
= platform_driver_register(&serial_omap_driver
);
1679 uart_unregister_driver(&serial_omap_reg
);
1683 static void __exit
serial_omap_exit(void)
1685 platform_driver_unregister(&serial_omap_driver
);
1686 uart_unregister_driver(&serial_omap_reg
);
1689 module_init(serial_omap_init
);
1690 module_exit(serial_omap_exit
);
1692 MODULE_DESCRIPTION("OMAP High Speed UART driver");
1693 MODULE_LICENSE("GPL");
1694 MODULE_AUTHOR("Texas Instruments Inc");