Lines Matching defs:udc
194 * @udc: Reference to the device controller.
217 struct bcm63xx_udc *udc;
234 * @udc: Reference to the device controller.
242 struct bcm63xx_udc *udc;
352 static inline u32 usbd_readl(struct bcm63xx_udc *udc, u32 off)
354 return bcm_readl(udc->usbd_regs + off);
357 static inline void usbd_writel(struct bcm63xx_udc *udc, u32 val, u32 off)
359 bcm_writel(val, udc->usbd_regs + off);
362 static inline u32 usb_dma_readl(struct bcm63xx_udc *udc, u32 off)
364 return bcm_readl(udc->iudma_regs + off);
367 static inline void usb_dma_writel(struct bcm63xx_udc *udc, u32 val, u32 off)
369 bcm_writel(val, udc->iudma_regs + off);
372 static inline u32 usb_dmac_readl(struct bcm63xx_udc *udc, u32 off, int chan)
374 return bcm_readl(udc->iudma_regs + IUDMA_DMAC_OFFSET + off +
378 static inline void usb_dmac_writel(struct bcm63xx_udc *udc, u32 val, u32 off,
381 bcm_writel(val, udc->iudma_regs + IUDMA_DMAC_OFFSET + off +
385 static inline u32 usb_dmas_readl(struct bcm63xx_udc *udc, u32 off, int chan)
387 return bcm_readl(udc->iudma_regs + IUDMA_DMAS_OFFSET + off +
391 static inline void usb_dmas_writel(struct bcm63xx_udc *udc, u32 val, u32 off,
394 bcm_writel(val, udc->iudma_regs + IUDMA_DMAS_OFFSET + off +
398 static inline void set_clocks(struct bcm63xx_udc *udc, bool is_enabled)
401 clk_enable(udc->usbh_clk);
402 clk_enable(udc->usbd_clk);
405 clk_disable(udc->usbd_clk);
406 clk_disable(udc->usbh_clk);
416 * @udc: Reference to the device controller.
423 static void bcm63xx_ep_dma_select(struct bcm63xx_udc *udc, int idx)
425 u32 val = usbd_readl(udc, USBD_CONTROL_REG);
429 usbd_writel(udc, val, USBD_CONTROL_REG);
434 * @udc: Reference to the device controller.
441 static void bcm63xx_set_stall(struct bcm63xx_udc *udc, struct bcm63xx_ep *bep,
449 usbd_writel(udc, val, USBD_STALL_REG);
454 * @udc: Reference to the device controller.
459 static void bcm63xx_fifo_setup(struct bcm63xx_udc *udc)
461 int is_hs = udc->gadget.speed == USB_SPEED_HIGH;
470 bcm63xx_ep_dma_select(udc, i >> 1);
476 usbd_writel(udc, val, USBD_RXFIFO_CONFIG_REG);
477 usbd_writel(udc,
485 usbd_writel(udc, val, USBD_TXFIFO_CONFIG_REG);
486 usbd_writel(udc,
490 usbd_readl(udc, USBD_TXFIFO_EPSIZE_REG);
496 * @udc: Reference to the device controller.
499 static void bcm63xx_fifo_reset_ep(struct bcm63xx_udc *udc, int ep_num)
503 bcm63xx_ep_dma_select(udc, ep_num);
505 val = usbd_readl(udc, USBD_CONTROL_REG);
507 usbd_writel(udc, val, USBD_CONTROL_REG);
508 usbd_readl(udc, USBD_CONTROL_REG);
513 * @udc: Reference to the device controller.
515 static void bcm63xx_fifo_reset(struct bcm63xx_udc *udc)
520 bcm63xx_fifo_reset_ep(udc, i);
525 * @udc: Reference to the device controller.
527 static void bcm63xx_ep_init(struct bcm63xx_udc *udc)
537 bcm63xx_ep_dma_select(udc, cfg->ep_num);
540 usbd_writel(udc, val, USBD_EPNUM_TYPEMAP_REG);
546 * @udc: Reference to the device controller.
550 static void bcm63xx_ep_setup(struct bcm63xx_udc *udc)
554 usbd_writel(udc, USBD_CSR_SETUPADDR_DEF, USBD_CSR_SETUPADDR_REG);
558 int max_pkt = udc->gadget.speed == USB_SPEED_HIGH ?
562 udc->iudma[i].max_pkt = max_pkt;
566 usb_ep_set_maxpacket_limit(&udc->bep[idx].ep, max_pkt);
571 (udc->cfg << USBD_CSR_EP_CFG_SHIFT) |
572 (udc->iface << USBD_CSR_EP_IFACE_SHIFT) |
573 (udc->alt_iface << USBD_CSR_EP_ALTIFACE_SHIFT) |
575 usbd_writel(udc, val, USBD_CSR_EP_REG(idx));
581 * @udc: Reference to the device controller.
592 static void iudma_write(struct bcm63xx_udc *udc, struct iudma_ch *iudma,
655 usb_dmac_writel(udc, ENETDMAC_CHANCFG_EN_MASK,
661 * @udc: Reference to the device controller.
668 static int iudma_read(struct bcm63xx_udc *udc, struct iudma_ch *iudma)
699 * @udc: Reference to the device controller.
702 static void iudma_reset_channel(struct bcm63xx_udc *udc, struct iudma_ch *iudma)
709 bcm63xx_fifo_reset_ep(udc, max(0, iudma->ep_num));
712 usb_dmac_writel(udc, 0, ENETDMAC_CHANCFG_REG, ch_idx);
714 while (usb_dmac_readl(udc, ENETDMAC_CHANCFG_REG, ch_idx) &
720 bcm63xx_fifo_reset_ep(udc, iudma->ep_num);
723 dev_err(udc->dev, "can't reset IUDMA channel %d\n",
728 dev_warn(udc->dev, "forcibly halting IUDMA channel %d\n",
730 usb_dmac_writel(udc, ENETDMAC_CHANCFG_BUFHALT_MASK,
734 usb_dmac_writel(udc, ~0, ENETDMAC_IR_REG, ch_idx);
745 usb_dmac_writel(udc, ENETDMAC_IR_BUFDONE_MASK,
747 usb_dmac_writel(udc, 8, ENETDMAC_MAXBURST_REG, ch_idx);
749 usb_dmas_writel(udc, iudma->bd_ring_dma, ENETDMAS_RSTART_REG, ch_idx);
750 usb_dmas_writel(udc, 0, ENETDMAS_SRAM2_REG, ch_idx);
755 * @udc: Reference to the device controller.
758 static int iudma_init_channel(struct bcm63xx_udc *udc, unsigned int ch_idx)
760 struct iudma_ch *iudma = &udc->iudma[ch_idx];
769 bep = &udc->bep[iudma->ep_num];
775 iudma->udc = udc;
782 iudma->bd_ring = dmam_alloc_coherent(udc->dev,
794 * @udc: Reference to the device controller.
798 static int iudma_init(struct bcm63xx_udc *udc)
802 usb_dma_writel(udc, ENETDMA_CFG_EN_MASK, ENETDMA_CFG_REG);
805 rc = iudma_init_channel(udc, i);
808 iudma_reset_channel(udc, &udc->iudma[i]);
811 usb_dma_writel(udc, BIT(BCM63XX_NUM_IUDMA)-1, ENETDMA_GLB_IRQMASK_REG);
817 * @udc: Reference to the device controller.
821 static void iudma_uninit(struct bcm63xx_udc *udc)
825 usb_dma_writel(udc, 0, ENETDMA_GLB_IRQMASK_REG);
828 iudma_reset_channel(udc, &udc->iudma[i]);
830 usb_dma_writel(udc, 0, ENETDMA_CFG_REG);
839 * @udc: Reference to the device controller.
842 static void bcm63xx_set_ctrl_irqs(struct bcm63xx_udc *udc, bool enable_irqs)
846 usbd_writel(udc, 0, USBD_STATUS_REG);
853 usbd_writel(udc, enable_irqs ? val : 0, USBD_EVENT_IRQ_MASK_REG);
854 usbd_writel(udc, val, USBD_EVENT_IRQ_STATUS_REG);
859 * @udc: Reference to the device controller.
868 static void bcm63xx_select_phy_mode(struct bcm63xx_udc *udc, bool is_device)
870 u32 val, portmask = BIT(udc->pd->port_no);
901 * @udc: Reference to the device controller.
908 static void bcm63xx_select_pullup(struct bcm63xx_udc *udc, bool is_on)
910 u32 val, portmask = BIT(udc->pd->port_no);
922 * @udc: Reference to the device controller.
927 static void bcm63xx_uninit_udc_hw(struct bcm63xx_udc *udc)
929 set_clocks(udc, true);
930 iudma_uninit(udc);
931 set_clocks(udc, false);
933 clk_put(udc->usbd_clk);
934 clk_put(udc->usbh_clk);
939 * @udc: Reference to the device controller.
941 static int bcm63xx_init_udc_hw(struct bcm63xx_udc *udc)
946 udc->ep0_ctrl_buf = devm_kzalloc(udc->dev, BCM63XX_MAX_CTRL_PKT,
948 if (!udc->ep0_ctrl_buf)
951 INIT_LIST_HEAD(&udc->gadget.ep_list);
953 struct bcm63xx_ep *bep = &udc->bep[i];
959 list_add_tail(&bep->ep.ep_list, &udc->gadget.ep_list);
962 bep->udc = udc;
967 udc->gadget.ep0 = &udc->bep[0].ep;
968 list_del(&udc->bep[0].ep.ep_list);
970 udc->gadget.speed = USB_SPEED_UNKNOWN;
971 udc->ep0state = EP0_SHUTDOWN;
973 udc->usbh_clk = clk_get(udc->dev, "usbh");
974 if (IS_ERR(udc->usbh_clk))
977 udc->usbd_clk = clk_get(udc->dev, "usbd");
978 if (IS_ERR(udc->usbd_clk)) {
979 clk_put(udc->usbh_clk);
983 set_clocks(udc, true);
988 usbd_writel(udc, val, USBD_CONTROL_REG);
996 if (udc->gadget.max_speed == USB_SPEED_HIGH)
1000 usbd_writel(udc, val, USBD_STRAPS_REG);
1002 bcm63xx_set_ctrl_irqs(udc, false);
1004 usbd_writel(udc, 0, USBD_EVENT_IRQ_CFG_LO_REG);
1008 usbd_writel(udc, val, USBD_EVENT_IRQ_CFG_HI_REG);
1010 rc = iudma_init(udc);
1011 set_clocks(udc, false);
1013 bcm63xx_uninit_udc_hw(udc);
1034 struct bcm63xx_udc *udc = bep->udc;
1041 if (!udc->driver)
1044 spin_lock_irqsave(&udc->lock, flags);
1046 spin_unlock_irqrestore(&udc->lock, flags);
1053 iudma_reset_channel(udc, iudma);
1056 bcm63xx_set_stall(udc, bep, false);
1057 clear_bit(bep->ep_num, &udc->wedgemap);
1062 spin_unlock_irqrestore(&udc->lock, flags);
1073 struct bcm63xx_udc *udc = bep->udc;
1081 spin_lock_irqsave(&udc->lock, flags);
1083 spin_unlock_irqrestore(&udc->lock, flags);
1088 iudma_reset_channel(udc, iudma);
1092 usb_gadget_unmap_request(&udc->gadget, &breq->req,
1097 spin_unlock_irqrestore(&udc->lock, flags);
1099 spin_lock_irqsave(&udc->lock, flags);
1104 spin_unlock_irqrestore(&udc->lock, flags);
1154 struct bcm63xx_udc *udc = bep->udc;
1166 if (bep == &udc->bep[0]) {
1168 if (udc->ep0_reply)
1171 udc->ep0_reply = req;
1172 schedule_work(&udc->ep0_wq);
1176 spin_lock_irqsave(&udc->lock, flags);
1182 rc = usb_gadget_map_request(&udc->gadget, req, bep->iudma->is_tx);
1186 iudma_write(udc, bep->iudma, breq);
1190 spin_unlock_irqrestore(&udc->lock, flags);
1206 struct bcm63xx_udc *udc = bep->udc;
1211 spin_lock_irqsave(&udc->lock, flags);
1218 usb_gadget_unmap_request(&udc->gadget, &breq->req, bep->iudma->is_tx);
1221 iudma_reset_channel(udc, bep->iudma);
1229 iudma_write(udc, bep->iudma, next);
1236 spin_unlock_irqrestore(&udc->lock, flags);
1254 struct bcm63xx_udc *udc = bep->udc;
1257 spin_lock_irqsave(&udc->lock, flags);
1258 bcm63xx_set_stall(udc, bep, !!value);
1260 spin_unlock_irqrestore(&udc->lock, flags);
1274 struct bcm63xx_udc *udc = bep->udc;
1277 spin_lock_irqsave(&udc->lock, flags);
1278 set_bit(bep->ep_num, &udc->wedgemap);
1279 bcm63xx_set_stall(udc, bep, true);
1280 spin_unlock_irqrestore(&udc->lock, flags);
1305 * @udc: Reference to the device controller.
1308 static int bcm63xx_ep0_setup_callback(struct bcm63xx_udc *udc,
1313 spin_unlock_irq(&udc->lock);
1314 rc = udc->driver->setup(&udc->gadget, ctrl);
1315 spin_lock_irq(&udc->lock);
1321 * @udc: Reference to the device controller.
1331 static int bcm63xx_ep0_spoof_set_cfg(struct bcm63xx_udc *udc)
1338 ctrl.wValue = cpu_to_le16(udc->cfg);
1342 rc = bcm63xx_ep0_setup_callback(udc, &ctrl);
1344 dev_warn_ratelimited(udc->dev,
1346 udc->cfg);
1353 * @udc: Reference to the device controller.
1355 static int bcm63xx_ep0_spoof_set_iface(struct bcm63xx_udc *udc)
1362 ctrl.wValue = cpu_to_le16(udc->alt_iface);
1363 ctrl.wIndex = cpu_to_le16(udc->iface);
1366 rc = bcm63xx_ep0_setup_callback(udc, &ctrl);
1368 dev_warn_ratelimited(udc->dev,
1370 udc->iface, udc->alt_iface);
1377 * @udc: Reference to the device controller.
1381 static void bcm63xx_ep0_map_write(struct bcm63xx_udc *udc, int ch_idx,
1385 struct iudma_ch *iudma = &udc->iudma[ch_idx];
1387 BUG_ON(udc->ep0_request);
1388 udc->ep0_request = req;
1392 usb_gadget_map_request(&udc->gadget, req, iudma->is_tx);
1393 iudma_write(udc, iudma, breq);
1398 * @udc: Reference to the device controller.
1402 static void bcm63xx_ep0_complete(struct bcm63xx_udc *udc,
1409 spin_unlock_irq(&udc->lock);
1410 req->complete(&udc->bep[0].ep, req);
1411 spin_lock_irq(&udc->lock);
1418 * @udc: Reference to the device controller.
1421 static void bcm63xx_ep0_nuke_reply(struct bcm63xx_udc *udc, int is_tx)
1423 struct usb_request *req = udc->ep0_reply;
1425 udc->ep0_reply = NULL;
1426 usb_gadget_unmap_request(&udc->gadget, req, is_tx);
1427 if (udc->ep0_request == req) {
1428 udc->ep0_req_completed = 0;
1429 udc->ep0_request = NULL;
1431 bcm63xx_ep0_complete(udc, req, -ESHUTDOWN);
1437 * @udc: Reference to the device controller.
1439 static int bcm63xx_ep0_read_complete(struct bcm63xx_udc *udc)
1441 struct usb_request *req = udc->ep0_request;
1443 udc->ep0_req_completed = 0;
1444 udc->ep0_request = NULL;
1451 * @udc: Reference to the device controller.
1458 static void bcm63xx_ep0_internal_request(struct bcm63xx_udc *udc, int ch_idx,
1461 struct usb_request *req = &udc->ep0_ctrl_req.req;
1463 req->buf = udc->ep0_ctrl_buf;
1467 bcm63xx_ep0_map_write(udc, ch_idx, req);
1472 * @udc: Reference to the device controller.
1478 static enum bcm63xx_ep0_state bcm63xx_ep0_do_setup(struct bcm63xx_udc *udc)
1481 struct usb_ctrlrequest *ctrl = (void *)udc->ep0_ctrl_buf;
1483 rc = bcm63xx_ep0_read_complete(udc);
1486 dev_err(udc->dev, "missing SETUP packet\n");
1500 dev_warn_ratelimited(udc->dev,
1506 rc = bcm63xx_ep0_setup_callback(udc, ctrl);
1508 bcm63xx_set_stall(udc, &udc->bep[0], true);
1522 * @udc: Reference to the device controller.
1531 static int bcm63xx_ep0_do_idle(struct bcm63xx_udc *udc)
1533 if (udc->ep0_req_reset) {
1534 udc->ep0_req_reset = 0;
1535 } else if (udc->ep0_req_set_cfg) {
1536 udc->ep0_req_set_cfg = 0;
1537 if (bcm63xx_ep0_spoof_set_cfg(udc) >= 0)
1538 udc->ep0state = EP0_IN_FAKE_STATUS_PHASE;
1539 } else if (udc->ep0_req_set_iface) {
1540 udc->ep0_req_set_iface = 0;
1541 if (bcm63xx_ep0_spoof_set_iface(udc) >= 0)
1542 udc->ep0state = EP0_IN_FAKE_STATUS_PHASE;
1543 } else if (udc->ep0_req_completed) {
1544 udc->ep0state = bcm63xx_ep0_do_setup(udc);
1545 return udc->ep0state == EP0_IDLE ? -EAGAIN : 0;
1546 } else if (udc->ep0_req_shutdown) {
1547 udc->ep0_req_shutdown = 0;
1548 udc->ep0_req_completed = 0;
1549 udc->ep0_request = NULL;
1550 iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_RXCHAN]);
1551 usb_gadget_unmap_request(&udc->gadget,
1552 &udc->ep0_ctrl_req.req, 0);
1556 udc->ep0state = EP0_SHUTDOWN;
1557 } else if (udc->ep0_reply) {
1563 dev_warn(udc->dev, "nuking unexpected reply\n");
1564 bcm63xx_ep0_nuke_reply(udc, 0);
1574 * @udc: Reference to the device controller.
1578 static int bcm63xx_ep0_one_round(struct bcm63xx_udc *udc)
1580 enum bcm63xx_ep0_state ep0state = udc->ep0state;
1581 bool shutdown = udc->ep0_req_reset || udc->ep0_req_shutdown;
1583 switch (udc->ep0state) {
1586 bcm63xx_ep0_internal_request(udc, IUDMA_EP0_RXCHAN,
1591 return bcm63xx_ep0_do_idle(udc);
1602 if (udc->ep0_reply) {
1603 bcm63xx_ep0_map_write(udc, IUDMA_EP0_TXCHAN,
1604 udc->ep0_reply);
1618 if (udc->ep0_req_completed) {
1619 udc->ep0_reply = NULL;
1620 bcm63xx_ep0_read_complete(udc);
1627 iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_TXCHAN]);
1628 bcm63xx_ep0_nuke_reply(udc, 1);
1635 if (udc->ep0_reply) {
1636 bcm63xx_ep0_map_write(udc, IUDMA_EP0_RXCHAN,
1637 udc->ep0_reply);
1645 if (udc->ep0_req_completed) {
1646 udc->ep0_reply = NULL;
1647 bcm63xx_ep0_read_complete(udc);
1650 bcm63xx_ep0_internal_request(udc, IUDMA_EP0_TXCHAN, 0);
1653 iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_RXCHAN]);
1654 bcm63xx_ep0_nuke_reply(udc, 0);
1668 if (udc->ep0_req_completed) {
1669 bcm63xx_ep0_read_complete(udc);
1672 iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_TXCHAN]);
1673 udc->ep0_request = NULL;
1692 struct usb_request *r = udc->ep0_reply;
1700 bcm63xx_ep0_complete(udc, r, 0);
1701 udc->ep0_reply = NULL;
1709 if (udc->ep0state == ep0state)
1712 udc->ep0state = ep0state;
1732 struct bcm63xx_udc *udc = container_of(w, struct bcm63xx_udc, ep0_wq);
1733 spin_lock_irq(&udc->lock);
1734 while (bcm63xx_ep0_one_round(udc) == 0)
1736 spin_unlock_irq(&udc->lock);
1749 struct bcm63xx_udc *udc = gadget_to_udc(gadget);
1751 return (usbd_readl(udc, USBD_STATUS_REG) &
1764 struct bcm63xx_udc *udc = gadget_to_udc(gadget);
1768 spin_lock_irqsave(&udc->lock, flags);
1769 if (is_on && udc->ep0state == EP0_SHUTDOWN) {
1770 udc->gadget.speed = USB_SPEED_UNKNOWN;
1771 udc->ep0state = EP0_REQUEUE;
1772 bcm63xx_fifo_setup(udc);
1773 bcm63xx_fifo_reset(udc);
1774 bcm63xx_ep_setup(udc);
1776 bitmap_zero(&udc->wedgemap, BCM63XX_NUM_EP);
1778 bcm63xx_set_stall(udc, &udc->bep[i], false);
1780 bcm63xx_set_ctrl_irqs(udc, true);
1783 } else if (!is_on && udc->ep0state != EP0_SHUTDOWN) {
1786 udc->ep0_req_shutdown = 1;
1787 spin_unlock_irqrestore(&udc->lock, flags);
1790 schedule_work(&udc->ep0_wq);
1791 if (udc->ep0state == EP0_SHUTDOWN)
1795 bcm63xx_set_ctrl_irqs(udc, false);
1796 cancel_work_sync(&udc->ep0_wq);
1800 spin_unlock_irqrestore(&udc->lock, flags);
1812 struct bcm63xx_udc *udc = gadget_to_udc(gadget);
1818 if (!udc)
1820 if (udc->driver)
1823 spin_lock_irqsave(&udc->lock, flags);
1825 set_clocks(udc, true);
1826 bcm63xx_fifo_setup(udc);
1827 bcm63xx_ep_init(udc);
1828 bcm63xx_ep_setup(udc);
1829 bcm63xx_fifo_reset(udc);
1830 bcm63xx_select_phy_mode(udc, true);
1832 udc->driver = driver;
1833 udc->gadget.dev.of_node = udc->dev->of_node;
1835 spin_unlock_irqrestore(&udc->lock, flags);
1847 struct bcm63xx_udc *udc = gadget_to_udc(gadget);
1850 spin_lock_irqsave(&udc->lock, flags);
1852 udc->driver = NULL;
1862 bcm63xx_select_phy_mode(udc, false);
1863 set_clocks(udc, false);
1865 spin_unlock_irqrestore(&udc->lock, flags);
1883 * @udc: Reference to the device controller.
1890 static void bcm63xx_update_cfg_iface(struct bcm63xx_udc *udc)
1892 u32 reg = usbd_readl(udc, USBD_STATUS_REG);
1894 udc->cfg = (reg & USBD_STATUS_CFG_MASK) >> USBD_STATUS_CFG_SHIFT;
1895 udc->iface = (reg & USBD_STATUS_INTF_MASK) >> USBD_STATUS_INTF_SHIFT;
1896 udc->alt_iface = (reg & USBD_STATUS_ALTINTF_MASK) >>
1898 bcm63xx_ep_setup(udc);
1903 * @udc: Reference to the device controller.
1908 static int bcm63xx_update_link_speed(struct bcm63xx_udc *udc)
1910 u32 reg = usbd_readl(udc, USBD_STATUS_REG);
1911 enum usb_device_speed oldspeed = udc->gadget.speed;
1915 udc->gadget.speed = USB_SPEED_HIGH;
1918 udc->gadget.speed = USB_SPEED_FULL;
1922 udc->gadget.speed = USB_SPEED_UNKNOWN;
1923 dev_err(udc->dev,
1928 if (udc->gadget.speed != oldspeed) {
1929 dev_info(udc->dev, "link up, %s-speed mode\n",
1930 udc->gadget.speed == USB_SPEED_HIGH ? "high" : "full");
1939 * @udc: Reference to the device controller.
1948 static void bcm63xx_update_wedge(struct bcm63xx_udc *udc, bool new_status)
1952 for_each_set_bit(i, &udc->wedgemap, BCM63XX_NUM_EP) {
1953 bcm63xx_set_stall(udc, &udc->bep[i], new_status);
1955 clear_bit(i, &udc->wedgemap);
1969 struct bcm63xx_udc *udc = dev_id;
1973 stat = usbd_readl(udc, USBD_EVENT_IRQ_STATUS_REG) &
1974 usbd_readl(udc, USBD_EVENT_IRQ_MASK_REG);
1976 usbd_writel(udc, stat, USBD_EVENT_IRQ_STATUS_REG);
1978 spin_lock(&udc->lock);
1982 if (!(usbd_readl(udc, USBD_EVENTS_REG) &
1984 udc->gadget.speed != USB_SPEED_UNKNOWN)
1985 dev_info(udc->dev, "link down\n");
1987 udc->gadget.speed = USB_SPEED_UNKNOWN;
1991 bcm63xx_fifo_setup(udc);
1992 bcm63xx_fifo_reset(udc);
1993 bcm63xx_ep_setup(udc);
1995 bcm63xx_update_wedge(udc, false);
1997 udc->ep0_req_reset = 1;
1998 schedule_work(&udc->ep0_wq);
2002 if (bcm63xx_update_link_speed(udc)) {
2003 bcm63xx_fifo_setup(udc);
2004 bcm63xx_ep_setup(udc);
2006 bcm63xx_update_wedge(udc, true);
2009 bcm63xx_update_cfg_iface(udc);
2010 udc->ep0_req_set_cfg = 1;
2011 schedule_work(&udc->ep0_wq);
2014 bcm63xx_update_cfg_iface(udc);
2015 udc->ep0_req_set_iface = 1;
2016 schedule_work(&udc->ep0_wq);
2018 spin_unlock(&udc->lock);
2020 if (disconnected && udc->driver)
2021 udc->driver->disconnect(&udc->gadget);
2022 else if (bus_reset && udc->driver)
2023 usb_gadget_udc_reset(&udc->gadget, udc->driver);
2041 struct bcm63xx_udc *udc = iudma->udc;
2048 spin_lock(&udc->lock);
2050 usb_dmac_writel(udc, ENETDMAC_IR_BUFDONE_MASK,
2053 rc = iudma_read(udc, iudma);
2058 req = udc->ep0_request;
2066 udc->ep0_req_completed = 1;
2068 schedule_work(&udc->ep0_wq);
2074 iudma_write(udc, iudma, breq);
2095 iudma_write(udc, iudma, next);
2098 iudma_write(udc, iudma, breq);
2102 spin_unlock(&udc->lock);
2105 usb_gadget_unmap_request(&udc->gadget, req, iudma->is_tx);
2126 struct bcm63xx_udc *udc = s->private;
2128 if (!udc->driver)
2132 bcm63xx_ep0_state_names[udc->ep0state]);
2134 udc->ep0_req_reset ? "reset " : "",
2135 udc->ep0_req_set_cfg ? "set_cfg " : "",
2136 udc->ep0_req_set_iface ? "set_iface " : "",
2137 udc->ep0_req_shutdown ? "shutdown " : "",
2138 udc->ep0_request ? "pending " : "",
2139 udc->ep0_req_completed ? "completed " : "",
2140 udc->ep0_reply ? "reply " : "");
2142 udc->cfg, udc->iface, udc->alt_iface);
2145 usbd_readl(udc, USBD_CONTROL_REG),
2146 usbd_readl(udc, USBD_STRAPS_REG),
2147 usbd_readl(udc, USBD_STATUS_REG));
2149 usbd_readl(udc, USBD_EVENTS_REG),
2150 usbd_readl(udc, USBD_STALL_REG));
2165 struct bcm63xx_udc *udc = s->private;
2169 if (!udc->driver)
2173 struct iudma_ch *iudma = &udc->iudma[ch_idx];
2191 usb_dmac_readl(udc, ENETDMAC_CHANCFG_REG, ch_idx),
2192 usb_dmac_readl(udc, ENETDMAC_IR_REG, ch_idx),
2193 usb_dmac_readl(udc, ENETDMAC_IRMASK_REG, ch_idx),
2194 usb_dmac_readl(udc, ENETDMAC_MAXBURST_REG, ch_idx));
2196 sram2 = usb_dmas_readl(udc, ENETDMAS_SRAM2_REG, ch_idx);
2197 sram3 = usb_dmas_readl(udc, ENETDMAS_SRAM3_REG, ch_idx);
2199 usb_dmas_readl(udc, ENETDMAS_RSTART_REG, ch_idx),
2202 usb_dmas_readl(udc, ENETDMAS_SRAM4_REG, ch_idx));
2234 * @udc: Reference to the device controller.
2236 static void bcm63xx_udc_init_debugfs(struct bcm63xx_udc *udc)
2243 root = debugfs_create_dir(udc->gadget.name, usb_debug_root);
2244 debugfs_create_file("usbd", 0400, root, udc, &bcm63xx_usbd_dbg_fops);
2245 debugfs_create_file("iudma", 0400, root, udc, &bcm63xx_iudma_dbg_fops);
2250 * @udc: Reference to the device controller.
2254 static void bcm63xx_udc_cleanup_debugfs(struct bcm63xx_udc *udc)
2256 debugfs_lookup_and_remove(udc->gadget.name, usb_debug_root);
2274 struct bcm63xx_udc *udc;
2277 udc = devm_kzalloc(dev, sizeof(*udc), GFP_KERNEL);
2278 if (!udc)
2281 platform_set_drvdata(pdev, udc);
2282 udc->dev = dev;
2283 udc->pd = pd;
2290 udc->usbd_regs = devm_platform_ioremap_resource(pdev, 0);
2291 if (IS_ERR(udc->usbd_regs))
2292 return PTR_ERR(udc->usbd_regs);
2294 udc->iudma_regs = devm_platform_ioremap_resource(pdev, 1);
2295 if (IS_ERR(udc->iudma_regs))
2296 return PTR_ERR(udc->iudma_regs);
2298 spin_lock_init(&udc->lock);
2299 INIT_WORK(&udc->ep0_wq, bcm63xx_ep0_process);
2301 udc->gadget.ops = &bcm63xx_udc_ops;
2302 udc->gadget.name = dev_name(dev);
2305 udc->gadget.max_speed = USB_SPEED_HIGH;
2307 udc->gadget.max_speed = USB_SPEED_FULL;
2310 rc = bcm63xx_init_udc_hw(udc);
2323 dev_name(dev), udc) < 0)
2334 dev_name(dev), &udc->iudma[i]) < 0)
2338 bcm63xx_udc_init_debugfs(udc);
2339 rc = usb_add_gadget_udc(dev, &udc->gadget);
2343 bcm63xx_udc_cleanup_debugfs(udc);
2345 bcm63xx_uninit_udc_hw(udc);
2359 struct bcm63xx_udc *udc = platform_get_drvdata(pdev);
2361 bcm63xx_udc_cleanup_debugfs(udc);
2362 usb_del_gadget_udc(&udc->gadget);
2363 BUG_ON(udc->driver);
2365 bcm63xx_uninit_udc_hw(udc);