Lines Matching refs:qe_port

218 static inline dma_addr_t cpu2qe_addr(void *addr, struct uart_qe_port *qe_port)  in cpu2qe_addr()  argument
220 if (likely((addr >= qe_port->bd_virt)) && in cpu2qe_addr()
221 (addr < (qe_port->bd_virt + qe_port->bd_size))) in cpu2qe_addr()
222 return qe_port->bd_dma_addr + (addr - qe_port->bd_virt); in cpu2qe_addr()
236 static inline void *qe2cpu_addr(dma_addr_t addr, struct uart_qe_port *qe_port) in qe2cpu_addr() argument
239 if (likely((addr >= qe_port->bd_dma_addr) && in qe2cpu_addr()
240 (addr < (qe_port->bd_dma_addr + qe_port->bd_size)))) in qe2cpu_addr()
241 return qe_port->bd_virt + (addr - qe_port->bd_dma_addr); in qe2cpu_addr()
259 struct uart_qe_port *qe_port = in qe_uart_tx_empty() local
261 struct qe_bd *bdp = qe_port->tx_bd_base; in qe_uart_tx_empty()
311 struct uart_qe_port *qe_port = in qe_uart_stop_tx() local
314 qe_clrbits_be16(&qe_port->uccp->uccm, UCC_UART_UCCE_TX); in qe_uart_stop_tx()
331 static int qe_uart_tx_pump(struct uart_qe_port *qe_port) in qe_uart_tx_pump() argument
336 struct uart_port *port = &qe_port->port; in qe_uart_tx_pump()
342 bdp = qe_port->tx_cur; in qe_uart_tx_pump()
344 p = qe2cpu_addr(be32_to_cpu(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()
371 p = qe2cpu_addr(be32_to_cpu(bdp->buf), qe_port); in qe_uart_tx_pump()
372 while (count < qe_port->tx_fifosize) { in qe_uart_tx_pump()
385 bdp = qe_port->tx_bd_base; in qe_uart_tx_pump()
389 qe_port->tx_cur = bdp; in qe_uart_tx_pump()
413 struct uart_qe_port *qe_port = in qe_uart_start_tx() local
417 if (ioread16be(&qe_port->uccp->uccm) & UCC_UART_UCCE_TX) in qe_uart_start_tx()
421 if (qe_uart_tx_pump(qe_port)) in qe_uart_start_tx()
422 qe_setbits_be16(&qe_port->uccp->uccm, UCC_UART_UCCE_TX); in qe_uart_start_tx()
430 struct uart_qe_port *qe_port = in qe_uart_stop_rx() local
433 qe_clrbits_be16(&qe_port->uccp->uccm, UCC_UART_UCCE_RX); in qe_uart_stop_rx()
444 struct uart_qe_port *qe_port = in qe_uart_break_ctl() local
448 ucc_slow_stop_tx(qe_port->us_private); in qe_uart_break_ctl()
450 ucc_slow_restart_tx(qe_port->us_private); in qe_uart_break_ctl()
457 static void qe_uart_int_rx(struct uart_qe_port *qe_port) in qe_uart_int_rx() argument
461 struct uart_port *port = &qe_port->port; in qe_uart_int_rx()
470 bdp = qe_port->rx_cur; in qe_uart_int_rx()
490 cp = qe2cpu_addr(be32_to_cpu(bdp->buf), qe_port); in qe_uart_int_rx()
514 bdp = qe_port->rx_bd_base; in qe_uart_int_rx()
521 qe_port->rx_cur = bdp; in qe_uart_int_rx()
565 struct uart_qe_port *qe_port = (struct uart_qe_port *) data; in qe_uart_int() local
566 struct ucc_slow __iomem *uccp = qe_port->uccp; in qe_uart_int()
574 uart_handle_break(&qe_port->port); in qe_uart_int()
577 qe_uart_int_rx(qe_port); in qe_uart_int()
580 qe_uart_tx_pump(qe_port); in qe_uart_int()
589 static void qe_uart_initbd(struct uart_qe_port *qe_port) in qe_uart_initbd() argument
598 bd_virt = qe_port->bd_virt; in qe_uart_initbd()
599 bdp = qe_port->rx_bd_base; in qe_uart_initbd()
600 qe_port->rx_cur = qe_port->rx_bd_base; in qe_uart_initbd()
601 for (i = 0; i < (qe_port->rx_nrfifos - 1); i++) { in qe_uart_initbd()
603 iowrite32be(cpu2qe_addr(bd_virt, qe_port), &bdp->buf); in qe_uart_initbd()
605 bd_virt += qe_port->rx_fifosize; in qe_uart_initbd()
611 iowrite32be(cpu2qe_addr(bd_virt, qe_port), &bdp->buf); in qe_uart_initbd()
618 bd_virt = qe_port->bd_virt + in qe_uart_initbd()
619 L1_CACHE_ALIGN(qe_port->rx_nrfifos * qe_port->rx_fifosize); in qe_uart_initbd()
620 qe_port->tx_cur = qe_port->tx_bd_base; in qe_uart_initbd()
621 bdp = qe_port->tx_bd_base; in qe_uart_initbd()
622 for (i = 0; i < (qe_port->tx_nrfifos - 1); i++) { in qe_uart_initbd()
624 iowrite32be(cpu2qe_addr(bd_virt, qe_port), &bdp->buf); in qe_uart_initbd()
626 bd_virt += qe_port->tx_fifosize; in qe_uart_initbd()
632 qe_setbits_be16(&qe_port->tx_cur->status, BD_SC_P); in qe_uart_initbd()
636 iowrite32be(cpu2qe_addr(bd_virt, qe_port), &bdp->buf); in qe_uart_initbd()
647 static void qe_uart_init_ucc(struct uart_qe_port *qe_port) in qe_uart_init_ucc() argument
650 struct ucc_slow __iomem *uccp = qe_port->uccp; in qe_uart_init_ucc()
651 struct ucc_uart_pram *uccup = qe_port->uccup; in qe_uart_init_ucc()
656 ucc_slow_disable(qe_port->us_private, COMM_DIR_RX_AND_TX); in qe_uart_init_ucc()
661 iowrite16be(qe_port->rx_fifosize, &uccup->common.mrblr); in qe_uart_init_ucc()
755 cecr_subblock = ucc_slow_get_qe_cr_subblock(qe_port->ucc_num); in qe_uart_init_ucc()
759 cecr_subblock = ucc_slow_get_qe_cr_subblock(qe_port->ucc_num); in qe_uart_init_ucc()
770 struct uart_qe_port *qe_port = in qe_uart_startup() local
783 qe_uart_initbd(qe_port); in qe_uart_startup()
784 qe_uart_init_ucc(qe_port); in qe_uart_startup()
788 qe_port); in qe_uart_startup()
795 qe_setbits_be16(&qe_port->uccp->uccm, UCC_UART_UCCE_RX); in qe_uart_startup()
796 ucc_slow_enable(qe_port->us_private, COMM_DIR_RX_AND_TX); in qe_uart_startup()
806 struct uart_qe_port *qe_port = in qe_uart_shutdown() local
808 struct ucc_slow __iomem *uccp = qe_port->uccp; in qe_uart_shutdown()
823 if (qe_port->wait_closing) { in qe_uart_shutdown()
826 schedule_timeout(qe_port->wait_closing); in qe_uart_shutdown()
830 ucc_slow_disable(qe_port->us_private, COMM_DIR_RX_AND_TX); in qe_uart_shutdown()
834 ucc_slow_graceful_stop_tx(qe_port->us_private); in qe_uart_shutdown()
835 qe_uart_initbd(qe_port); in qe_uart_shutdown()
837 free_irq(port->irq, qe_port); in qe_uart_shutdown()
847 struct uart_qe_port *qe_port = in qe_uart_set_termios() local
849 struct ucc_slow __iomem *uccp = qe_port->uccp; in qe_uart_set_termios()
853 struct ucc_uart_pram __iomem *uccup = qe_port->uccup; in qe_uart_set_termios()
945 qe_setbrg(qe_port->us_info.rx_clock, baud, 16); in qe_uart_set_termios()
946 qe_setbrg(qe_port->us_info.tx_clock, baud, 1); in qe_uart_set_termios()
948 qe_setbrg(qe_port->us_info.rx_clock, baud, 16); in qe_uart_set_termios()
949 qe_setbrg(qe_port->us_info.tx_clock, baud, 16); in qe_uart_set_termios()
969 struct uart_qe_port *qe_port = in qe_uart_request_port() local
971 struct ucc_slow_info *us_info = &qe_port->us_info; in qe_uart_request_port()
980 qe_port->ucc_num); in qe_uart_request_port()
984 qe_port->us_private = uccs; in qe_uart_request_port()
985 qe_port->uccp = uccs->us_regs; in qe_uart_request_port()
986 qe_port->uccup = (struct ucc_uart_pram *) uccs->us_pram; in qe_uart_request_port()
987 qe_port->rx_bd_base = uccs->rx_bd; in qe_uart_request_port()
988 qe_port->tx_bd_base = uccs->tx_bd; in qe_uart_request_port()
994 rx_size = L1_CACHE_ALIGN(qe_port->rx_nrfifos * qe_port->rx_fifosize); in qe_uart_request_port()
995 tx_size = L1_CACHE_ALIGN(qe_port->tx_nrfifos * qe_port->tx_fifosize); in qe_uart_request_port()
1004 qe_port->bd_virt = bd_virt; in qe_uart_request_port()
1005 qe_port->bd_dma_addr = bd_dma_addr; in qe_uart_request_port()
1006 qe_port->bd_size = rx_size + tx_size; in qe_uart_request_port()
1008 qe_port->rx_buf = bd_virt; in qe_uart_request_port()
1009 qe_port->tx_buf = qe_port->rx_buf + rx_size; in qe_uart_request_port()
1035 struct uart_qe_port *qe_port = in qe_uart_release_port() local
1037 struct ucc_slow_private *uccs = qe_port->us_private; in qe_uart_release_port()
1039 dma_free_coherent(port->dev, qe_port->bd_size, qe_port->bd_virt, in qe_uart_release_port()
1040 qe_port->bd_dma_addr); in qe_uart_release_port()
1244 struct uart_qe_port *qe_port = NULL; in ucc_uart_probe() local
1256 qe_port = kzalloc(sizeof(struct uart_qe_port), GFP_KERNEL); in ucc_uart_probe()
1257 if (!qe_port) { in ucc_uart_probe()
1273 qe_port->port.mapbase = res.start; in ucc_uart_probe()
1290 qe_port->ucc_num = val - 1; in ucc_uart_probe()
1306 qe_port->us_info.rx_clock = qe_clock_source(sprop); in ucc_uart_probe()
1307 if ((qe_port->us_info.rx_clock < QE_BRG1) || in ucc_uart_probe()
1308 (qe_port->us_info.rx_clock > QE_BRG16)) { in ucc_uart_probe()
1316 qe_port->us_info.tx_clock = qe_port->us_info.rx_clock; in ucc_uart_probe()
1324 qe_port->us_info.tx_clock = qe_clock_source(sprop); in ucc_uart_probe()
1326 if ((qe_port->us_info.tx_clock < QE_BRG1) || in ucc_uart_probe()
1327 (qe_port->us_info.tx_clock > QE_BRG16)) { in ucc_uart_probe()
1339 qe_port->port.line = val; in ucc_uart_probe()
1340 if (qe_port->port.line >= UCC_MAX_UART) { in ucc_uart_probe()
1347 qe_port->port.irq = irq_of_parse_and_map(np, 0); in ucc_uart_probe()
1348 if (qe_port->port.irq == 0) { in ucc_uart_probe()
1350 qe_port->ucc_num + 1); in ucc_uart_probe()
1377 qe_port->port.uartclk = val; in ucc_uart_probe()
1398 qe_port->port.uartclk = val / 2; in ucc_uart_probe()
1407 spin_lock_init(&qe_port->port.lock); in ucc_uart_probe()
1408 qe_port->np = np; in ucc_uart_probe()
1409 qe_port->port.dev = &ofdev->dev; in ucc_uart_probe()
1410 qe_port->port.ops = &qe_uart_pops; in ucc_uart_probe()
1411 qe_port->port.iotype = UPIO_MEM; in ucc_uart_probe()
1413 qe_port->tx_nrfifos = TX_NUM_FIFO; in ucc_uart_probe()
1414 qe_port->tx_fifosize = TX_BUF_SIZE; in ucc_uart_probe()
1415 qe_port->rx_nrfifos = RX_NUM_FIFO; in ucc_uart_probe()
1416 qe_port->rx_fifosize = RX_BUF_SIZE; in ucc_uart_probe()
1418 qe_port->wait_closing = UCC_WAIT_CLOSING; in ucc_uart_probe()
1419 qe_port->port.fifosize = 512; in ucc_uart_probe()
1420 qe_port->port.flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP; in ucc_uart_probe()
1422 qe_port->us_info.ucc_num = qe_port->ucc_num; in ucc_uart_probe()
1423 qe_port->us_info.regs = (phys_addr_t) res.start; in ucc_uart_probe()
1424 qe_port->us_info.irq = qe_port->port.irq; in ucc_uart_probe()
1426 qe_port->us_info.rx_bd_ring_len = qe_port->rx_nrfifos; in ucc_uart_probe()
1427 qe_port->us_info.tx_bd_ring_len = qe_port->tx_nrfifos; in ucc_uart_probe()
1430 qe_port->us_info.init_tx = 1; in ucc_uart_probe()
1431 qe_port->us_info.init_rx = 1; in ucc_uart_probe()
1437 ret = uart_add_one_port(&ucc_uart_driver, &qe_port->port); in ucc_uart_probe()
1440 qe_port->port.line); in ucc_uart_probe()
1444 platform_set_drvdata(ofdev, qe_port); in ucc_uart_probe()
1447 qe_port->ucc_num + 1, qe_port->port.line); in ucc_uart_probe()
1451 qe_port->port.line, SERIAL_QE_MAJOR, in ucc_uart_probe()
1452 SERIAL_QE_MINOR + qe_port->port.line); in ucc_uart_probe()
1458 kfree(qe_port); in ucc_uart_probe()
1464 struct uart_qe_port *qe_port = platform_get_drvdata(ofdev); in ucc_uart_remove() local
1466 dev_info(&ofdev->dev, "removing /dev/ttyQE%u\n", qe_port->port.line); in ucc_uart_remove()
1468 uart_remove_one_port(&ucc_uart_driver, &qe_port->port); in ucc_uart_remove()
1470 of_node_put(qe_port->np); in ucc_uart_remove()
1472 kfree(qe_port); in ucc_uart_remove()