• Home
  • Raw
  • Download

Lines Matching full:fifo

98 				 struct usbhs_fifo *fifo);
99 static struct dma_chan *usbhsf_dma_chan_get(struct usbhs_fifo *fifo,
107 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe); in usbhs_pkt_pop() local
121 if (fifo) in usbhs_pkt_pop()
122 chan = usbhsf_dma_chan_get(fifo, pkt); in usbhs_pkt_pop()
133 if (fifo) in usbhs_pkt_pop()
134 usbhsf_fifo_unselect(pipe, fifo); in usbhs_pkt_pop()
245 * FIFO ctrl
248 struct usbhs_fifo *fifo) in usbhsf_send_terminator() argument
252 usbhs_bset(priv, fifo->ctr, BVAL, BVAL); in usbhsf_send_terminator()
256 struct usbhs_fifo *fifo) in usbhsf_fifo_barrier() argument
258 /* The FIFO port is accessible */ in usbhsf_fifo_barrier()
259 if (usbhs_read(priv, fifo->ctr) & FRDY) in usbhsf_fifo_barrier()
266 struct usbhs_fifo *fifo) in usbhsf_fifo_clear() argument
280 ret = usbhsf_fifo_barrier(priv, fifo); in usbhsf_fifo_clear()
288 usbhs_write(priv, fifo->ctr, BCLR); in usbhsf_fifo_clear()
292 struct usbhs_fifo *fifo) in usbhsf_fifo_rcv_len() argument
294 return usbhs_read(priv, fifo->ctr) & DTLN_MASK; in usbhsf_fifo_rcv_len()
298 struct usbhs_fifo *fifo) in usbhsf_fifo_unselect() argument
303 usbhs_write(priv, fifo->sel, 0); in usbhsf_fifo_unselect()
307 struct usbhs_fifo *fifo, in usbhsf_fifo_select() argument
317 usbhsf_fifo_is_busy(fifo)) in usbhsf_fifo_select()
328 if (usbhs_get_dparam(priv, has_sudmac) && !usbhsf_is_cfifo(priv, fifo)) in usbhsf_fifo_select()
329 usbhs_write(priv, fifo->sel, base); in usbhsf_fifo_select()
331 usbhs_write(priv, fifo->sel, base | MBW_32); in usbhsf_fifo_select()
335 if (base == (mask & usbhs_read(priv, fifo->sel))) { in usbhsf_fifo_select()
336 usbhs_pipe_select_fifo(pipe, fifo); in usbhsf_fifo_select()
342 dev_err(dev, "fifo select error\n"); in usbhsf_fifo_select()
354 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */ in usbhs_dcp_dir_switch_to_write() local
360 ret = usbhsf_fifo_select(pipe, fifo, 1); in usbhs_dcp_dir_switch_to_write()
368 usbhsf_fifo_clear(pipe, fifo); in usbhs_dcp_dir_switch_to_write()
369 usbhsf_send_terminator(pipe, fifo); in usbhs_dcp_dir_switch_to_write()
371 usbhsf_fifo_unselect(pipe, fifo); in usbhs_dcp_dir_switch_to_write()
383 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */ in usbhs_dcp_dir_switch_to_read() local
389 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhs_dcp_dir_switch_to_read()
396 usbhsf_fifo_clear(pipe, fifo); in usbhs_dcp_dir_switch_to_read()
398 usbhsf_fifo_unselect(pipe, fifo); in usbhs_dcp_dir_switch_to_read()
461 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); in usbhsf_dcp_data_stage_prepare_pop() local
469 * - clear fifo in usbhsf_dcp_data_stage_prepare_pop()
476 usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_dcp_data_stage_prepare_pop()
477 usbhsf_fifo_clear(pipe, fifo); in usbhsf_dcp_data_stage_prepare_pop()
478 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_dcp_data_stage_prepare_pop()
500 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */ in usbhsf_pio_try_push() local
501 void __iomem *addr = priv->base + fifo->port; in usbhsf_pio_try_push()
513 ret = usbhsf_fifo_select(pipe, fifo, 1); in usbhsf_pio_try_push()
524 ret = usbhsf_fifo_barrier(priv, fifo); in usbhsf_pio_try_push()
565 usbhsf_send_terminator(pipe, fifo); in usbhsf_pio_try_push()
575 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_pio_try_push()
580 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_pio_try_push()
612 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); in usbhsf_prepare_pop() local
627 usbhsf_fifo_clear(pipe, fifo); in usbhsf_prepare_pop()
642 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */ in usbhsf_pio_try_pop() local
643 void __iomem *addr = priv->base + fifo->port; in usbhsf_pio_try_pop()
651 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_pio_try_pop()
655 ret = usbhsf_fifo_barrier(priv, fifo); in usbhsf_pio_try_pop()
659 rcv_len = usbhsf_fifo_rcv_len(priv, fifo); in usbhsf_pio_try_pop()
692 * "Operation" - "FIFO Buffer Memory" - "FIFO Port Function" in usbhsf_pio_try_pop()
696 usbhsf_fifo_clear(pipe, fifo); in usbhsf_pio_try_pop()
725 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_pio_try_pop()
753 * DMA fifo functions
755 static struct dma_chan *usbhsf_dma_chan_get(struct usbhs_fifo *fifo, in usbhsf_dma_chan_get() argument
759 return fifo->tx_chan; in usbhsf_dma_chan_get()
762 return fifo->rx_chan; in usbhsf_dma_chan_get()
770 struct usbhs_fifo *fifo; in usbhsf_get_dma_fifo() local
773 usbhs_for_each_dfifo(priv, fifo, i) { in usbhsf_get_dma_fifo()
774 if (usbhsf_dma_chan_get(fifo, pkt) && in usbhsf_get_dma_fifo()
775 !usbhsf_fifo_is_busy(fifo)) in usbhsf_get_dma_fifo()
776 return fifo; in usbhsf_get_dma_fifo()
785 struct usbhs_fifo *fifo, in __usbhsf_dma_ctrl() argument
790 usbhs_bset(priv, fifo->sel, DREQE, dreqe); in __usbhsf_dma_ctrl()
798 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe); in __usbhsf_dma_map_ctrl() local
799 struct dma_chan *chan = usbhsf_dma_chan_get(fifo, pkt); in __usbhsf_dma_map_ctrl()
808 struct usbhs_fifo *fifo; in usbhsf_dma_xfer_preparing() local
815 fifo = usbhs_pipe_to_fifo(pipe); in usbhsf_dma_xfer_preparing()
816 if (!fifo) in usbhsf_dma_xfer_preparing()
819 chan = usbhsf_dma_chan_get(fifo, pkt); in usbhsf_dma_xfer_preparing()
838 fifo->name, usbhs_pipe_number(pipe), pkt->length, pkt->zero); in usbhsf_dma_xfer_preparing()
843 usbhsf_dma_start(pipe, fifo); in usbhsf_dma_xfer_preparing()
866 struct usbhs_fifo *fifo; in usbhsf_dma_prepare_push() local
893 /* get enable DMA fifo */ in usbhsf_dma_prepare_push()
894 fifo = usbhsf_get_dma_fifo(priv, pkt); in usbhsf_dma_prepare_push()
895 if (!fifo) in usbhsf_dma_prepare_push()
898 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_dma_prepare_push()
919 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_dma_prepare_push()
945 usbhsf_dma_stop(pipe, pipe->fifo); in usbhsf_dma_push_done()
947 usbhsf_fifo_unselect(pipe, pipe->fifo); in usbhsf_dma_push_done()
978 struct usbhs_fifo *fifo; in usbhsf_dma_prepare_pop_with_usb_dmac() local
989 fifo = usbhsf_get_dma_fifo(priv, pkt); in usbhsf_dma_prepare_pop_with_usb_dmac()
990 if (!fifo) in usbhsf_dma_prepare_pop_with_usb_dmac()
1002 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_dma_prepare_pop_with_usb_dmac()
1025 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_dma_prepare_pop_with_usb_dmac()
1051 struct usbhs_fifo *fifo; in usbhsf_dma_try_pop_with_rx_irq() local
1060 /* get enable DMA fifo */ in usbhsf_dma_try_pop_with_rx_irq()
1061 fifo = usbhsf_get_dma_fifo(priv, pkt); in usbhsf_dma_try_pop_with_rx_irq()
1062 if (!fifo) in usbhsf_dma_try_pop_with_rx_irq()
1068 ret = usbhsf_fifo_select(pipe, fifo, 0); in usbhsf_dma_try_pop_with_rx_irq()
1073 len = usbhsf_fifo_rcv_len(priv, fifo); in usbhsf_dma_try_pop_with_rx_irq()
1081 ret = usbhsf_fifo_barrier(priv, fifo); in usbhsf_dma_try_pop_with_rx_irq()
1105 usbhsf_fifo_unselect(pipe, fifo); in usbhsf_dma_try_pop_with_rx_irq()
1130 usbhsf_dma_stop(pipe, pipe->fifo); in usbhsf_dma_pop_done_with_rx_irq()
1132 usbhsf_fifo_unselect(pipe, pipe->fifo); in usbhsf_dma_pop_done_with_rx_irq()
1174 struct usbhs_fifo *fifo = usbhs_pipe_to_fifo(pipe); in usbhsf_dma_pop_done_with_usb_dmac() local
1175 struct dma_chan *chan = usbhsf_dma_chan_get(fifo, pkt); in usbhsf_dma_pop_done_with_usb_dmac()
1185 rcv_len = usbhsf_fifo_rcv_len(priv, fifo); in usbhsf_dma_pop_done_with_usb_dmac()
1186 usbhsf_fifo_clear(pipe, fifo); in usbhsf_dma_pop_done_with_usb_dmac()
1190 usbhsf_dma_stop(pipe, fifo); in usbhsf_dma_pop_done_with_usb_dmac()
1192 usbhsf_fifo_unselect(pipe, pipe->fifo); in usbhsf_dma_pop_done_with_usb_dmac()
1236 static void usbhsf_dma_quit(struct usbhs_priv *priv, struct usbhs_fifo *fifo) in usbhsf_dma_quit() argument
1238 if (fifo->tx_chan) in usbhsf_dma_quit()
1239 dma_release_channel(fifo->tx_chan); in usbhsf_dma_quit()
1240 if (fifo->rx_chan) in usbhsf_dma_quit()
1241 dma_release_channel(fifo->rx_chan); in usbhsf_dma_quit()
1243 fifo->tx_chan = NULL; in usbhsf_dma_quit()
1244 fifo->rx_chan = NULL; in usbhsf_dma_quit()
1247 static void usbhsf_dma_init_pdev(struct usbhs_fifo *fifo) in usbhsf_dma_init_pdev() argument
1253 fifo->tx_chan = dma_request_channel(mask, usbhsf_dma_filter, in usbhsf_dma_init_pdev()
1254 &fifo->tx_slave); in usbhsf_dma_init_pdev()
1258 fifo->rx_chan = dma_request_channel(mask, usbhsf_dma_filter, in usbhsf_dma_init_pdev()
1259 &fifo->rx_slave); in usbhsf_dma_init_pdev()
1262 static void usbhsf_dma_init_dt(struct device *dev, struct usbhs_fifo *fifo, in usbhsf_dma_init_dt() argument
1274 fifo->tx_chan = dma_request_slave_channel_reason(dev, name); in usbhsf_dma_init_dt()
1275 if (IS_ERR(fifo->tx_chan)) in usbhsf_dma_init_dt()
1276 fifo->tx_chan = NULL; in usbhsf_dma_init_dt()
1278 fifo->rx_chan = dma_request_slave_channel_reason(dev, name); in usbhsf_dma_init_dt()
1279 if (IS_ERR(fifo->rx_chan)) in usbhsf_dma_init_dt()
1280 fifo->rx_chan = NULL; in usbhsf_dma_init_dt()
1284 static void usbhsf_dma_init(struct usbhs_priv *priv, struct usbhs_fifo *fifo, in usbhsf_dma_init() argument
1290 usbhsf_dma_init_dt(dev, fifo, channel); in usbhsf_dma_init()
1292 usbhsf_dma_init_pdev(fifo); in usbhsf_dma_init()
1294 if (fifo->tx_chan || fifo->rx_chan) in usbhsf_dma_init()
1296 fifo->name, in usbhsf_dma_init()
1297 fifo->tx_chan ? "[TX]" : " ", in usbhsf_dma_init()
1298 fifo->rx_chan ? "[RX]" : " "); in usbhsf_dma_init()
1380 struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */ in usbhs_fifo_clear_dcp() local
1382 /* clear DCP FIFO of transmission */ in usbhs_fifo_clear_dcp()
1383 if (usbhsf_fifo_select(pipe, fifo, 1) < 0) in usbhs_fifo_clear_dcp()
1385 usbhsf_fifo_clear(pipe, fifo); in usbhs_fifo_clear_dcp()
1386 usbhsf_fifo_unselect(pipe, fifo); in usbhs_fifo_clear_dcp()
1388 /* clear DCP FIFO of reception */ in usbhs_fifo_clear_dcp()
1389 if (usbhsf_fifo_select(pipe, fifo, 0) < 0) in usbhs_fifo_clear_dcp()
1391 usbhsf_fifo_clear(pipe, fifo); in usbhs_fifo_clear_dcp()
1392 usbhsf_fifo_unselect(pipe, fifo); in usbhs_fifo_clear_dcp()
1396 * fifo init
1425 #define __USBHS_DFIFO_INIT(priv, fifo, channel, fifo_port) \ argument
1427 fifo = usbhsf_get_dnfifo(priv, channel); \
1428 fifo->name = "D"#channel"FIFO"; \
1429 fifo->port = fifo_port; \
1430 fifo->sel = D##channel##FIFOSEL; \
1431 fifo->ctr = D##channel##FIFOCTR; \
1432 fifo->tx_slave.shdma_slave.slave_id = \
1434 fifo->rx_slave.shdma_slave.slave_id = \
1436 usbhsf_dma_init(priv, fifo, channel); \
1439 #define USBHS_DFIFO_INIT(priv, fifo, channel) \ argument
1440 __USBHS_DFIFO_INIT(priv, fifo, channel, D##channel##FIFO)
1441 #define USBHS_DFIFO_INIT_NO_PORT(priv, fifo, channel) \ argument
1442 __USBHS_DFIFO_INIT(priv, fifo, channel, 0)
1446 struct usbhs_fifo *fifo; in usbhs_fifo_probe() local
1449 fifo = usbhsf_get_cfifo(priv); in usbhs_fifo_probe()
1450 fifo->name = "CFIFO"; in usbhs_fifo_probe()
1451 fifo->port = CFIFO; in usbhs_fifo_probe()
1452 fifo->sel = CFIFOSEL; in usbhs_fifo_probe()
1453 fifo->ctr = CFIFOCTR; in usbhs_fifo_probe()
1456 USBHS_DFIFO_INIT(priv, fifo, 0); in usbhs_fifo_probe()
1457 USBHS_DFIFO_INIT(priv, fifo, 1); in usbhs_fifo_probe()
1458 USBHS_DFIFO_INIT_NO_PORT(priv, fifo, 2); in usbhs_fifo_probe()
1459 USBHS_DFIFO_INIT_NO_PORT(priv, fifo, 3); in usbhs_fifo_probe()
1466 struct usbhs_fifo *fifo; in usbhs_fifo_remove() local
1469 usbhs_for_each_dfifo(priv, fifo, i) in usbhs_fifo_remove()
1470 usbhsf_dma_quit(priv, fifo); in usbhs_fifo_remove()