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 __iomem *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(ioread32be(&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(ioread32be(&bdp->buf), qe_port); in qe_uart_tx_pump()
372 count = uart_fifo_out(port, p, qe_port->tx_fifosize); in qe_uart_tx_pump()
379 bdp = qe_port->tx_bd_base; in qe_uart_tx_pump()
383 qe_port->tx_cur = bdp; in qe_uart_tx_pump()
407 struct uart_qe_port *qe_port = in qe_uart_start_tx() local
411 if (ioread16be(&qe_port->uccp->uccm) & UCC_UART_UCCE_TX) in qe_uart_start_tx()
415 if (qe_uart_tx_pump(qe_port)) in qe_uart_start_tx()
416 qe_setbits_be16(&qe_port->uccp->uccm, UCC_UART_UCCE_TX); in qe_uart_start_tx()
424 struct uart_qe_port *qe_port = in qe_uart_stop_rx() local
427 qe_clrbits_be16(&qe_port->uccp->uccm, UCC_UART_UCCE_RX); in qe_uart_stop_rx()
438 struct uart_qe_port *qe_port = in qe_uart_break_ctl() local
442 ucc_slow_stop_tx(qe_port->us_private); in qe_uart_break_ctl()
444 ucc_slow_restart_tx(qe_port->us_private); in qe_uart_break_ctl()
451 static void qe_uart_int_rx(struct uart_qe_port *qe_port) in qe_uart_int_rx() argument
455 struct uart_port *port = &qe_port->port; in qe_uart_int_rx()
464 bdp = qe_port->rx_cur; in qe_uart_int_rx()
484 cp = qe2cpu_addr(ioread32be(&bdp->buf), qe_port); in qe_uart_int_rx()
508 bdp = qe_port->rx_bd_base; in qe_uart_int_rx()
515 qe_port->rx_cur = bdp; in qe_uart_int_rx()
559 struct uart_qe_port *qe_port = (struct uart_qe_port *) data; in qe_uart_int() local
560 struct ucc_slow __iomem *uccp = qe_port->uccp; in qe_uart_int()
568 uart_handle_break(&qe_port->port); in qe_uart_int()
571 qe_uart_int_rx(qe_port); in qe_uart_int()
574 qe_uart_tx_pump(qe_port); in qe_uart_int()
583 static void qe_uart_initbd(struct uart_qe_port *qe_port) in qe_uart_initbd() argument
592 bd_virt = qe_port->bd_virt; in qe_uart_initbd()
593 bdp = qe_port->rx_bd_base; in qe_uart_initbd()
594 qe_port->rx_cur = qe_port->rx_bd_base; in qe_uart_initbd()
595 for (i = 0; i < (qe_port->rx_nrfifos - 1); i++) { in qe_uart_initbd()
597 iowrite32be(cpu2qe_addr(bd_virt, qe_port), &bdp->buf); in qe_uart_initbd()
599 bd_virt += qe_port->rx_fifosize; in qe_uart_initbd()
605 iowrite32be(cpu2qe_addr(bd_virt, qe_port), &bdp->buf); in qe_uart_initbd()
612 bd_virt = qe_port->bd_virt + in qe_uart_initbd()
613 L1_CACHE_ALIGN(qe_port->rx_nrfifos * qe_port->rx_fifosize); in qe_uart_initbd()
614 qe_port->tx_cur = qe_port->tx_bd_base; in qe_uart_initbd()
615 bdp = qe_port->tx_bd_base; in qe_uart_initbd()
616 for (i = 0; i < (qe_port->tx_nrfifos - 1); i++) { in qe_uart_initbd()
618 iowrite32be(cpu2qe_addr(bd_virt, qe_port), &bdp->buf); in qe_uart_initbd()
620 bd_virt += qe_port->tx_fifosize; in qe_uart_initbd()
626 qe_setbits_be16(&qe_port->tx_cur->status, BD_SC_P); in qe_uart_initbd()
630 iowrite32be(cpu2qe_addr(bd_virt, qe_port), &bdp->buf); in qe_uart_initbd()
641 static void qe_uart_init_ucc(struct uart_qe_port *qe_port) in qe_uart_init_ucc() argument
644 struct ucc_slow __iomem *uccp = qe_port->uccp; in qe_uart_init_ucc()
645 struct ucc_uart_pram __iomem *uccup = qe_port->uccup; in qe_uart_init_ucc()
650 ucc_slow_disable(qe_port->us_private, COMM_DIR_RX_AND_TX); in qe_uart_init_ucc()
655 iowrite16be(qe_port->rx_fifosize, &uccup->common.mrblr); in qe_uart_init_ucc()
749 cecr_subblock = ucc_slow_get_qe_cr_subblock(qe_port->ucc_num); in qe_uart_init_ucc()
753 cecr_subblock = ucc_slow_get_qe_cr_subblock(qe_port->ucc_num); in qe_uart_init_ucc()
764 struct uart_qe_port *qe_port = in qe_uart_startup() local
777 qe_uart_initbd(qe_port); in qe_uart_startup()
778 qe_uart_init_ucc(qe_port); in qe_uart_startup()
782 qe_port); in qe_uart_startup()
789 qe_setbits_be16(&qe_port->uccp->uccm, UCC_UART_UCCE_RX); in qe_uart_startup()
790 ucc_slow_enable(qe_port->us_private, COMM_DIR_RX_AND_TX); in qe_uart_startup()
800 struct uart_qe_port *qe_port = in qe_uart_shutdown() local
802 struct ucc_slow __iomem *uccp = qe_port->uccp; in qe_uart_shutdown()
817 if (qe_port->wait_closing) { in qe_uart_shutdown()
820 schedule_timeout(qe_port->wait_closing); in qe_uart_shutdown()
824 ucc_slow_disable(qe_port->us_private, COMM_DIR_RX_AND_TX); in qe_uart_shutdown()
828 ucc_slow_graceful_stop_tx(qe_port->us_private); in qe_uart_shutdown()
829 qe_uart_initbd(qe_port); in qe_uart_shutdown()
831 free_irq(port->irq, qe_port); in qe_uart_shutdown()
841 struct uart_qe_port *qe_port = in qe_uart_set_termios() local
843 struct ucc_slow __iomem *uccp = qe_port->uccp; in qe_uart_set_termios()
847 struct ucc_uart_pram __iomem *uccup = qe_port->uccup; in qe_uart_set_termios()
939 qe_setbrg(qe_port->us_info.rx_clock, baud, 16); in qe_uart_set_termios()
940 qe_setbrg(qe_port->us_info.tx_clock, baud, 1); in qe_uart_set_termios()
942 qe_setbrg(qe_port->us_info.rx_clock, baud, 16); in qe_uart_set_termios()
943 qe_setbrg(qe_port->us_info.tx_clock, baud, 16); in qe_uart_set_termios()
963 struct uart_qe_port *qe_port = in qe_uart_request_port() local
965 struct ucc_slow_info *us_info = &qe_port->us_info; in qe_uart_request_port()
974 qe_port->ucc_num); in qe_uart_request_port()
978 qe_port->us_private = uccs; in qe_uart_request_port()
979 qe_port->uccp = uccs->us_regs; in qe_uart_request_port()
980 qe_port->uccup = (struct ucc_uart_pram __iomem *)uccs->us_pram; in qe_uart_request_port()
981 qe_port->rx_bd_base = uccs->rx_bd; in qe_uart_request_port()
982 qe_port->tx_bd_base = uccs->tx_bd; in qe_uart_request_port()
988 rx_size = L1_CACHE_ALIGN(qe_port->rx_nrfifos * qe_port->rx_fifosize); in qe_uart_request_port()
989 tx_size = L1_CACHE_ALIGN(qe_port->tx_nrfifos * qe_port->tx_fifosize); in qe_uart_request_port()
998 qe_port->bd_virt = bd_virt; in qe_uart_request_port()
999 qe_port->bd_dma_addr = bd_dma_addr; in qe_uart_request_port()
1000 qe_port->bd_size = rx_size + tx_size; in qe_uart_request_port()
1002 qe_port->rx_buf = bd_virt; in qe_uart_request_port()
1003 qe_port->tx_buf = qe_port->rx_buf + rx_size; in qe_uart_request_port()
1029 struct uart_qe_port *qe_port = in qe_uart_release_port() local
1031 struct ucc_slow_private *uccs = qe_port->us_private; in qe_uart_release_port()
1033 dma_free_coherent(port->dev, qe_port->bd_size, qe_port->bd_virt, in qe_uart_release_port()
1034 qe_port->bd_dma_addr); in qe_uart_release_port()
1238 struct uart_qe_port *qe_port = NULL; in ucc_uart_probe() local
1250 qe_port = kzalloc(sizeof(struct uart_qe_port), GFP_KERNEL); in ucc_uart_probe()
1251 if (!qe_port) { in ucc_uart_probe()
1267 qe_port->port.mapbase = res.start; in ucc_uart_probe()
1284 qe_port->ucc_num = val - 1; in ucc_uart_probe()
1300 qe_port->us_info.rx_clock = qe_clock_source(sprop); in ucc_uart_probe()
1301 if ((qe_port->us_info.rx_clock < QE_BRG1) || in ucc_uart_probe()
1302 (qe_port->us_info.rx_clock > QE_BRG16)) { in ucc_uart_probe()
1310 qe_port->us_info.tx_clock = qe_port->us_info.rx_clock; in ucc_uart_probe()
1318 qe_port->us_info.tx_clock = qe_clock_source(sprop); in ucc_uart_probe()
1320 if ((qe_port->us_info.tx_clock < QE_BRG1) || in ucc_uart_probe()
1321 (qe_port->us_info.tx_clock > QE_BRG16)) { in ucc_uart_probe()
1333 qe_port->port.line = val; in ucc_uart_probe()
1334 if (qe_port->port.line >= UCC_MAX_UART) { in ucc_uart_probe()
1341 qe_port->port.irq = irq_of_parse_and_map(np, 0); in ucc_uart_probe()
1342 if (qe_port->port.irq == 0) { in ucc_uart_probe()
1344 qe_port->ucc_num + 1); in ucc_uart_probe()
1371 qe_port->port.uartclk = val; in ucc_uart_probe()
1392 qe_port->port.uartclk = val / 2; in ucc_uart_probe()
1401 spin_lock_init(&qe_port->port.lock); in ucc_uart_probe()
1402 qe_port->np = np; in ucc_uart_probe()
1403 qe_port->port.dev = &ofdev->dev; in ucc_uart_probe()
1404 qe_port->port.ops = &qe_uart_pops; in ucc_uart_probe()
1405 qe_port->port.iotype = UPIO_MEM; in ucc_uart_probe()
1407 qe_port->tx_nrfifos = TX_NUM_FIFO; in ucc_uart_probe()
1408 qe_port->tx_fifosize = TX_BUF_SIZE; in ucc_uart_probe()
1409 qe_port->rx_nrfifos = RX_NUM_FIFO; in ucc_uart_probe()
1410 qe_port->rx_fifosize = RX_BUF_SIZE; in ucc_uart_probe()
1412 qe_port->wait_closing = UCC_WAIT_CLOSING; in ucc_uart_probe()
1413 qe_port->port.fifosize = 512; in ucc_uart_probe()
1414 qe_port->port.flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP; in ucc_uart_probe()
1416 qe_port->us_info.ucc_num = qe_port->ucc_num; in ucc_uart_probe()
1417 qe_port->us_info.regs = (phys_addr_t) res.start; in ucc_uart_probe()
1418 qe_port->us_info.irq = qe_port->port.irq; in ucc_uart_probe()
1420 qe_port->us_info.rx_bd_ring_len = qe_port->rx_nrfifos; in ucc_uart_probe()
1421 qe_port->us_info.tx_bd_ring_len = qe_port->tx_nrfifos; in ucc_uart_probe()
1424 qe_port->us_info.init_tx = 1; in ucc_uart_probe()
1425 qe_port->us_info.init_rx = 1; in ucc_uart_probe()
1431 ret = uart_add_one_port(&ucc_uart_driver, &qe_port->port); in ucc_uart_probe()
1434 qe_port->port.line); in ucc_uart_probe()
1438 platform_set_drvdata(ofdev, qe_port); in ucc_uart_probe()
1441 qe_port->ucc_num + 1, qe_port->port.line); in ucc_uart_probe()
1445 qe_port->port.line, SERIAL_QE_MAJOR, in ucc_uart_probe()
1446 SERIAL_QE_MINOR + qe_port->port.line); in ucc_uart_probe()
1452 kfree(qe_port); in ucc_uart_probe()
1458 struct uart_qe_port *qe_port = platform_get_drvdata(ofdev); in ucc_uart_remove() local
1460 dev_info(&ofdev->dev, "removing /dev/ttyQE%u\n", qe_port->port.line); in ucc_uart_remove()
1462 uart_remove_one_port(&ucc_uart_driver, &qe_port->port); in ucc_uart_remove()
1464 of_node_put(qe_port->np); in ucc_uart_remove()
1466 kfree(qe_port); in ucc_uart_remove()