Lines Matching refs:ep
70 static struct udc_request *udc_alloc_bna_dummy(struct udc_ep *ep);
330 static int udc_set_txfifo_addr(struct udc_ep *ep) in udc_set_txfifo_addr() argument
336 if (!ep || !(ep->in)) in udc_set_txfifo_addr()
339 dev = ep->dev; in udc_set_txfifo_addr()
340 ep->txfifo = dev->txfifo; in udc_set_txfifo_addr()
343 for (i = 0; i < ep->num; i++) { in udc_set_txfifo_addr()
344 if (dev->ep[i].regs) { in udc_set_txfifo_addr()
346 tmp = readl(&dev->ep[i].regs->bufin_framenum); in udc_set_txfifo_addr()
348 ep->txfifo += tmp; in udc_set_txfifo_addr()
357 static void UDC_QUEUE_CNAK(struct udc_ep *ep, unsigned num) in UDC_QUEUE_CNAK() argument
359 if (readl(&ep->regs->ctl) & AMD_BIT(UDC_EPCTL_NAK)) { in UDC_QUEUE_CNAK()
360 DBG(ep->dev, "NAK could not be cleared for ep%d\n", num); in UDC_QUEUE_CNAK()
362 ep->naking = 1; in UDC_QUEUE_CNAK()
372 struct udc_ep *ep; in udc_ep_enable() local
385 ep = container_of(usbep, struct udc_ep, ep); in udc_ep_enable()
386 dev = ep->dev; in udc_ep_enable()
388 DBG(dev, "udc_ep_enable() ep %d\n", ep->num); in udc_ep_enable()
394 ep->ep.desc = desc; in udc_ep_enable()
396 ep->halted = 0; in udc_ep_enable()
399 tmp = readl(&dev->ep[ep->num].regs->ctl); in udc_ep_enable()
401 writel(tmp, &dev->ep[ep->num].regs->ctl); in udc_ep_enable()
405 tmp = readl(&dev->ep[ep->num].regs->bufout_maxpkt); in udc_ep_enable()
407 ep->ep.maxpacket = maxpacket; in udc_ep_enable()
408 writel(tmp, &dev->ep[ep->num].regs->bufout_maxpkt); in udc_ep_enable()
411 if (ep->in) { in udc_ep_enable()
414 udc_csr_epix = ep->num; in udc_ep_enable()
417 tmp = readl(&dev->ep[ep->num].regs->bufin_framenum); in udc_ep_enable()
424 writel(tmp, &dev->ep[ep->num].regs->bufin_framenum); in udc_ep_enable()
427 udc_set_txfifo_addr(ep); in udc_ep_enable()
430 tmp = readl(&ep->regs->ctl); in udc_ep_enable()
432 writel(tmp, &ep->regs->ctl); in udc_ep_enable()
437 udc_csr_epix = ep->num - UDC_CSR_EP_OUT_IX_OFS; in udc_ep_enable()
440 tmp = readl(&dev->csr->ne[ep->num - UDC_CSR_EP_OUT_IX_OFS]); in udc_ep_enable()
443 writel(tmp, &dev->csr->ne[ep->num - UDC_CSR_EP_OUT_IX_OFS]); in udc_ep_enable()
445 if (use_dma && !ep->in) { in udc_ep_enable()
447 ep->bna_dummy_req = udc_alloc_bna_dummy(ep); in udc_ep_enable()
448 ep->bna_occurred = 0; in udc_ep_enable()
451 if (ep->num != UDC_EP0OUT_IX) in udc_ep_enable()
462 tmp = AMD_ADDBITS(tmp, ep->in, UDC_CSR_NE_DIR); in udc_ep_enable()
466 tmp = AMD_ADDBITS(tmp, ep->dev->cur_config, UDC_CSR_NE_CFG); in udc_ep_enable()
468 tmp = AMD_ADDBITS(tmp, ep->dev->cur_intf, UDC_CSR_NE_INTF); in udc_ep_enable()
470 tmp = AMD_ADDBITS(tmp, ep->dev->cur_alt, UDC_CSR_NE_ALT); in udc_ep_enable()
476 tmp &= AMD_UNMASK_BIT(ep->num); in udc_ep_enable()
483 if (!use_dma || ep->in) { in udc_ep_enable()
484 tmp = readl(&ep->regs->ctl); in udc_ep_enable()
486 writel(tmp, &ep->regs->ctl); in udc_ep_enable()
487 ep->naking = 0; in udc_ep_enable()
488 UDC_QUEUE_CNAK(ep, ep->num); in udc_ep_enable()
498 static void ep_init(struct udc_regs __iomem *regs, struct udc_ep *ep) in ep_init() argument
502 VDBG(ep->dev, "ep-%d reset\n", ep->num); in ep_init()
503 ep->ep.desc = NULL; in ep_init()
504 ep->ep.ops = &udc_ep_ops; in ep_init()
505 INIT_LIST_HEAD(&ep->queue); in ep_init()
507 usb_ep_set_maxpacket_limit(&ep->ep,(u16) ~0); in ep_init()
509 tmp = readl(&ep->regs->ctl); in ep_init()
511 writel(tmp, &ep->regs->ctl); in ep_init()
512 ep->naking = 1; in ep_init()
516 tmp |= AMD_BIT(ep->num); in ep_init()
519 if (ep->in) { in ep_init()
521 tmp = readl(&ep->regs->ctl); in ep_init()
523 writel(tmp, &ep->regs->ctl); in ep_init()
525 tmp = readl(&ep->regs->sts); in ep_init()
527 writel(tmp, &ep->regs->sts); in ep_init()
530 tmp = readl(&ep->regs->ctl); in ep_init()
532 writel(tmp, &ep->regs->ctl); in ep_init()
536 writel(0, &ep->regs->desptr); in ep_init()
542 struct udc_ep *ep = NULL; in udc_ep_disable() local
548 ep = container_of(usbep, struct udc_ep, ep); in udc_ep_disable()
549 if (usbep->name == ep0_string || !ep->ep.desc) in udc_ep_disable()
552 DBG(ep->dev, "Disable ep-%d\n", ep->num); in udc_ep_disable()
554 spin_lock_irqsave(&ep->dev->lock, iflags); in udc_ep_disable()
555 udc_free_request(&ep->ep, &ep->bna_dummy_req->req); in udc_ep_disable()
556 empty_req_queue(ep); in udc_ep_disable()
557 ep_init(ep->dev->regs, ep); in udc_ep_disable()
558 spin_unlock_irqrestore(&ep->dev->lock, iflags); in udc_ep_disable()
569 struct udc_ep *ep; in udc_alloc_request() local
574 ep = container_of(usbep, struct udc_ep, ep); in udc_alloc_request()
576 VDBG(ep->dev, "udc_alloc_req(): ep%d\n", ep->num); in udc_alloc_request()
584 if (ep->dma) { in udc_alloc_request()
586 dma_desc = pci_pool_alloc(ep->dev->data_requests, gfp, in udc_alloc_request()
593 VDBG(ep->dev, "udc_alloc_req: req = %p dma_desc = %p, " in udc_alloc_request()
638 struct udc_ep *ep; in udc_free_request() local
644 ep = container_of(usbep, struct udc_ep, ep); in udc_free_request()
646 VDBG(ep->dev, "free_req req=%p\n", req); in udc_free_request()
649 VDBG(ep->dev, "req->td_data=%p\n", req->td_data); in udc_free_request()
653 udc_free_dma_chain(ep->dev, req); in udc_free_request()
655 pci_pool_free(ep->dev->data_requests, req->td_data, in udc_free_request()
682 static struct udc_request *udc_alloc_bna_dummy(struct udc_ep *ep) in udc_alloc_bna_dummy() argument
688 _req = udc_alloc_request(&ep->ep, GFP_ATOMIC); in udc_alloc_bna_dummy()
691 ep->bna_dummy_req = req; in udc_alloc_bna_dummy()
699 udc_txfifo_write(struct udc_ep *ep, struct usb_request *req) in udc_txfifo_write() argument
707 if (!req || !ep) in udc_txfifo_write()
716 bytes = ep->ep.maxpacket; in udc_txfifo_write()
722 writel(*(buf + i), ep->txfifo); in udc_txfifo_write()
727 ep->txfifo); in udc_txfifo_write()
731 writel(0, &ep->regs->confirm); in udc_txfifo_write()
772 udc_rxfifo_read(struct udc_ep *ep, struct udc_request *req) in udc_rxfifo_read() argument
780 bytes = readl(&ep->regs->sts); in udc_rxfifo_read()
786 if ((buf_space % ep->ep.maxpacket) != 0) { in udc_rxfifo_read()
787 DBG(ep->dev, in udc_rxfifo_read()
789 ep->ep.name, bytes, buf_space); in udc_rxfifo_read()
797 if (((bytes % ep->ep.maxpacket) != 0) || (!bytes) in udc_rxfifo_read()
802 VDBG(ep->dev, "ep %s: rxfifo read %d bytes\n", ep->ep.name, bytes); in udc_rxfifo_read()
803 udc_rxfifo_read_bytes(ep->dev, buf, bytes); in udc_rxfifo_read()
810 struct udc_ep *ep, in udc_create_dma_chain() argument
824 VDBG(ep->dev, "udc_create_dma_chain: bytes=%ld buf_len=%ld\n", in udc_create_dma_chain()
829 if (!ep->in) in udc_create_dma_chain()
833 len = req->req.length / ep->ep.maxpacket; in udc_create_dma_chain()
834 if (req->req.length % ep->ep.maxpacket) in udc_create_dma_chain()
840 udc_free_dma_chain(ep->dev, req); in udc_create_dma_chain()
850 td = pci_pool_alloc(ep->dev->data_requests, in udc_create_dma_chain()
888 if (ep->in) { in udc_create_dma_chain()
892 ep->ep.maxpacket, in udc_create_dma_chain()
906 if (ep->in) { in udc_create_dma_chain()
926 static int prep_dma(struct udc_ep *ep, struct udc_request *req, gfp_t gfp) in prep_dma() argument
931 VDBG(ep->dev, "prep_dma\n"); in prep_dma()
932 VDBG(ep->dev, "prep_dma ep%d req->td_data=%p\n", in prep_dma()
933 ep->num, req->td_data); in prep_dma()
944 retval = udc_create_dma_chain(ep, req, ep->ep.maxpacket, gfp); in prep_dma()
947 DBG(ep->dev, "Out of DMA memory\n"); in prep_dma()
950 if (ep->in) { in prep_dma()
951 if (req->req.length == ep->ep.maxpacket) { in prep_dma()
955 ep->ep.maxpacket, in prep_dma()
963 if (ep->in) { in prep_dma()
964 VDBG(ep->dev, "IN: use_dma_ppb=%d req->req.len=%d " in prep_dma()
967 ep->ep.maxpacket, ep->num); in prep_dma()
972 if (!use_dma_ppb || req->req.length < ep->ep.maxpacket in prep_dma()
973 || ep->num == UDC_EP0OUT_IX in prep_dma()
974 || ep->num == UDC_EP0IN_IX) { in prep_dma()
992 VDBG(ep->dev, "OUT set host ready\n"); in prep_dma()
1001 if (ep->naking) { in prep_dma()
1002 tmp = readl(&ep->regs->ctl); in prep_dma()
1004 writel(tmp, &ep->regs->ctl); in prep_dma()
1005 ep->naking = 0; in prep_dma()
1006 UDC_QUEUE_CNAK(ep, ep->num); in prep_dma()
1016 complete_req(struct udc_ep *ep, struct udc_request *req, int sts) in complete_req() argument
1017 __releases(ep->dev->lock) in complete_req()
1018 __acquires(ep->dev->lock) in complete_req()
1023 VDBG(ep->dev, "complete_req(): ep%d\n", ep->num); in complete_req()
1025 dev = ep->dev; in complete_req()
1027 if (ep->dma) in complete_req()
1028 usb_gadget_unmap_request(&dev->gadget, &req->req, ep->in); in complete_req()
1030 halted = ep->halted; in complete_req()
1031 ep->halted = 1; in complete_req()
1040 VDBG(ep->dev, "req %p => complete %d bytes at %s with sts %d\n", in complete_req()
1041 &req->req, req->req.length, ep->ep.name, sts); in complete_req()
1044 usb_gadget_giveback_request(&ep->ep, &req->req); in complete_req()
1046 ep->halted = halted; in complete_req()
1109 struct udc_ep *ep; in udc_queue() local
1121 ep = container_of(usbep, struct udc_ep, ep); in udc_queue()
1122 if (!ep->ep.desc && (ep->num != 0 && ep->num != UDC_EP0OUT_IX)) in udc_queue()
1125 VDBG(ep->dev, "udc_queue(): ep%d-in=%d\n", ep->num, ep->in); in udc_queue()
1126 dev = ep->dev; in udc_queue()
1132 if (ep->dma) { in udc_queue()
1134 retval = usb_gadget_map_request(&udc->gadget, usbreq, ep->in); in udc_queue()
1149 if (list_empty(&ep->queue)) { in udc_queue()
1153 complete_req(ep, req, 0); in udc_queue()
1154 VDBG(dev, "%s: zlp\n", ep->ep.name); in udc_queue()
1168 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_queue()
1170 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_queue()
1171 dev->ep[UDC_EP0IN_IX].naking = 0; in udc_queue()
1172 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0IN_IX], in udc_queue()
1178 if (ep->dma) { in udc_queue()
1179 retval = prep_dma(ep, req, GFP_ATOMIC); in udc_queue()
1183 if (ep->in) { in udc_queue()
1192 if (!ep->in) { in udc_queue()
1208 if (ep->bna_occurred) { in udc_queue()
1210 memcpy(ep->bna_dummy_req->td_data, in udc_queue()
1216 writel(req->td_phys, &ep->regs->desptr); in udc_queue()
1219 if (ep->naking) { in udc_queue()
1220 tmp = readl(&ep->regs->ctl); in udc_queue()
1222 writel(tmp, &ep->regs->ctl); in udc_queue()
1223 ep->naking = 0; in udc_queue()
1224 UDC_QUEUE_CNAK(ep, ep->num); in udc_queue()
1227 if (ep->in) { in udc_queue()
1230 tmp &= AMD_UNMASK_BIT(ep->num); in udc_queue()
1233 } else if (ep->in) { in udc_queue()
1236 tmp &= AMD_UNMASK_BIT(ep->num); in udc_queue()
1240 } else if (ep->dma) { in udc_queue()
1246 if (ep->in) { in udc_queue()
1247 retval = prep_dma(ep, req, GFP_ATOMIC); in udc_queue()
1256 list_add_tail(&req->queue, &ep->queue); in udc_queue()
1263 if (ep->num != UDC_EP0OUT_IX) in udc_queue()
1267 if (!ep->in) { in udc_queue()
1275 if (udc_rxfifo_read(ep, req)) { in udc_queue()
1277 complete_req(ep, req, 0); in udc_queue()
1291 static void empty_req_queue(struct udc_ep *ep) in empty_req_queue() argument
1295 ep->halted = 1; in empty_req_queue()
1296 while (!list_empty(&ep->queue)) { in empty_req_queue()
1297 req = list_entry(ep->queue.next, in empty_req_queue()
1300 complete_req(ep, req, -ESHUTDOWN); in empty_req_queue()
1307 struct udc_ep *ep; in udc_dequeue() local
1312 ep = container_of(usbep, struct udc_ep, ep); in udc_dequeue()
1313 if (!usbep || !usbreq || (!ep->ep.desc && (ep->num != 0 in udc_dequeue()
1314 && ep->num != UDC_EP0OUT_IX))) in udc_dequeue()
1319 spin_lock_irqsave(&ep->dev->lock, iflags); in udc_dequeue()
1320 halted = ep->halted; in udc_dequeue()
1321 ep->halted = 1; in udc_dequeue()
1323 if (ep->queue.next == &req->queue) { in udc_dequeue()
1324 if (ep->dma && req->dma_going) { in udc_dequeue()
1325 if (ep->in) in udc_dequeue()
1326 ep->cancel_transfer = 1; in udc_dequeue()
1341 ep->cancel_transfer = 1; in udc_dequeue()
1343 udc_init_bna_dummy(ep->req); in udc_dequeue()
1344 writel(ep->bna_dummy_req->td_phys, in udc_dequeue()
1345 &ep->regs->desptr); in udc_dequeue()
1351 complete_req(ep, req, -ECONNRESET); in udc_dequeue()
1352 ep->halted = halted; in udc_dequeue()
1354 spin_unlock_irqrestore(&ep->dev->lock, iflags); in udc_dequeue()
1362 struct udc_ep *ep; in udc_set_halt() local
1372 ep = container_of(usbep, struct udc_ep, ep); in udc_set_halt()
1373 if (!ep->ep.desc && (ep->num != 0 && ep->num != UDC_EP0OUT_IX)) in udc_set_halt()
1375 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) in udc_set_halt()
1381 if (ep->num == 0) in udc_set_halt()
1382 ep->dev->stall_ep0in = 1; in udc_set_halt()
1388 tmp = readl(&ep->regs->ctl); in udc_set_halt()
1390 writel(tmp, &ep->regs->ctl); in udc_set_halt()
1391 ep->halted = 1; in udc_set_halt()
1399 DBG(ep->dev, "start polltimer\n"); in udc_set_halt()
1406 if (ep->halted) { in udc_set_halt()
1407 tmp = readl(&ep->regs->ctl); in udc_set_halt()
1412 writel(tmp, &ep->regs->ctl); in udc_set_halt()
1413 ep->halted = 0; in udc_set_halt()
1414 UDC_QUEUE_CNAK(ep, ep->num); in udc_set_halt()
1493 list_add_tail(&dev->ep[UDC_EPIN_STATUS_IX].ep.ep_list, in make_ep_lists()
1495 list_add_tail(&dev->ep[UDC_EPIN_IX].ep.ep_list, in make_ep_lists()
1497 list_add_tail(&dev->ep[UDC_EPOUT_IX].ep.ep_list, in make_ep_lists()
1501 dev->ep[UDC_EPIN_STATUS_IX].fifo_depth = UDC_EPIN_SMALLINT_BUFF_SIZE; in make_ep_lists()
1503 dev->ep[UDC_EPIN_IX].fifo_depth = UDC_FS_EPIN_BUFF_SIZE; in make_ep_lists()
1505 dev->ep[UDC_EPIN_IX].fifo_depth = hs_tx_buf; in make_ep_lists()
1506 dev->ep[UDC_EPOUT_IX].fifo_depth = UDC_RXFIFO_SIZE; in make_ep_lists()
1577 struct udc_ep *ep; in udc_setup_endpoints() local
1593 ep = &dev->ep[tmp]; in udc_setup_endpoints()
1594 ep->dev = dev; in udc_setup_endpoints()
1595 ep->ep.name = ep_info[tmp].name; in udc_setup_endpoints()
1596 ep->ep.caps = ep_info[tmp].caps; in udc_setup_endpoints()
1597 ep->num = tmp; in udc_setup_endpoints()
1599 ep->txfifo = dev->txfifo; in udc_setup_endpoints()
1603 ep->fifo_depth = UDC_TXFIFO_SIZE; in udc_setup_endpoints()
1604 ep->in = 1; in udc_setup_endpoints()
1606 ep->fifo_depth = UDC_RXFIFO_SIZE; in udc_setup_endpoints()
1607 ep->in = 0; in udc_setup_endpoints()
1610 ep->regs = &dev->ep_regs[tmp]; in udc_setup_endpoints()
1616 if (!ep->ep.desc) in udc_setup_endpoints()
1617 ep_init(dev->regs, ep); in udc_setup_endpoints()
1625 ep->dma = &dev->regs->ctl; in udc_setup_endpoints()
1631 reg = readl(&dev->ep[tmp].regs->ctl); in udc_setup_endpoints()
1633 writel(reg, &dev->ep[tmp].regs->ctl); in udc_setup_endpoints()
1634 dev->ep[tmp].naking = 1; in udc_setup_endpoints()
1641 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0IN_IX].ep, in udc_setup_endpoints()
1643 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0OUT_IX].ep, in udc_setup_endpoints()
1646 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0IN_IX].ep, in udc_setup_endpoints()
1648 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0OUT_IX].ep, in udc_setup_endpoints()
1656 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IX].ep; in udc_setup_endpoints()
1657 dev->ep[UDC_EP0IN_IX].halted = 0; in udc_setup_endpoints()
1719 empty_req_queue(&dev->ep[tmp]); in udc_tasklet_disconnect()
1725 &dev->ep[UDC_EP0IN_IX]); in udc_tasklet_disconnect()
1819 static void udc_handle_halt_state(struct udc_ep *ep) in udc_handle_halt_state() argument
1823 if (ep->halted == 1) { in udc_handle_halt_state()
1824 tmp = readl(&ep->regs->ctl); in udc_handle_halt_state()
1841 writel(tmp, &ep->regs->ctl); in udc_handle_halt_state()
1842 ep->halted = 0; in udc_handle_halt_state()
1843 UDC_QUEUE_CNAK(ep, ep->num); in udc_handle_halt_state()
1851 struct udc_ep *ep; in udc_pollstall_timer_function() local
1859 ep = &udc->ep[UDC_EPIN_IX]; in udc_pollstall_timer_function()
1860 udc_handle_halt_state(ep); in udc_pollstall_timer_function()
1861 if (ep->halted) in udc_pollstall_timer_function()
1864 ep = &udc->ep[UDC_EPOUT_IX]; in udc_pollstall_timer_function()
1865 udc_handle_halt_state(ep); in udc_pollstall_timer_function()
1866 if (ep->halted) in udc_pollstall_timer_function()
1890 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in activate_control_endpoints()
1892 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in activate_control_endpoints()
1895 dev->ep[UDC_EP0IN_IX].in = 1; in activate_control_endpoints()
1896 dev->ep[UDC_EP0OUT_IX].in = 0; in activate_control_endpoints()
1899 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->bufin_framenum); in activate_control_endpoints()
1906 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->bufin_framenum); in activate_control_endpoints()
1909 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->bufout_maxpkt); in activate_control_endpoints()
1916 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->bufout_maxpkt); in activate_control_endpoints()
1919 tmp = readl(&dev->ep[UDC_EP0OUT_IX].regs->bufout_maxpkt); in activate_control_endpoints()
1926 writel(tmp, &dev->ep[UDC_EP0OUT_IX].regs->bufout_maxpkt); in activate_control_endpoints()
1939 dev->ep[UDC_EP0OUT_IX].td->status |= in activate_control_endpoints()
1942 writel(dev->ep[UDC_EP0OUT_IX].td_stp_dma, in activate_control_endpoints()
1943 &dev->ep[UDC_EP0OUT_IX].regs->subptr); in activate_control_endpoints()
1944 writel(dev->ep[UDC_EP0OUT_IX].td_phys, in activate_control_endpoints()
1945 &dev->ep[UDC_EP0OUT_IX].regs->desptr); in activate_control_endpoints()
1967 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in activate_control_endpoints()
1969 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in activate_control_endpoints()
1970 dev->ep[UDC_EP0IN_IX].naking = 0; in activate_control_endpoints()
1971 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0IN_IX], UDC_EP0IN_IX); in activate_control_endpoints()
1974 tmp = readl(&dev->ep[UDC_EP0OUT_IX].regs->ctl); in activate_control_endpoints()
1976 writel(tmp, &dev->ep[UDC_EP0OUT_IX].regs->ctl); in activate_control_endpoints()
1977 dev->ep[UDC_EP0OUT_IX].naking = 0; in activate_control_endpoints()
1978 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0OUT_IX], UDC_EP0OUT_IX); in activate_control_endpoints()
2006 dev->ep[UDC_EP0OUT_IX].ep.driver_data = in amd5536_udc_start()
2007 dev->ep[UDC_EP0IN_IX].ep.driver_data; in amd5536_udc_start()
2034 empty_req_queue(&dev->ep[tmp]); in shutdown()
2073 reg = readl(&dev->ep[tmp].regs->ctl); in udc_process_cnak_queue()
2075 writel(reg, &dev->ep[tmp].regs->ctl); in udc_process_cnak_queue()
2076 dev->ep[tmp].naking = 0; in udc_process_cnak_queue()
2077 UDC_QUEUE_CNAK(&dev->ep[tmp], dev->ep[tmp].num); in udc_process_cnak_queue()
2084 reg = readl(&dev->ep[UDC_EP0OUT_IX].regs->ctl); in udc_process_cnak_queue()
2086 writel(reg, &dev->ep[UDC_EP0OUT_IX].regs->ctl); in udc_process_cnak_queue()
2087 dev->ep[UDC_EP0OUT_IX].naking = 0; in udc_process_cnak_queue()
2088 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0OUT_IX], in udc_process_cnak_queue()
2089 dev->ep[UDC_EP0OUT_IX].num); in udc_process_cnak_queue()
2125 struct udc_ep *ep; in udc_data_out_isr() local
2132 ep = &dev->ep[ep_ix]; in udc_data_out_isr()
2134 tmp = readl(&ep->regs->sts); in udc_data_out_isr()
2139 ep->num, readl(&ep->regs->desptr)); in udc_data_out_isr()
2141 writel(tmp | AMD_BIT(UDC_EPSTS_BNA), &ep->regs->sts); in udc_data_out_isr()
2142 if (!ep->cancel_transfer) in udc_data_out_isr()
2143 ep->bna_occurred = 1; in udc_data_out_isr()
2145 ep->cancel_transfer = 0; in udc_data_out_isr()
2152 dev_err(&dev->pdev->dev, "HE ep%dout occurred\n", ep->num); in udc_data_out_isr()
2155 writel(tmp | AMD_BIT(UDC_EPSTS_HE), &ep->regs->sts); in udc_data_out_isr()
2160 if (!list_empty(&ep->queue)) { in udc_data_out_isr()
2163 req = list_entry(ep->queue.next, in udc_data_out_isr()
2174 if (req && udc_rxfifo_read(ep, req)) { in udc_data_out_isr()
2178 complete_req(ep, req, 0); in udc_data_out_isr()
2180 if (!list_empty(&ep->queue) && !ep->halted) { in udc_data_out_isr()
2181 req = list_entry(ep->queue.next, in udc_data_out_isr()
2188 } else if (!ep->cancel_transfer && req) { in udc_data_out_isr()
2201 if (ep->bna_occurred) { in udc_data_out_isr()
2203 memcpy(req->td_data, ep->bna_dummy_req->td_data, in udc_data_out_isr()
2205 ep->bna_occurred = 0; in udc_data_out_isr()
2206 udc_init_bna_dummy(ep->req); in udc_data_out_isr()
2244 if ((tmp % ep->ep.maxpacket) != 0) { in udc_data_out_isr()
2246 ep->ep.name, count, tmp); in udc_data_out_isr()
2254 complete_req(ep, req, 0); in udc_data_out_isr()
2257 if (!list_empty(&ep->queue) && !ep->halted) { in udc_data_out_isr()
2258 req = list_entry(ep->queue.next, in udc_data_out_isr()
2269 if (prep_dma(ep, req, GFP_ATOMIC) != 0) in udc_data_out_isr()
2273 &ep->regs->desptr); in udc_data_out_isr()
2283 if (ep->bna_dummy_req) { in udc_data_out_isr()
2285 writel(ep->bna_dummy_req->td_phys, in udc_data_out_isr()
2286 &ep->regs->desptr); in udc_data_out_isr()
2287 ep->bna_occurred = 0; in udc_data_out_isr()
2304 if (ep->num != UDC_EP0OUT_IX) in udc_data_out_isr()
2316 } else if (ep->cancel_transfer) { in udc_data_out_isr()
2318 ep->cancel_transfer = 0; in udc_data_out_isr()
2329 writel(UDC_EPSTS_OUT_CLEAR, &ep->regs->sts); in udc_data_out_isr()
2340 struct udc_ep *ep; in udc_data_in_isr() local
2346 ep = &dev->ep[ep_ix]; in udc_data_in_isr()
2348 epsts = readl(&ep->regs->sts); in udc_data_in_isr()
2354 ep->num, in udc_data_in_isr()
2355 (unsigned long) readl(&ep->regs->desptr)); in udc_data_in_isr()
2358 writel(epsts, &ep->regs->sts); in udc_data_in_isr()
2367 ep->num, (unsigned long) readl(&ep->regs->desptr)); in udc_data_in_isr()
2370 writel(epsts | AMD_BIT(UDC_EPSTS_HE), &ep->regs->sts); in udc_data_in_isr()
2379 if (!ep->cancel_transfer && !list_empty(&ep->queue)) { in udc_data_in_isr()
2380 req = list_entry(ep->queue.next, in udc_data_in_isr()
2402 complete_req(ep, req, 0); in udc_data_in_isr()
2405 if (list_empty(&ep->queue)) { in udc_data_in_isr()
2408 tmp |= AMD_BIT(ep->num); in udc_data_in_isr()
2413 ep->cancel_transfer = 0; in udc_data_in_isr()
2423 if (!list_empty(&ep->queue)) { in udc_data_in_isr()
2425 req = list_entry(ep->queue.next, in udc_data_in_isr()
2430 udc_txfifo_write(ep, &req->req); in udc_data_in_isr()
2432 if (len > ep->ep.maxpacket) in udc_data_in_isr()
2433 len = ep->ep.maxpacket; in udc_data_in_isr()
2436 || (len != ep->ep.maxpacket)) { in udc_data_in_isr()
2438 complete_req(ep, req, 0); in udc_data_in_isr()
2453 ep->ep.maxpacket) { in udc_data_in_isr()
2460 writel(req->td_phys, &ep->regs->desptr); in udc_data_in_isr()
2470 tmp = readl(&ep->regs->ctl); in udc_data_in_isr()
2472 writel(tmp, &ep->regs->ctl); in udc_data_in_isr()
2476 } else if (!use_dma && ep->in) { in udc_data_in_isr()
2480 tmp |= AMD_BIT(ep->num); in udc_data_in_isr()
2486 writel(epsts, &ep->regs->sts); in udc_data_in_isr()
2503 struct udc_ep *ep; in udc_control_out_isr() local
2506 ep = &dev->ep[UDC_EP0OUT_IX]; in udc_control_out_isr()
2511 tmp = readl(&dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2516 &dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2517 ep->bna_occurred = 1; in udc_control_out_isr()
2530 ep->dev->stall_ep0in = 0; in udc_control_out_isr()
2534 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2536 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2537 dev->ep[UDC_EP0IN_IX].naking = 1; in udc_control_out_isr()
2543 &dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2546 dev->ep[UDC_EP0OUT_IX].td_stp->data12; in udc_control_out_isr()
2548 dev->ep[UDC_EP0OUT_IX].td_stp->data34; in udc_control_out_isr()
2550 dev->ep[UDC_EP0OUT_IX].td_stp->status = in udc_control_out_isr()
2559 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IX].ep; in udc_control_out_isr()
2564 dev->gadget.ep0 = &dev->ep[UDC_EP0OUT_IX].ep; in udc_control_out_isr()
2569 if (ep->bna_dummy_req) { in udc_control_out_isr()
2571 writel(ep->bna_dummy_req->td_phys, in udc_control_out_isr()
2572 &dev->ep[UDC_EP0OUT_IX].regs->desptr); in udc_control_out_isr()
2573 ep->bna_occurred = 0; in udc_control_out_isr()
2577 dev->ep[UDC_EP0OUT_IX].naking = 1; in udc_control_out_isr()
2604 ep_tmp = &udc->ep[UDC_EPIN_IX]; in udc_control_out_isr()
2605 udc_set_halt(&ep_tmp->ep, 0); in udc_control_out_isr()
2606 ep_tmp = &udc->ep[UDC_EPOUT_IX]; in udc_control_out_isr()
2607 udc_set_halt(&ep_tmp->ep, 0); in udc_control_out_isr()
2616 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2622 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2623 dev->ep[UDC_EP0IN_IX].naking = 0; in udc_control_out_isr()
2624 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0IN_IX], UDC_EP0IN_IX); in udc_control_out_isr()
2629 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2636 tmp = readl(&dev->ep[UDC_EP0OUT_IX].regs->ctl); in udc_control_out_isr()
2638 writel(tmp, &dev->ep[UDC_EP0OUT_IX].regs->ctl); in udc_control_out_isr()
2639 dev->ep[UDC_EP0OUT_IX].naking = 0; in udc_control_out_isr()
2640 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0OUT_IX], UDC_EP0OUT_IX); in udc_control_out_isr()
2646 &dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2652 writel(UDC_EPSTS_OUT_CLEAR, &dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2657 if (list_empty(&dev->ep[UDC_EP0OUT_IX].queue)) { in udc_control_out_isr()
2661 dev->ep[UDC_EP0OUT_IX].td->status = in udc_control_out_isr()
2663 dev->ep[UDC_EP0OUT_IX].td->status, in udc_control_out_isr()
2674 writel(dev->ep[UDC_EP0OUT_IX].td_phys, in udc_control_out_isr()
2675 &dev->ep[UDC_EP0OUT_IX].regs->desptr); in udc_control_out_isr()
2682 count = readl(&dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2692 readl(&dev->ep[UDC_EP0OUT_IX].regs->confirm); in udc_control_out_isr()
2714 struct udc_ep *ep; in udc_control_in_isr() local
2718 ep = &dev->ep[UDC_EP0IN_IX]; in udc_control_in_isr()
2723 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->sts); in udc_control_in_isr()
2731 &dev->ep[UDC_EP0IN_IX].regs->sts); in udc_control_in_isr()
2737 if (ep->dma) { in udc_control_in_isr()
2740 &dev->ep[UDC_EP0IN_IX].regs->sts); in udc_control_in_isr()
2745 tmp = readl(&ep->regs->ctl); in udc_control_in_isr()
2747 writel(tmp, &ep->regs->ctl); in udc_control_in_isr()
2749 if (!list_empty(&ep->queue)) { in udc_control_in_isr()
2751 req = list_entry(ep->queue.next, in udc_control_in_isr()
2754 if (ep->dma) { in udc_control_in_isr()
2756 writel(req->td_phys, &ep->regs->desptr); in udc_control_in_isr()
2766 readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_in_isr()
2769 &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_in_isr()
2775 complete_req(ep, req, 0); in udc_control_in_isr()
2779 udc_txfifo_write(ep, &req->req); in udc_control_in_isr()
2783 if (len > ep->ep.maxpacket) in udc_control_in_isr()
2784 len = ep->ep.maxpacket; in udc_control_in_isr()
2788 || (len != ep->ep.maxpacket)) { in udc_control_in_isr()
2790 complete_req(ep, req, 0); in udc_control_in_isr()
2796 ep->halted = 0; in udc_control_in_isr()
2798 if (!ep->dma) { in udc_control_in_isr()
2801 &dev->ep[UDC_EP0IN_IX].regs->sts); in udc_control_in_isr()
2817 struct udc_ep *ep; in udc_dev_isr() local
2839 ep = &dev->ep[i]; in udc_dev_isr()
2840 if (ep->in) { in udc_dev_isr()
2843 udc_csr_epix = ep->num; in udc_dev_isr()
2849 udc_csr_epix = ep->num - UDC_CSR_EP_OUT_IX_OFS; in udc_dev_isr()
2854 tmp = AMD_ADDBITS(tmp, ep->dev->cur_config, in udc_dev_isr()
2860 ep->halted = 0; in udc_dev_isr()
2861 tmp = readl(&ep->regs->ctl); in udc_dev_isr()
2863 writel(tmp, &ep->regs->ctl); in udc_dev_isr()
2892 ep = &dev->ep[i]; in udc_dev_isr()
2893 if (ep->in) { in udc_dev_isr()
2896 udc_csr_epix = ep->num; in udc_dev_isr()
2902 udc_csr_epix = ep->num - UDC_CSR_EP_OUT_IX_OFS; in udc_dev_isr()
2909 tmp = AMD_ADDBITS(tmp, ep->dev->cur_intf, in udc_dev_isr()
2913 tmp = AMD_ADDBITS(tmp, ep->dev->cur_alt, in udc_dev_isr()
2919 ep->halted = 0; in udc_dev_isr()
2920 tmp = readl(&ep->regs->ctl); in udc_dev_isr()
2922 writel(tmp, &ep->regs->ctl); in udc_dev_isr()
2954 empty_req_queue(&dev->ep[UDC_EP0IN_IX]); in udc_dev_isr()
2955 ep_init(dev->regs, &dev->ep[UDC_EP0IN_IX]); in udc_dev_isr()
3003 empty_req_queue(&dev->ep[UDC_EP0IN_IX]); in udc_dev_isr()
3004 ep_init(dev->regs, &dev->ep[UDC_EP0IN_IX]); in udc_dev_isr()
3121 dma_pool_free(dev->stp_requests, dev->ep[UDC_EP0OUT_IX].td, in free_dma_pools()
3122 dev->ep[UDC_EP0OUT_IX].td_phys); in free_dma_pools()
3123 dma_pool_free(dev->stp_requests, dev->ep[UDC_EP0OUT_IX].td_stp, in free_dma_pools()
3124 dev->ep[UDC_EP0OUT_IX].td_stp_dma); in free_dma_pools()
3179 dev->ep[UDC_EP0IN_IX].dma = &dev->regs->ctl; in init_dma_pools()
3191 &dev->ep[UDC_EP0OUT_IX].td_stp_dma); in init_dma_pools()
3196 dev->ep[UDC_EP0OUT_IX].td_stp = td_stp; in init_dma_pools()
3200 &dev->ep[UDC_EP0OUT_IX].td_phys); in init_dma_pools()
3205 dev->ep[UDC_EP0OUT_IX].td = td_data; in init_dma_pools()
3209 dma_pool_free(dev->stp_requests, dev->ep[UDC_EP0OUT_IX].td_stp, in init_dma_pools()
3210 dev->ep[UDC_EP0OUT_IX].td_stp_dma); in init_dma_pools()