Lines Matching defs:udc
125 * @udc: xilinx usb peripheral driver instance pointer
143 struct xusb_udc *udc;
200 static const char driver_name[] = "xilinx-udc";
256 * @udc: pointer to the usb device controller structure.
258 static void xudc_wrstatus(struct xusb_udc *udc)
260 struct xusb_ep *ep0 = &udc->ep[XUSB_EP_NUMBER_ZERO];
263 epcfgreg = udc->read_fn(udc->addr + ep0->offset)|
265 udc->write_fn(udc->addr, ep0->offset, epcfgreg);
266 udc->write_fn(udc->addr, ep0->offset + XUSB_EP_BUF0COUNT_OFFSET, 0);
267 udc->write_fn(udc->addr, XUSB_BUFFREADY_OFFSET, 1);
273 * @udc: pointer to the usb peripheral controller structure.
278 static void xudc_epconfig(struct xusb_ep *ep, struct xusb_udc *udc)
288 udc->write_fn(udc->addr, ep->offset, epcfgreg);
291 udc->write_fn(udc->addr, ep->offset + XUSB_EP_BUF0COUNT_OFFSET,
293 udc->write_fn(udc->addr, ep->offset + XUSB_EP_BUF1COUNT_OFFSET,
296 udc->write_fn(udc->addr, XUSB_BUFFREADY_OFFSET,
299 udc->write_fn(udc->addr, XUSB_BUFFREADY_OFFSET,
318 struct xusb_udc *udc = ep->udc;
328 udc->write_fn(udc->addr, XUSB_DMA_DSAR_ADDR_OFFSET, src);
329 udc->write_fn(udc->addr, XUSB_DMA_DDAR_ADDR_OFFSET, dst);
330 udc->write_fn(udc->addr, XUSB_DMA_LENGTH_OFFSET, length);
338 reg = udc->read_fn(udc->addr + XUSB_DMA_STATUS_OFFSET);
348 dev_err(udc->dev, "DMA timeout\n");
354 if ((udc->read_fn(udc->addr + XUSB_DMA_STATUS_OFFSET) &
356 dev_err(udc->dev, "DMA Error\n");
381 struct xusb_udc *udc = ep->udc;
385 dma_sync_single_for_device(udc->dev, src,
389 eprambase = (u32 __force *)(udc->addr + ep->rambase);
391 udc->write_fn(udc->addr, ep->offset +
393 udc->write_fn(udc->addr, XUSB_DMA_CONTROL_OFFSET,
399 eprambase = (u32 __force *)(udc->addr + ep->rambase +
402 udc->write_fn(udc->addr, ep->offset +
404 udc->write_fn(udc->addr, XUSB_DMA_CONTROL_OFFSET,
435 struct xusb_udc *udc = ep->udc;
440 eprambase = (u32 __force *)(udc->addr + ep->rambase);
442 udc->write_fn(udc->addr, XUSB_DMA_CONTROL_OFFSET,
449 eprambase = (u32 __force *)(udc->addr +
452 udc->write_fn(udc->addr, XUSB_DMA_CONTROL_OFFSET,
484 struct xusb_udc *udc = ep->udc;
487 if (udc->dma_enabled) {
497 eprambase = (u32 __force *)(udc->addr + ep->rambase);
501 udc->write_fn(udc->addr, ep->offset +
510 udc->write_fn(udc->addr, XUSB_BUFFREADY_OFFSET,
516 eprambase = (u32 __force *)(udc->addr + ep->rambase +
521 udc->write_fn(udc->addr, ep->offset +
530 udc->write_fn(udc->addr, XUSB_BUFFREADY_OFFSET,
552 struct xusb_udc *udc = ep->udc;
562 dev_dbg(udc->dev, "%s done %p, status %d\n",
565 if (udc->dma_enabled && ep->epnumber && req->usb_req.length)
566 usb_gadget_unmap_request(&udc->gadget, &req->usb_req,
570 spin_unlock(&udc->lock);
572 spin_lock(&udc->lock);
593 struct xusb_udc *udc = ep->udc;
596 dev_dbg(udc->dev, "Packet NOT ready!\n");
605 count = udc->read_fn(udc->addr + ep->offset + bufoffset);
622 dev_dbg(udc->dev, "%s overflow %d\n",
633 dev_dbg(udc->dev, "read %s, %d bytes%s req %p %d/%d\n",
639 if (udc->dma_enabled && req->usb_req.length)
640 dma_sync_single_for_cpu(udc->dev,
653 dev_dbg(udc->dev, "receive busy\n");
681 struct xusb_udc *udc = ep->udc;
704 dev_dbg(udc->dev, "%s: wrote %s %d bytes%s%s %d left %p\n",
715 dev_dbg(udc->dev, "Send busy\n");
753 struct xusb_udc *udc;
761 udc = ep->udc;
764 dev_dbg(udc->dev, "requests pending can't halt\n");
769 dev_dbg(udc->dev, "HW buffers busy can't halt\n");
773 spin_lock_irqsave(&udc->lock, flags);
777 epcfgreg = udc->read_fn(udc->addr + ep->offset);
779 udc->write_fn(udc->addr, ep->offset, epcfgreg);
782 epcfgreg = udc->read_fn(udc->addr + ep->offset);
784 udc->write_fn(udc->addr, ep->offset, epcfgreg);
787 epcfgreg = udc->read_fn(ep->udc->addr + ep->offset);
789 udc->write_fn(udc->addr, ep->offset, epcfgreg);
793 spin_unlock_irqrestore(&udc->lock, flags);
807 struct xusb_udc *udc = ep->udc;
823 dev_dbg(udc->dev, "only one control endpoint\n");
831 dev_dbg(udc->dev, "bogus maxpacket %d\n", maxpacket);
840 dev_dbg(udc->dev, "bogus maxpacket %d\n", maxpacket);
854 xudc_epconfig(ep, udc);
856 dev_dbg(udc->dev, "Enable Endpoint %d max pkt is %d\n",
860 epcfg = udc->read_fn(udc->addr + ep->offset);
862 udc->write_fn(udc->addr, ep->offset, epcfg);
867 ier = udc->read_fn(udc->addr + XUSB_IER_OFFSET);
869 udc->write_fn(udc->addr, XUSB_IER_OFFSET, ier);
873 udc->write_fn(udc->addr, XUSB_BUFFREADY_OFFSET,
876 udc->write_fn(udc->addr, XUSB_BUFFREADY_OFFSET,
896 struct xusb_udc *udc;
906 udc = ep->udc;
908 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
909 dev_dbg(udc->dev, "bogus device state\n");
913 spin_lock_irqsave(&udc->lock, flags);
915 spin_unlock_irqrestore(&udc->lock, flags);
931 struct xusb_udc *udc;
939 udc = ep->udc;
941 spin_lock_irqsave(&udc->lock, flags);
949 dev_dbg(udc->dev, "USB Ep %d disable\n ", ep->epnumber);
951 epcfg = udc->read_fn(udc->addr + ep->offset);
953 udc->write_fn(udc->addr, ep->offset, epcfg);
955 spin_unlock_irqrestore(&udc->lock, flags);
1002 struct xusb_udc *udc = ep0->udc;
1006 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
1007 dev_dbg(udc->dev, "%s, bogus device state\n", __func__);
1011 dev_dbg(udc->dev, "%s:ep0 busy\n", __func__);
1020 if (udc->setup.bRequestType & USB_DIR_IN) {
1024 udc->addr);
1028 udc->write_fn(udc->addr, XUSB_EP_BUF0COUNT_OFFSET, length);
1029 udc->write_fn(udc->addr, XUSB_BUFFREADY_OFFSET, 1);
1031 if (udc->setup.wLength) {
1033 udc->write_fn(udc->addr, XUSB_EP_BUF0COUNT_OFFSET, 0);
1034 udc->write_fn(udc->addr, XUSB_BUFFREADY_OFFSET, 1);
1036 xudc_wrstatus(udc);
1056 struct xusb_udc *udc = ep0->udc;
1060 spin_lock_irqsave(&udc->lock, flags);
1062 spin_unlock_irqrestore(&udc->lock, flags);
1080 struct xusb_udc *udc = ep->udc;
1085 dev_dbg(udc->dev, "%s: queuing request to disabled %s\n",
1090 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
1091 dev_dbg(udc->dev, "%s, bogus device state\n", __func__);
1095 spin_lock_irqsave(&udc->lock, flags);
1100 if (udc->dma_enabled) {
1101 ret = usb_gadget_map_request(&udc->gadget, &req->usb_req,
1104 dev_dbg(udc->dev, "gadget_map failed ep%d\n",
1106 spin_unlock_irqrestore(&udc->lock, flags);
1113 dev_dbg(udc->dev, "xudc_write_fifo from ep_queue\n");
1117 dev_dbg(udc->dev, "xudc_read_fifo from ep_queue\n");
1126 spin_unlock_irqrestore(&udc->lock, flags);
1141 struct xusb_udc *udc = ep->udc;
1144 spin_lock_irqsave(&udc->lock, flags);
1151 spin_unlock_irqrestore(&udc->lock, flags);
1155 spin_unlock_irqrestore(&udc->lock, flags);
1216 struct xusb_udc *udc;
1222 udc = to_udc(gadget);
1223 frame = udc->read_fn(udc->addr + XUSB_FRAMENUM_OFFSET);
1235 struct xusb_udc *udc = to_udc(gadget);
1240 spin_lock_irqsave(&udc->lock, flags);
1243 if (!udc->remote_wkp)
1246 crtlreg = udc->read_fn(udc->addr + XUSB_CONTROL_OFFSET);
1249 udc->write_fn(udc->addr, XUSB_CONTROL_OFFSET, crtlreg);
1257 udc->write_fn(udc->addr, XUSB_CONTROL_OFFSET, crtlreg);
1260 spin_unlock_irqrestore(&udc->lock, flags);
1275 struct xusb_udc *udc = to_udc(gadget);
1279 spin_lock_irqsave(&udc->lock, flags);
1281 crtlreg = udc->read_fn(udc->addr + XUSB_CONTROL_OFFSET);
1287 udc->write_fn(udc->addr, XUSB_CONTROL_OFFSET, crtlreg);
1289 spin_unlock_irqrestore(&udc->lock, flags);
1296 * @udc: pointer to the usb device controller structure.
1298 static void xudc_eps_init(struct xusb_udc *udc)
1302 INIT_LIST_HEAD(&udc->gadget.ep_list);
1305 struct xusb_ep *ep = &udc->ep[ep_number];
1309 &udc->gadget.ep_list);
1330 ep->udc = udc;
1341 xudc_epconfig(ep, udc);
1350 * @udc: pointer to the usb device controller structure.
1352 static void xudc_stop_activity(struct xusb_udc *udc)
1358 ep = &udc->ep[i];
1373 struct xusb_udc *udc = to_udc(gadget);
1374 struct xusb_ep *ep0 = &udc->ep[XUSB_EP_NUMBER_ZERO];
1379 spin_lock_irqsave(&udc->lock, flags);
1381 if (udc->driver) {
1382 dev_err(udc->dev, "%s is already bound to %s\n",
1383 udc->gadget.name, udc->driver->driver.name);
1389 udc->driver = driver;
1390 udc->gadget.speed = driver->max_speed;
1396 udc->write_fn(udc->addr, XUSB_ADDRESS_OFFSET, 0);
1397 udc->remote_wkp = 0;
1399 spin_unlock_irqrestore(&udc->lock, flags);
1411 struct xusb_udc *udc = to_udc(gadget);
1414 spin_lock_irqsave(&udc->lock, flags);
1416 udc->gadget.speed = USB_SPEED_UNKNOWN;
1417 udc->driver = NULL;
1420 udc->write_fn(udc->addr, XUSB_ADDRESS_OFFSET, 0);
1421 udc->remote_wkp = 0;
1423 xudc_stop_activity(udc);
1425 spin_unlock_irqrestore(&udc->lock, flags);
1440 * @udc: pointer to the udc structure.
1442 static void xudc_clear_stall_all_ep(struct xusb_udc *udc)
1449 ep = &udc->ep[i];
1450 epcfgreg = udc->read_fn(udc->addr + ep->offset);
1452 udc->write_fn(udc->addr, ep->offset, epcfgreg);
1455 epcfgreg = udc->read_fn(udc->addr + ep->offset);
1457 udc->write_fn(udc->addr, ep->offset, epcfgreg);
1464 * @udc: pointer to the udc structure.
1469 static void xudc_startup_handler(struct xusb_udc *udc, u32 intrstatus)
1475 dev_dbg(udc->dev, "Reset\n");
1478 udc->gadget.speed = USB_SPEED_HIGH;
1480 udc->gadget.speed = USB_SPEED_FULL;
1482 xudc_stop_activity(udc);
1483 xudc_clear_stall_all_ep(udc);
1484 udc->write_fn(udc->addr, XUSB_TESTMODE_OFFSET, 0);
1487 udc->write_fn(udc->addr, XUSB_ADDRESS_OFFSET, 0);
1488 udc->remote_wkp = 0;
1491 intrreg = udc->read_fn(udc->addr + XUSB_IER_OFFSET);
1494 udc->write_fn(udc->addr, XUSB_IER_OFFSET, intrreg);
1498 dev_dbg(udc->dev, "Suspend\n");
1501 intrreg = udc->read_fn(udc->addr + XUSB_IER_OFFSET);
1504 udc->write_fn(udc->addr, XUSB_IER_OFFSET, intrreg);
1506 udc->usb_state = USB_STATE_SUSPENDED;
1508 if (udc->driver->suspend) {
1509 spin_unlock(&udc->lock);
1510 udc->driver->suspend(&udc->gadget);
1511 spin_lock(&udc->lock);
1515 bool condition = (udc->usb_state != USB_STATE_SUSPENDED);
1517 dev_WARN_ONCE(udc->dev, condition,
1520 dev_dbg(udc->dev, "Resume\n");
1523 intrreg = udc->read_fn(udc->addr + XUSB_IER_OFFSET);
1526 udc->write_fn(udc->addr, XUSB_IER_OFFSET, intrreg);
1528 udc->usb_state = 0;
1530 if (udc->driver->resume) {
1531 spin_unlock(&udc->lock);
1532 udc->driver->resume(&udc->gadget);
1533 spin_lock(&udc->lock);
1538 dev_dbg(udc->dev, "Disconnect\n");
1541 intrreg = udc->read_fn(udc->addr + XUSB_IER_OFFSET);
1544 udc->write_fn(udc->addr, XUSB_IER_OFFSET, intrreg);
1546 if (udc->driver && udc->driver->disconnect) {
1547 spin_unlock(&udc->lock);
1548 udc->driver->disconnect(&udc->gadget);
1549 spin_lock(&udc->lock);
1556 * @udc: pointer to the udc structure.
1560 static void xudc_ep0_stall(struct xusb_udc *udc)
1563 struct xusb_ep *ep0 = &udc->ep[XUSB_EP_NUMBER_ZERO];
1565 epcfgreg = udc->read_fn(udc->addr + ep0->offset);
1567 udc->write_fn(udc->addr, ep0->offset, epcfgreg);
1572 * @udc: pointer to the udc structure.
1576 static void xudc_setaddress(struct xusb_udc *udc)
1578 struct xusb_ep *ep0 = &udc->ep[0];
1579 struct xusb_req *req = udc->req;
1587 dev_err(udc->dev, "Can't respond to SET ADDRESS request\n");
1588 xudc_ep0_stall(udc);
1593 * @udc: pointer to the udc structure.
1597 static void xudc_getstatus(struct xusb_udc *udc)
1599 struct xusb_ep *ep0 = &udc->ep[0];
1600 struct xusb_req *req = udc->req;
1608 switch (udc->setup.bRequestType & USB_RECIP_MASK) {
1612 if (udc->remote_wkp)
1618 epnum = udc->setup.wIndex & USB_ENDPOINT_NUMBER_MASK;
1621 target_ep = &udc->ep[epnum];
1622 epcfgreg = udc->read_fn(udc->addr + target_ep->offset);
1624 if (udc->setup.wIndex & USB_DIR_IN) {
1644 dev_err(udc->dev, "Can't respond to getstatus request\n");
1645 xudc_ep0_stall(udc);
1650 * @udc: pointer to the usb device controller structure.
1654 static void xudc_set_clear_feature(struct xusb_udc *udc)
1656 struct xusb_ep *ep0 = &udc->ep[0];
1657 struct xusb_req *req = udc->req;
1662 int flag = (udc->setup.bRequest == USB_REQ_SET_FEATURE ? 1 : 0);
1665 switch (udc->setup.bRequestType) {
1667 switch (udc->setup.wValue) {
1676 udc->remote_wkp = 1;
1678 udc->remote_wkp = 0;
1681 xudc_ep0_stall(udc);
1686 if (!udc->setup.wValue) {
1687 endpoint = udc->setup.wIndex & USB_ENDPOINT_NUMBER_MASK;
1689 xudc_ep0_stall(udc);
1692 target_ep = &udc->ep[endpoint];
1693 outinbit = udc->setup.wIndex & USB_ENDPOINT_DIR_MASK;
1698 xudc_ep0_stall(udc);
1701 epcfgreg = udc->read_fn(udc->addr + target_ep->offset);
1705 udc->write_fn(udc->addr,
1710 udc->write_fn(udc->addr,
1717 udc->write_fn(udc->addr,
1725 xudc_ep0_stall(udc);
1734 dev_err(udc->dev, "Can't respond to SET/CLEAR FEATURE\n");
1735 xudc_ep0_stall(udc);
1740 * @udc: pointer to the usb device controller structure.
1744 static void xudc_handle_setup(struct xusb_udc *udc)
1745 __must_hold(&udc->lock)
1747 struct xusb_ep *ep0 = &udc->ep[0];
1752 ep0rambase = (u32 __force *) (udc->addr + XUSB_SETUP_PKT_ADDR_OFFSET);
1755 udc->setup = setup;
1756 udc->setup.wValue = cpu_to_le16(setup.wValue);
1757 udc->setup.wIndex = cpu_to_le16(setup.wIndex);
1758 udc->setup.wLength = cpu_to_le16(setup.wLength);
1763 if (udc->setup.bRequestType & USB_DIR_IN) {
1765 udc->setupseqrx = STATUS_PHASE;
1766 udc->setupseqtx = DATA_PHASE;
1769 udc->setupseqrx = DATA_PHASE;
1770 udc->setupseqtx = STATUS_PHASE;
1773 switch (udc->setup.bRequest) {
1775 /* Data+Status phase form udc */
1776 if ((udc->setup.bRequestType &
1780 xudc_getstatus(udc);
1783 /* Status phase from udc */
1784 if (udc->setup.bRequestType != (USB_DIR_OUT |
1787 xudc_setaddress(udc);
1791 /* Requests with no data phase, status phase from udc */
1792 if ((udc->setup.bRequestType & USB_TYPE_MASK)
1795 xudc_set_clear_feature(udc);
1801 spin_unlock(&udc->lock);
1802 if (udc->driver->setup(&udc->gadget, &setup) < 0)
1803 xudc_ep0_stall(udc);
1804 spin_lock(&udc->lock);
1809 * @udc: pointer to the usb device controller structure.
1811 static void xudc_ep0_out(struct xusb_udc *udc)
1813 struct xusb_ep *ep0 = &udc->ep[0];
1821 switch (udc->setupseqrx) {
1827 udc->setupseqrx = SETUP_PHASE;
1828 udc->setupseqtx = SETUP_PHASE;
1833 bytes_to_rx = udc->read_fn(udc->addr +
1836 ep0rambase = (u8 __force *) (udc->addr +
1844 xudc_wrstatus(udc);
1847 udc->write_fn(udc->addr, XUSB_EP_BUF0COUNT_OFFSET, 0);
1848 udc->write_fn(udc->addr, XUSB_BUFFREADY_OFFSET, 1);
1858 * @udc: pointer to the usb device controller structure.
1860 static void xudc_ep0_in(struct xusb_udc *udc)
1862 struct xusb_ep *ep0 = &udc->ep[0];
1870 u8 test_mode = udc->setup.wIndex >> 8;
1875 switch (udc->setupseqtx) {
1877 switch (udc->setup.bRequest) {
1880 udc->write_fn(udc->addr, XUSB_ADDRESS_OFFSET,
1881 udc->setup.wValue);
1884 if (udc->setup.bRequestType ==
1886 if (udc->setup.wValue ==
1888 udc->write_fn(udc->addr,
1904 epcfgreg = udc->read_fn(udc->addr + ep0->offset);
1906 udc->write_fn(udc->addr, ep0->offset, epcfgreg);
1907 udc->setupseqtx = STATUS_PHASE;
1912 ep0rambase = (u8 __force *) (udc->addr +
1918 udc->write_fn(udc->addr, XUSB_EP_BUF0COUNT_OFFSET, count);
1919 udc->write_fn(udc->addr, XUSB_BUFFREADY_OFFSET, 1);
1928 * @udc: pointer to the udc structure.
1933 static void xudc_ctrl_ep_handler(struct xusb_udc *udc, u32 intrstatus)
1937 xudc_handle_setup(udc);
1940 xudc_ep0_out(udc);
1942 xudc_ep0_in(udc);
1948 * @udc: pointer to the udc structure.
1955 static void xudc_nonctrl_ep_handler(struct xusb_udc *udc, u8 epnum,
1962 ep = &udc->ep[epnum];
1989 struct xusb_udc *udc = _udc;
1996 spin_lock_irqsave(&udc->lock, flags);
2002 ier = udc->read_fn(udc->addr + XUSB_IER_OFFSET);
2004 udc->write_fn(udc->addr, XUSB_IER_OFFSET, ier);
2007 intrstatus = udc->read_fn(udc->addr + XUSB_STATUS_OFFSET);
2018 xudc_startup_handler(udc, intrstatus);
2024 ier = udc->read_fn(udc->addr + XUSB_IER_OFFSET);
2026 udc->write_fn(udc->addr, XUSB_IER_OFFSET, ier);
2029 xudc_ctrl_ep_handler(udc, intrstatus);
2038 xudc_nonctrl_ep_handler(udc, index,
2044 spin_unlock_irqrestore(&udc->lock, flags);
2058 struct xusb_udc *udc;
2064 udc = devm_kzalloc(&pdev->dev, sizeof(*udc), GFP_KERNEL);
2065 if (!udc)
2069 udc->req = devm_kzalloc(&pdev->dev, sizeof(struct xusb_req),
2071 if (!udc->req)
2078 udc->req->usb_req.buf = buff;
2082 udc->addr = devm_ioremap_resource(&pdev->dev, res);
2083 if (IS_ERR(udc->addr))
2084 return PTR_ERR(udc->addr);
2090 dev_name(&pdev->dev), udc);
2096 udc->dma_enabled = of_property_read_bool(np, "xlnx,has-builtin-dma");
2099 udc->gadget.ops = &xusb_udc_ops;
2100 udc->gadget.max_speed = USB_SPEED_HIGH;
2101 udc->gadget.speed = USB_SPEED_UNKNOWN;
2102 udc->gadget.ep0 = &udc->ep[XUSB_EP_NUMBER_ZERO].ep_usb;
2103 udc->gadget.name = driver_name;
2105 spin_lock_init(&udc->lock);
2108 udc->write_fn = xudc_write32_be;
2109 udc->read_fn = xudc_read32_be;
2110 udc->write_fn(udc->addr, XUSB_TESTMODE_OFFSET, USB_TEST_J);
2111 if ((udc->read_fn(udc->addr + XUSB_TESTMODE_OFFSET))
2113 udc->write_fn = xudc_write32;
2114 udc->read_fn = xudc_read32;
2116 udc->write_fn(udc->addr, XUSB_TESTMODE_OFFSET, 0);
2118 xudc_eps_init(udc);
2121 udc->write_fn(udc->addr, XUSB_ADDRESS_OFFSET, 0);
2123 ret = usb_add_gadget_udc(&pdev->dev, &udc->gadget);
2127 udc->dev = &udc->gadget.dev;
2135 udc->write_fn(udc->addr, XUSB_IER_OFFSET, ier);
2137 platform_set_drvdata(pdev, udc);
2140 driver_name, (u32)res->start, udc->addr,
2141 udc->dma_enabled ? "with DMA" : "without DMA");
2157 struct xusb_udc *udc = platform_get_drvdata(pdev);
2159 usb_del_gadget_udc(&udc->gadget);
2182 MODULE_DESCRIPTION("Xilinx udc driver");