Lines Matching full:port

80 #define PSC(port) ((struct mpc52xx_psc __iomem *)((port)->membase))  argument
85 static irqreturn_t mpc5xxx_uart_process_int(struct uart_port *port);
88 /* Simple macro to test if a port is console or not. This one is taken
91 #define uart_console(port) \ argument
92 ((port)->cons && (port)->cons->index == (port)->line)
94 #define uart_console(port) (0) argument
102 void (*fifo_init)(struct uart_port *port);
103 int (*raw_rx_rdy)(struct uart_port *port);
104 int (*raw_tx_rdy)(struct uart_port *port);
105 int (*rx_rdy)(struct uart_port *port);
106 int (*tx_rdy)(struct uart_port *port);
107 int (*tx_empty)(struct uart_port *port);
108 void (*stop_rx)(struct uart_port *port);
109 void (*start_tx)(struct uart_port *port);
110 void (*stop_tx)(struct uart_port *port);
111 void (*rx_clr_irq)(struct uart_port *port);
112 void (*tx_clr_irq)(struct uart_port *port);
113 void (*write_char)(struct uart_port *port, unsigned char c);
114 unsigned char (*read_char)(struct uart_port *port);
115 void (*cw_disable_ints)(struct uart_port *port);
116 void (*cw_restore_ints)(struct uart_port *port);
117 unsigned int (*set_baudrate)(struct uart_port *port,
120 int (*clock)(struct uart_port *port, int enable);
124 irqreturn_t (*handle_irq)(struct uart_port *port);
138 #define FIFO_52xx(port) ((struct mpc52xx_psc_fifo __iomem *)(PSC(port)+1)) argument
139 static void mpc52xx_psc_fifo_init(struct uart_port *port) in mpc52xx_psc_fifo_init() argument
141 struct mpc52xx_psc __iomem *psc = PSC(port); in mpc52xx_psc_fifo_init()
142 struct mpc52xx_psc_fifo __iomem *fifo = FIFO_52xx(port); in mpc52xx_psc_fifo_init()
149 port->read_status_mask |= MPC52xx_PSC_IMR_RXRDY | MPC52xx_PSC_IMR_TXRDY; in mpc52xx_psc_fifo_init()
150 out_be16(&psc->mpc52xx_psc_imr, port->read_status_mask); in mpc52xx_psc_fifo_init()
153 static int mpc52xx_psc_raw_rx_rdy(struct uart_port *port) in mpc52xx_psc_raw_rx_rdy() argument
155 return in_be16(&PSC(port)->mpc52xx_psc_status) in mpc52xx_psc_raw_rx_rdy()
159 static int mpc52xx_psc_raw_tx_rdy(struct uart_port *port) in mpc52xx_psc_raw_tx_rdy() argument
161 return in_be16(&PSC(port)->mpc52xx_psc_status) in mpc52xx_psc_raw_tx_rdy()
166 static int mpc52xx_psc_rx_rdy(struct uart_port *port) in mpc52xx_psc_rx_rdy() argument
168 return in_be16(&PSC(port)->mpc52xx_psc_isr) in mpc52xx_psc_rx_rdy()
169 & port->read_status_mask in mpc52xx_psc_rx_rdy()
173 static int mpc52xx_psc_tx_rdy(struct uart_port *port) in mpc52xx_psc_tx_rdy() argument
175 return in_be16(&PSC(port)->mpc52xx_psc_isr) in mpc52xx_psc_tx_rdy()
176 & port->read_status_mask in mpc52xx_psc_tx_rdy()
180 static int mpc52xx_psc_tx_empty(struct uart_port *port) in mpc52xx_psc_tx_empty() argument
182 return in_be16(&PSC(port)->mpc52xx_psc_status) in mpc52xx_psc_tx_empty()
186 static void mpc52xx_psc_start_tx(struct uart_port *port) in mpc52xx_psc_start_tx() argument
188 port->read_status_mask |= MPC52xx_PSC_IMR_TXRDY; in mpc52xx_psc_start_tx()
189 out_be16(&PSC(port)->mpc52xx_psc_imr, port->read_status_mask); in mpc52xx_psc_start_tx()
192 static void mpc52xx_psc_stop_tx(struct uart_port *port) in mpc52xx_psc_stop_tx() argument
194 port->read_status_mask &= ~MPC52xx_PSC_IMR_TXRDY; in mpc52xx_psc_stop_tx()
195 out_be16(&PSC(port)->mpc52xx_psc_imr, port->read_status_mask); in mpc52xx_psc_stop_tx()
198 static void mpc52xx_psc_stop_rx(struct uart_port *port) in mpc52xx_psc_stop_rx() argument
200 port->read_status_mask &= ~MPC52xx_PSC_IMR_RXRDY; in mpc52xx_psc_stop_rx()
201 out_be16(&PSC(port)->mpc52xx_psc_imr, port->read_status_mask); in mpc52xx_psc_stop_rx()
204 static void mpc52xx_psc_rx_clr_irq(struct uart_port *port) in mpc52xx_psc_rx_clr_irq() argument
208 static void mpc52xx_psc_tx_clr_irq(struct uart_port *port) in mpc52xx_psc_tx_clr_irq() argument
212 static void mpc52xx_psc_write_char(struct uart_port *port, unsigned char c) in mpc52xx_psc_write_char() argument
214 out_8(&PSC(port)->mpc52xx_psc_buffer_8, c); in mpc52xx_psc_write_char()
217 static unsigned char mpc52xx_psc_read_char(struct uart_port *port) in mpc52xx_psc_read_char() argument
219 return in_8(&PSC(port)->mpc52xx_psc_buffer_8); in mpc52xx_psc_read_char()
222 static void mpc52xx_psc_cw_disable_ints(struct uart_port *port) in mpc52xx_psc_cw_disable_ints() argument
224 out_be16(&PSC(port)->mpc52xx_psc_imr, 0); in mpc52xx_psc_cw_disable_ints()
227 static void mpc52xx_psc_cw_restore_ints(struct uart_port *port) in mpc52xx_psc_cw_restore_ints() argument
229 out_be16(&PSC(port)->mpc52xx_psc_imr, port->read_status_mask); in mpc52xx_psc_cw_restore_ints()
232 static unsigned int mpc5200_psc_set_baudrate(struct uart_port *port, in mpc5200_psc_set_baudrate() argument
240 baud = uart_get_baud_rate(port, new, old, in mpc5200_psc_set_baudrate()
241 port->uartclk / (32 * 0xffff) + 1, in mpc5200_psc_set_baudrate()
242 port->uartclk / 32); in mpc5200_psc_set_baudrate()
243 divisor = (port->uartclk + 16 * baud) / (32 * baud); in mpc5200_psc_set_baudrate()
246 mpc52xx_set_divisor(PSC(port), 0xdd00, divisor); in mpc5200_psc_set_baudrate()
250 static unsigned int mpc5200b_psc_set_baudrate(struct uart_port *port, in mpc5200b_psc_set_baudrate() argument
260 baud = uart_get_baud_rate(port, new, old, in mpc5200b_psc_set_baudrate()
261 port->uartclk / (32 * 0xffff) + 1, in mpc5200b_psc_set_baudrate()
262 port->uartclk / 4); in mpc5200b_psc_set_baudrate()
263 divisor = (port->uartclk + 2 * baud) / (4 * baud); in mpc5200b_psc_set_baudrate()
271 mpc52xx_set_divisor(PSC(port), prescaler, divisor); in mpc5200b_psc_set_baudrate()
275 static void mpc52xx_psc_get_irq(struct uart_port *port, struct device_node *np) in mpc52xx_psc_get_irq() argument
277 port->irqflags = 0; in mpc52xx_psc_get_irq()
278 port->irq = irq_of_parse_and_map(np, 0); in mpc52xx_psc_get_irq()
281 /* 52xx specific interrupt handler. The caller holds the port lock */
282 static irqreturn_t mpc52xx_psc_handle_irq(struct uart_port *port) in mpc52xx_psc_handle_irq() argument
284 return mpc5xxx_uart_process_int(port); in mpc52xx_psc_handle_irq()
332 #define FIFO_512x(port) ((struct mpc512x_psc_fifo __iomem *)(PSC(port)+1)) argument
346 static void mpc512x_psc_fifo_init(struct uart_port *port) in mpc512x_psc_fifo_init() argument
349 out_be16(&PSC(port)->mpc52xx_psc_clock_select, 0xdd00); in mpc512x_psc_fifo_init()
351 out_be32(&FIFO_512x(port)->txcmd, MPC512x_PSC_FIFO_RESET_SLICE); in mpc512x_psc_fifo_init()
352 out_be32(&FIFO_512x(port)->txcmd, MPC512x_PSC_FIFO_ENABLE_SLICE); in mpc512x_psc_fifo_init()
353 out_be32(&FIFO_512x(port)->txalarm, 1); in mpc512x_psc_fifo_init()
354 out_be32(&FIFO_512x(port)->tximr, 0); in mpc512x_psc_fifo_init()
356 out_be32(&FIFO_512x(port)->rxcmd, MPC512x_PSC_FIFO_RESET_SLICE); in mpc512x_psc_fifo_init()
357 out_be32(&FIFO_512x(port)->rxcmd, MPC512x_PSC_FIFO_ENABLE_SLICE); in mpc512x_psc_fifo_init()
358 out_be32(&FIFO_512x(port)->rxalarm, 1); in mpc512x_psc_fifo_init()
359 out_be32(&FIFO_512x(port)->rximr, 0); in mpc512x_psc_fifo_init()
361 out_be32(&FIFO_512x(port)->tximr, MPC512x_PSC_FIFO_ALARM); in mpc512x_psc_fifo_init()
362 out_be32(&FIFO_512x(port)->rximr, MPC512x_PSC_FIFO_ALARM); in mpc512x_psc_fifo_init()
365 static int mpc512x_psc_raw_rx_rdy(struct uart_port *port) in mpc512x_psc_raw_rx_rdy() argument
367 return !(in_be32(&FIFO_512x(port)->rxsr) & MPC512x_PSC_FIFO_EMPTY); in mpc512x_psc_raw_rx_rdy()
370 static int mpc512x_psc_raw_tx_rdy(struct uart_port *port) in mpc512x_psc_raw_tx_rdy() argument
372 return !(in_be32(&FIFO_512x(port)->txsr) & MPC512x_PSC_FIFO_FULL); in mpc512x_psc_raw_tx_rdy()
375 static int mpc512x_psc_rx_rdy(struct uart_port *port) in mpc512x_psc_rx_rdy() argument
377 return in_be32(&FIFO_512x(port)->rxsr) in mpc512x_psc_rx_rdy()
378 & in_be32(&FIFO_512x(port)->rximr) in mpc512x_psc_rx_rdy()
382 static int mpc512x_psc_tx_rdy(struct uart_port *port) in mpc512x_psc_tx_rdy() argument
384 return in_be32(&FIFO_512x(port)->txsr) in mpc512x_psc_tx_rdy()
385 & in_be32(&FIFO_512x(port)->tximr) in mpc512x_psc_tx_rdy()
389 static int mpc512x_psc_tx_empty(struct uart_port *port) in mpc512x_psc_tx_empty() argument
391 return in_be32(&FIFO_512x(port)->txsr) in mpc512x_psc_tx_empty()
395 static void mpc512x_psc_stop_rx(struct uart_port *port) in mpc512x_psc_stop_rx() argument
399 rx_fifo_imr = in_be32(&FIFO_512x(port)->rximr); in mpc512x_psc_stop_rx()
401 out_be32(&FIFO_512x(port)->rximr, rx_fifo_imr); in mpc512x_psc_stop_rx()
404 static void mpc512x_psc_start_tx(struct uart_port *port) in mpc512x_psc_start_tx() argument
408 tx_fifo_imr = in_be32(&FIFO_512x(port)->tximr); in mpc512x_psc_start_tx()
410 out_be32(&FIFO_512x(port)->tximr, tx_fifo_imr); in mpc512x_psc_start_tx()
413 static void mpc512x_psc_stop_tx(struct uart_port *port) in mpc512x_psc_stop_tx() argument
417 tx_fifo_imr = in_be32(&FIFO_512x(port)->tximr); in mpc512x_psc_stop_tx()
419 out_be32(&FIFO_512x(port)->tximr, tx_fifo_imr); in mpc512x_psc_stop_tx()
422 static void mpc512x_psc_rx_clr_irq(struct uart_port *port) in mpc512x_psc_rx_clr_irq() argument
424 out_be32(&FIFO_512x(port)->rxisr, in_be32(&FIFO_512x(port)->rxisr)); in mpc512x_psc_rx_clr_irq()
427 static void mpc512x_psc_tx_clr_irq(struct uart_port *port) in mpc512x_psc_tx_clr_irq() argument
429 out_be32(&FIFO_512x(port)->txisr, in_be32(&FIFO_512x(port)->txisr)); in mpc512x_psc_tx_clr_irq()
432 static void mpc512x_psc_write_char(struct uart_port *port, unsigned char c) in mpc512x_psc_write_char() argument
434 out_8(&FIFO_512x(port)->txdata_8, c); in mpc512x_psc_write_char()
437 static unsigned char mpc512x_psc_read_char(struct uart_port *port) in mpc512x_psc_read_char() argument
439 return in_8(&FIFO_512x(port)->rxdata_8); in mpc512x_psc_read_char()
442 static void mpc512x_psc_cw_disable_ints(struct uart_port *port) in mpc512x_psc_cw_disable_ints() argument
444 port->read_status_mask = in mpc512x_psc_cw_disable_ints()
445 in_be32(&FIFO_512x(port)->tximr) << 16 | in mpc512x_psc_cw_disable_ints()
446 in_be32(&FIFO_512x(port)->rximr); in mpc512x_psc_cw_disable_ints()
447 out_be32(&FIFO_512x(port)->tximr, 0); in mpc512x_psc_cw_disable_ints()
448 out_be32(&FIFO_512x(port)->rximr, 0); in mpc512x_psc_cw_disable_ints()
451 static void mpc512x_psc_cw_restore_ints(struct uart_port *port) in mpc512x_psc_cw_restore_ints() argument
453 out_be32(&FIFO_512x(port)->tximr, in mpc512x_psc_cw_restore_ints()
454 (port->read_status_mask >> 16) & 0x7f); in mpc512x_psc_cw_restore_ints()
455 out_be32(&FIFO_512x(port)->rximr, port->read_status_mask & 0x7f); in mpc512x_psc_cw_restore_ints()
458 static unsigned int mpc512x_psc_set_baudrate(struct uart_port *port, in mpc512x_psc_set_baudrate() argument
479 baud = uart_get_baud_rate(port, new, old, in mpc512x_psc_set_baudrate()
480 port->uartclk / (16 * 0xffff) + 1, in mpc512x_psc_set_baudrate()
481 port->uartclk / 16); in mpc512x_psc_set_baudrate()
482 divisor = (port->uartclk + 8 * baud) / (16 * baud); in mpc512x_psc_set_baudrate()
485 mpc52xx_set_divisor(PSC(port), 0xdd00, divisor); in mpc512x_psc_set_baudrate()
524 /* 512x specific interrupt handler. The caller holds the port lock */
525 static irqreturn_t mpc512x_psc_handle_irq(struct uart_port *port) in mpc512x_psc_handle_irq() argument
533 /* Check if it is an interrupt for this port */ in mpc512x_psc_handle_irq()
534 psc_num = (port->mapbase & 0xf00) >> 8; in mpc512x_psc_handle_irq()
537 return mpc5xxx_uart_process_int(port); in mpc512x_psc_handle_irq()
542 static int mpc512x_psc_clock(struct uart_port *port, int enable) in mpc512x_psc_clock() argument
548 if (uart_console(port)) in mpc512x_psc_clock()
551 psc_num = (port->mapbase & 0xf00) >> 8; in mpc512x_psc_clock()
553 psc_clk = clk_get(port->dev, clk_name); in mpc512x_psc_clock()
555 dev_err(port->dev, "Failed to get PSC clock entry!\n"); in mpc512x_psc_clock()
559 dev_dbg(port->dev, "%s %sable\n", clk_name, enable ? "en" : "dis"); in mpc512x_psc_clock()
569 static void mpc512x_psc_get_irq(struct uart_port *port, struct device_node *np) in mpc512x_psc_get_irq() argument
571 port->irqflags = IRQF_SHARED; in mpc512x_psc_get_irq()
572 port->irq = psc_fifoc_irq; in mpc512x_psc_get_irq()
607 mpc52xx_uart_tx_empty(struct uart_port *port) in mpc52xx_uart_tx_empty() argument
609 return psc_ops->tx_empty(port) ? TIOCSER_TEMT : 0; in mpc52xx_uart_tx_empty()
613 mpc52xx_uart_set_mctrl(struct uart_port *port, unsigned int mctrl) in mpc52xx_uart_set_mctrl() argument
616 out_8(&PSC(port)->op1, MPC52xx_PSC_OP_RTS); in mpc52xx_uart_set_mctrl()
618 out_8(&PSC(port)->op0, MPC52xx_PSC_OP_RTS); in mpc52xx_uart_set_mctrl()
622 mpc52xx_uart_get_mctrl(struct uart_port *port) in mpc52xx_uart_get_mctrl() argument
625 u8 status = in_8(&PSC(port)->mpc52xx_psc_ipcr); in mpc52xx_uart_get_mctrl()
636 mpc52xx_uart_stop_tx(struct uart_port *port) in mpc52xx_uart_stop_tx() argument
638 /* port->lock taken by caller */ in mpc52xx_uart_stop_tx()
639 psc_ops->stop_tx(port); in mpc52xx_uart_stop_tx()
643 mpc52xx_uart_start_tx(struct uart_port *port) in mpc52xx_uart_start_tx() argument
645 /* port->lock taken by caller */ in mpc52xx_uart_start_tx()
646 psc_ops->start_tx(port); in mpc52xx_uart_start_tx()
650 mpc52xx_uart_send_xchar(struct uart_port *port, char ch) in mpc52xx_uart_send_xchar() argument
653 spin_lock_irqsave(&port->lock, flags); in mpc52xx_uart_send_xchar()
655 port->x_char = ch; in mpc52xx_uart_send_xchar()
659 psc_ops->start_tx(port); in mpc52xx_uart_send_xchar()
662 spin_unlock_irqrestore(&port->lock, flags); in mpc52xx_uart_send_xchar()
666 mpc52xx_uart_stop_rx(struct uart_port *port) in mpc52xx_uart_stop_rx() argument
668 /* port->lock taken by caller */ in mpc52xx_uart_stop_rx()
669 psc_ops->stop_rx(port); in mpc52xx_uart_stop_rx()
673 mpc52xx_uart_enable_ms(struct uart_port *port) in mpc52xx_uart_enable_ms() argument
675 struct mpc52xx_psc __iomem *psc = PSC(port); in mpc52xx_uart_enable_ms()
682 port->read_status_mask |= MPC52xx_PSC_IMR_IPC; in mpc52xx_uart_enable_ms()
683 out_be16(&psc->mpc52xx_psc_imr, port->read_status_mask); in mpc52xx_uart_enable_ms()
687 mpc52xx_uart_break_ctl(struct uart_port *port, int ctl) in mpc52xx_uart_break_ctl() argument
690 spin_lock_irqsave(&port->lock, flags); in mpc52xx_uart_break_ctl()
693 out_8(&PSC(port)->command, MPC52xx_PSC_START_BRK); in mpc52xx_uart_break_ctl()
695 out_8(&PSC(port)->command, MPC52xx_PSC_STOP_BRK); in mpc52xx_uart_break_ctl()
697 spin_unlock_irqrestore(&port->lock, flags); in mpc52xx_uart_break_ctl()
701 mpc52xx_uart_startup(struct uart_port *port) in mpc52xx_uart_startup() argument
703 struct mpc52xx_psc __iomem *psc = PSC(port); in mpc52xx_uart_startup()
707 ret = psc_ops->clock(port, 1); in mpc52xx_uart_startup()
713 ret = request_irq(port->irq, mpc52xx_uart_int, in mpc52xx_uart_startup()
714 port->irqflags, "mpc52xx_psc_uart", port); in mpc52xx_uart_startup()
718 /* Reset/activate the port, clear and enable interrupts */ in mpc52xx_uart_startup()
724 psc_ops->fifo_init(port); in mpc52xx_uart_startup()
733 mpc52xx_uart_shutdown(struct uart_port *port) in mpc52xx_uart_shutdown() argument
735 struct mpc52xx_psc __iomem *psc = PSC(port); in mpc52xx_uart_shutdown()
737 /* Shut down the port. Leave TX active if on a console port */ in mpc52xx_uart_shutdown()
739 if (!uart_console(port)) in mpc52xx_uart_shutdown()
742 port->read_status_mask = 0; in mpc52xx_uart_shutdown()
743 out_be16(&psc->mpc52xx_psc_imr, port->read_status_mask); in mpc52xx_uart_shutdown()
746 psc_ops->clock(port, 0); in mpc52xx_uart_shutdown()
749 free_irq(port->irq, port); in mpc52xx_uart_shutdown()
753 mpc52xx_uart_set_termios(struct uart_port *port, struct ktermios *new, in mpc52xx_uart_set_termios() argument
756 struct mpc52xx_psc __iomem *psc = PSC(port); in mpc52xx_uart_set_termios()
798 spin_lock_irqsave(&port->lock, flags); in mpc52xx_uart_set_termios()
806 /* while (j-- && mpc52xx_uart_int_rx_chars(port)); */ in mpc52xx_uart_set_termios()
807 while (!mpc52xx_uart_tx_empty(port) && --j) in mpc52xx_uart_set_termios()
823 baud = psc_ops->set_baudrate(port, new, old); in mpc52xx_uart_set_termios()
825 /* Update the per-port timeout */ in mpc52xx_uart_set_termios()
826 uart_update_timeout(port, new->c_cflag, baud); in mpc52xx_uart_set_termios()
828 if (UART_ENABLE_MS(port, new->c_cflag)) in mpc52xx_uart_set_termios()
829 mpc52xx_uart_enable_ms(port); in mpc52xx_uart_set_termios()
836 spin_unlock_irqrestore(&port->lock, flags); in mpc52xx_uart_set_termios()
840 mpc52xx_uart_type(struct uart_port *port) in mpc52xx_uart_type() argument
846 return port->type == PORT_MPC52xx ? "MPC5xxx PSC" : NULL; in mpc52xx_uart_type()
850 mpc52xx_uart_release_port(struct uart_port *port) in mpc52xx_uart_release_port() argument
853 if (port->flags & UPF_IOREMAP) { in mpc52xx_uart_release_port()
854 iounmap(port->membase); in mpc52xx_uart_release_port()
855 port->membase = NULL; in mpc52xx_uart_release_port()
858 release_mem_region(port->mapbase, sizeof(struct mpc52xx_psc)); in mpc52xx_uart_release_port()
862 mpc52xx_uart_request_port(struct uart_port *port) in mpc52xx_uart_request_port() argument
866 if (port->flags & UPF_IOREMAP) /* Need to remap ? */ in mpc52xx_uart_request_port()
867 port->membase = ioremap(port->mapbase, in mpc52xx_uart_request_port()
870 if (!port->membase) in mpc52xx_uart_request_port()
873 err = request_mem_region(port->mapbase, sizeof(struct mpc52xx_psc), in mpc52xx_uart_request_port()
876 if (err && (port->flags & UPF_IOREMAP)) { in mpc52xx_uart_request_port()
877 iounmap(port->membase); in mpc52xx_uart_request_port()
878 port->membase = NULL; in mpc52xx_uart_request_port()
885 mpc52xx_uart_config_port(struct uart_port *port, int flags) in mpc52xx_uart_config_port() argument
888 && (mpc52xx_uart_request_port(port) == 0)) in mpc52xx_uart_config_port()
889 port->type = PORT_MPC52xx; in mpc52xx_uart_config_port()
893 mpc52xx_uart_verify_port(struct uart_port *port, struct serial_struct *ser) in mpc52xx_uart_verify_port() argument
898 if ((ser->irq != port->irq) || in mpc52xx_uart_verify_port()
900 (ser->baud_base != port->uartclk) || in mpc52xx_uart_verify_port()
901 (ser->iomem_base != (void *)port->mapbase) || in mpc52xx_uart_verify_port()
937 mpc52xx_uart_int_rx_chars(struct uart_port *port) in mpc52xx_uart_int_rx_chars() argument
939 struct tty_struct *tty = port->state->port.tty; in mpc52xx_uart_int_rx_chars()
944 while (psc_ops->raw_rx_rdy(port)) { in mpc52xx_uart_int_rx_chars()
946 ch = psc_ops->read_char(port); in mpc52xx_uart_int_rx_chars()
950 if (uart_handle_sysrq_char(port, ch)) { in mpc52xx_uart_int_rx_chars()
951 port->sysrq = 0; in mpc52xx_uart_int_rx_chars()
959 port->icount.rx++; in mpc52xx_uart_int_rx_chars()
961 status = in_be16(&PSC(port)->mpc52xx_psc_status); in mpc52xx_uart_int_rx_chars()
969 uart_handle_break(port); in mpc52xx_uart_int_rx_chars()
970 port->icount.brk++; in mpc52xx_uart_int_rx_chars()
973 port->icount.parity++; in mpc52xx_uart_int_rx_chars()
977 port->icount.frame++; in mpc52xx_uart_int_rx_chars()
981 out_8(&PSC(port)->command, MPC52xx_PSC_RST_ERR_STAT); in mpc52xx_uart_int_rx_chars()
992 port->icount.overrun++; in mpc52xx_uart_int_rx_chars()
996 spin_unlock(&port->lock); in mpc52xx_uart_int_rx_chars()
998 spin_lock(&port->lock); in mpc52xx_uart_int_rx_chars()
1000 return psc_ops->raw_rx_rdy(port); in mpc52xx_uart_int_rx_chars()
1004 mpc52xx_uart_int_tx_chars(struct uart_port *port) in mpc52xx_uart_int_tx_chars() argument
1006 struct circ_buf *xmit = &port->state->xmit; in mpc52xx_uart_int_tx_chars()
1009 if (port->x_char) { in mpc52xx_uart_int_tx_chars()
1010 psc_ops->write_char(port, port->x_char); in mpc52xx_uart_int_tx_chars()
1011 port->icount.tx++; in mpc52xx_uart_int_tx_chars()
1012 port->x_char = 0; in mpc52xx_uart_int_tx_chars()
1017 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { in mpc52xx_uart_int_tx_chars()
1018 mpc52xx_uart_stop_tx(port); in mpc52xx_uart_int_tx_chars()
1023 while (psc_ops->raw_tx_rdy(port)) { in mpc52xx_uart_int_tx_chars()
1024 psc_ops->write_char(port, xmit->buf[xmit->tail]); in mpc52xx_uart_int_tx_chars()
1026 port->icount.tx++; in mpc52xx_uart_int_tx_chars()
1033 uart_write_wakeup(port); in mpc52xx_uart_int_tx_chars()
1037 mpc52xx_uart_stop_tx(port); in mpc52xx_uart_int_tx_chars()
1045 mpc5xxx_uart_process_int(struct uart_port *port) in mpc5xxx_uart_process_int() argument
1056 psc_ops->rx_clr_irq(port); in mpc5xxx_uart_process_int()
1057 if (psc_ops->rx_rdy(port)) in mpc5xxx_uart_process_int()
1058 keepgoing |= mpc52xx_uart_int_rx_chars(port); in mpc5xxx_uart_process_int()
1060 psc_ops->tx_clr_irq(port); in mpc5xxx_uart_process_int()
1061 if (psc_ops->tx_rdy(port)) in mpc5xxx_uart_process_int()
1062 keepgoing |= mpc52xx_uart_int_tx_chars(port); in mpc5xxx_uart_process_int()
1064 status = in_8(&PSC(port)->mpc52xx_psc_ipcr); in mpc5xxx_uart_process_int()
1066 uart_handle_dcd_change(port, !(status & MPC52xx_PSC_DCD)); in mpc5xxx_uart_process_int()
1069 uart_handle_cts_change(port, !(status & MPC52xx_PSC_CTS)); in mpc5xxx_uart_process_int()
1083 struct uart_port *port = dev_id; in mpc52xx_uart_int() local
1086 spin_lock(&port->lock); in mpc52xx_uart_int()
1088 ret = psc_ops->handle_irq(port); in mpc52xx_uart_int()
1090 spin_unlock(&port->lock); in mpc52xx_uart_int()
1102 mpc52xx_console_get_options(struct uart_port *port, in mpc52xx_console_get_options() argument
1105 struct mpc52xx_psc __iomem *psc = PSC(port); in mpc52xx_console_get_options()
1108 pr_debug("mpc52xx_console_get_options(port=%p)\n", port); in mpc52xx_console_get_options()
1142 struct uart_port *port = &mpc52xx_uart_ports[co->index]; in mpc52xx_console_write() local
1146 psc_ops->cw_disable_ints(port); in mpc52xx_console_write()
1150 while (!mpc52xx_uart_tx_empty(port) && --j) in mpc52xx_console_write()
1157 psc_ops->write_char(port, '\r'); in mpc52xx_console_write()
1160 psc_ops->write_char(port, *s); in mpc52xx_console_write()
1164 while (!mpc52xx_uart_tx_empty(port) && --j) in mpc52xx_console_write()
1169 psc_ops->cw_restore_ints(port); in mpc52xx_console_write()
1176 struct uart_port *port = &mpc52xx_uart_ports[co->index]; in mpc52xx_console_setup() local
1216 /* Basic port init. Needed since we use some uart_??? func before in mpc52xx_console_setup()
1218 spin_lock_init(&port->lock); in mpc52xx_console_setup()
1219 port->uartclk = uartclk; in mpc52xx_console_setup()
1220 port->ops = &mpc52xx_uart_ops; in mpc52xx_console_setup()
1221 port->mapbase = res.start; in mpc52xx_console_setup()
1222 port->membase = ioremap(res.start, sizeof(struct mpc52xx_psc)); in mpc52xx_console_setup()
1223 port->irq = irq_of_parse_and_map(np, 0); in mpc52xx_console_setup()
1225 if (port->membase == NULL) in mpc52xx_console_setup()
1229 (void *)port->mapbase, port->membase, in mpc52xx_console_setup()
1230 port->irq, port->uartclk); in mpc52xx_console_setup()
1232 /* Setup the port parameters accoding to options */ in mpc52xx_console_setup()
1236 mpc52xx_console_get_options(port, &baud, &parity, &bits, &flow); in mpc52xx_console_setup()
1241 return uart_set_options(port, co, baud, parity, bits, flow); in mpc52xx_console_setup()
1310 struct uart_port *port = NULL; in mpc52xx_uart_of_probe() local
1332 /* Init the port structure */ in mpc52xx_uart_of_probe()
1333 port = &mpc52xx_uart_ports[idx]; in mpc52xx_uart_of_probe()
1335 spin_lock_init(&port->lock); in mpc52xx_uart_of_probe()
1336 port->uartclk = uartclk; in mpc52xx_uart_of_probe()
1337 port->fifosize = 512; in mpc52xx_uart_of_probe()
1338 port->iotype = UPIO_MEM; in mpc52xx_uart_of_probe()
1339 port->flags = UPF_BOOT_AUTOCONF | in mpc52xx_uart_of_probe()
1340 (uart_console(port) ? 0 : UPF_IOREMAP); in mpc52xx_uart_of_probe()
1341 port->line = idx; in mpc52xx_uart_of_probe()
1342 port->ops = &mpc52xx_uart_ops; in mpc52xx_uart_of_probe()
1343 port->dev = &op->dev; in mpc52xx_uart_of_probe()
1350 port->mapbase = res.start; in mpc52xx_uart_of_probe()
1351 if (!port->mapbase) { in mpc52xx_uart_of_probe()
1356 psc_ops->get_irq(port, op->dev.of_node); in mpc52xx_uart_of_probe()
1357 if (port->irq == NO_IRQ) { in mpc52xx_uart_of_probe()
1363 (void *)port->mapbase, port->irq, port->uartclk); in mpc52xx_uart_of_probe()
1365 /* Add the port to the uart sub-system */ in mpc52xx_uart_of_probe()
1366 ret = uart_add_one_port(&mpc52xx_uart_driver, port); in mpc52xx_uart_of_probe()
1370 dev_set_drvdata(&op->dev, (void *)port); in mpc52xx_uart_of_probe()
1377 struct uart_port *port = dev_get_drvdata(&op->dev); in mpc52xx_uart_of_remove() local
1380 if (port) in mpc52xx_uart_of_remove()
1381 uart_remove_one_port(&mpc52xx_uart_driver, port); in mpc52xx_uart_of_remove()
1390 struct uart_port *port = (struct uart_port *) dev_get_drvdata(&op->dev); in mpc52xx_uart_of_suspend() local
1392 if (port) in mpc52xx_uart_of_suspend()
1393 uart_suspend_port(&mpc52xx_uart_driver, port); in mpc52xx_uart_of_suspend()
1401 struct uart_port *port = (struct uart_port *) dev_get_drvdata(&op->dev); in mpc52xx_uart_of_resume() local
1403 if (port) in mpc52xx_uart_of_resume()
1404 uart_resume_port(&mpc52xx_uart_driver, port); in mpc52xx_uart_of_resume()