Lines Matching full:up
131 static u32 uart_read(struct uart_8250_port *up, u32 reg) in uart_read() argument
133 return readl(up->port.membase + (reg << up->port.regshift)); in uart_read()
138 struct uart_8250_port *up = up_to_u8250p(port); in omap8250_set_mctrl() local
139 struct omap8250_priv *priv = up->port.private_data; in omap8250_set_mctrl()
144 if (!mctrl_gpio_to_gpiod(up->gpios, UART_GPIO_RTS)) { in omap8250_set_mctrl()
149 lcr = serial_in(up, UART_LCR); in omap8250_set_mctrl()
150 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in omap8250_set_mctrl()
155 serial_out(up, UART_EFR, priv->efr); in omap8250_set_mctrl()
156 serial_out(up, UART_LCR, lcr); in omap8250_set_mctrl()
169 static void omap_8250_mdr1_errataset(struct uart_8250_port *up, in omap_8250_mdr1_errataset() argument
175 old_mdr1 = serial_in(up, UART_OMAP_MDR1); in omap_8250_mdr1_errataset()
179 serial_out(up, UART_OMAP_MDR1, priv->mdr1); in omap_8250_mdr1_errataset()
181 serial_out(up, UART_FCR, up->fcr | UART_FCR_CLEAR_XMIT | in omap_8250_mdr1_errataset()
187 while (UART_LSR_THRE != (serial_in(up, UART_LSR) & in omap_8250_mdr1_errataset()
192 dev_crit(up->port.dev, "Errata i202: timedout %x\n", in omap_8250_mdr1_errataset()
193 serial_in(up, UART_LSR)); in omap_8250_mdr1_errataset()
243 static void omap8250_update_scr(struct uart_8250_port *up, in omap8250_update_scr() argument
248 old_scr = serial_in(up, UART_OMAP_SCR); in omap8250_update_scr()
258 serial_out(up, UART_OMAP_SCR, in omap8250_update_scr()
260 serial_out(up, UART_OMAP_SCR, priv->scr); in omap8250_update_scr()
263 static void omap8250_update_mdr1(struct uart_8250_port *up, in omap8250_update_mdr1() argument
267 omap_8250_mdr1_errataset(up, priv); in omap8250_update_mdr1()
269 serial_out(up, UART_OMAP_MDR1, priv->mdr1); in omap8250_update_mdr1()
272 static void omap8250_restore_regs(struct uart_8250_port *up) in omap8250_restore_regs() argument
274 struct omap8250_priv *priv = up->port.private_data; in omap8250_restore_regs()
275 struct uart_8250_dma *dma = up->dma; in omap8250_restore_regs()
288 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in omap8250_restore_regs()
289 serial_out(up, UART_EFR, UART_EFR_ECB); in omap8250_restore_regs()
291 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); in omap8250_restore_regs()
292 serial8250_out_MCR(up, UART_MCR_TCRTLR); in omap8250_restore_regs()
293 serial_out(up, UART_FCR, up->fcr); in omap8250_restore_regs()
295 omap8250_update_scr(up, priv); in omap8250_restore_regs()
297 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in omap8250_restore_regs()
299 serial_out(up, UART_TI752_TCR, OMAP_UART_TCR_RESTORE(16) | in omap8250_restore_regs()
301 serial_out(up, UART_TI752_TLR, in omap8250_restore_regs()
305 serial_out(up, UART_LCR, 0); in omap8250_restore_regs()
308 serial8250_out_MCR(up, up->mcr); in omap8250_restore_regs()
309 serial_out(up, UART_IER, up->ier); in omap8250_restore_regs()
311 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in omap8250_restore_regs()
312 serial_dl_write(up, priv->quot); in omap8250_restore_regs()
314 serial_out(up, UART_EFR, priv->efr); in omap8250_restore_regs()
317 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in omap8250_restore_regs()
318 serial_out(up, UART_XON1, priv->xon); in omap8250_restore_regs()
319 serial_out(up, UART_XOFF1, priv->xoff); in omap8250_restore_regs()
321 serial_out(up, UART_LCR, up->lcr); in omap8250_restore_regs()
323 omap8250_update_mdr1(up, priv); in omap8250_restore_regs()
325 up->port.ops->set_mctrl(&up->port, up->port.mctrl); in omap8250_restore_regs()
336 struct uart_8250_port *up = up_to_u8250p(port); in omap_8250_set_termios() local
337 struct omap8250_priv *priv = up->port.private_data; in omap_8250_set_termios()
386 up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR; in omap_8250_set_termios()
388 up->port.read_status_mask |= UART_LSR_FE | UART_LSR_PE; in omap_8250_set_termios()
390 up->port.read_status_mask |= UART_LSR_BI; in omap_8250_set_termios()
395 up->port.ignore_status_mask = 0; in omap_8250_set_termios()
397 up->port.ignore_status_mask |= UART_LSR_PE | UART_LSR_FE; in omap_8250_set_termios()
399 up->port.ignore_status_mask |= UART_LSR_BI; in omap_8250_set_termios()
405 up->port.ignore_status_mask |= UART_LSR_OE; in omap_8250_set_termios()
412 up->port.ignore_status_mask |= UART_LSR_DR; in omap_8250_set_termios()
417 up->ier &= ~UART_IER_MSI; in omap_8250_set_termios()
418 if (UART_ENABLE_MS(&up->port, termios->c_cflag)) in omap_8250_set_termios()
419 up->ier |= UART_IER_MSI; in omap_8250_set_termios()
421 up->lcr = cval; in omap_8250_set_termios()
422 /* Up to here it was mostly serial8250_do_set_termios() */ in omap_8250_set_termios()
441 up->fcr = UART_FCR_ENABLE_FIFO; in omap_8250_set_termios()
442 up->fcr |= TRIGGER_FCR_MASK(TX_TRIGGER) << OMAP_UART_FCR_TX_TRIG; in omap_8250_set_termios()
443 up->fcr |= TRIGGER_FCR_MASK(RX_TRIGGER) << OMAP_UART_FCR_RX_TRIG; in omap_8250_set_termios()
448 if (up->dma) in omap_8250_set_termios()
456 up->port.status &= ~(UPSTAT_AUTOCTS | UPSTAT_AUTORTS | UPSTAT_AUTOXOFF); in omap_8250_set_termios()
458 if (termios->c_cflag & CRTSCTS && up->port.flags & UPF_HARD_FLOW && in omap_8250_set_termios()
459 !mctrl_gpio_to_gpiod(up->gpios, UART_GPIO_RTS) && in omap_8250_set_termios()
460 !mctrl_gpio_to_gpiod(up->gpios, UART_GPIO_CTS)) { in omap_8250_set_termios()
462 up->port.status |= UPSTAT_AUTOCTS | UPSTAT_AUTORTS; in omap_8250_set_termios()
464 } else if (up->port.flags & UPF_SOFT_FLOW) { in omap_8250_set_termios()
476 up->port.status |= UPSTAT_AUTOXOFF; in omap_8250_set_termios()
480 omap8250_restore_regs(up); in omap_8250_set_termios()
482 spin_unlock_irq(&up->port.lock); in omap_8250_set_termios()
501 struct uart_8250_port *up = up_to_u8250p(port); in omap_8250_pm() local
505 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in omap_8250_pm()
506 efr = serial_in(up, UART_EFR); in omap_8250_pm()
507 serial_out(up, UART_EFR, efr | UART_EFR_ECB); in omap_8250_pm()
508 serial_out(up, UART_LCR, 0); in omap_8250_pm()
510 serial_out(up, UART_IER, (state != 0) ? UART_IERX_SLEEP : 0); in omap_8250_pm()
511 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); in omap_8250_pm()
512 serial_out(up, UART_EFR, efr); in omap_8250_pm()
513 serial_out(up, UART_LCR, 0); in omap_8250_pm()
519 static void omap_serial_fill_features_erratas(struct uart_8250_port *up, in omap_serial_fill_features_erratas() argument
525 mvr = uart_read(up, UART_OMAP_MVER); in omap_serial_fill_features_erratas()
545 dev_warn(up->port.dev, in omap_serial_fill_features_erratas()
586 struct uart_8250_port *up = up_to_u8250p(port); in omap8250_irq() local
591 if (up->dma) { in omap8250_irq()
597 serial8250_rpm_get(up); in omap8250_irq()
600 serial8250_rpm_put(up); in omap8250_irq()
607 struct uart_8250_port *up = up_to_u8250p(port); in omap_8250_startup() local
619 up->mcr = 0; in omap_8250_startup()
620 serial_out(up, UART_FCR, UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT); in omap_8250_startup()
622 serial_out(up, UART_LCR, UART_LCR_WLEN8); in omap_8250_startup()
624 up->lsr_saved_flags = 0; in omap_8250_startup()
625 up->msr_saved_flags = 0; in omap_8250_startup()
629 up->dma = NULL; in omap_8250_startup()
631 if (up->dma) { in omap_8250_startup()
632 ret = serial8250_request_dma(up); in omap_8250_startup()
636 up->dma = NULL; in omap_8250_startup()
645 up->ier = UART_IER_RLSI | UART_IER_RDI; in omap_8250_startup()
646 serial_out(up, UART_IER, up->ier); in omap_8250_startup()
649 up->capabilities |= UART_CAP_RPM; in omap_8250_startup()
652 /* Enable module level wake up */ in omap_8250_startup()
656 serial_out(up, UART_OMAP_WER, priv->wer); in omap_8250_startup()
658 if (up->dma) in omap_8250_startup()
659 up->dma->rx_dma(up); in omap_8250_startup()
673 struct uart_8250_port *up = up_to_u8250p(port); in omap_8250_shutdown() local
677 if (up->dma) in omap_8250_shutdown()
678 omap_8250_rx_dma_flush(up); in omap_8250_shutdown()
682 serial_out(up, UART_OMAP_WER, 0); in omap_8250_shutdown()
684 up->ier = 0; in omap_8250_shutdown()
685 serial_out(up, UART_IER, 0); in omap_8250_shutdown()
687 if (up->dma) in omap_8250_shutdown()
688 serial8250_release_dma(up); in omap_8250_shutdown()
693 if (up->lcr & UART_LCR_SBC) in omap_8250_shutdown()
694 serial_out(up, UART_LCR, up->lcr & ~UART_LCR_SBC); in omap_8250_shutdown()
695 serial_out(up, UART_FCR, UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT); in omap_8250_shutdown()
706 struct uart_8250_port *up = up_to_u8250p(port); in omap_8250_throttle() local
712 up->ier &= ~(UART_IER_RLSI | UART_IER_RDI); in omap_8250_throttle()
713 serial_out(up, UART_IER, up->ier); in omap_8250_throttle()
724 struct uart_8250_port *up = up_to_u8250p(port); in omap_8250_rs485_config() local
737 int ret = serial8250_em485_init(up); in omap_8250_rs485_config()
746 serial8250_em485_destroy(up); in omap_8250_rs485_config()
754 struct uart_8250_port *up = up_to_u8250p(port); in omap_8250_unthrottle() local
761 if (up->dma) in omap_8250_unthrottle()
762 up->dma->rx_dma(up); in omap_8250_unthrottle()
763 up->ier |= UART_IER_RLSI | UART_IER_RDI; in omap_8250_unthrottle()
764 serial_out(up, UART_IER, up->ier); in omap_8250_unthrottle()
1031 static bool handle_rx_dma(struct uart_8250_port *up, unsigned int iir) in handle_rx_dma() argument
1037 omap_8250_rx_dma_flush(up); in handle_rx_dma()
1040 return omap_8250_rx_dma(up); in handle_rx_dma()
1050 struct uart_8250_port *up = up_to_u8250p(port); in omap_8250_dma_handle_irq() local
1055 serial8250_rpm_get(up); in omap_8250_dma_handle_irq()
1059 serial8250_rpm_put(up); in omap_8250_dma_handle_irq()
1068 if (handle_rx_dma(up, iir)) { in omap_8250_dma_handle_irq()
1069 status = serial8250_rx_chars(up, status); in omap_8250_dma_handle_irq()
1070 omap_8250_rx_dma(up); in omap_8250_dma_handle_irq()
1073 serial8250_modem_status(up); in omap_8250_dma_handle_irq()
1074 if (status & UART_LSR_THRE && up->dma->tx_err) { in omap_8250_dma_handle_irq()
1075 if (uart_tx_stopped(&up->port) || in omap_8250_dma_handle_irq()
1076 uart_circ_empty(&up->port.state->xmit)) { in omap_8250_dma_handle_irq()
1077 up->dma->tx_err = 0; in omap_8250_dma_handle_irq()
1078 serial8250_tx_chars(up); in omap_8250_dma_handle_irq()
1084 if (omap_8250_tx_dma(up)) in omap_8250_dma_handle_irq()
1085 serial8250_tx_chars(up); in omap_8250_dma_handle_irq()
1090 serial8250_rpm_put(up); in omap_8250_dma_handle_irq()
1136 struct uart_8250_port up; in omap8250_probe() local
1155 memset(&up, 0, sizeof(up)); in omap8250_probe()
1156 up.port.dev = &pdev->dev; in omap8250_probe()
1157 up.port.mapbase = regs->start; in omap8250_probe()
1158 up.port.membase = membase; in omap8250_probe()
1159 up.port.irq = irq->start; in omap8250_probe()
1168 up.port.type = PORT_8250; in omap8250_probe()
1169 up.port.iotype = UPIO_MEM; in omap8250_probe()
1170 up.port.flags = UPF_FIXED_PORT | UPF_FIXED_TYPE | UPF_SOFT_FLOW | in omap8250_probe()
1172 up.port.private_data = priv; in omap8250_probe()
1174 up.port.regshift = 2; in omap8250_probe()
1175 up.port.fifosize = 64; in omap8250_probe()
1176 up.tx_loadsz = 64; in omap8250_probe()
1177 up.capabilities = UART_CAP_FIFO; in omap8250_probe()
1185 up.capabilities |= UART_CAP_RPM; in omap8250_probe()
1187 up.port.set_termios = omap_8250_set_termios; in omap8250_probe()
1188 up.port.set_mctrl = omap8250_set_mctrl; in omap8250_probe()
1189 up.port.pm = omap_8250_pm; in omap8250_probe()
1190 up.port.startup = omap_8250_startup; in omap8250_probe()
1191 up.port.shutdown = omap_8250_shutdown; in omap8250_probe()
1192 up.port.throttle = omap_8250_throttle; in omap8250_probe()
1193 up.port.unthrottle = omap_8250_unthrottle; in omap8250_probe()
1194 up.port.rs485_config = omap_8250_rs485_config; in omap8250_probe()
1201 up.port.line = ret; in omap8250_probe()
1203 if (of_property_read_u32(np, "clock-frequency", &up.port.uartclk)) { in omap8250_probe()
1211 up.port.uartclk = clk_get_rate(clk); in omap8250_probe()
1221 if (!up.port.uartclk) { in omap8250_probe()
1222 up.port.uartclk = DEFAULT_CLK_SPEED; in omap8250_probe()
1242 * prevent an unsafe default policy with lossy characters on wake-up. in omap8250_probe()
1254 omap_serial_fill_features_erratas(&up, priv); in omap8250_probe()
1255 up.port.handle_irq = omap8250_no_handle_irq; in omap8250_probe()
1267 up.dma = &priv->omap8250_dma; in omap8250_probe()
1276 ret = serial8250_register_8250_port(&up); in omap8250_probe()
1329 struct uart_8250_port *up = serial8250_get_port(priv->line); in omap8250_suspend() local
1336 serial_out(up, UART_OMAP_WER, priv->wer); in omap8250_suspend()
1357 static int omap8250_lost_context(struct uart_8250_port *up) in omap8250_lost_context() argument
1361 val = serial_in(up, UART_OMAP_SCR); in omap8250_lost_context()
1376 struct uart_8250_port *up = serial8250_get_port(priv->line); in omap8250_soft_reset() local
1390 serial_out(up, UART_OMAP_SCR, OMAP_UART_SCR_DMAMODE_1); in omap8250_soft_reset()
1391 serial_out(up, UART_OMAP_SCR, in omap8250_soft_reset()
1394 sysc = serial_in(up, UART_OMAP_SYSC); in omap8250_soft_reset()
1398 serial_out(up, UART_OMAP_SYSC, sysc); in omap8250_soft_reset()
1403 syss = serial_in(up, UART_OMAP_SYSS); in omap8250_soft_reset()
1417 struct uart_8250_port *up; in omap8250_runtime_suspend() local
1423 up = serial8250_get_port(priv->line); in omap8250_runtime_suspend()
1431 if (uart_console(&up->port)) in omap8250_runtime_suspend()
1443 omap8250_update_mdr1(up, priv); in omap8250_runtime_suspend()
1445 serial_out(up, UART_OMAP_WER, priv->wer); in omap8250_runtime_suspend()
1448 if (up->dma && up->dma->rxchan) in omap8250_runtime_suspend()
1449 omap_8250_rx_dma_flush(up); in omap8250_runtime_suspend()
1460 struct uart_8250_port *up; in omap8250_runtime_resume() local
1466 up = serial8250_get_port(priv->line); in omap8250_runtime_resume()
1468 if (omap8250_lost_context(up)) in omap8250_runtime_resume()
1469 omap8250_restore_regs(up); in omap8250_runtime_resume()
1471 if (up->dma && up->dma->rxchan) in omap8250_runtime_resume()
1472 omap_8250_rx_dma(up); in omap8250_runtime_resume()