Lines Matching refs:qe_port
216 static inline dma_addr_t cpu2qe_addr(void *addr, struct uart_qe_port *qe_port) in cpu2qe_addr() argument
218 if (likely((addr >= qe_port->bd_virt)) && in cpu2qe_addr()
219 (addr < (qe_port->bd_virt + qe_port->bd_size))) in cpu2qe_addr()
220 return qe_port->bd_dma_addr + (addr - qe_port->bd_virt); in cpu2qe_addr()
234 static inline void *qe2cpu_addr(dma_addr_t addr, struct uart_qe_port *qe_port) in qe2cpu_addr() argument
237 if (likely((addr >= qe_port->bd_dma_addr) && in qe2cpu_addr()
238 (addr < (qe_port->bd_dma_addr + qe_port->bd_size)))) in qe2cpu_addr()
239 return qe_port->bd_virt + (addr - qe_port->bd_dma_addr); in qe2cpu_addr()
257 struct uart_qe_port *qe_port = in qe_uart_tx_empty() local
259 struct qe_bd *bdp = qe_port->tx_bd_base; in qe_uart_tx_empty()
309 struct uart_qe_port *qe_port = in qe_uart_stop_tx() local
312 clrbits16(&qe_port->uccp->uccm, UCC_UART_UCCE_TX); in qe_uart_stop_tx()
329 static int qe_uart_tx_pump(struct uart_qe_port *qe_port) in qe_uart_tx_pump() argument
334 struct uart_port *port = &qe_port->port; in qe_uart_tx_pump()
337 bdp = qe_port->rx_cur; in qe_uart_tx_pump()
342 bdp = qe_port->tx_cur; in qe_uart_tx_pump()
344 p = qe2cpu_addr(bdp->buf, qe_port); in qe_uart_tx_pump()
351 bdp = qe_port->tx_bd_base; in qe_uart_tx_pump()
354 qe_port->tx_cur = bdp; in qe_uart_tx_pump()
367 bdp = qe_port->tx_cur; in qe_uart_tx_pump()
372 p = qe2cpu_addr(bdp->buf, qe_port); in qe_uart_tx_pump()
373 while (count < qe_port->tx_fifosize) { in qe_uart_tx_pump()
387 bdp = qe_port->tx_bd_base; in qe_uart_tx_pump()
391 qe_port->tx_cur = bdp; in qe_uart_tx_pump()
415 struct uart_qe_port *qe_port = in qe_uart_start_tx() local
419 if (in_be16(&qe_port->uccp->uccm) & UCC_UART_UCCE_TX) in qe_uart_start_tx()
423 if (qe_uart_tx_pump(qe_port)) in qe_uart_start_tx()
424 setbits16(&qe_port->uccp->uccm, UCC_UART_UCCE_TX); in qe_uart_start_tx()
432 struct uart_qe_port *qe_port = in qe_uart_stop_rx() local
435 clrbits16(&qe_port->uccp->uccm, UCC_UART_UCCE_RX); in qe_uart_stop_rx()
446 struct uart_qe_port *qe_port = in qe_uart_break_ctl() local
450 ucc_slow_stop_tx(qe_port->us_private); in qe_uart_break_ctl()
452 ucc_slow_restart_tx(qe_port->us_private); in qe_uart_break_ctl()
459 static void qe_uart_int_rx(struct uart_qe_port *qe_port) in qe_uart_int_rx() argument
463 struct uart_port *port = &qe_port->port; in qe_uart_int_rx()
472 bdp = qe_port->rx_cur; in qe_uart_int_rx()
492 cp = qe2cpu_addr(bdp->buf, qe_port); in qe_uart_int_rx()
515 bdp = qe_port->rx_bd_base; in qe_uart_int_rx()
522 qe_port->rx_cur = bdp; in qe_uart_int_rx()
568 struct uart_qe_port *qe_port = (struct uart_qe_port *) data; in qe_uart_int() local
569 struct ucc_slow __iomem *uccp = qe_port->uccp; in qe_uart_int()
577 uart_handle_break(&qe_port->port); in qe_uart_int()
580 qe_uart_int_rx(qe_port); in qe_uart_int()
583 qe_uart_tx_pump(qe_port); in qe_uart_int()
592 static void qe_uart_initbd(struct uart_qe_port *qe_port) in qe_uart_initbd() argument
601 bd_virt = qe_port->bd_virt; in qe_uart_initbd()
602 bdp = qe_port->rx_bd_base; in qe_uart_initbd()
603 qe_port->rx_cur = qe_port->rx_bd_base; in qe_uart_initbd()
604 for (i = 0; i < (qe_port->rx_nrfifos - 1); i++) { in qe_uart_initbd()
606 out_be32(&bdp->buf, cpu2qe_addr(bd_virt, qe_port)); in qe_uart_initbd()
608 bd_virt += qe_port->rx_fifosize; in qe_uart_initbd()
614 out_be32(&bdp->buf, cpu2qe_addr(bd_virt, qe_port)); in qe_uart_initbd()
621 bd_virt = qe_port->bd_virt + in qe_uart_initbd()
622 L1_CACHE_ALIGN(qe_port->rx_nrfifos * qe_port->rx_fifosize); in qe_uart_initbd()
623 qe_port->tx_cur = qe_port->tx_bd_base; in qe_uart_initbd()
624 bdp = qe_port->tx_bd_base; in qe_uart_initbd()
625 for (i = 0; i < (qe_port->tx_nrfifos - 1); i++) { in qe_uart_initbd()
627 out_be32(&bdp->buf, cpu2qe_addr(bd_virt, qe_port)); in qe_uart_initbd()
629 bd_virt += qe_port->tx_fifosize; in qe_uart_initbd()
635 setbits16(&qe_port->tx_cur->status, BD_SC_P); in qe_uart_initbd()
639 out_be32(&bdp->buf, cpu2qe_addr(bd_virt, qe_port)); in qe_uart_initbd()
650 static void qe_uart_init_ucc(struct uart_qe_port *qe_port) in qe_uart_init_ucc() argument
653 struct ucc_slow __iomem *uccp = qe_port->uccp; in qe_uart_init_ucc()
654 struct ucc_uart_pram *uccup = qe_port->uccup; in qe_uart_init_ucc()
659 ucc_slow_disable(qe_port->us_private, COMM_DIR_RX_AND_TX); in qe_uart_init_ucc()
664 out_be16(&uccup->common.mrblr, qe_port->rx_fifosize); in qe_uart_init_ucc()
765 cecr_subblock = ucc_slow_get_qe_cr_subblock(qe_port->ucc_num); in qe_uart_init_ucc()
769 cecr_subblock = ucc_slow_get_qe_cr_subblock(qe_port->ucc_num); in qe_uart_init_ucc()
780 struct uart_qe_port *qe_port = in qe_uart_startup() local
793 qe_uart_initbd(qe_port); in qe_uart_startup()
794 qe_uart_init_ucc(qe_port); in qe_uart_startup()
798 qe_port); in qe_uart_startup()
805 setbits16(&qe_port->uccp->uccm, UCC_UART_UCCE_RX); in qe_uart_startup()
806 ucc_slow_enable(qe_port->us_private, COMM_DIR_RX_AND_TX); in qe_uart_startup()
816 struct uart_qe_port *qe_port = in qe_uart_shutdown() local
818 struct ucc_slow __iomem *uccp = qe_port->uccp; in qe_uart_shutdown()
833 if (qe_port->wait_closing) { in qe_uart_shutdown()
836 schedule_timeout(qe_port->wait_closing); in qe_uart_shutdown()
840 ucc_slow_disable(qe_port->us_private, COMM_DIR_RX_AND_TX); in qe_uart_shutdown()
844 ucc_slow_graceful_stop_tx(qe_port->us_private); in qe_uart_shutdown()
845 qe_uart_initbd(qe_port); in qe_uart_shutdown()
847 free_irq(port->irq, qe_port); in qe_uart_shutdown()
856 struct uart_qe_port *qe_port = in qe_uart_set_termios() local
858 struct ucc_slow __iomem *uccp = qe_port->uccp; in qe_uart_set_termios()
862 struct ucc_uart_pram __iomem *uccup = qe_port->uccup; in qe_uart_set_termios()
967 qe_setbrg(qe_port->us_info.rx_clock, baud, 16); in qe_uart_set_termios()
968 qe_setbrg(qe_port->us_info.tx_clock, baud, 1); in qe_uart_set_termios()
970 qe_setbrg(qe_port->us_info.rx_clock, baud, 16); in qe_uart_set_termios()
971 qe_setbrg(qe_port->us_info.tx_clock, baud, 16); in qe_uart_set_termios()
991 struct uart_qe_port *qe_port = in qe_uart_request_port() local
993 struct ucc_slow_info *us_info = &qe_port->us_info; in qe_uart_request_port()
1002 qe_port->ucc_num); in qe_uart_request_port()
1006 qe_port->us_private = uccs; in qe_uart_request_port()
1007 qe_port->uccp = uccs->us_regs; in qe_uart_request_port()
1008 qe_port->uccup = (struct ucc_uart_pram *) uccs->us_pram; in qe_uart_request_port()
1009 qe_port->rx_bd_base = uccs->rx_bd; in qe_uart_request_port()
1010 qe_port->tx_bd_base = uccs->tx_bd; in qe_uart_request_port()
1016 rx_size = L1_CACHE_ALIGN(qe_port->rx_nrfifos * qe_port->rx_fifosize); in qe_uart_request_port()
1017 tx_size = L1_CACHE_ALIGN(qe_port->tx_nrfifos * qe_port->tx_fifosize); in qe_uart_request_port()
1026 qe_port->bd_virt = bd_virt; in qe_uart_request_port()
1027 qe_port->bd_dma_addr = bd_dma_addr; in qe_uart_request_port()
1028 qe_port->bd_size = rx_size + tx_size; in qe_uart_request_port()
1030 qe_port->rx_buf = bd_virt; in qe_uart_request_port()
1031 qe_port->tx_buf = qe_port->rx_buf + rx_size; in qe_uart_request_port()
1057 struct uart_qe_port *qe_port = in qe_uart_release_port() local
1059 struct ucc_slow_private *uccs = qe_port->us_private; in qe_uart_release_port()
1061 dma_free_coherent(port->dev, qe_port->bd_size, qe_port->bd_virt, in qe_uart_release_port()
1062 qe_port->bd_dma_addr); in qe_uart_release_port()
1198 struct uart_qe_port *qe_port = NULL; in ucc_uart_probe() local
1258 qe_port = kzalloc(sizeof(struct uart_qe_port), GFP_KERNEL); in ucc_uart_probe()
1259 if (!qe_port) { in ucc_uart_probe()
1275 qe_port->port.mapbase = res.start; in ucc_uart_probe()
1295 qe_port->ucc_num = *iprop - 1; in ucc_uart_probe()
1311 qe_port->us_info.rx_clock = qe_clock_source(sprop); in ucc_uart_probe()
1312 if ((qe_port->us_info.rx_clock < QE_BRG1) || in ucc_uart_probe()
1313 (qe_port->us_info.rx_clock > QE_BRG16)) { in ucc_uart_probe()
1321 qe_port->us_info.tx_clock = qe_port->us_info.rx_clock; in ucc_uart_probe()
1329 qe_port->us_info.tx_clock = qe_clock_source(sprop); in ucc_uart_probe()
1331 if ((qe_port->us_info.tx_clock < QE_BRG1) || in ucc_uart_probe()
1332 (qe_port->us_info.tx_clock > QE_BRG16)) { in ucc_uart_probe()
1345 qe_port->port.line = *iprop; in ucc_uart_probe()
1346 if (qe_port->port.line >= UCC_MAX_UART) { in ucc_uart_probe()
1353 qe_port->port.irq = irq_of_parse_and_map(np, 0); in ucc_uart_probe()
1354 if (qe_port->port.irq == 0) { in ucc_uart_probe()
1356 qe_port->ucc_num + 1); in ucc_uart_probe()
1384 qe_port->port.uartclk = *iprop; in ucc_uart_probe()
1399 qe_port->port.uartclk = *iprop / 2; in ucc_uart_probe()
1408 spin_lock_init(&qe_port->port.lock); in ucc_uart_probe()
1409 qe_port->np = np; in ucc_uart_probe()
1410 qe_port->port.dev = &ofdev->dev; in ucc_uart_probe()
1411 qe_port->port.ops = &qe_uart_pops; in ucc_uart_probe()
1412 qe_port->port.iotype = UPIO_MEM; in ucc_uart_probe()
1414 qe_port->tx_nrfifos = TX_NUM_FIFO; in ucc_uart_probe()
1415 qe_port->tx_fifosize = TX_BUF_SIZE; in ucc_uart_probe()
1416 qe_port->rx_nrfifos = RX_NUM_FIFO; in ucc_uart_probe()
1417 qe_port->rx_fifosize = RX_BUF_SIZE; in ucc_uart_probe()
1419 qe_port->wait_closing = UCC_WAIT_CLOSING; in ucc_uart_probe()
1420 qe_port->port.fifosize = 512; in ucc_uart_probe()
1421 qe_port->port.flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP; in ucc_uart_probe()
1423 qe_port->us_info.ucc_num = qe_port->ucc_num; in ucc_uart_probe()
1424 qe_port->us_info.regs = (phys_addr_t) res.start; in ucc_uart_probe()
1425 qe_port->us_info.irq = qe_port->port.irq; in ucc_uart_probe()
1427 qe_port->us_info.rx_bd_ring_len = qe_port->rx_nrfifos; in ucc_uart_probe()
1428 qe_port->us_info.tx_bd_ring_len = qe_port->tx_nrfifos; in ucc_uart_probe()
1431 qe_port->us_info.init_tx = 1; in ucc_uart_probe()
1432 qe_port->us_info.init_rx = 1; in ucc_uart_probe()
1438 ret = uart_add_one_port(&ucc_uart_driver, &qe_port->port); in ucc_uart_probe()
1441 qe_port->port.line); in ucc_uart_probe()
1445 platform_set_drvdata(ofdev, qe_port); in ucc_uart_probe()
1448 qe_port->ucc_num + 1, qe_port->port.line); in ucc_uart_probe()
1452 qe_port->port.line, SERIAL_QE_MAJOR, in ucc_uart_probe()
1453 SERIAL_QE_MINOR + qe_port->port.line); in ucc_uart_probe()
1459 kfree(qe_port); in ucc_uart_probe()
1465 struct uart_qe_port *qe_port = platform_get_drvdata(ofdev); in ucc_uart_remove() local
1467 dev_info(&ofdev->dev, "removing /dev/ttyQE%u\n", qe_port->port.line); in ucc_uart_remove()
1469 uart_remove_one_port(&ucc_uart_driver, &qe_port->port); in ucc_uart_remove()
1471 kfree(qe_port); in ucc_uart_remove()