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;
355 static inline u32 usbd_readl(struct bcm63xx_udc *udc, u32 off)
357 return bcm_readl(udc->usbd_regs + off);
360 static inline void usbd_writel(struct bcm63xx_udc *udc, u32 val, u32 off)
362 bcm_writel(val, udc->usbd_regs + off);
365 static inline u32 usb_dma_readl(struct bcm63xx_udc *udc, u32 off)
367 return bcm_readl(udc->iudma_regs + off);
370 static inline void usb_dma_writel(struct bcm63xx_udc *udc, u32 val, u32 off)
372 bcm_writel(val, udc->iudma_regs + off);
375 static inline u32 usb_dmac_readl(struct bcm63xx_udc *udc, u32 off, int chan)
377 return bcm_readl(udc->iudma_regs + IUDMA_DMAC_OFFSET + off +
381 static inline void usb_dmac_writel(struct bcm63xx_udc *udc, u32 val, u32 off,
384 bcm_writel(val, udc->iudma_regs + IUDMA_DMAC_OFFSET + off +
388 static inline u32 usb_dmas_readl(struct bcm63xx_udc *udc, u32 off, int chan)
390 return bcm_readl(udc->iudma_regs + IUDMA_DMAS_OFFSET + off +
394 static inline void usb_dmas_writel(struct bcm63xx_udc *udc, u32 val, u32 off,
397 bcm_writel(val, udc->iudma_regs + IUDMA_DMAS_OFFSET + off +
401 static inline void set_clocks(struct bcm63xx_udc *udc, bool is_enabled)
404 clk_enable(udc->usbh_clk);
405 clk_enable(udc->usbd_clk);
408 clk_disable(udc->usbd_clk);
409 clk_disable(udc->usbh_clk);
419 * @udc: Reference to the device controller.
426 static void bcm63xx_ep_dma_select(struct bcm63xx_udc *udc, int idx)
428 u32 val = usbd_readl(udc, USBD_CONTROL_REG);
432 usbd_writel(udc, val, USBD_CONTROL_REG);
437 * @udc: Reference to the device controller.
444 static void bcm63xx_set_stall(struct bcm63xx_udc *udc, struct bcm63xx_ep *bep,
452 usbd_writel(udc, val, USBD_STALL_REG);
457 * @udc: Reference to the device controller.
462 static void bcm63xx_fifo_setup(struct bcm63xx_udc *udc)
464 int is_hs = udc->gadget.speed == USB_SPEED_HIGH;
473 bcm63xx_ep_dma_select(udc, i >> 1);
479 usbd_writel(udc, val, USBD_RXFIFO_CONFIG_REG);
480 usbd_writel(udc,
488 usbd_writel(udc, val, USBD_TXFIFO_CONFIG_REG);
489 usbd_writel(udc,
493 usbd_readl(udc, USBD_TXFIFO_EPSIZE_REG);
499 * @udc: Reference to the device controller.
502 static void bcm63xx_fifo_reset_ep(struct bcm63xx_udc *udc, int ep_num)
506 bcm63xx_ep_dma_select(udc, ep_num);
508 val = usbd_readl(udc, USBD_CONTROL_REG);
510 usbd_writel(udc, val, USBD_CONTROL_REG);
511 usbd_readl(udc, USBD_CONTROL_REG);
516 * @udc: Reference to the device controller.
518 static void bcm63xx_fifo_reset(struct bcm63xx_udc *udc)
523 bcm63xx_fifo_reset_ep(udc, i);
528 * @udc: Reference to the device controller.
530 static void bcm63xx_ep_init(struct bcm63xx_udc *udc)
540 bcm63xx_ep_dma_select(udc, cfg->ep_num);
543 usbd_writel(udc, val, USBD_EPNUM_TYPEMAP_REG);
549 * @udc: Reference to the device controller.
553 static void bcm63xx_ep_setup(struct bcm63xx_udc *udc)
557 usbd_writel(udc, USBD_CSR_SETUPADDR_DEF, USBD_CSR_SETUPADDR_REG);
561 int max_pkt = udc->gadget.speed == USB_SPEED_HIGH ?
565 udc->iudma[i].max_pkt = max_pkt;
569 usb_ep_set_maxpacket_limit(&udc->bep[idx].ep, max_pkt);
574 (udc->cfg << USBD_CSR_EP_CFG_SHIFT) |
575 (udc->iface << USBD_CSR_EP_IFACE_SHIFT) |
576 (udc->alt_iface << USBD_CSR_EP_ALTIFACE_SHIFT) |
578 usbd_writel(udc, val, USBD_CSR_EP_REG(idx));
584 * @udc: Reference to the device controller.
595 static void iudma_write(struct bcm63xx_udc *udc, struct iudma_ch *iudma,
658 usb_dmac_writel(udc, ENETDMAC_CHANCFG_EN_MASK,
664 * @udc: Reference to the device controller.
671 static int iudma_read(struct bcm63xx_udc *udc, struct iudma_ch *iudma)
702 * @udc: Reference to the device controller.
705 static void iudma_reset_channel(struct bcm63xx_udc *udc, struct iudma_ch *iudma)
712 bcm63xx_fifo_reset_ep(udc, max(0, iudma->ep_num));
715 usb_dmac_writel(udc, 0, ENETDMAC_CHANCFG_REG, ch_idx);
717 while (usb_dmac_readl(udc, ENETDMAC_CHANCFG_REG, ch_idx) &
723 bcm63xx_fifo_reset_ep(udc, iudma->ep_num);
726 dev_err(udc->dev, "can't reset IUDMA channel %d\n",
731 dev_warn(udc->dev, "forcibly halting IUDMA channel %d\n",
733 usb_dmac_writel(udc, ENETDMAC_CHANCFG_BUFHALT_MASK,
737 usb_dmac_writel(udc, ~0, ENETDMAC_IR_REG, ch_idx);
748 usb_dmac_writel(udc, ENETDMAC_IR_BUFDONE_MASK,
750 usb_dmac_writel(udc, 8, ENETDMAC_MAXBURST_REG, ch_idx);
752 usb_dmas_writel(udc, iudma->bd_ring_dma, ENETDMAS_RSTART_REG, ch_idx);
753 usb_dmas_writel(udc, 0, ENETDMAS_SRAM2_REG, ch_idx);
758 * @udc: Reference to the device controller.
761 static int iudma_init_channel(struct bcm63xx_udc *udc, unsigned int ch_idx)
763 struct iudma_ch *iudma = &udc->iudma[ch_idx];
772 bep = &udc->bep[iudma->ep_num];
778 iudma->udc = udc;
785 iudma->bd_ring = dmam_alloc_coherent(udc->dev,
797 * @udc: Reference to the device controller.
801 static int iudma_init(struct bcm63xx_udc *udc)
805 usb_dma_writel(udc, ENETDMA_CFG_EN_MASK, ENETDMA_CFG_REG);
808 rc = iudma_init_channel(udc, i);
811 iudma_reset_channel(udc, &udc->iudma[i]);
814 usb_dma_writel(udc, BIT(BCM63XX_NUM_IUDMA)-1, ENETDMA_GLB_IRQMASK_REG);
820 * @udc: Reference to the device controller.
824 static void iudma_uninit(struct bcm63xx_udc *udc)
828 usb_dma_writel(udc, 0, ENETDMA_GLB_IRQMASK_REG);
831 iudma_reset_channel(udc, &udc->iudma[i]);
833 usb_dma_writel(udc, 0, ENETDMA_CFG_REG);
842 * @udc: Reference to the device controller.
845 static void bcm63xx_set_ctrl_irqs(struct bcm63xx_udc *udc, bool enable_irqs)
849 usbd_writel(udc, 0, USBD_STATUS_REG);
856 usbd_writel(udc, enable_irqs ? val : 0, USBD_EVENT_IRQ_MASK_REG);
857 usbd_writel(udc, val, USBD_EVENT_IRQ_STATUS_REG);
862 * @udc: Reference to the device controller.
871 static void bcm63xx_select_phy_mode(struct bcm63xx_udc *udc, bool is_device)
873 u32 val, portmask = BIT(udc->pd->port_no);
904 * @udc: Reference to the device controller.
911 static void bcm63xx_select_pullup(struct bcm63xx_udc *udc, bool is_on)
913 u32 val, portmask = BIT(udc->pd->port_no);
925 * @udc: Reference to the device controller.
930 static void bcm63xx_uninit_udc_hw(struct bcm63xx_udc *udc)
932 set_clocks(udc, true);
933 iudma_uninit(udc);
934 set_clocks(udc, false);
936 clk_put(udc->usbd_clk);
937 clk_put(udc->usbh_clk);
942 * @udc: Reference to the device controller.
944 static int bcm63xx_init_udc_hw(struct bcm63xx_udc *udc)
949 udc->ep0_ctrl_buf = devm_kzalloc(udc->dev, BCM63XX_MAX_CTRL_PKT,
951 if (!udc->ep0_ctrl_buf)
954 INIT_LIST_HEAD(&udc->gadget.ep_list);
956 struct bcm63xx_ep *bep = &udc->bep[i];
962 list_add_tail(&bep->ep.ep_list, &udc->gadget.ep_list);
965 bep->udc = udc;
970 udc->gadget.ep0 = &udc->bep[0].ep;
971 list_del(&udc->bep[0].ep.ep_list);
973 udc->gadget.speed = USB_SPEED_UNKNOWN;
974 udc->ep0state = EP0_SHUTDOWN;
976 udc->usbh_clk = clk_get(udc->dev, "usbh");
977 if (IS_ERR(udc->usbh_clk))
980 udc->usbd_clk = clk_get(udc->dev, "usbd");
981 if (IS_ERR(udc->usbd_clk)) {
982 clk_put(udc->usbh_clk);
986 set_clocks(udc, true);
991 usbd_writel(udc, val, USBD_CONTROL_REG);
999 if (udc->gadget.max_speed == USB_SPEED_HIGH)
1003 usbd_writel(udc, val, USBD_STRAPS_REG);
1005 bcm63xx_set_ctrl_irqs(udc, false);
1007 usbd_writel(udc, 0, USBD_EVENT_IRQ_CFG_LO_REG);
1011 usbd_writel(udc, val, USBD_EVENT_IRQ_CFG_HI_REG);
1013 rc = iudma_init(udc);
1014 set_clocks(udc, false);
1016 bcm63xx_uninit_udc_hw(udc);
1037 struct bcm63xx_udc *udc = bep->udc;
1044 if (!udc->driver)
1047 spin_lock_irqsave(&udc->lock, flags);
1049 spin_unlock_irqrestore(&udc->lock, flags);
1056 iudma_reset_channel(udc, iudma);
1059 bcm63xx_set_stall(udc, bep, false);
1060 clear_bit(bep->ep_num, &udc->wedgemap);
1065 spin_unlock_irqrestore(&udc->lock, flags);
1076 struct bcm63xx_udc *udc = bep->udc;
1084 spin_lock_irqsave(&udc->lock, flags);
1086 spin_unlock_irqrestore(&udc->lock, flags);
1091 iudma_reset_channel(udc, iudma);
1095 usb_gadget_unmap_request(&udc->gadget, &breq->req,
1100 spin_unlock_irqrestore(&udc->lock, flags);
1102 spin_lock_irqsave(&udc->lock, flags);
1107 spin_unlock_irqrestore(&udc->lock, flags);
1157 struct bcm63xx_udc *udc = bep->udc;
1169 if (bep == &udc->bep[0]) {
1171 if (udc->ep0_reply)
1174 udc->ep0_reply = req;
1175 schedule_work(&udc->ep0_wq);
1179 spin_lock_irqsave(&udc->lock, flags);
1185 rc = usb_gadget_map_request(&udc->gadget, req, bep->iudma->is_tx);
1189 iudma_write(udc, bep->iudma, breq);
1193 spin_unlock_irqrestore(&udc->lock, flags);
1209 struct bcm63xx_udc *udc = bep->udc;
1214 spin_lock_irqsave(&udc->lock, flags);
1221 usb_gadget_unmap_request(&udc->gadget, &breq->req, bep->iudma->is_tx);
1224 iudma_reset_channel(udc, bep->iudma);
1232 iudma_write(udc, bep->iudma, next);
1239 spin_unlock_irqrestore(&udc->lock, flags);
1257 struct bcm63xx_udc *udc = bep->udc;
1260 spin_lock_irqsave(&udc->lock, flags);
1261 bcm63xx_set_stall(udc, bep, !!value);
1263 spin_unlock_irqrestore(&udc->lock, flags);
1277 struct bcm63xx_udc *udc = bep->udc;
1280 spin_lock_irqsave(&udc->lock, flags);
1281 set_bit(bep->ep_num, &udc->wedgemap);
1282 bcm63xx_set_stall(udc, bep, true);
1283 spin_unlock_irqrestore(&udc->lock, flags);
1308 * @udc: Reference to the device controller.
1311 static int bcm63xx_ep0_setup_callback(struct bcm63xx_udc *udc,
1316 spin_unlock_irq(&udc->lock);
1317 rc = udc->driver->setup(&udc->gadget, ctrl);
1318 spin_lock_irq(&udc->lock);
1324 * @udc: Reference to the device controller.
1334 static int bcm63xx_ep0_spoof_set_cfg(struct bcm63xx_udc *udc)
1341 ctrl.wValue = cpu_to_le16(udc->cfg);
1345 rc = bcm63xx_ep0_setup_callback(udc, &ctrl);
1347 dev_warn_ratelimited(udc->dev,
1349 udc->cfg);
1356 * @udc: Reference to the device controller.
1358 static int bcm63xx_ep0_spoof_set_iface(struct bcm63xx_udc *udc)
1365 ctrl.wValue = cpu_to_le16(udc->alt_iface);
1366 ctrl.wIndex = cpu_to_le16(udc->iface);
1369 rc = bcm63xx_ep0_setup_callback(udc, &ctrl);
1371 dev_warn_ratelimited(udc->dev,
1373 udc->iface, udc->alt_iface);
1380 * @udc: Reference to the device controller.
1384 static void bcm63xx_ep0_map_write(struct bcm63xx_udc *udc, int ch_idx,
1388 struct iudma_ch *iudma = &udc->iudma[ch_idx];
1390 BUG_ON(udc->ep0_request);
1391 udc->ep0_request = req;
1395 usb_gadget_map_request(&udc->gadget, req, iudma->is_tx);
1396 iudma_write(udc, iudma, breq);
1401 * @udc: Reference to the device controller.
1405 static void bcm63xx_ep0_complete(struct bcm63xx_udc *udc,
1412 spin_unlock_irq(&udc->lock);
1413 req->complete(&udc->bep[0].ep, req);
1414 spin_lock_irq(&udc->lock);
1421 * @udc: Reference to the device controller.
1424 static void bcm63xx_ep0_nuke_reply(struct bcm63xx_udc *udc, int is_tx)
1426 struct usb_request *req = udc->ep0_reply;
1428 udc->ep0_reply = NULL;
1429 usb_gadget_unmap_request(&udc->gadget, req, is_tx);
1430 if (udc->ep0_request == req) {
1431 udc->ep0_req_completed = 0;
1432 udc->ep0_request = NULL;
1434 bcm63xx_ep0_complete(udc, req, -ESHUTDOWN);
1440 * @udc: Reference to the device controller.
1442 static int bcm63xx_ep0_read_complete(struct bcm63xx_udc *udc)
1444 struct usb_request *req = udc->ep0_request;
1446 udc->ep0_req_completed = 0;
1447 udc->ep0_request = NULL;
1454 * @udc: Reference to the device controller.
1461 static void bcm63xx_ep0_internal_request(struct bcm63xx_udc *udc, int ch_idx,
1464 struct usb_request *req = &udc->ep0_ctrl_req.req;
1466 req->buf = udc->ep0_ctrl_buf;
1470 bcm63xx_ep0_map_write(udc, ch_idx, req);
1475 * @udc: Reference to the device controller.
1481 static enum bcm63xx_ep0_state bcm63xx_ep0_do_setup(struct bcm63xx_udc *udc)
1484 struct usb_ctrlrequest *ctrl = (void *)udc->ep0_ctrl_buf;
1486 rc = bcm63xx_ep0_read_complete(udc);
1489 dev_err(udc->dev, "missing SETUP packet\n");
1503 dev_warn_ratelimited(udc->dev,
1509 rc = bcm63xx_ep0_setup_callback(udc, ctrl);
1511 bcm63xx_set_stall(udc, &udc->bep[0], true);
1525 * @udc: Reference to the device controller.
1534 static int bcm63xx_ep0_do_idle(struct bcm63xx_udc *udc)
1536 if (udc->ep0_req_reset) {
1537 udc->ep0_req_reset = 0;
1538 } else if (udc->ep0_req_set_cfg) {
1539 udc->ep0_req_set_cfg = 0;
1540 if (bcm63xx_ep0_spoof_set_cfg(udc) >= 0)
1541 udc->ep0state = EP0_IN_FAKE_STATUS_PHASE;
1542 } else if (udc->ep0_req_set_iface) {
1543 udc->ep0_req_set_iface = 0;
1544 if (bcm63xx_ep0_spoof_set_iface(udc) >= 0)
1545 udc->ep0state = EP0_IN_FAKE_STATUS_PHASE;
1546 } else if (udc->ep0_req_completed) {
1547 udc->ep0state = bcm63xx_ep0_do_setup(udc);
1548 return udc->ep0state == EP0_IDLE ? -EAGAIN : 0;
1549 } else if (udc->ep0_req_shutdown) {
1550 udc->ep0_req_shutdown = 0;
1551 udc->ep0_req_completed = 0;
1552 udc->ep0_request = NULL;
1553 iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_RXCHAN]);
1554 usb_gadget_unmap_request(&udc->gadget,
1555 &udc->ep0_ctrl_req.req, 0);
1559 udc->ep0state = EP0_SHUTDOWN;
1560 } else if (udc->ep0_reply) {
1566 dev_warn(udc->dev, "nuking unexpected reply\n");
1567 bcm63xx_ep0_nuke_reply(udc, 0);
1577 * @udc: Reference to the device controller.
1581 static int bcm63xx_ep0_one_round(struct bcm63xx_udc *udc)
1583 enum bcm63xx_ep0_state ep0state = udc->ep0state;
1584 bool shutdown = udc->ep0_req_reset || udc->ep0_req_shutdown;
1586 switch (udc->ep0state) {
1589 bcm63xx_ep0_internal_request(udc, IUDMA_EP0_RXCHAN,
1594 return bcm63xx_ep0_do_idle(udc);
1605 if (udc->ep0_reply) {
1606 bcm63xx_ep0_map_write(udc, IUDMA_EP0_TXCHAN,
1607 udc->ep0_reply);
1621 if (udc->ep0_req_completed) {
1622 udc->ep0_reply = NULL;
1623 bcm63xx_ep0_read_complete(udc);
1630 iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_TXCHAN]);
1631 bcm63xx_ep0_nuke_reply(udc, 1);
1638 if (udc->ep0_reply) {
1639 bcm63xx_ep0_map_write(udc, IUDMA_EP0_RXCHAN,
1640 udc->ep0_reply);
1648 if (udc->ep0_req_completed) {
1649 udc->ep0_reply = NULL;
1650 bcm63xx_ep0_read_complete(udc);
1653 bcm63xx_ep0_internal_request(udc, IUDMA_EP0_TXCHAN, 0);
1656 iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_RXCHAN]);
1657 bcm63xx_ep0_nuke_reply(udc, 0);
1671 if (udc->ep0_req_completed) {
1672 bcm63xx_ep0_read_complete(udc);
1675 iudma_reset_channel(udc, &udc->iudma[IUDMA_EP0_TXCHAN]);
1676 udc->ep0_request = NULL;
1695 struct usb_request *r = udc->ep0_reply;
1703 bcm63xx_ep0_complete(udc, r, 0);
1704 udc->ep0_reply = NULL;
1712 if (udc->ep0state == ep0state)
1715 udc->ep0state = ep0state;
1735 struct bcm63xx_udc *udc = container_of(w, struct bcm63xx_udc, ep0_wq);
1736 spin_lock_irq(&udc->lock);
1737 while (bcm63xx_ep0_one_round(udc) == 0)
1739 spin_unlock_irq(&udc->lock);
1752 struct bcm63xx_udc *udc = gadget_to_udc(gadget);
1754 return (usbd_readl(udc, USBD_STATUS_REG) &
1767 struct bcm63xx_udc *udc = gadget_to_udc(gadget);
1771 spin_lock_irqsave(&udc->lock, flags);
1772 if (is_on && udc->ep0state == EP0_SHUTDOWN) {
1773 udc->gadget.speed = USB_SPEED_UNKNOWN;
1774 udc->ep0state = EP0_REQUEUE;
1775 bcm63xx_fifo_setup(udc);
1776 bcm63xx_fifo_reset(udc);
1777 bcm63xx_ep_setup(udc);
1779 bitmap_zero(&udc->wedgemap, BCM63XX_NUM_EP);
1781 bcm63xx_set_stall(udc, &udc->bep[i], false);
1783 bcm63xx_set_ctrl_irqs(udc, true);
1786 } else if (!is_on && udc->ep0state != EP0_SHUTDOWN) {
1789 udc->ep0_req_shutdown = 1;
1790 spin_unlock_irqrestore(&udc->lock, flags);
1793 schedule_work(&udc->ep0_wq);
1794 if (udc->ep0state == EP0_SHUTDOWN)
1798 bcm63xx_set_ctrl_irqs(udc, false);
1799 cancel_work_sync(&udc->ep0_wq);
1803 spin_unlock_irqrestore(&udc->lock, flags);
1815 struct bcm63xx_udc *udc = gadget_to_udc(gadget);
1821 if (!udc)
1823 if (udc->driver)
1826 spin_lock_irqsave(&udc->lock, flags);
1828 set_clocks(udc, true);
1829 bcm63xx_fifo_setup(udc);
1830 bcm63xx_ep_init(udc);
1831 bcm63xx_ep_setup(udc);
1832 bcm63xx_fifo_reset(udc);
1833 bcm63xx_select_phy_mode(udc, true);
1835 udc->driver = driver;
1837 udc->gadget.dev.of_node = udc->dev->of_node;
1839 spin_unlock_irqrestore(&udc->lock, flags);
1851 struct bcm63xx_udc *udc = gadget_to_udc(gadget);
1854 spin_lock_irqsave(&udc->lock, flags);
1856 udc->driver = NULL;
1866 bcm63xx_select_phy_mode(udc, false);
1867 set_clocks(udc, false);
1869 spin_unlock_irqrestore(&udc->lock, flags);
1887 * @udc: Reference to the device controller.
1894 static void bcm63xx_update_cfg_iface(struct bcm63xx_udc *udc)
1896 u32 reg = usbd_readl(udc, USBD_STATUS_REG);
1898 udc->cfg = (reg & USBD_STATUS_CFG_MASK) >> USBD_STATUS_CFG_SHIFT;
1899 udc->iface = (reg & USBD_STATUS_INTF_MASK) >> USBD_STATUS_INTF_SHIFT;
1900 udc->alt_iface = (reg & USBD_STATUS_ALTINTF_MASK) >>
1902 bcm63xx_ep_setup(udc);
1907 * @udc: Reference to the device controller.
1912 static int bcm63xx_update_link_speed(struct bcm63xx_udc *udc)
1914 u32 reg = usbd_readl(udc, USBD_STATUS_REG);
1915 enum usb_device_speed oldspeed = udc->gadget.speed;
1919 udc->gadget.speed = USB_SPEED_HIGH;
1922 udc->gadget.speed = USB_SPEED_FULL;
1926 udc->gadget.speed = USB_SPEED_UNKNOWN;
1927 dev_err(udc->dev,
1932 if (udc->gadget.speed != oldspeed) {
1933 dev_info(udc->dev, "link up, %s-speed mode\n",
1934 udc->gadget.speed == USB_SPEED_HIGH ? "high" : "full");
1943 * @udc: Reference to the device controller.
1952 static void bcm63xx_update_wedge(struct bcm63xx_udc *udc, bool new_status)
1956 for_each_set_bit(i, &udc->wedgemap, BCM63XX_NUM_EP) {
1957 bcm63xx_set_stall(udc, &udc->bep[i], new_status);
1959 clear_bit(i, &udc->wedgemap);
1973 struct bcm63xx_udc *udc = dev_id;
1977 stat = usbd_readl(udc, USBD_EVENT_IRQ_STATUS_REG) &
1978 usbd_readl(udc, USBD_EVENT_IRQ_MASK_REG);
1980 usbd_writel(udc, stat, USBD_EVENT_IRQ_STATUS_REG);
1982 spin_lock(&udc->lock);
1986 if (!(usbd_readl(udc, USBD_EVENTS_REG) &
1988 udc->gadget.speed != USB_SPEED_UNKNOWN)
1989 dev_info(udc->dev, "link down\n");
1991 udc->gadget.speed = USB_SPEED_UNKNOWN;
1995 bcm63xx_fifo_setup(udc);
1996 bcm63xx_fifo_reset(udc);
1997 bcm63xx_ep_setup(udc);
1999 bcm63xx_update_wedge(udc, false);
2001 udc->ep0_req_reset = 1;
2002 schedule_work(&udc->ep0_wq);
2006 if (bcm63xx_update_link_speed(udc)) {
2007 bcm63xx_fifo_setup(udc);
2008 bcm63xx_ep_setup(udc);
2010 bcm63xx_update_wedge(udc, true);
2013 bcm63xx_update_cfg_iface(udc);
2014 udc->ep0_req_set_cfg = 1;
2015 schedule_work(&udc->ep0_wq);
2018 bcm63xx_update_cfg_iface(udc);
2019 udc->ep0_req_set_iface = 1;
2020 schedule_work(&udc->ep0_wq);
2022 spin_unlock(&udc->lock);
2024 if (disconnected && udc->driver)
2025 udc->driver->disconnect(&udc->gadget);
2026 else if (bus_reset && udc->driver)
2027 usb_gadget_udc_reset(&udc->gadget, udc->driver);
2045 struct bcm63xx_udc *udc = iudma->udc;
2052 spin_lock(&udc->lock);
2054 usb_dmac_writel(udc, ENETDMAC_IR_BUFDONE_MASK,
2057 rc = iudma_read(udc, iudma);
2062 req = udc->ep0_request;
2070 udc->ep0_req_completed = 1;
2072 schedule_work(&udc->ep0_wq);
2078 iudma_write(udc, iudma, breq);
2099 iudma_write(udc, iudma, next);
2102 iudma_write(udc, iudma, breq);
2106 spin_unlock(&udc->lock);
2109 usb_gadget_unmap_request(&udc->gadget, req, iudma->is_tx);
2130 struct bcm63xx_udc *udc = s->private;
2132 if (!udc->driver)
2136 bcm63xx_ep0_state_names[udc->ep0state]);
2138 udc->ep0_req_reset ? "reset " : "",
2139 udc->ep0_req_set_cfg ? "set_cfg " : "",
2140 udc->ep0_req_set_iface ? "set_iface " : "",
2141 udc->ep0_req_shutdown ? "shutdown " : "",
2142 udc->ep0_request ? "pending " : "",
2143 udc->ep0_req_completed ? "completed " : "",
2144 udc->ep0_reply ? "reply " : "");
2146 udc->cfg, udc->iface, udc->alt_iface);
2149 usbd_readl(udc, USBD_CONTROL_REG),
2150 usbd_readl(udc, USBD_STRAPS_REG),
2151 usbd_readl(udc, USBD_STATUS_REG));
2153 usbd_readl(udc, USBD_EVENTS_REG),
2154 usbd_readl(udc, USBD_STALL_REG));
2169 struct bcm63xx_udc *udc = s->private;
2173 if (!udc->driver)
2177 struct iudma_ch *iudma = &udc->iudma[ch_idx];
2196 usb_dmac_readl(udc, ENETDMAC_CHANCFG_REG, ch_idx),
2197 usb_dmac_readl(udc, ENETDMAC_IR_REG, ch_idx),
2198 usb_dmac_readl(udc, ENETDMAC_IRMASK_REG, ch_idx),
2199 usb_dmac_readl(udc, ENETDMAC_MAXBURST_REG, ch_idx));
2201 sram2 = usb_dmas_readl(udc, ENETDMAS_SRAM2_REG, ch_idx);
2202 sram3 = usb_dmas_readl(udc, ENETDMAS_SRAM3_REG, ch_idx);
2204 usb_dmas_readl(udc, ENETDMAS_RSTART_REG, ch_idx),
2207 usb_dmas_readl(udc, ENETDMAS_SRAM4_REG, ch_idx));
2243 * @udc: Reference to the device controller.
2245 static void bcm63xx_udc_init_debugfs(struct bcm63xx_udc *udc)
2252 root = debugfs_create_dir(udc->gadget.name, usb_debug_root);
2253 udc->debugfs_root = root;
2255 debugfs_create_file("usbd", 0400, root, udc, &bcm63xx_usbd_dbg_fops);
2256 debugfs_create_file("iudma", 0400, root, udc, &bcm63xx_iudma_dbg_fops);
2261 * @udc: Reference to the device controller.
2265 static void bcm63xx_udc_cleanup_debugfs(struct bcm63xx_udc *udc)
2267 debugfs_remove_recursive(udc->debugfs_root);
2285 struct bcm63xx_udc *udc;
2288 udc = devm_kzalloc(dev, sizeof(*udc), GFP_KERNEL);
2289 if (!udc)
2292 platform_set_drvdata(pdev, udc);
2293 udc->dev = dev;
2294 udc->pd = pd;
2301 udc->usbd_regs = devm_platform_ioremap_resource(pdev, 0);
2302 if (IS_ERR(udc->usbd_regs))
2303 return PTR_ERR(udc->usbd_regs);
2305 udc->iudma_regs = devm_platform_ioremap_resource(pdev, 1);
2306 if (IS_ERR(udc->iudma_regs))
2307 return PTR_ERR(udc->iudma_regs);
2309 spin_lock_init(&udc->lock);
2310 INIT_WORK(&udc->ep0_wq, bcm63xx_ep0_process);
2312 udc->gadget.ops = &bcm63xx_udc_ops;
2313 udc->gadget.name = dev_name(dev);
2316 udc->gadget.max_speed = USB_SPEED_HIGH;
2318 udc->gadget.max_speed = USB_SPEED_FULL;
2321 rc = bcm63xx_init_udc_hw(udc);
2332 dev_name(dev), udc) < 0)
2341 dev_name(dev), &udc->iudma[i]) < 0)
2345 bcm63xx_udc_init_debugfs(udc);
2346 rc = usb_add_gadget_udc(dev, &udc->gadget);
2350 bcm63xx_udc_cleanup_debugfs(udc);
2352 bcm63xx_uninit_udc_hw(udc);
2366 struct bcm63xx_udc *udc = platform_get_drvdata(pdev);
2368 bcm63xx_udc_cleanup_debugfs(udc);
2369 usb_del_gadget_udc(&udc->gadget);
2370 BUG_ON(udc->driver);
2372 bcm63xx_uninit_udc_hw(udc);