Lines Matching refs:musb

73 struct musb *hcd_to_musb(struct usb_hcd *hcd)  in hcd_to_musb()
75 return *(struct musb **) hcd->hcd_priv; in hcd_to_musb()
79 static void musb_ep_program(struct musb *musb, u8 epnum,
88 struct musb *musb = ep->musb; in musb_h_tx_flush_fifo() local
113 if (dev_WARN_ONCE(musb->controller, retries-- < 1, in musb_h_tx_flush_fifo()
171 if (is_cppi_enabled(ep->musb)) in musb_h_tx_dma_start()
196 musb_start_urb(struct musb *musb, int is_in, struct musb_qh *qh) in musb_start_urb() argument
199 void __iomem *mbase = musb->mregs; in musb_start_urb()
215 musb->ep0_stage = MUSB_EP0_START; in musb_start_urb()
231 trace_musb_urb_start(musb, urb); in musb_start_urb()
235 musb_ep_program(musb, epnum, urb, !is_in, buf, offset, len); in musb_start_urb()
245 musb_dbg(musb, "check whether there's still time for periodic Tx"); in musb_start_urb()
258 musb_dbg(musb, "SOF for %d", epnum); in musb_start_urb()
266 musb_dbg(musb, "Start TX%d %s", epnum, in musb_start_urb()
271 else if (is_cppi_enabled(musb) || tusb_dma_omap(musb)) in musb_start_urb()
277 static void musb_giveback(struct musb *musb, struct urb *urb, int status) in musb_giveback() argument
278 __releases(musb->lock) in musb_giveback()
279 __acquires(musb->lock) in musb_giveback()
281 trace_musb_urb_gb(musb, urb); in musb_giveback()
283 usb_hcd_unlink_urb_from_ep(musb->hcd, urb); in musb_giveback()
284 spin_unlock(&musb->lock); in musb_giveback()
285 usb_hcd_giveback_urb(musb->hcd, urb, status); in musb_giveback()
286 spin_lock(&musb->lock); in musb_giveback()
296 static void musb_advance_schedule(struct musb *musb, struct urb *urb, in musb_advance_schedule() argument
311 toggle = musb->io.get_toggle(qh, !is_in); in musb_advance_schedule()
321 musb_giveback(musb, urb, status); in musb_advance_schedule()
329 struct dma_controller *dma = musb->dma_controller; in musb_advance_schedule()
378 musb_dbg(musb, "... next ep%d %cX urb %p", in musb_advance_schedule()
380 musb_start_urb(musb, is_in, qh); in musb_advance_schedule()
407 musb_host_packet_rx(struct musb *musb, struct urb *urb, u8 epnum, u8 iso_err) in musb_host_packet_rx() argument
415 struct musb_hw_ep *hw_ep = musb->endpoints + epnum; in musb_host_packet_rx()
423 musb_dbg(musb, "RX%d count %d, buffer %p len %d/%d", epnum, rx_count, in musb_host_packet_rx()
445 musb_dbg(musb, "OVERFLOW %d into %d", rx_count, length); in musb_host_packet_rx()
463 musb_dbg(musb, "OVERFLOW %d into %d", rx_count, length); in musb_host_packet_rx()
508 musb_rx_reinit(struct musb *musb, struct musb_qh *qh, u8 epnum) in musb_rx_reinit() argument
510 struct musb_hw_ep *ep = musb->endpoints + epnum; in musb_rx_reinit()
546 if (musb->is_multipoint) { in musb_rx_reinit()
547 musb_write_rxfunaddr(musb, epnum, qh->addr_reg); in musb_rx_reinit()
548 musb_write_rxhubaddr(musb, epnum, qh->h_addr_reg); in musb_rx_reinit()
549 musb_write_rxhubport(musb, epnum, qh->h_port_reg); in musb_rx_reinit()
551 musb_writeb(musb->mregs, MUSB_FADDR, qh->addr_reg); in musb_rx_reinit()
593 can_bulk_split(hw_ep->musb, qh->type))) in musb_tx_dma_set_mode_mentor()
627 if (musb_dma_inventra(hw_ep->musb) || musb_dma_ux500(hw_ep->musb)) in musb_tx_dma_program()
630 else if (is_cppi_enabled(hw_ep->musb) || tusb_dma_omap(hw_ep->musb)) in musb_tx_dma_program()
663 static void musb_ep_program(struct musb *musb, u8 epnum, in musb_ep_program() argument
670 void __iomem *mbase = musb->mregs; in musb_ep_program()
671 struct musb_hw_ep *hw_ep = musb->endpoints + epnum; in musb_ep_program()
678 musb_dbg(musb, "%s hw%d urb %p spd%d dev%d ep%d%s " in musb_ep_program()
697 dma_controller = musb->dma_controller; in musb_ep_program()
722 int_txe = musb->intrtxe; in musb_ep_program()
752 csr |= musb->io.set_toggle(qh, is_out, urb); in musb_ep_program()
765 if (musb->is_multipoint) { in musb_ep_program()
766 musb_write_txfunaddr(musb, epnum, qh->addr_reg); in musb_ep_program()
767 musb_write_txhubaddr(musb, epnum, qh->h_addr_reg); in musb_ep_program()
768 musb_write_txhubport(musb, epnum, qh->h_port_reg); in musb_ep_program()
776 if (can_bulk_split(musb, qh->type)) { in musb_ep_program()
789 if (musb->is_multipoint) in musb_ep_program()
794 if (can_bulk_split(musb, qh->type)) in musb_ep_program()
812 dev_err(musb->controller, in musb_ep_program()
837 musb_rx_reinit(musb, qh, epnum); in musb_ep_program()
838 csr |= musb->io.set_toggle(qh, is_out, urb); in musb_ep_program()
858 if ((is_cppi_enabled(musb) || tusb_dma_omap(musb)) && dma_channel) { in musb_ep_program()
884 musb_dbg(musb, "RXCSR%d := %04x", epnum, csr); in musb_ep_program()
893 static void musb_bulk_nak_timeout(struct musb *musb, struct musb_hw_ep *ep, in musb_bulk_nak_timeout() argument
898 void __iomem *mbase = musb->mregs; in musb_bulk_nak_timeout()
920 cur_qh = first_qh(&musb->in_bulk); in musb_bulk_nak_timeout()
930 cur_qh = first_qh(&musb->out_bulk); in musb_bulk_nak_timeout()
936 musb->dma_controller->channel_abort(dma); in musb_bulk_nak_timeout()
940 toggle = musb->io.get_toggle(cur_qh, !is_in); in musb_bulk_nak_timeout()
945 list_move_tail(&cur_qh->ring, &musb->in_bulk); in musb_bulk_nak_timeout()
948 next_qh = first_qh(&musb->in_bulk); in musb_bulk_nak_timeout()
954 list_move_tail(&cur_qh->ring, &musb->out_bulk); in musb_bulk_nak_timeout()
957 next_qh = first_qh(&musb->out_bulk); in musb_bulk_nak_timeout()
964 musb_start_urb(musb, is_in, next_qh); in musb_bulk_nak_timeout()
972 static bool musb_h_ep0_continue(struct musb *musb, u16 len, struct urb *urb) in musb_h_ep0_continue() argument
977 struct musb_hw_ep *hw_ep = musb->control_ep; in musb_h_ep0_continue()
981 switch (musb->ep0_stage) { in musb_h_ep0_continue()
1004 musb_dbg(musb, "start no-DATA"); in musb_h_ep0_continue()
1007 musb_dbg(musb, "start IN-DATA"); in musb_h_ep0_continue()
1008 musb->ep0_stage = MUSB_EP0_IN; in musb_h_ep0_continue()
1012 musb_dbg(musb, "start OUT-DATA"); in musb_h_ep0_continue()
1013 musb->ep0_stage = MUSB_EP0_OUT; in musb_h_ep0_continue()
1024 musb_dbg(musb, "Sending %d byte%s to ep0 fifo %p", in musb_h_ep0_continue()
1035 ERR("bogus ep0 stage %d\n", musb->ep0_stage); in musb_h_ep0_continue()
1048 irqreturn_t musb_h_ep0_irq(struct musb *musb) in musb_h_ep0_irq() argument
1053 void __iomem *mbase = musb->mregs; in musb_h_ep0_irq()
1054 struct musb_hw_ep *hw_ep = musb->control_ep; in musb_h_ep0_irq()
1069 musb_dbg(musb, "<== csr0 %04x, qh %p, count %d, urb %p, stage %d", in musb_h_ep0_irq()
1070 csr, qh, len, urb, musb->ep0_stage); in musb_h_ep0_irq()
1073 if (MUSB_EP0_STATUS == musb->ep0_stage) { in musb_h_ep0_irq()
1080 musb_dbg(musb, "STALLING ENDPOINT"); in musb_h_ep0_irq()
1084 musb_dbg(musb, "no response, csr0 %04x", csr); in musb_h_ep0_irq()
1088 musb_dbg(musb, "control NAK timeout"); in musb_h_ep0_irq()
1103 musb_dbg(musb, "aborting"); in musb_h_ep0_irq()
1136 if (musb_h_ep0_continue(musb, len, urb)) { in musb_h_ep0_irq()
1138 csr = (MUSB_EP0_IN == musb->ep0_stage) in musb_h_ep0_irq()
1154 musb->ep0_stage = MUSB_EP0_STATUS; in musb_h_ep0_irq()
1156 musb_dbg(musb, "ep0 STATUS, csr %04x", csr); in musb_h_ep0_irq()
1162 musb->ep0_stage = MUSB_EP0_IDLE; in musb_h_ep0_irq()
1166 musb_advance_schedule(musb, urb, hw_ep, 1); in musb_h_ep0_irq()
1189 void musb_host_tx(struct musb *musb, u8 epnum) in musb_host_tx() argument
1196 struct musb_hw_ep *hw_ep = musb->endpoints + epnum; in musb_host_tx()
1201 void __iomem *mbase = musb->mregs; in musb_host_tx()
1210 musb_dbg(musb, "extra TX%d ready, csr %04x", epnum, tx_csr); in musb_host_tx()
1216 trace_musb_urb_tx(musb, urb); in musb_host_tx()
1217 musb_dbg(musb, "OUT/TX%d end, csr %04x%s", epnum, tx_csr, in musb_host_tx()
1223 musb_dbg(musb, "TX end %d stall", epnum); in musb_host_tx()
1230 musb_dbg(musb, "TX 3strikes on ep=%d", epnum); in musb_host_tx()
1236 && !list_is_singular(&musb->out_bulk)) { in musb_host_tx()
1237 musb_dbg(musb, "NAK timeout on TX%d ep", epnum); in musb_host_tx()
1238 musb_bulk_nak_timeout(musb, hw_ep, 0); in musb_host_tx()
1240 musb_dbg(musb, "TX ep%d device not responding", epnum); in musb_host_tx()
1261 musb->dma_controller->channel_abort(dma); in musb_host_tx()
1286 musb_dbg(musb, "extra TX%d ready, csr %04x", epnum, tx_csr); in musb_host_tx()
1345 musb_dbg(musb, in musb_host_tx()
1403 musb_advance_schedule(musb, urb, hw_ep, USB_DIR_OUT); in musb_host_tx()
1406 if (musb_tx_dma_program(musb->dma_controller, hw_ep, qh, urb, in musb_host_tx()
1408 if (is_cppi_enabled(musb) || tusb_dma_omap(musb)) in musb_host_tx()
1413 musb_dbg(musb, "not complete, but DMA enabled?"); in musb_host_tx()
1427 usb_hcd_unmap_urb_for_dma(musb->hcd, urb); in musb_host_tx()
1436 dev_err(musb->controller, "error: sg list empty\n"); in musb_host_tx()
1559 if (musb_dma_cppi41(hw_ep->musb)) in musb_rx_dma_inventra_cppi41()
1606 struct musb *musb = hw_ep->musb; in musb_rx_dma_in_inventra_cppi41() local
1631 musb_dbg(musb, "** OVERFLOW %d into %d", in musb_rx_dma_in_inventra_cppi41()
1723 void musb_host_rx(struct musb *musb, u8 epnum) in musb_host_rx() argument
1726 struct musb_hw_ep *hw_ep = musb->endpoints + epnum; in musb_host_rx()
1727 struct dma_controller *c = musb->dma_controller; in musb_host_rx()
1731 void __iomem *mbase = musb->mregs; in musb_host_rx()
1754 musb_dbg(musb, "BOGUS RX%d ready, csr %04x, count %d", in musb_host_rx()
1760 trace_musb_urb_rx(musb, urb); in musb_host_rx()
1765 musb_dbg(musb, "RX end %d STALL", epnum); in musb_host_rx()
1771 dev_err(musb->controller, "ep%d RX three-strikes error", epnum); in musb_host_rx()
1788 musb_dbg(musb, "RX end %d NAK timeout", epnum); in musb_host_rx()
1800 && !list_is_singular(&musb->in_bulk)) { in musb_host_rx()
1801 musb_bulk_nak_timeout(musb, hw_ep, 1); in musb_host_rx()
1811 musb_dbg(musb, "RX end %d ISO data error", epnum); in musb_host_rx()
1816 musb_dbg(musb, "end %d high bandwidth incomplete ISO packet RX", in musb_host_rx()
1826 musb->dma_controller->channel_abort(dma); in musb_host_rx()
1847 if (!musb_dma_inventra(musb) && !musb_dma_ux500(musb) && in musb_host_rx()
1856 musb->dma_controller->channel_abort(dma); in musb_host_rx()
1861 musb_dbg(musb, "RXCSR%d %04x, reqpkt, len %zu%s", epnum, rx_csr, in musb_host_rx()
1879 if (musb_dma_inventra(musb) || musb_dma_ux500(musb) || in musb_host_rx()
1880 musb_dma_cppi41(musb)) { in musb_host_rx()
1882 musb_dbg(hw_ep->musb, in musb_host_rx()
1908 if ((musb_dma_inventra(musb) || musb_dma_ux500(musb) || in musb_host_rx()
1909 musb_dma_cppi41(musb)) && dma) { in musb_host_rx()
1910 musb_dbg(hw_ep->musb, in musb_host_rx()
1922 dev_err(musb->controller, "error: rx_dma failed\n"); in musb_host_rx()
1929 usb_hcd_unmap_urb_for_dma(musb->hcd, urb); in musb_host_rx()
1943 dev_err(musb->controller, "error: sg list empty\n"); in musb_host_rx()
1952 done = musb_host_packet_rx(musb, urb, epnum, in musb_host_rx()
1960 done = musb_host_packet_rx(musb, urb, in musb_host_rx()
1963 musb_dbg(musb, "read %spacket", done ? "last " : ""); in musb_host_rx()
1978 musb_advance_schedule(musb, urb, hw_ep, USB_DIR_IN); in musb_host_rx()
1988 struct musb *musb, in musb_schedule() argument
2003 head = &musb->control; in musb_schedule()
2004 hw_ep = musb->control_ep; in musb_schedule()
2020 for (epnum = 1, hw_ep = musb->endpoints + 1; in musb_schedule()
2021 epnum < musb->nr_endpoints; in musb_schedule()
2028 if (hw_ep == musb->bulk_ep) in musb_schedule()
2051 hw_ep = musb->endpoints + epnum; in musb_schedule()
2065 hw_ep = musb->bulk_ep; in musb_schedule()
2067 head = &musb->in_bulk; in musb_schedule()
2069 head = &musb->out_bulk; in musb_schedule()
2083 dev_err(musb->controller, in musb_schedule()
2092 hw_ep = musb->endpoints + best_end; in musb_schedule()
2093 musb_dbg(musb, "qh %p periodic slot %d", qh, best_end); in musb_schedule()
2103 musb_start_urb(musb, is_in, qh); in musb_schedule()
2113 struct musb *musb = hcd_to_musb(hcd); in musb_urb_enqueue() local
2122 if (!is_host_active(musb) || !musb->is_active) in musb_urb_enqueue()
2125 trace_musb_urb_enq(musb, urb); in musb_urb_enqueue()
2127 spin_lock_irqsave(&musb->lock, flags); in musb_urb_enqueue()
2132 spin_unlock_irqrestore(&musb->lock, flags); in musb_urb_enqueue()
2153 spin_lock_irqsave(&musb->lock, flags); in musb_urb_enqueue()
2155 spin_unlock_irqrestore(&musb->lock, flags); in musb_urb_enqueue()
2176 ok = (usb_pipein(urb->pipe) && musb->hb_iso_rx) in musb_urb_enqueue()
2177 || (usb_pipeout(urb->pipe) && musb->hb_iso_tx); in musb_urb_enqueue()
2179 dev_err(musb->controller, in musb_urb_enqueue()
2244 if (musb->is_multipoint) { in musb_urb_enqueue()
2266 spin_lock_irqsave(&musb->lock, flags); in musb_urb_enqueue()
2275 ret = musb_schedule(musb, qh, in musb_urb_enqueue()
2284 spin_unlock_irqrestore(&musb->lock, flags); in musb_urb_enqueue()
2288 spin_lock_irqsave(&musb->lock, flags); in musb_urb_enqueue()
2290 spin_unlock_irqrestore(&musb->lock, flags); in musb_urb_enqueue()
2305 struct musb *musb = ep->musb; in musb_cleanup_urb() local
2308 void __iomem *regs = ep->musb->mregs; in musb_cleanup_urb()
2319 status = ep->musb->dma_controller->channel_abort(dma); in musb_cleanup_urb()
2320 musb_dbg(musb, "abort %cX%d DMA for urb %p --> %d", in musb_cleanup_urb()
2334 musb_platform_clear_ep_rxintr(musb, ep->epnum); in musb_cleanup_urb()
2353 musb_advance_schedule(ep->musb, urb, ep, is_in); in musb_cleanup_urb()
2359 struct musb *musb = hcd_to_musb(hcd); in musb_urb_dequeue() local
2365 trace_musb_urb_deq(musb, urb); in musb_urb_dequeue()
2367 spin_lock_irqsave(&musb->lock, flags); in musb_urb_dequeue()
2394 musb_giveback(musb, urb, 0); in musb_urb_dequeue()
2408 spin_unlock_irqrestore(&musb->lock, flags); in musb_urb_dequeue()
2418 struct musb *musb = hcd_to_musb(hcd); in musb_h_disable() local
2422 spin_lock_irqsave(&musb->lock, flags); in musb_h_disable()
2448 musb_advance_schedule(musb, urb, qh->hw_ep, is_in); in musb_h_disable()
2456 musb_giveback(musb, next_urb(qh), -ESHUTDOWN); in musb_h_disable()
2463 spin_unlock_irqrestore(&musb->lock, flags); in musb_h_disable()
2468 struct musb *musb = hcd_to_musb(hcd); in musb_h_get_frame_number() local
2470 return musb_readw(musb->mregs, MUSB_FRAME); in musb_h_get_frame_number()
2475 struct musb *musb = hcd_to_musb(hcd); in musb_h_start() local
2481 musb->port1_status = 0; in musb_h_start()
2493 struct musb *musb = hcd_to_musb(hcd); in musb_bus_suspend() local
2497 ret = musb_port_suspend(musb, true); in musb_bus_suspend()
2501 if (!is_host_active(musb)) in musb_bus_suspend()
2504 switch (musb_get_state(musb)) { in musb_bus_suspend()
2512 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); in musb_bus_suspend()
2514 musb_set_state(musb, OTG_STATE_A_WAIT_BCON); in musb_bus_suspend()
2520 if (musb->is_active) { in musb_bus_suspend()
2522 musb_otg_state_string(musb)); in musb_bus_suspend()
2530 struct musb *musb = hcd_to_musb(hcd); in musb_bus_resume() local
2532 if (musb->config && in musb_bus_resume()
2533 musb->config->host_port_deassert_reset_at_resume) in musb_bus_resume()
2534 musb_port_reset(musb, false); in musb_bus_resume()
2618 struct musb *musb = hcd_to_musb(hcd); in musb_map_urb_for_dma() local
2627 if (musb->hwvers < MUSB_HWVERS_1800) in musb_map_urb_for_dma()
2643 struct musb *musb = hcd_to_musb(hcd); in musb_unmap_urb_for_dma() local
2648 if (musb->hwvers < MUSB_HWVERS_1800) in musb_unmap_urb_for_dma()
2658 .hcd_priv_size = sizeof(struct musb *),
2687 int musb_host_alloc(struct musb *musb) in musb_host_alloc() argument
2689 struct device *dev = musb->controller; in musb_host_alloc()
2692 musb->hcd = usb_create_hcd(&musb_hc_driver, dev, dev_name(dev)); in musb_host_alloc()
2693 if (!musb->hcd) in musb_host_alloc()
2696 *musb->hcd->hcd_priv = (unsigned long) musb; in musb_host_alloc()
2697 musb->hcd->self.uses_pio_for_control = 1; in musb_host_alloc()
2698 musb->hcd->uses_new_polling = 1; in musb_host_alloc()
2699 musb->hcd->has_tt = 1; in musb_host_alloc()
2704 void musb_host_cleanup(struct musb *musb) in musb_host_cleanup() argument
2706 if (musb->port_mode == MUSB_PERIPHERAL) in musb_host_cleanup()
2708 usb_remove_hcd(musb->hcd); in musb_host_cleanup()
2711 void musb_host_free(struct musb *musb) in musb_host_free() argument
2713 usb_put_hcd(musb->hcd); in musb_host_free()
2716 int musb_host_setup(struct musb *musb, int power_budget) in musb_host_setup() argument
2719 struct usb_hcd *hcd = musb->hcd; in musb_host_setup()
2721 if (musb->port_mode == MUSB_HOST) { in musb_host_setup()
2722 MUSB_HST_MODE(musb); in musb_host_setup()
2723 musb_set_state(musb, OTG_STATE_A_IDLE); in musb_host_setup()
2726 if (musb->xceiv) { in musb_host_setup()
2727 otg_set_host(musb->xceiv->otg, &hcd->self); in musb_host_setup()
2728 musb->xceiv->otg->host = &hcd->self; in musb_host_setup()
2730 phy_set_mode(musb->phy, PHY_MODE_USB_HOST); in musb_host_setup()
2746 void musb_host_resume_root_hub(struct musb *musb) in musb_host_resume_root_hub() argument
2748 usb_hcd_resume_root_hub(musb->hcd); in musb_host_resume_root_hub()
2751 void musb_host_poke_root_hub(struct musb *musb) in musb_host_poke_root_hub() argument
2753 MUSB_HST_MODE(musb); in musb_host_poke_root_hub()
2754 if (musb->hcd->status_urb) in musb_host_poke_root_hub()
2755 usb_hcd_poll_rh_status(musb->hcd); in musb_host_poke_root_hub()
2757 usb_hcd_resume_root_hub(musb->hcd); in musb_host_poke_root_hub()