Lines Matching refs:dev
68 static int udc_probe(struct udc *dev);
69 static void udc_basic_init(struct udc *dev);
70 static void udc_setup_endpoints(struct udc *dev);
71 static void udc_soft_reset(struct udc *dev);
74 static int udc_free_dma_chain(struct udc *dev, struct udc_request *req);
77 static int udc_remote_wakeup(struct udc *dev);
178 static void print_regs(struct udc *dev) in print_regs() argument
180 DBG(dev, "------- Device registers -------\n"); in print_regs()
181 DBG(dev, "dev config = %08x\n", readl(&dev->regs->cfg)); in print_regs()
182 DBG(dev, "dev control = %08x\n", readl(&dev->regs->ctl)); in print_regs()
183 DBG(dev, "dev status = %08x\n", readl(&dev->regs->sts)); in print_regs()
184 DBG(dev, "\n"); in print_regs()
185 DBG(dev, "dev int's = %08x\n", readl(&dev->regs->irqsts)); in print_regs()
186 DBG(dev, "dev intmask = %08x\n", readl(&dev->regs->irqmsk)); in print_regs()
187 DBG(dev, "\n"); in print_regs()
188 DBG(dev, "dev ep int's = %08x\n", readl(&dev->regs->ep_irqsts)); in print_regs()
189 DBG(dev, "dev ep intmask = %08x\n", readl(&dev->regs->ep_irqmsk)); in print_regs()
190 DBG(dev, "\n"); in print_regs()
191 DBG(dev, "USE DMA = %d\n", use_dma); in print_regs()
193 DBG(dev, "DMA mode = PPBNDU (packet per buffer " in print_regs()
195 dev_info(&dev->pdev->dev, "DMA mode (%s)\n", "PPBNDU"); in print_regs()
197 DBG(dev, "DMA mode = PPBDU (packet per buffer " in print_regs()
199 dev_info(&dev->pdev->dev, "DMA mode (%s)\n", "PPBDU"); in print_regs()
202 DBG(dev, "DMA mode = BF (buffer fill mode)\n"); in print_regs()
203 dev_info(&dev->pdev->dev, "DMA mode (%s)\n", "BF"); in print_regs()
206 dev_info(&dev->pdev->dev, "FIFO mode\n"); in print_regs()
207 DBG(dev, "-------------------------------------------------------\n"); in print_regs()
211 static int udc_mask_unused_interrupts(struct udc *dev) in udc_mask_unused_interrupts() argument
224 writel(tmp, &dev->regs->irqmsk); in udc_mask_unused_interrupts()
227 writel(UDC_EPINT_MSK_DISABLE_ALL, &dev->regs->ep_irqmsk); in udc_mask_unused_interrupts()
233 static int udc_enable_ep0_interrupts(struct udc *dev) in udc_enable_ep0_interrupts() argument
237 DBG(dev, "udc_enable_ep0_interrupts()\n"); in udc_enable_ep0_interrupts()
240 tmp = readl(&dev->regs->ep_irqmsk); in udc_enable_ep0_interrupts()
244 writel(tmp, &dev->regs->ep_irqmsk); in udc_enable_ep0_interrupts()
250 static int udc_enable_dev_setup_interrupts(struct udc *dev) in udc_enable_dev_setup_interrupts() argument
254 DBG(dev, "enable device interrupts for setup data\n"); in udc_enable_dev_setup_interrupts()
257 tmp = readl(&dev->regs->irqmsk); in udc_enable_dev_setup_interrupts()
265 writel(tmp, &dev->regs->irqmsk); in udc_enable_dev_setup_interrupts()
273 struct udc *dev; in udc_set_txfifo_addr() local
280 dev = ep->dev; in udc_set_txfifo_addr()
281 ep->txfifo = dev->txfifo; in udc_set_txfifo_addr()
285 if (dev->ep[i].regs) { in udc_set_txfifo_addr()
287 tmp = readl(&dev->ep[i].regs->bufin_framenum); in udc_set_txfifo_addr()
301 DBG(ep->dev, "NAK could not be cleared for ep%d\n", num); in UDC_QUEUE_CNAK()
314 struct udc *dev; in udc_ep_enable() local
327 dev = ep->dev; in udc_ep_enable()
329 DBG(dev, "udc_ep_enable() ep %d\n", ep->num); in udc_ep_enable()
331 if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) in udc_ep_enable()
334 spin_lock_irqsave(&dev->lock, iflags); in udc_ep_enable()
340 tmp = readl(&dev->ep[ep->num].regs->ctl); in udc_ep_enable()
342 writel(tmp, &dev->ep[ep->num].regs->ctl); in udc_ep_enable()
346 tmp = readl(&dev->ep[ep->num].regs->bufout_maxpkt); in udc_ep_enable()
349 writel(tmp, &dev->ep[ep->num].regs->bufout_maxpkt); in udc_ep_enable()
358 tmp = readl(&dev->ep[ep->num].regs->bufin_framenum); in udc_ep_enable()
365 writel(tmp, &dev->ep[ep->num].regs->bufin_framenum); in udc_ep_enable()
381 tmp = readl(&dev->csr->ne[ep->num - UDC_CSR_EP_OUT_IX_OFS]); in udc_ep_enable()
384 writel(tmp, &dev->csr->ne[ep->num - UDC_CSR_EP_OUT_IX_OFS]); in udc_ep_enable()
393 dev->data_ep_enabled = 1; in udc_ep_enable()
397 tmp = readl(&dev->csr->ne[udc_csr_epix]); in udc_ep_enable()
407 tmp = AMD_ADDBITS(tmp, ep->dev->cur_config, UDC_CSR_NE_CFG); in udc_ep_enable()
409 tmp = AMD_ADDBITS(tmp, ep->dev->cur_intf, UDC_CSR_NE_INTF); in udc_ep_enable()
411 tmp = AMD_ADDBITS(tmp, ep->dev->cur_alt, UDC_CSR_NE_ALT); in udc_ep_enable()
413 writel(tmp, &dev->csr->ne[udc_csr_epix]); in udc_ep_enable()
416 tmp = readl(&dev->regs->ep_irqmsk); in udc_ep_enable()
418 writel(tmp, &dev->regs->ep_irqmsk); in udc_ep_enable()
432 DBG(dev, "%s enabled\n", usbep->name); in udc_ep_enable()
434 spin_unlock_irqrestore(&dev->lock, iflags); in udc_ep_enable()
443 VDBG(ep->dev, "ep-%d reset\n", ep->num); in ep_init()
493 DBG(ep->dev, "Disable ep-%d\n", ep->num); in udc_ep_disable()
495 spin_lock_irqsave(&ep->dev->lock, iflags); in udc_ep_disable()
498 ep_init(ep->dev->regs, ep); in udc_ep_disable()
499 spin_unlock_irqrestore(&ep->dev->lock, iflags); in udc_ep_disable()
517 VDBG(ep->dev, "udc_alloc_req(): ep%d\n", ep->num); in udc_alloc_request()
527 dma_desc = pci_pool_alloc(ep->dev->data_requests, gfp, in udc_alloc_request()
534 VDBG(ep->dev, "udc_alloc_req: req = %p dma_desc = %p, " in udc_alloc_request()
563 VDBG(ep->dev, "free_req req=%p\n", req); in udc_free_request()
566 VDBG(ep->dev, "req->td_data=%p\n", req->td_data); in udc_free_request()
570 udc_free_dma_chain(ep->dev, req); in udc_free_request()
572 pci_pool_free(ep->dev->data_requests, req->td_data, in udc_free_request()
652 static int udc_rxfifo_read_dwords(struct udc *dev, u32 *buf, int dwords) in udc_rxfifo_read_dwords() argument
656 VDBG(dev, "udc_read_dwords(): %d dwords\n", dwords); in udc_rxfifo_read_dwords()
659 *(buf + i) = readl(dev->rxfifo); in udc_rxfifo_read_dwords()
664 static int udc_rxfifo_read_bytes(struct udc *dev, u8 *buf, int bytes) in udc_rxfifo_read_bytes() argument
669 VDBG(dev, "udc_read_bytes(): %d bytes\n", bytes); in udc_rxfifo_read_bytes()
673 *((u32 *)(buf + (i<<2))) = readl(dev->rxfifo); in udc_rxfifo_read_bytes()
677 tmp = readl(dev->rxfifo); in udc_rxfifo_read_bytes()
704 DBG(ep->dev, in udc_rxfifo_read()
719 VDBG(ep->dev, "ep %s: rxfifo read %d bytes\n", ep->ep.name, bytes); in udc_rxfifo_read()
720 udc_rxfifo_read_bytes(ep->dev, buf, bytes); in udc_rxfifo_read()
731 VDBG(ep->dev, "prep_dma\n"); in prep_dma()
732 VDBG(ep->dev, "prep_dma ep%d req->td_data=%p\n", in prep_dma()
747 DBG(ep->dev, "Out of DMA memory\n"); in prep_dma()
764 VDBG(ep->dev, "IN: use_dma_ppb=%d req->req.len=%d " in prep_dma()
792 VDBG(ep->dev, "OUT set host ready\n"); in prep_dma()
817 __releases(ep->dev->lock) in complete_req()
818 __acquires(ep->dev->lock) in complete_req()
820 struct udc *dev; in complete_req() local
823 VDBG(ep->dev, "complete_req(): ep%d\n", ep->num); in complete_req()
825 dev = ep->dev; in complete_req()
828 usb_gadget_unmap_request(&dev->gadget, &req->req, ep->in); in complete_req()
840 VDBG(ep->dev, "req %p => complete %d bytes at %s with sts %d\n", in complete_req()
843 spin_unlock(&dev->lock); in complete_req()
845 spin_lock(&dev->lock); in complete_req()
850 static int udc_free_dma_chain(struct udc *dev, struct udc_request *req) in udc_free_dma_chain() argument
858 DBG(dev, "free chain req = %p\n", req); in udc_free_dma_chain()
866 pci_pool_free(dev->data_requests, td, in udc_free_dma_chain()
927 VDBG(ep->dev, "udc_create_dma_chain: bytes=%ld buf_len=%ld\n", in udc_create_dma_chain()
943 udc_free_dma_chain(ep->dev, req); in udc_create_dma_chain()
954 td = pci_pool_alloc(ep->dev->data_requests, in udc_create_dma_chain()
1031 static void udc_set_rde(struct udc *dev) in udc_set_rde() argument
1035 VDBG(dev, "udc_set_rde()\n"); in udc_set_rde()
1042 tmp = readl(&dev->regs->ctl); in udc_set_rde()
1044 writel(tmp, &dev->regs->ctl); in udc_set_rde()
1056 struct udc *dev; in udc_queue() local
1070 VDBG(ep->dev, "udc_queue(): ep%d-in=%d\n", ep->num, ep->in); in udc_queue()
1071 dev = ep->dev; in udc_queue()
1073 if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) in udc_queue()
1078 VDBG(dev, "DMA map req %p\n", req); in udc_queue()
1084 VDBG(dev, "%s queue req %p, len %d req->td_data=%p buf %p\n", in udc_queue()
1088 spin_lock_irqsave(&dev->lock, iflags); in udc_queue()
1099 VDBG(dev, "%s: zlp\n", ep->ep.name); in udc_queue()
1104 if (dev->set_cfg_not_acked) { in udc_queue()
1105 tmp = readl(&dev->regs->ctl); in udc_queue()
1107 writel(tmp, &dev->regs->ctl); in udc_queue()
1108 dev->set_cfg_not_acked = 0; in udc_queue()
1111 if (dev->waiting_zlp_ack_ep0in) { in udc_queue()
1113 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_queue()
1115 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_queue()
1116 dev->ep[UDC_EP0IN_IX].naking = 0; in udc_queue()
1117 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0IN_IX], in udc_queue()
1119 dev->waiting_zlp_ack_ep0in = 0; in udc_queue()
1144 tmp = readl(&dev->regs->ctl); in udc_queue()
1146 writel(tmp, &dev->regs->ctl); in udc_queue()
1154 VDBG(dev, "copy to BNA dummy desc.\n"); in udc_queue()
1174 tmp = readl(&dev->regs->ep_irqmsk); in udc_queue()
1176 writel(tmp, &dev->regs->ep_irqmsk); in udc_queue()
1180 tmp = readl(&dev->regs->ep_irqmsk); in udc_queue()
1182 writel(tmp, &dev->regs->ep_irqmsk); in udc_queue()
1197 VDBG(dev, "list_add\n"); in udc_queue()
1207 udc_set_rde(dev); in udc_queue()
1209 dev->data_ep_queued = 1; in udc_queue()
1214 DBG(dev, "udc_queue(): pending bytes in " in udc_queue()
1231 spin_unlock_irqrestore(&dev->lock, iflags); in udc_queue()
1264 spin_lock_irqsave(&ep->dev->lock, iflags); in udc_dequeue()
1299 spin_unlock_irqrestore(&ep->dev->lock, iflags); in udc_dequeue()
1320 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) in udc_set_halt()
1327 ep->dev->stall_ep0in = 1; in udc_set_halt()
1344 DBG(ep->dev, "start polltimer\n"); in udc_set_halt()
1392 struct udc *dev; in udc_wakeup() local
1396 dev = container_of(gadget, struct udc, gadget); in udc_wakeup()
1397 udc_remote_wakeup(dev); in udc_wakeup()
1414 static void make_ep_lists(struct udc *dev) in make_ep_lists() argument
1417 INIT_LIST_HEAD(&dev->gadget.ep_list); in make_ep_lists()
1418 list_add_tail(&dev->ep[UDC_EPIN_STATUS_IX].ep.ep_list, in make_ep_lists()
1419 &dev->gadget.ep_list); in make_ep_lists()
1420 list_add_tail(&dev->ep[UDC_EPIN_IX].ep.ep_list, in make_ep_lists()
1421 &dev->gadget.ep_list); in make_ep_lists()
1422 list_add_tail(&dev->ep[UDC_EPOUT_IX].ep.ep_list, in make_ep_lists()
1423 &dev->gadget.ep_list); in make_ep_lists()
1426 dev->ep[UDC_EPIN_STATUS_IX].fifo_depth = UDC_EPIN_SMALLINT_BUFF_SIZE; in make_ep_lists()
1427 if (dev->gadget.speed == USB_SPEED_FULL) in make_ep_lists()
1428 dev->ep[UDC_EPIN_IX].fifo_depth = UDC_FS_EPIN_BUFF_SIZE; in make_ep_lists()
1429 else if (dev->gadget.speed == USB_SPEED_HIGH) in make_ep_lists()
1430 dev->ep[UDC_EPIN_IX].fifo_depth = hs_tx_buf; in make_ep_lists()
1431 dev->ep[UDC_EPOUT_IX].fifo_depth = UDC_RXFIFO_SIZE; in make_ep_lists()
1435 static int startup_registers(struct udc *dev) in startup_registers() argument
1440 udc_soft_reset(dev); in startup_registers()
1443 udc_mask_unused_interrupts(dev); in startup_registers()
1446 udc_basic_init(dev); in startup_registers()
1448 udc_setup_endpoints(dev); in startup_registers()
1451 tmp = readl(&dev->regs->cfg); in startup_registers()
1456 writel(tmp, &dev->regs->cfg); in startup_registers()
1462 static void udc_basic_init(struct udc *dev) in udc_basic_init() argument
1466 DBG(dev, "udc_basic_init()\n"); in udc_basic_init()
1468 dev->gadget.speed = USB_SPEED_UNKNOWN; in udc_basic_init()
1479 tmp = readl(&dev->regs->ctl); in udc_basic_init()
1482 writel(tmp, &dev->regs->ctl); in udc_basic_init()
1485 tmp = readl(&dev->regs->cfg); in udc_basic_init()
1491 writel(tmp, &dev->regs->cfg); in udc_basic_init()
1493 make_ep_lists(dev); in udc_basic_init()
1495 dev->data_ep_enabled = 0; in udc_basic_init()
1496 dev->data_ep_queued = 0; in udc_basic_init()
1500 static void udc_setup_endpoints(struct udc *dev) in udc_setup_endpoints() argument
1506 DBG(dev, "udc_setup_endpoints()\n"); in udc_setup_endpoints()
1509 tmp = readl(&dev->regs->sts); in udc_setup_endpoints()
1512 dev->gadget.speed = USB_SPEED_HIGH; in udc_setup_endpoints()
1514 dev->gadget.speed = USB_SPEED_FULL; in udc_setup_endpoints()
1518 ep = &dev->ep[tmp]; in udc_setup_endpoints()
1519 ep->dev = dev; in udc_setup_endpoints()
1523 ep->txfifo = dev->txfifo; in udc_setup_endpoints()
1534 ep->regs = &dev->ep_regs[tmp]; in udc_setup_endpoints()
1541 ep_init(dev->regs, ep); in udc_setup_endpoints()
1549 ep->dma = &dev->regs->ctl; in udc_setup_endpoints()
1555 reg = readl(&dev->ep[tmp].regs->ctl); in udc_setup_endpoints()
1557 writel(reg, &dev->ep[tmp].regs->ctl); in udc_setup_endpoints()
1558 dev->ep[tmp].naking = 1; in udc_setup_endpoints()
1564 if (dev->gadget.speed == USB_SPEED_FULL) { in udc_setup_endpoints()
1565 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0IN_IX].ep, in udc_setup_endpoints()
1567 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0OUT_IX].ep, in udc_setup_endpoints()
1569 } else if (dev->gadget.speed == USB_SPEED_HIGH) { in udc_setup_endpoints()
1570 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0IN_IX].ep, in udc_setup_endpoints()
1572 usb_ep_set_maxpacket_limit(&dev->ep[UDC_EP0OUT_IX].ep, in udc_setup_endpoints()
1580 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IX].ep; in udc_setup_endpoints()
1581 dev->ep[UDC_EP0IN_IX].halted = 0; in udc_setup_endpoints()
1582 INIT_LIST_HEAD(&dev->gadget.ep0->ep_list); in udc_setup_endpoints()
1585 dev->cur_config = 0; in udc_setup_endpoints()
1586 dev->cur_intf = 0; in udc_setup_endpoints()
1587 dev->cur_alt = 0; in udc_setup_endpoints()
1591 static void usb_connect(struct udc *dev) in usb_connect() argument
1594 dev_info(&dev->pdev->dev, "USB Connect\n"); in usb_connect()
1596 dev->connected = 1; in usb_connect()
1599 udc_basic_init(dev); in usb_connect()
1602 udc_enable_dev_setup_interrupts(dev); in usb_connect()
1609 static void usb_disconnect(struct udc *dev) in usb_disconnect() argument
1612 dev_info(&dev->pdev->dev, "USB Disconnect\n"); in usb_disconnect()
1614 dev->connected = 0; in usb_disconnect()
1617 udc_mask_unused_interrupts(dev); in usb_disconnect()
1630 struct udc *dev = (struct udc *)(*((struct udc **) par)); in udc_tasklet_disconnect() local
1633 DBG(dev, "Tasklet disconnect\n"); in udc_tasklet_disconnect()
1634 spin_lock_irq(&dev->lock); in udc_tasklet_disconnect()
1636 if (dev->driver) { in udc_tasklet_disconnect()
1637 spin_unlock(&dev->lock); in udc_tasklet_disconnect()
1638 dev->driver->disconnect(&dev->gadget); in udc_tasklet_disconnect()
1639 spin_lock(&dev->lock); in udc_tasklet_disconnect()
1643 empty_req_queue(&dev->ep[tmp]); in udc_tasklet_disconnect()
1648 ep_init(dev->regs, in udc_tasklet_disconnect()
1649 &dev->ep[UDC_EP0IN_IX]); in udc_tasklet_disconnect()
1654 udc_soft_reset(dev); in udc_tasklet_disconnect()
1659 udc_enable_dev_setup_interrupts(dev); in udc_tasklet_disconnect()
1662 tmp = readl(&dev->regs->cfg); in udc_tasklet_disconnect()
1664 writel(tmp, &dev->regs->cfg); in udc_tasklet_disconnect()
1667 spin_unlock_irq(&dev->lock); in udc_tasklet_disconnect()
1671 static void udc_soft_reset(struct udc *dev) in udc_soft_reset() argument
1675 DBG(dev, "Soft reset\n"); in udc_soft_reset()
1681 writel(UDC_EPINT_MSK_DISABLE_ALL, &dev->regs->ep_irqsts); in udc_soft_reset()
1683 writel(UDC_DEV_MSK_DISABLE, &dev->regs->irqsts); in udc_soft_reset()
1686 writel(AMD_BIT(UDC_DEVCFG_SOFTRESET), &dev->regs->cfg); in udc_soft_reset()
1687 readl(&dev->regs->cfg); in udc_soft_reset()
1807 static void activate_control_endpoints(struct udc *dev) in activate_control_endpoints() argument
1811 DBG(dev, "activate_control_endpoints\n"); in activate_control_endpoints()
1814 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in activate_control_endpoints()
1816 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in activate_control_endpoints()
1819 dev->ep[UDC_EP0IN_IX].in = 1; in activate_control_endpoints()
1820 dev->ep[UDC_EP0OUT_IX].in = 0; in activate_control_endpoints()
1823 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->bufin_framenum); in activate_control_endpoints()
1824 if (dev->gadget.speed == USB_SPEED_FULL) in activate_control_endpoints()
1827 else if (dev->gadget.speed == USB_SPEED_HIGH) in activate_control_endpoints()
1830 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->bufin_framenum); in activate_control_endpoints()
1833 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->bufout_maxpkt); in activate_control_endpoints()
1834 if (dev->gadget.speed == USB_SPEED_FULL) in activate_control_endpoints()
1837 else if (dev->gadget.speed == USB_SPEED_HIGH) in activate_control_endpoints()
1840 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->bufout_maxpkt); in activate_control_endpoints()
1843 tmp = readl(&dev->ep[UDC_EP0OUT_IX].regs->bufout_maxpkt); in activate_control_endpoints()
1844 if (dev->gadget.speed == USB_SPEED_FULL) in activate_control_endpoints()
1847 else if (dev->gadget.speed == USB_SPEED_HIGH) in activate_control_endpoints()
1850 writel(tmp, &dev->ep[UDC_EP0OUT_IX].regs->bufout_maxpkt); in activate_control_endpoints()
1853 tmp = readl(&dev->csr->ne[0]); in activate_control_endpoints()
1854 if (dev->gadget.speed == USB_SPEED_FULL) in activate_control_endpoints()
1857 else if (dev->gadget.speed == USB_SPEED_HIGH) in activate_control_endpoints()
1860 writel(tmp, &dev->csr->ne[0]); in activate_control_endpoints()
1863 dev->ep[UDC_EP0OUT_IX].td->status |= in activate_control_endpoints()
1866 writel(dev->ep[UDC_EP0OUT_IX].td_stp_dma, in activate_control_endpoints()
1867 &dev->ep[UDC_EP0OUT_IX].regs->subptr); in activate_control_endpoints()
1868 writel(dev->ep[UDC_EP0OUT_IX].td_phys, in activate_control_endpoints()
1869 &dev->ep[UDC_EP0OUT_IX].regs->desptr); in activate_control_endpoints()
1879 tmp = readl(&dev->regs->ctl); in activate_control_endpoints()
1887 writel(tmp, &dev->regs->ctl); in activate_control_endpoints()
1891 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in activate_control_endpoints()
1893 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in activate_control_endpoints()
1894 dev->ep[UDC_EP0IN_IX].naking = 0; in activate_control_endpoints()
1895 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0IN_IX], UDC_EP0IN_IX); in activate_control_endpoints()
1898 tmp = readl(&dev->ep[UDC_EP0OUT_IX].regs->ctl); in activate_control_endpoints()
1900 writel(tmp, &dev->ep[UDC_EP0OUT_IX].regs->ctl); in activate_control_endpoints()
1901 dev->ep[UDC_EP0OUT_IX].naking = 0; in activate_control_endpoints()
1902 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0OUT_IX], UDC_EP0OUT_IX); in activate_control_endpoints()
1906 static int setup_ep0(struct udc *dev) in setup_ep0() argument
1908 activate_control_endpoints(dev); in setup_ep0()
1910 udc_enable_ep0_interrupts(dev); in setup_ep0()
1912 udc_enable_dev_setup_interrupts(dev); in setup_ep0()
1921 struct udc *dev = to_amd5536_udc(g); in amd5536_udc_start() local
1925 dev->driver = driver; in amd5536_udc_start()
1930 dev->ep[UDC_EP0OUT_IX].ep.driver_data = in amd5536_udc_start()
1931 dev->ep[UDC_EP0IN_IX].ep.driver_data; in amd5536_udc_start()
1934 setup_ep0(dev); in amd5536_udc_start()
1937 tmp = readl(&dev->regs->ctl); in amd5536_udc_start()
1939 writel(tmp, &dev->regs->ctl); in amd5536_udc_start()
1941 usb_connect(dev); in amd5536_udc_start()
1948 shutdown(struct udc *dev, struct usb_gadget_driver *driver) in shutdown() argument
1949 __releases(dev->lock) in shutdown()
1950 __acquires(dev->lock) in shutdown()
1955 udc_basic_init(dev); in shutdown()
1958 empty_req_queue(&dev->ep[tmp]); in shutdown()
1960 udc_setup_endpoints(dev); in shutdown()
1966 struct udc *dev = to_amd5536_udc(g); in amd5536_udc_stop() local
1970 spin_lock_irqsave(&dev->lock, flags); in amd5536_udc_stop()
1971 udc_mask_unused_interrupts(dev); in amd5536_udc_stop()
1972 shutdown(dev, NULL); in amd5536_udc_stop()
1973 spin_unlock_irqrestore(&dev->lock, flags); in amd5536_udc_stop()
1975 dev->driver = NULL; in amd5536_udc_stop()
1978 tmp = readl(&dev->regs->ctl); in amd5536_udc_stop()
1980 writel(tmp, &dev->regs->ctl); in amd5536_udc_stop()
1986 static void udc_process_cnak_queue(struct udc *dev) in udc_process_cnak_queue() argument
1992 DBG(dev, "CNAK pending queue processing\n"); in udc_process_cnak_queue()
1995 DBG(dev, "CNAK pending for ep%d\n", tmp); in udc_process_cnak_queue()
1997 reg = readl(&dev->ep[tmp].regs->ctl); in udc_process_cnak_queue()
1999 writel(reg, &dev->ep[tmp].regs->ctl); in udc_process_cnak_queue()
2000 dev->ep[tmp].naking = 0; in udc_process_cnak_queue()
2001 UDC_QUEUE_CNAK(&dev->ep[tmp], dev->ep[tmp].num); in udc_process_cnak_queue()
2006 DBG(dev, "CNAK pending for ep%d\n", UDC_EP0OUT_IX); in udc_process_cnak_queue()
2008 reg = readl(&dev->ep[UDC_EP0OUT_IX].regs->ctl); in udc_process_cnak_queue()
2010 writel(reg, &dev->ep[UDC_EP0OUT_IX].regs->ctl); in udc_process_cnak_queue()
2011 dev->ep[UDC_EP0OUT_IX].naking = 0; in udc_process_cnak_queue()
2012 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0OUT_IX], in udc_process_cnak_queue()
2013 dev->ep[UDC_EP0OUT_IX].num); in udc_process_cnak_queue()
2018 static void udc_ep0_set_rde(struct udc *dev) in udc_ep0_set_rde() argument
2025 if (!dev->data_ep_enabled || dev->data_ep_queued) { in udc_ep0_set_rde()
2026 udc_set_rde(dev); in udc_ep0_set_rde()
2045 static irqreturn_t udc_data_out_isr(struct udc *dev, int ep_ix) in udc_data_out_isr() argument
2055 VDBG(dev, "ep%d irq\n", ep_ix); in udc_data_out_isr()
2056 ep = &dev->ep[ep_ix]; in udc_data_out_isr()
2062 DBG(dev, "BNA ep%dout occurred - DESPTR = %x\n", in udc_data_out_isr()
2076 dev_err(&dev->pdev->dev, "HE ep%dout occurred\n", ep->num); in udc_data_out_isr()
2093 VDBG(dev, "req = %p\n", req); in udc_data_out_isr()
2126 VDBG(dev, "Recover desc. from BNA dummy\n"); in udc_data_out_isr()
2141 VDBG(dev, "rx bytes=%u\n", count); in udc_data_out_isr()
2144 VDBG(dev, "req->td_data=%p\n", req->td_data); in udc_data_out_isr()
2145 VDBG(dev, "last desc = %p\n", td); in udc_data_out_isr()
2163 VDBG(dev, "last desc rx bytes=%u\n", count); in udc_data_out_isr()
2169 DBG(dev, "%s: rx %db, space=%db\n", in udc_data_out_isr()
2200 udc_set_rde(dev); in udc_data_out_isr()
2229 dev->data_ep_queued = 0; in udc_data_out_isr()
2237 udc_set_rde(dev); in udc_data_out_isr()
2248 if (readl(&dev->regs->sts) & AMD_BIT(UDC_DEVSTS_RXFIFO_EMPTY)) in udc_data_out_isr()
2249 udc_process_cnak_queue(dev); in udc_data_out_isr()
2259 static irqreturn_t udc_data_in_isr(struct udc *dev, int ep_ix) in udc_data_in_isr() argument
2270 ep = &dev->ep[ep_ix]; in udc_data_in_isr()
2276 dev_err(&dev->pdev->dev, in udc_data_in_isr()
2289 dev_err(&dev->pdev->dev, in udc_data_in_isr()
2301 VDBG(dev, "TDC set- completion\n"); in udc_data_in_isr()
2331 tmp = readl(&dev->regs->ep_irqmsk); in udc_data_in_isr()
2333 writel(tmp, &dev->regs->ep_irqmsk); in udc_data_in_isr()
2366 VDBG(dev, "IN DMA : req=%p req->td_data=%p\n", in udc_data_in_isr()
2403 &dev->regs->ep_irqmsk); in udc_data_in_isr()
2406 &dev->regs->ep_irqmsk); in udc_data_in_isr()
2418 static irqreturn_t udc_control_out_isr(struct udc *dev) in udc_control_out_isr() argument
2419 __releases(dev->lock) in udc_control_out_isr()
2420 __acquires(dev->lock) in udc_control_out_isr()
2430 ep = &dev->ep[UDC_EP0OUT_IX]; in udc_control_out_isr()
2433 writel(AMD_BIT(UDC_EPINT_OUT_EP0), &dev->regs->ep_irqsts); in udc_control_out_isr()
2435 tmp = readl(&dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2438 VDBG(dev, "ep0: BNA set\n"); in udc_control_out_isr()
2440 &dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2448 VDBG(dev, "data_typ = %x\n", tmp); in udc_control_out_isr()
2454 ep->dev->stall_ep0in = 0; in udc_control_out_isr()
2455 dev->waiting_zlp_ack_ep0in = 0; in udc_control_out_isr()
2458 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2460 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2461 dev->ep[UDC_EP0IN_IX].naking = 1; in udc_control_out_isr()
2467 &dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2470 dev->ep[UDC_EP0OUT_IX].td_stp->data12; in udc_control_out_isr()
2472 dev->ep[UDC_EP0OUT_IX].td_stp->data34; in udc_control_out_isr()
2474 dev->ep[UDC_EP0OUT_IX].td_stp->status = in udc_control_out_isr()
2478 udc_rxfifo_read_dwords(dev, setup_data.data, 2); in udc_control_out_isr()
2483 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IX].ep; in udc_control_out_isr()
2485 udc_ep0_set_rde(dev); in udc_control_out_isr()
2488 dev->gadget.ep0 = &dev->ep[UDC_EP0OUT_IX].ep; in udc_control_out_isr()
2496 &dev->ep[UDC_EP0OUT_IX].regs->desptr); in udc_control_out_isr()
2501 dev->ep[UDC_EP0OUT_IX].naking = 1; in udc_control_out_isr()
2523 DBG(dev, "MSC Reset\n"); in udc_control_out_isr()
2535 spin_unlock(&dev->lock); in udc_control_out_isr()
2536 setup_supported = dev->driver->setup(&dev->gadget, in udc_control_out_isr()
2538 spin_lock(&dev->lock); in udc_control_out_isr()
2540 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2546 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2547 dev->ep[UDC_EP0IN_IX].naking = 0; in udc_control_out_isr()
2548 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0IN_IX], UDC_EP0IN_IX); in udc_control_out_isr()
2553 writel(tmp, &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_out_isr()
2555 dev->waiting_zlp_ack_ep0in = 1; in udc_control_out_isr()
2560 tmp = readl(&dev->ep[UDC_EP0OUT_IX].regs->ctl); in udc_control_out_isr()
2562 writel(tmp, &dev->ep[UDC_EP0OUT_IX].regs->ctl); in udc_control_out_isr()
2563 dev->ep[UDC_EP0OUT_IX].naking = 0; in udc_control_out_isr()
2564 UDC_QUEUE_CNAK(&dev->ep[UDC_EP0OUT_IX], UDC_EP0OUT_IX); in udc_control_out_isr()
2570 &dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2576 writel(UDC_EPSTS_OUT_CLEAR, &dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2581 if (list_empty(&dev->ep[UDC_EP0OUT_IX].queue)) { in udc_control_out_isr()
2582 VDBG(dev, "ZLP\n"); in udc_control_out_isr()
2585 dev->ep[UDC_EP0OUT_IX].td->status = in udc_control_out_isr()
2587 dev->ep[UDC_EP0OUT_IX].td->status, in udc_control_out_isr()
2591 udc_ep0_set_rde(dev); in udc_control_out_isr()
2596 ret_val |= udc_data_out_isr(dev, UDC_EP0OUT_IX); in udc_control_out_isr()
2598 writel(dev->ep[UDC_EP0OUT_IX].td_phys, in udc_control_out_isr()
2599 &dev->ep[UDC_EP0OUT_IX].regs->desptr); in udc_control_out_isr()
2601 udc_ep0_set_rde(dev); in udc_control_out_isr()
2606 count = readl(&dev->ep[UDC_EP0OUT_IX].regs->sts); in udc_control_out_isr()
2613 ret_val |= udc_data_out_isr(dev, UDC_EP0OUT_IX); in udc_control_out_isr()
2616 readl(&dev->ep[UDC_EP0OUT_IX].regs->confirm); in udc_control_out_isr()
2625 if (readl(&dev->regs->sts) & AMD_BIT(UDC_DEVSTS_RXFIFO_EMPTY)) in udc_control_out_isr()
2626 udc_process_cnak_queue(dev); in udc_control_out_isr()
2634 static irqreturn_t udc_control_in_isr(struct udc *dev) in udc_control_in_isr() argument
2642 ep = &dev->ep[UDC_EP0IN_IX]; in udc_control_in_isr()
2645 writel(AMD_BIT(UDC_EPINT_IN_EP0), &dev->regs->ep_irqsts); in udc_control_in_isr()
2647 tmp = readl(&dev->ep[UDC_EP0IN_IX].regs->sts); in udc_control_in_isr()
2650 VDBG(dev, "isr: TDC clear\n"); in udc_control_in_isr()
2655 &dev->ep[UDC_EP0IN_IX].regs->sts); in udc_control_in_isr()
2664 &dev->ep[UDC_EP0IN_IX].regs->sts); in udc_control_in_isr()
2666 if (dev->stall_ep0in) { in udc_control_in_isr()
2667 DBG(dev, "stall ep0in\n"); in udc_control_in_isr()
2690 readl(&dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_in_isr()
2693 &dev->ep[UDC_EP0IN_IX].regs->ctl); in udc_control_in_isr()
2721 dev->stall_ep0in = 0; in udc_control_in_isr()
2725 &dev->ep[UDC_EP0IN_IX].regs->sts); in udc_control_in_isr()
2734 static irqreturn_t udc_dev_isr(struct udc *dev, u32 dev_irq) in udc_dev_isr() argument
2735 __releases(dev->lock) in udc_dev_isr()
2736 __acquires(dev->lock) in udc_dev_isr()
2750 tmp = readl(&dev->regs->sts); in udc_dev_isr()
2752 DBG(dev, "SET_CONFIG interrupt: config=%d\n", cfg); in udc_dev_isr()
2753 dev->cur_config = cfg; in udc_dev_isr()
2754 dev->set_cfg_not_acked = 1; in udc_dev_isr()
2759 setup_data.request.wValue = cpu_to_le16(dev->cur_config); in udc_dev_isr()
2763 ep = &dev->ep[i]; in udc_dev_isr()
2776 tmp = readl(&dev->csr->ne[udc_csr_epix]); in udc_dev_isr()
2778 tmp = AMD_ADDBITS(tmp, ep->dev->cur_config, in udc_dev_isr()
2781 writel(tmp, &dev->csr->ne[udc_csr_epix]); in udc_dev_isr()
2790 spin_unlock(&dev->lock); in udc_dev_isr()
2791 tmp = dev->driver->setup(&dev->gadget, &setup_data.request); in udc_dev_isr()
2792 spin_lock(&dev->lock); in udc_dev_isr()
2798 dev->set_cfg_not_acked = 1; in udc_dev_isr()
2800 tmp = readl(&dev->regs->sts); in udc_dev_isr()
2801 dev->cur_alt = AMD_GETBITS(tmp, UDC_DEVSTS_ALT); in udc_dev_isr()
2802 dev->cur_intf = AMD_GETBITS(tmp, UDC_DEVSTS_INTF); in udc_dev_isr()
2808 setup_data.request.wValue = cpu_to_le16(dev->cur_alt); in udc_dev_isr()
2809 setup_data.request.wIndex = cpu_to_le16(dev->cur_intf); in udc_dev_isr()
2811 DBG(dev, "SET_INTERFACE interrupt: alt=%d intf=%d\n", in udc_dev_isr()
2812 dev->cur_alt, dev->cur_intf); in udc_dev_isr()
2816 ep = &dev->ep[i]; in udc_dev_isr()
2831 tmp = readl(&dev->csr->ne[udc_csr_epix]); in udc_dev_isr()
2833 tmp = AMD_ADDBITS(tmp, ep->dev->cur_intf, in udc_dev_isr()
2837 tmp = AMD_ADDBITS(tmp, ep->dev->cur_alt, in udc_dev_isr()
2840 writel(tmp, &dev->csr->ne[udc_csr_epix]); in udc_dev_isr()
2850 spin_unlock(&dev->lock); in udc_dev_isr()
2851 tmp = dev->driver->setup(&dev->gadget, &setup_data.request); in udc_dev_isr()
2852 spin_lock(&dev->lock); in udc_dev_isr()
2856 DBG(dev, "USB Reset interrupt\n"); in udc_dev_isr()
2862 dev->waiting_zlp_ack_ep0in = 0; in udc_dev_isr()
2863 dev->set_cfg_not_acked = 0; in udc_dev_isr()
2866 udc_mask_unused_interrupts(dev); in udc_dev_isr()
2869 spin_unlock(&dev->lock); in udc_dev_isr()
2870 if (dev->sys_suspended && dev->driver->resume) { in udc_dev_isr()
2871 dev->driver->resume(&dev->gadget); in udc_dev_isr()
2872 dev->sys_suspended = 0; in udc_dev_isr()
2874 usb_gadget_udc_reset(&dev->gadget, dev->driver); in udc_dev_isr()
2875 spin_lock(&dev->lock); in udc_dev_isr()
2878 empty_req_queue(&dev->ep[UDC_EP0IN_IX]); in udc_dev_isr()
2879 ep_init(dev->regs, &dev->ep[UDC_EP0IN_IX]); in udc_dev_isr()
2882 tmp = readl(&dev->regs->sts); in udc_dev_isr()
2885 udc_soft_reset(dev); in udc_dev_isr()
2894 DBG(dev, "DMA machine reset\n"); in udc_dev_isr()
2895 tmp = readl(&dev->regs->cfg); in udc_dev_isr()
2896 writel(tmp | AMD_BIT(UDC_DEVCFG_DMARST), &dev->regs->cfg); in udc_dev_isr()
2897 writel(tmp, &dev->regs->cfg); in udc_dev_isr()
2900 udc_basic_init(dev); in udc_dev_isr()
2903 udc_enable_dev_setup_interrupts(dev); in udc_dev_isr()
2906 tmp = readl(&dev->regs->irqmsk); in udc_dev_isr()
2908 writel(tmp, &dev->regs->irqmsk); in udc_dev_isr()
2912 DBG(dev, "USB Suspend interrupt\n"); in udc_dev_isr()
2914 if (dev->driver->suspend) { in udc_dev_isr()
2915 spin_unlock(&dev->lock); in udc_dev_isr()
2916 dev->sys_suspended = 1; in udc_dev_isr()
2917 dev->driver->suspend(&dev->gadget); in udc_dev_isr()
2918 spin_lock(&dev->lock); in udc_dev_isr()
2922 DBG(dev, "ENUM interrupt\n"); in udc_dev_isr()
2927 empty_req_queue(&dev->ep[UDC_EP0IN_IX]); in udc_dev_isr()
2928 ep_init(dev->regs, &dev->ep[UDC_EP0IN_IX]); in udc_dev_isr()
2931 udc_setup_endpoints(dev); in udc_dev_isr()
2932 dev_info(&dev->pdev->dev, "Connect: %s\n", in udc_dev_isr()
2933 usb_speed_string(dev->gadget.speed)); in udc_dev_isr()
2936 activate_control_endpoints(dev); in udc_dev_isr()
2939 udc_enable_ep0_interrupts(dev); in udc_dev_isr()
2943 DBG(dev, "USB SVC interrupt\n"); in udc_dev_isr()
2947 tmp = readl(&dev->regs->sts); in udc_dev_isr()
2950 tmp = readl(&dev->regs->irqmsk); in udc_dev_isr()
2952 writel(tmp, &dev->regs->irqmsk); in udc_dev_isr()
2953 DBG(dev, "USB Disconnect (session valid low)\n"); in udc_dev_isr()
2966 struct udc *dev = pdev; in udc_irq() local
2972 spin_lock(&dev->lock); in udc_irq()
2975 reg = readl(&dev->regs->ep_irqsts); in udc_irq()
2978 ret_val |= udc_control_out_isr(dev); in udc_irq()
2980 ret_val |= udc_control_in_isr(dev); in udc_irq()
2992 writel(ep_irq, &dev->regs->ep_irqsts); in udc_irq()
2996 ret_val |= udc_data_out_isr(dev, i); in udc_irq()
2998 ret_val |= udc_data_in_isr(dev, i); in udc_irq()
3005 reg = readl(&dev->regs->irqsts); in udc_irq()
3008 writel(reg, &dev->regs->irqsts); in udc_irq()
3009 ret_val |= udc_dev_isr(dev, reg); in udc_irq()
3013 spin_unlock(&dev->lock); in udc_irq()
3020 struct amd5536udc *dev = dev_get_drvdata(pdev); in gadget_release() local
3021 kfree(dev); in gadget_release()
3025 static void udc_remove(struct udc *dev) in udc_remove() argument
3045 struct udc *dev; in udc_pci_remove() local
3047 dev = pci_get_drvdata(pdev); in udc_pci_remove()
3051 BUG_ON(dev->driver != NULL); in udc_pci_remove()
3054 if (dev->data_requests) in udc_pci_remove()
3055 pci_pool_destroy(dev->data_requests); in udc_pci_remove()
3057 if (dev->stp_requests) { in udc_pci_remove()
3059 pci_pool_free(dev->stp_requests, in udc_pci_remove()
3060 dev->ep[UDC_EP0OUT_IX].td_stp, in udc_pci_remove()
3061 dev->ep[UDC_EP0OUT_IX].td_stp_dma); in udc_pci_remove()
3062 pci_pool_free(dev->stp_requests, in udc_pci_remove()
3063 dev->ep[UDC_EP0OUT_IX].td, in udc_pci_remove()
3064 dev->ep[UDC_EP0OUT_IX].td_phys); in udc_pci_remove()
3066 pci_pool_destroy(dev->stp_requests); in udc_pci_remove()
3070 writel(AMD_BIT(UDC_DEVCFG_SOFTRESET), &dev->regs->cfg); in udc_pci_remove()
3071 if (dev->irq_registered) in udc_pci_remove()
3072 free_irq(pdev->irq, dev); in udc_pci_remove()
3073 if (dev->regs) in udc_pci_remove()
3074 iounmap(dev->regs); in udc_pci_remove()
3075 if (dev->mem_region) in udc_pci_remove()
3078 if (dev->active) in udc_pci_remove()
3081 udc_remove(dev); in udc_pci_remove()
3085 static int init_dma_pools(struct udc *dev) in init_dma_pools() argument
3100 dev->data_requests = dma_pool_create("data_requests", NULL, in init_dma_pools()
3102 if (!dev->data_requests) { in init_dma_pools()
3103 DBG(dev, "can't get request data pool\n"); in init_dma_pools()
3109 dev->ep[UDC_EP0IN_IX].dma = &dev->regs->ctl; in init_dma_pools()
3112 dev->stp_requests = dma_pool_create("setup requests", NULL, in init_dma_pools()
3114 if (!dev->stp_requests) { in init_dma_pools()
3115 DBG(dev, "can't get stp request pool\n"); in init_dma_pools()
3120 td_stp = dma_pool_alloc(dev->stp_requests, GFP_KERNEL, in init_dma_pools()
3121 &dev->ep[UDC_EP0OUT_IX].td_stp_dma); in init_dma_pools()
3126 dev->ep[UDC_EP0OUT_IX].td_stp = td_stp; in init_dma_pools()
3129 td_data = dma_pool_alloc(dev->stp_requests, GFP_KERNEL, in init_dma_pools()
3130 &dev->ep[UDC_EP0OUT_IX].td_phys); in init_dma_pools()
3135 dev->ep[UDC_EP0OUT_IX].td = td_data; in init_dma_pools()
3148 struct udc *dev; in udc_pci_probe() local
3155 dev_dbg(&pdev->dev, "already probed\n"); in udc_pci_probe()
3160 dev = kzalloc(sizeof(struct udc), GFP_KERNEL); in udc_pci_probe()
3161 if (!dev) { in udc_pci_probe()
3168 kfree(dev); in udc_pci_probe()
3169 dev = NULL; in udc_pci_probe()
3173 dev->active = 1; in udc_pci_probe()
3180 dev_dbg(&pdev->dev, "pci device used already\n"); in udc_pci_probe()
3181 kfree(dev); in udc_pci_probe()
3182 dev = NULL; in udc_pci_probe()
3186 dev->mem_region = 1; in udc_pci_probe()
3188 dev->virt_addr = ioremap_nocache(resource, len); in udc_pci_probe()
3189 if (dev->virt_addr == NULL) { in udc_pci_probe()
3190 dev_dbg(&pdev->dev, "start address cannot be mapped\n"); in udc_pci_probe()
3191 kfree(dev); in udc_pci_probe()
3192 dev = NULL; in udc_pci_probe()
3198 dev_err(&pdev->dev, "irq not set\n"); in udc_pci_probe()
3199 kfree(dev); in udc_pci_probe()
3200 dev = NULL; in udc_pci_probe()
3205 spin_lock_init(&dev->lock); in udc_pci_probe()
3207 dev->csr = dev->virt_addr + UDC_CSR_ADDR; in udc_pci_probe()
3209 dev->regs = dev->virt_addr + UDC_DEVCFG_ADDR; in udc_pci_probe()
3211 dev->ep_regs = dev->virt_addr + UDC_EPREGS_ADDR; in udc_pci_probe()
3213 dev->rxfifo = (u32 __iomem *)(dev->virt_addr + UDC_RXFIFO_ADDR); in udc_pci_probe()
3214 dev->txfifo = (u32 __iomem *)(dev->virt_addr + UDC_TXFIFO_ADDR); in udc_pci_probe()
3216 if (request_irq(pdev->irq, udc_irq, IRQF_SHARED, name, dev) != 0) { in udc_pci_probe()
3217 dev_dbg(&pdev->dev, "request_irq(%d) fail\n", pdev->irq); in udc_pci_probe()
3218 kfree(dev); in udc_pci_probe()
3219 dev = NULL; in udc_pci_probe()
3223 dev->irq_registered = 1; in udc_pci_probe()
3225 pci_set_drvdata(pdev, dev); in udc_pci_probe()
3228 dev->chiprev = pdev->revision; in udc_pci_probe()
3235 retval = init_dma_pools(dev); in udc_pci_probe()
3240 dev->phys_addr = resource; in udc_pci_probe()
3241 dev->irq = pdev->irq; in udc_pci_probe()
3242 dev->pdev = pdev; in udc_pci_probe()
3245 if (udc_probe(dev) == 0) in udc_pci_probe()
3249 if (dev) in udc_pci_probe()
3255 static int udc_probe(struct udc *dev) in udc_probe() argument
3266 dev->gadget.ops = &udc_ops; in udc_probe()
3268 dev_set_name(&dev->gadget.dev, "gadget"); in udc_probe()
3269 dev->gadget.name = name; in udc_probe()
3270 dev->gadget.max_speed = USB_SPEED_HIGH; in udc_probe()
3273 startup_registers(dev); in udc_probe()
3275 dev_info(&dev->pdev->dev, "%s\n", mod_desc); in udc_probe()
3277 snprintf(tmp, sizeof tmp, "%d", dev->irq); in udc_probe()
3278 dev_info(&dev->pdev->dev, in udc_probe()
3280 tmp, dev->phys_addr, dev->chiprev, in udc_probe()
3281 (dev->chiprev == UDC_HSA0_REV) ? "A0" : "B1"); in udc_probe()
3283 if (dev->chiprev == UDC_HSA0_REV) { in udc_probe()
3284 dev_err(&dev->pdev->dev, "chip revision is A0; too old\n"); in udc_probe()
3288 dev_info(&dev->pdev->dev, in udc_probe()
3290 udc = dev; in udc_probe()
3292 retval = usb_add_gadget_udc_release(&udc->pdev->dev, &dev->gadget, in udc_probe()
3307 reg = readl(&dev->regs->ctl); in udc_probe()
3309 writel(reg, &dev->regs->ctl); in udc_probe()
3312 print_regs(dev); in udc_probe()
3321 static int udc_remote_wakeup(struct udc *dev) in udc_remote_wakeup() argument
3326 DBG(dev, "UDC initiates remote wakeup\n"); in udc_remote_wakeup()
3328 spin_lock_irqsave(&dev->lock, flags); in udc_remote_wakeup()
3330 tmp = readl(&dev->regs->ctl); in udc_remote_wakeup()
3332 writel(tmp, &dev->regs->ctl); in udc_remote_wakeup()
3334 writel(tmp, &dev->regs->ctl); in udc_remote_wakeup()
3336 spin_unlock_irqrestore(&dev->lock, flags); in udc_remote_wakeup()