Lines Matching refs:dev

163 static void stop_activity(struct net2280 *dev,
165 static void ep0_start(struct net2280 *dev);
170 u32 tmp = readl(&ep->dev->regs->pciirqenb0); in enable_pciirqenb()
172 if (ep->dev->quirks & PLX_LEGACY) in enable_pciirqenb()
176 writel(tmp, &ep->dev->regs->pciirqenb0); in enable_pciirqenb()
184 struct net2280 *dev; in net2280_enable() local
199 dev = ep->dev; in net2280_enable()
200 if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) { in net2280_enable()
211 if (dev->quirks & PLX_PCIE) { in net2280_enable()
217 if (dev->enhanced_mode && ep->is_in && ep_key[ep->num]) { in net2280_enable()
225 if (ep->num > 4 && max > 64 && (dev->quirks & PLX_LEGACY)) { in net2280_enable()
230 spin_lock_irqsave(&dev->lock, flags); in net2280_enable()
245 if ((dev->quirks & PLX_PCIE) && dev->enhanced_mode) { in net2280_enable()
250 spin_unlock_irqrestore(&dev->lock, flags); in net2280_enable()
261 if (dev->chiprev == 0100 && in net2280_enable()
262 dev->gadget.speed == USB_SPEED_HIGH && in net2280_enable()
268 if ((dev->gadget.speed == USB_SPEED_SUPER && max != 1024) || in net2280_enable()
269 (dev->gadget.speed == USB_SPEED_HIGH && max != 512) || in net2280_enable()
270 (dev->gadget.speed == USB_SPEED_FULL && max > 64)) { in net2280_enable()
271 spin_unlock_irqrestore(&dev->lock, flags); in net2280_enable()
278 if (dev->quirks & PLX_LEGACY) { in net2280_enable()
287 if (dev->enhanced_mode && ep->is_in) { in net2280_enable()
297 if (!dev->enhanced_mode) in net2280_enable()
308 else if (!(dev->quirks & PLX_2280)) { in net2280_enable()
316 if (dev->quirks & PLX_PCIE) in net2280_enable()
326 if (dev->quirks & PLX_2280) in net2280_enable()
331 tmp |= readl(&dev->regs->pciirqenb1); in net2280_enable()
332 writel(tmp, &dev->regs->pciirqenb1); in net2280_enable()
347 ep_dbg(dev, "enabled %s (ep%d%s-%s) %s max %04x\n", in net2280_enable()
353 spin_unlock_irqrestore(&dev->lock, flags); in net2280_enable()
357 dev_err(&ep->dev->pdev->dev, "%s: error=%d\n", __func__, ret); in net2280_enable()
410 if (!ep->is_in || (ep->dev->quirks & PLX_2280)) { in ep_reset_228x()
430 if (ep->dev->quirks & PLX_2280) in ep_reset_228x()
477 ep_warn(ep->dev, "The dmastat return = %x!!\n", in ep_reset_338x()
522 spin_lock_irqsave(&ep->dev->lock, flags); in net2280_disable()
525 if (ep->dev->quirks & PLX_PCIE) in net2280_disable()
526 ep_reset_338x(ep->dev->regs, ep); in net2280_disable()
528 ep_reset_228x(ep->dev->regs, ep); in net2280_disable()
530 ep_vdbg(ep->dev, "disabled %s %s\n", in net2280_disable()
537 ep->dma = &ep->dev->dma[ep->num - 1]; in net2280_disable()
539 spin_unlock_irqrestore(&ep->dev->lock, flags); in net2280_disable()
567 td = dma_pool_alloc(ep->dev->requests, gfp_flags, in net2280_alloc_request()
587 dev_err(&ep->dev->pdev->dev, "%s: Invalid ep=%p or req=%p\n", in net2280_free_request()
595 dma_pool_free(ep->dev->requests, req->td, req->td_dma); in net2280_free_request()
631 ep_vdbg(ep->dev, "write %s fifo (IN) %d bytes%s req %p\n", in write_fifo()
677 ep_dbg(ep->dev, "%s %s %08x !NAK\n", in out_flush()
691 ep->dev->gadget.speed == USB_SPEED_FULL) { in out_flush()
718 if (ep->dev->chiprev == 0x0100 && in read_fifo()
719 ep->dev->gadget.speed == USB_SPEED_FULL) { in read_fifo()
749 ep_err(ep->dev, in read_fifo()
764 ep_vdbg(ep->dev, "read %s fifo (OUT) %d bytes%s%s%s req %p %d/%d\n", in read_fifo()
809 !(ep->dev->quirks & PLX_2280)) in fill_dma_desc()
852 if (!(ep->dev->quirks & PLX_2280)) in start_queue()
859 if (ep->dev->quirks & PLX_PCIE) in start_queue()
864 (void) readl(&ep->dev->pci->pcimstctl); in start_queue()
947 struct net2280 *dev; in done() local
957 dev = ep->dev; in done()
959 usb_gadget_unmap_request(&dev->gadget, &req->req, ep->is_in); in done()
962 ep_vdbg(dev, "complete %s req %p stat %d len %u/%u\n", in done()
968 spin_unlock(&dev->lock); in done()
970 spin_lock(&dev->lock); in done()
981 struct net2280 *dev; in net2280_queue() local
1003 dev = ep->dev; in net2280_queue()
1004 if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) { in net2280_queue()
1017 ret = usb_gadget_map_request(&dev->gadget, _req, in net2280_queue()
1023 ep_vdbg(dev, "%s queue req %p, len %d buf %p\n", in net2280_queue()
1026 spin_lock_irqsave(&dev->lock, flags); in net2280_queue()
1033 !((dev->quirks & PLX_PCIE) && ep->dma && in net2280_queue()
1044 ep_vdbg(dev, "%s status ack\n", ep->ep.name); in net2280_queue()
1106 spin_unlock_irqrestore(&dev->lock, flags); in net2280_queue()
1112 dev_err(&ep->dev->pdev->dev, "%s: error=%d\n", __func__, ret); in net2280_queue()
1160 !(ep->dev->quirks & PLX_PCIE)) { in scan_dma_completions()
1168 ep_warn(ep->dev, "%s lost packet sync!\n", in scan_dma_completions()
1176 ep_dbg(ep->dev, in scan_dma_completions()
1248 spin_lock_irqsave(&ep->dev->lock, flags); in net2280_dequeue()
1270 spin_unlock_irqrestore(&ep->dev->lock, flags); in net2280_dequeue()
1271 ep_dbg(ep->dev, "%s: Request mismatch\n", __func__); in net2280_dequeue()
1278 ep_dbg(ep->dev, "unlink (%s) dma\n", _ep->name); in net2280_dequeue()
1289 ep_dbg(ep->dev, "unlink (%s) pio\n", _ep->name); in net2280_dequeue()
1313 spin_unlock_irqrestore(&ep->dev->lock, flags); in net2280_dequeue()
1333 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) { in net2280_set_halt_and_wedge()
1343 spin_lock_irqsave(&ep->dev->lock, flags); in net2280_set_halt_and_wedge()
1351 ep_vdbg(ep->dev, "%s %s %s\n", _ep->name, in net2280_set_halt_and_wedge()
1357 ep->dev->protocol_stall = 1; in net2280_set_halt_and_wedge()
1364 if (ep->dev->quirks & PLX_PCIE && in net2280_set_halt_and_wedge()
1371 spin_unlock_irqrestore(&ep->dev->lock, flags); in net2280_set_halt_and_wedge()
1376 spin_unlock_irqrestore(&ep->dev->lock, flags); in net2280_set_halt_and_wedge()
1378 dev_err(&ep->dev->pdev->dev, "%s: error=%d\n", __func__, retval); in net2280_set_halt_and_wedge()
1406 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) { in net2280_fifo_status()
1407 dev_err(&ep->dev->pdev->dev, in net2280_fifo_status()
1409 __func__, ep->dev->driver, ep->dev->gadget.speed); in net2280_fifo_status()
1415 dev_err(&ep->dev->pdev->dev, "%s: Fifo overflow\n", __func__); in net2280_fifo_status()
1432 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) { in net2280_fifo_flush()
1433 dev_err(&ep->dev->pdev->dev, in net2280_fifo_flush()
1435 __func__, ep->dev->driver, ep->dev->gadget.speed); in net2280_fifo_flush()
1463 struct net2280 *dev; in net2280_get_frame() local
1469 dev = container_of(_gadget, struct net2280, gadget); in net2280_get_frame()
1470 spin_lock_irqsave(&dev->lock, flags); in net2280_get_frame()
1471 retval = get_idx_reg(dev->regs, REG_FRAME) & 0x03ff; in net2280_get_frame()
1472 spin_unlock_irqrestore(&dev->lock, flags); in net2280_get_frame()
1478 struct net2280 *dev; in net2280_wakeup() local
1484 dev = container_of(_gadget, struct net2280, gadget); in net2280_wakeup()
1486 spin_lock_irqsave(&dev->lock, flags); in net2280_wakeup()
1487 tmp = readl(&dev->usb->usbctl); in net2280_wakeup()
1489 writel(BIT(GENERATE_RESUME), &dev->usb->usbstat); in net2280_wakeup()
1490 spin_unlock_irqrestore(&dev->lock, flags); in net2280_wakeup()
1498 struct net2280 *dev; in net2280_set_selfpowered() local
1504 dev = container_of(_gadget, struct net2280, gadget); in net2280_set_selfpowered()
1506 spin_lock_irqsave(&dev->lock, flags); in net2280_set_selfpowered()
1507 tmp = readl(&dev->usb->usbctl); in net2280_set_selfpowered()
1515 writel(tmp, &dev->usb->usbctl); in net2280_set_selfpowered()
1516 spin_unlock_irqrestore(&dev->lock, flags); in net2280_set_selfpowered()
1523 struct net2280 *dev; in net2280_pullup() local
1529 dev = container_of(_gadget, struct net2280, gadget); in net2280_pullup()
1531 spin_lock_irqsave(&dev->lock, flags); in net2280_pullup()
1532 tmp = readl(&dev->usb->usbctl); in net2280_pullup()
1533 dev->softconnect = (is_on != 0); in net2280_pullup()
1535 ep0_start(dev); in net2280_pullup()
1536 writel(tmp | BIT(USB_DETECT_ENABLE), &dev->usb->usbctl); in net2280_pullup()
1538 writel(tmp & ~BIT(USB_DETECT_ENABLE), &dev->usb->usbctl); in net2280_pullup()
1539 stop_activity(dev, NULL); in net2280_pullup()
1542 spin_unlock_irqrestore(&dev->lock, flags); in net2280_pullup()
1641 struct net2280 *dev = dev_get_drvdata(_dev); in function_show() local
1643 if (!dev->driver || !dev->driver->function || in function_show()
1644 strlen(dev->driver->function) > PAGE_SIZE) in function_show()
1646 return scnprintf(buf, PAGE_SIZE, "%s\n", dev->driver->function); in function_show()
1653 struct net2280 *dev; in registers_show() local
1661 dev = dev_get_drvdata(_dev); in registers_show()
1664 spin_lock_irqsave(&dev->lock, flags); in registers_show()
1666 if (dev->driver) in registers_show()
1667 s = dev->driver->driver.name; in registers_show()
1677 driver_name, dev->chiprev, in registers_show()
1678 readl(&dev->regs->devinit), in registers_show()
1679 readl(&dev->regs->fifoctl), in registers_show()
1681 readl(&dev->regs->pciirqenb0), in registers_show()
1682 readl(&dev->regs->pciirqenb1), in registers_show()
1683 readl(&dev->regs->irqstat0), in registers_show()
1684 readl(&dev->regs->irqstat1)); in registers_show()
1689 t1 = readl(&dev->usb->usbctl); in registers_show()
1690 t2 = readl(&dev->usb->usbstat); in registers_show()
1694 else if (dev->gadget.speed == USB_SPEED_UNKNOWN) in registers_show()
1704 readl(&dev->usb->stdrsp), t1, t2, in registers_show()
1705 readl(&dev->usb->ouraddr), s); in registers_show()
1714 for (i = 0; i < dev->n_ep; i++) { in registers_show()
1717 ep = &dev->ep[i]; in registers_show()
1780 for (i = 0; i < dev->n_ep; i++) { in registers_show()
1783 ep = &dev->ep[i]; in registers_show()
1795 spin_unlock_irqrestore(&dev->lock, flags); in registers_show()
1804 struct net2280 *dev; in queues_show() local
1810 dev = dev_get_drvdata(_dev); in queues_show()
1813 spin_lock_irqsave(&dev->lock, flags); in queues_show()
1815 for (i = 0; i < dev->n_ep; i++) { in queues_show()
1816 struct net2280_ep *ep = &dev->ep[i]; in queues_show()
1888 spin_unlock_irqrestore(&dev->lock, flags); in queues_show()
1907 static void set_fifo_mode(struct net2280 *dev, int mode) in set_fifo_mode() argument
1910 writel((0xffff << PCI_BASE2_RANGE) | mode, &dev->regs->fifoctl); in set_fifo_mode()
1913 INIT_LIST_HEAD(&dev->gadget.ep_list); in set_fifo_mode()
1914 list_add_tail(&dev->ep[1].ep.ep_list, &dev->gadget.ep_list); in set_fifo_mode()
1915 list_add_tail(&dev->ep[2].ep.ep_list, &dev->gadget.ep_list); in set_fifo_mode()
1918 list_add_tail(&dev->ep[3].ep.ep_list, &dev->gadget.ep_list); in set_fifo_mode()
1919 list_add_tail(&dev->ep[4].ep.ep_list, &dev->gadget.ep_list); in set_fifo_mode()
1920 dev->ep[1].fifo_size = dev->ep[2].fifo_size = 1024; in set_fifo_mode()
1923 dev->ep[1].fifo_size = dev->ep[2].fifo_size = 2048; in set_fifo_mode()
1926 list_add_tail(&dev->ep[3].ep.ep_list, &dev->gadget.ep_list); in set_fifo_mode()
1927 dev->ep[1].fifo_size = 2048; in set_fifo_mode()
1928 dev->ep[2].fifo_size = 1024; in set_fifo_mode()
1932 list_add_tail(&dev->ep[5].ep.ep_list, &dev->gadget.ep_list); in set_fifo_mode()
1933 list_add_tail(&dev->ep[6].ep.ep_list, &dev->gadget.ep_list); in set_fifo_mode()
1936 static void defect7374_disable_data_eps(struct net2280 *dev) in defect7374_disable_data_eps() argument
1949 ep = &dev->ep[i]; in defect7374_disable_data_eps()
1955 writel(0, &dev->dep[i].dep_cfg); in defect7374_disable_data_eps()
1959 tmp_reg = readl(&dev->plregs->pl_ep_ctrl); in defect7374_disable_data_eps()
1960 writel(((tmp_reg & ~0x1f) | ep_sel), &dev->plregs->pl_ep_ctrl); in defect7374_disable_data_eps()
1967 tmp_reg = readl(&dev->plregs->pl_ep_cfg_4); in defect7374_disable_data_eps()
1969 writel(tmp_reg, &dev->plregs->pl_ep_cfg_4); in defect7374_disable_data_eps()
1970 tmp_reg = readl(&dev->plregs->pl_ep_ctrl); in defect7374_disable_data_eps()
1972 writel(tmp_reg, &dev->plregs->pl_ep_ctrl); in defect7374_disable_data_eps()
1976 static void defect7374_enable_data_eps_zero(struct net2280 *dev) in defect7374_enable_data_eps_zero() argument
1983 scratch = get_idx_reg(dev->regs, SCRATCH); in defect7374_enable_data_eps_zero()
1990 ep_warn(dev, "Operate Defect 7374 workaround soft this time"); in defect7374_enable_data_eps_zero()
1991 ep_warn(dev, "It will operate on cold-reboot and SS connect"); in defect7374_enable_data_eps_zero()
1996 ((dev->enhanced_mode) ? in defect7374_enable_data_eps_zero()
2001 writel(tmp, &dev->ep[i].cfg->ep_cfg); in defect7374_enable_data_eps_zero()
2005 writel(tmp, &dev->dep[1].dep_cfg); in defect7374_enable_data_eps_zero()
2006 writel(tmp, &dev->dep[3].dep_cfg); in defect7374_enable_data_eps_zero()
2007 writel(tmp, &dev->dep[4].dep_cfg); in defect7374_enable_data_eps_zero()
2008 writel(tmp, &dev->dep[5].dep_cfg); in defect7374_enable_data_eps_zero()
2014 tmp_reg = readl(&dev->plregs->pl_ep_ctrl); in defect7374_enable_data_eps_zero()
2016 &dev->plregs->pl_ep_ctrl); in defect7374_enable_data_eps_zero()
2020 (readl(&dev->plregs->pl_ep_ctrl) | in defect7374_enable_data_eps_zero()
2022 writel(tmp, &dev->plregs->pl_ep_ctrl); in defect7374_enable_data_eps_zero()
2030 tmp = (readl(&dev->plregs->pl_ep_cfg_4) | in defect7374_enable_data_eps_zero()
2032 writel(tmp, &dev->plregs->pl_ep_cfg_4); in defect7374_enable_data_eps_zero()
2034 tmp = readl(&dev->plregs->pl_ep_ctrl) & in defect7374_enable_data_eps_zero()
2036 writel(tmp, &dev->plregs->pl_ep_ctrl); in defect7374_enable_data_eps_zero()
2044 set_idx_reg(dev->regs, SCRATCH, scratch); in defect7374_enable_data_eps_zero()
2057 static void usb_reset_228x(struct net2280 *dev) in usb_reset_228x() argument
2061 dev->gadget.speed = USB_SPEED_UNKNOWN; in usb_reset_228x()
2062 (void) readl(&dev->usb->usbctl); in usb_reset_228x()
2064 net2280_led_init(dev); in usb_reset_228x()
2067 writel(0, &dev->usb->stdrsp); in usb_reset_228x()
2068 writel(0, &dev->regs->pciirqenb0); in usb_reset_228x()
2069 writel(0, &dev->regs->pciirqenb1); in usb_reset_228x()
2073 struct net2280_ep *ep = &dev->ep[tmp + 1]; in usb_reset_228x()
2078 writel(~0, &dev->regs->irqstat0), in usb_reset_228x()
2079 writel(~(u32)BIT(SUSPEND_REQUEST_INTERRUPT), &dev->regs->irqstat1), in usb_reset_228x()
2082 tmp = readl(&dev->regs->devinit) | in usb_reset_228x()
2087 writel(tmp, &dev->regs->devinit); in usb_reset_228x()
2090 set_fifo_mode(dev, (fifo_mode <= 2) ? fifo_mode : 0); in usb_reset_228x()
2093 static void usb_reset_338x(struct net2280 *dev) in usb_reset_338x() argument
2097 dev->gadget.speed = USB_SPEED_UNKNOWN; in usb_reset_338x()
2098 (void)readl(&dev->usb->usbctl); in usb_reset_338x()
2100 net2280_led_init(dev); in usb_reset_338x()
2102 if (dev->bug7734_patched) { in usb_reset_338x()
2104 writel(0, &dev->usb->stdrsp); in usb_reset_338x()
2105 writel(0, &dev->regs->pciirqenb0); in usb_reset_338x()
2106 writel(0, &dev->regs->pciirqenb1); in usb_reset_338x()
2111 struct net2280_ep *ep = &dev->ep[tmp + 1]; in usb_reset_338x()
2117 dma = &dev->dma[tmp]; in usb_reset_338x()
2123 writel(~0, &dev->regs->irqstat0), writel(~0, &dev->regs->irqstat1); in usb_reset_338x()
2125 if (dev->bug7734_patched) { in usb_reset_338x()
2127 tmp = readl(&dev->regs->devinit) | in usb_reset_338x()
2133 writel(tmp, &dev->regs->devinit); in usb_reset_338x()
2137 INIT_LIST_HEAD(&dev->gadget.ep_list); in usb_reset_338x()
2139 for (tmp = 1; tmp < dev->n_ep; tmp++) in usb_reset_338x()
2140 list_add_tail(&dev->ep[tmp].ep.ep_list, &dev->gadget.ep_list); in usb_reset_338x()
2144 static void usb_reset(struct net2280 *dev) in usb_reset() argument
2146 if (dev->quirks & PLX_LEGACY) in usb_reset()
2147 return usb_reset_228x(dev); in usb_reset()
2148 return usb_reset_338x(dev); in usb_reset()
2151 static void usb_reinit_228x(struct net2280 *dev) in usb_reinit_228x() argument
2157 struct net2280_ep *ep = &dev->ep[tmp]; in usb_reinit_228x()
2161 ep->dev = dev; in usb_reinit_228x()
2166 ep->dma = &dev->dma[tmp - 1]; in usb_reinit_228x()
2169 ep->regs = &dev->epregs[tmp]; in usb_reinit_228x()
2170 ep->cfg = &dev->epregs[tmp]; in usb_reinit_228x()
2171 ep_reset_228x(dev->regs, ep); in usb_reinit_228x()
2173 usb_ep_set_maxpacket_limit(&dev->ep[0].ep, 64); in usb_reinit_228x()
2174 usb_ep_set_maxpacket_limit(&dev->ep[5].ep, 64); in usb_reinit_228x()
2175 usb_ep_set_maxpacket_limit(&dev->ep[6].ep, 64); in usb_reinit_228x()
2177 dev->gadget.ep0 = &dev->ep[0].ep; in usb_reinit_228x()
2178 dev->ep[0].stopped = 0; in usb_reinit_228x()
2179 INIT_LIST_HEAD(&dev->gadget.ep0->ep_list); in usb_reinit_228x()
2185 writel(EP_DONTUSE, &dev->dep[tmp].dep_cfg); in usb_reinit_228x()
2188 static void usb_reinit_338x(struct net2280 *dev) in usb_reinit_338x() argument
2197 for (i = 0; i < dev->n_ep; i++) { in usb_reinit_338x()
2198 struct net2280_ep *ep = &dev->ep[i]; in usb_reinit_338x()
2200 ep->ep.name = dev->enhanced_mode ? ep_info_adv[i].name : in usb_reinit_338x()
2202 ep->ep.caps = dev->enhanced_mode ? ep_info_adv[i].caps : in usb_reinit_338x()
2204 ep->dev = dev; in usb_reinit_338x()
2208 ep->dma = &dev->dma[i - 1]; in usb_reinit_338x()
2210 if (dev->enhanced_mode) { in usb_reinit_338x()
2211 ep->cfg = &dev->epregs[ne[i]]; in usb_reinit_338x()
2219 (((void __iomem *)&dev->epregs[ne[i]]) + in usb_reinit_338x()
2222 ep->cfg = &dev->epregs[i]; in usb_reinit_338x()
2223 ep->regs = &dev->epregs[i]; in usb_reinit_338x()
2228 ep_reset_338x(dev->regs, ep); in usb_reinit_338x()
2230 usb_ep_set_maxpacket_limit(&dev->ep[0].ep, 512); in usb_reinit_338x()
2232 dev->gadget.ep0 = &dev->ep[0].ep; in usb_reinit_338x()
2233 dev->ep[0].stopped = 0; in usb_reinit_338x()
2236 if (dev->bug7734_patched) { in usb_reinit_338x()
2237 tmp = readl(&dev->usb_ext->usbctl2) & in usb_reinit_338x()
2239 writel(tmp, &dev->usb_ext->usbctl2); in usb_reinit_338x()
2243 val = readl(&dev->llregs->ll_lfps_5); in usb_reinit_338x()
2246 writel(val, &dev->llregs->ll_lfps_5); in usb_reinit_338x()
2248 val = readl(&dev->llregs->ll_lfps_6); in usb_reinit_338x()
2251 writel(val, &dev->llregs->ll_lfps_6); in usb_reinit_338x()
2258 val = readl(&dev->llregs->ll_tsn_counters_2); in usb_reinit_338x()
2261 writel(val, &dev->llregs->ll_tsn_counters_2); in usb_reinit_338x()
2263 val = readl(&dev->llregs->ll_tsn_counters_3); in usb_reinit_338x()
2266 writel(val, &dev->llregs->ll_tsn_counters_3); in usb_reinit_338x()
2274 val = readl(&dev->llregs->ll_lfps_timers_2); in usb_reinit_338x()
2276 &dev->llregs->ll_lfps_timers_2); in usb_reinit_338x()
2286 val = readl(&dev->llregs->ll_tsn_chicken_bit); in usb_reinit_338x()
2288 writel(val, &dev->llregs->ll_tsn_chicken_bit); in usb_reinit_338x()
2290 INIT_LIST_HEAD(&dev->gadget.ep0->ep_list); in usb_reinit_338x()
2293 writel(0x0D, &dev->dep[0].dep_cfg); in usb_reinit_338x()
2294 writel(0x0D, &dev->dep[1].dep_cfg); in usb_reinit_338x()
2295 writel(0x0E, &dev->dep[2].dep_cfg); in usb_reinit_338x()
2296 writel(0x0E, &dev->dep[3].dep_cfg); in usb_reinit_338x()
2297 writel(0x0F, &dev->dep[4].dep_cfg); in usb_reinit_338x()
2298 writel(0x0C, &dev->dep[5].dep_cfg); in usb_reinit_338x()
2301 static void usb_reinit(struct net2280 *dev) in usb_reinit() argument
2303 if (dev->quirks & PLX_LEGACY) in usb_reinit()
2304 return usb_reinit_228x(dev); in usb_reinit()
2305 return usb_reinit_338x(dev); in usb_reinit()
2308 static void ep0_start_228x(struct net2280 *dev) in ep0_start_228x() argument
2313 &dev->epregs[0].ep_rsp); in ep0_start_228x()
2326 &dev->usb->stdrsp); in ep0_start_228x()
2330 (dev->softconnect << USB_DETECT_ENABLE) | in ep0_start_228x()
2332 &dev->usb->usbctl); in ep0_start_228x()
2337 &dev->regs->pciirqenb0); in ep0_start_228x()
2345 &dev->regs->pciirqenb1); in ep0_start_228x()
2348 (void) readl(&dev->usb->usbctl); in ep0_start_228x()
2351 static void ep0_start_338x(struct net2280 *dev) in ep0_start_338x() argument
2354 if (dev->bug7734_patched) in ep0_start_338x()
2357 &dev->epregs[0].ep_rsp); in ep0_start_338x()
2371 &dev->usb->stdrsp); in ep0_start_338x()
2372 dev->wakeup_enable = 1; in ep0_start_338x()
2374 (dev->softconnect << USB_DETECT_ENABLE) | in ep0_start_338x()
2376 &dev->usb->usbctl); in ep0_start_338x()
2381 &dev->regs->pciirqenb0); in ep0_start_338x()
2386 &dev->regs->pciirqenb1); in ep0_start_338x()
2389 (void)readl(&dev->usb->usbctl); in ep0_start_338x()
2392 static void ep0_start(struct net2280 *dev) in ep0_start() argument
2394 if (dev->quirks & PLX_LEGACY) in ep0_start()
2395 return ep0_start_228x(dev); in ep0_start()
2396 return ep0_start_338x(dev); in ep0_start()
2408 struct net2280 *dev; in net2280_start() local
2420 dev = container_of(_gadget, struct net2280, gadget); in net2280_start()
2422 for (i = 0; i < dev->n_ep; i++) in net2280_start()
2423 dev->ep[i].irqs = 0; in net2280_start()
2426 dev->driver = driver; in net2280_start()
2428 retval = device_create_file(&dev->pdev->dev, &dev_attr_function); in net2280_start()
2431 retval = device_create_file(&dev->pdev->dev, &dev_attr_queues); in net2280_start()
2438 net2280_led_active(dev, 1); in net2280_start()
2440 if ((dev->quirks & PLX_PCIE) && !dev->bug7734_patched) in net2280_start()
2441 defect7374_enable_data_eps_zero(dev); in net2280_start()
2443 ep0_start(dev); in net2280_start()
2449 device_remove_file(&dev->pdev->dev, &dev_attr_function); in net2280_start()
2451 dev->driver = NULL; in net2280_start()
2455 static void stop_activity(struct net2280 *dev, struct usb_gadget_driver *driver) in stop_activity() argument
2460 if (dev->gadget.speed == USB_SPEED_UNKNOWN) in stop_activity()
2466 usb_reset(dev); in stop_activity()
2467 for (i = 0; i < dev->n_ep; i++) in stop_activity()
2468 nuke(&dev->ep[i]); in stop_activity()
2471 if (dev->async_callbacks && driver) { in stop_activity()
2472 spin_unlock(&dev->lock); in stop_activity()
2473 driver->disconnect(&dev->gadget); in stop_activity()
2474 spin_lock(&dev->lock); in stop_activity()
2477 usb_reinit(dev); in stop_activity()
2482 struct net2280 *dev; in net2280_stop() local
2485 dev = container_of(_gadget, struct net2280, gadget); in net2280_stop()
2487 spin_lock_irqsave(&dev->lock, flags); in net2280_stop()
2488 stop_activity(dev, NULL); in net2280_stop()
2489 spin_unlock_irqrestore(&dev->lock, flags); in net2280_stop()
2491 net2280_led_active(dev, 0); in net2280_stop()
2493 device_remove_file(&dev->pdev->dev, &dev_attr_function); in net2280_stop()
2494 device_remove_file(&dev->pdev->dev, &dev_attr_queues); in net2280_stop()
2496 dev->driver = NULL; in net2280_stop()
2503 struct net2280 *dev = container_of(_gadget, struct net2280, gadget); in net2280_async_callbacks() local
2505 spin_lock_irq(&dev->lock); in net2280_async_callbacks()
2506 dev->async_callbacks = enable; in net2280_async_callbacks()
2507 spin_unlock_irq(&dev->lock); in net2280_async_callbacks()
2533 ep_vdbg(ep->dev, "%s ack ep_stat %08x, req %p\n", in handle_ep_small()
2536 if (!ep->is_in || (ep->dev->quirks & PLX_2280)) in handle_ep_small()
2556 if (ep->dev->protocol_stall) { in handle_ep_small()
2565 if (ep->dev->protocol_stall) { in handle_ep_small()
2576 if (ep->dev->protocol_stall) { in handle_ep_small()
2586 ep->dev->protocol_stall = 1; in handle_ep_small()
2650 ep_dbg(ep->dev, "%s escape stuck %d, count %u\n", in handle_ep_small()
2680 (ep->dev->chiprev == 0x0100 && in handle_ep_small()
2681 ep->dev->gadget.speed in handle_ep_small()
2692 ep_dbg(ep->dev, "%s dma ep_stat %08x ??\n", in handle_ep_small()
2756 static struct net2280_ep *get_ep_by_addr(struct net2280 *dev, u16 wIndex) in get_ep_by_addr() argument
2761 return &dev->ep[0]; in get_ep_by_addr()
2762 list_for_each_entry(ep, &dev->gadget.ep_list, ep.ep_list) { in get_ep_by_addr()
2776 static void defect7374_workaround(struct net2280 *dev, struct usb_ctrlrequest r) in defect7374_workaround() argument
2782 scratch = get_idx_reg(dev->regs, SCRATCH); in defect7374_workaround()
2791 if (!(readl(&dev->usb->usbstat) & BIT(SUPER_SPEED_MODE))) { in defect7374_workaround()
2799 dev->bug7734_patched = 1; in defect7374_workaround()
2808 state = readl(&dev->plregs->pl_ep_status_1) in defect7374_workaround()
2813 dev->bug7734_patched = 1; in defect7374_workaround()
2826 ep_err(dev, "FAIL: Defect 7374 workaround waited but failed " in defect7374_workaround()
2828 ep_err(dev, "PL_EP_STATUS_1(23:16):.Expected from 0x11 to 0x16" in defect7374_workaround()
2831 ep_warn(dev, "INFO: Defect 7374 workaround waited about\n" in defect7374_workaround()
2841 defect7374_disable_data_eps(dev); in defect7374_workaround()
2843 set_idx_reg(dev->regs, SCRATCH, scratch); in defect7374_workaround()
2850 struct net2280 *dev = ep->dev; in ep_clear_seqnum() local
2854 val = readl(&dev->plregs->pl_ep_ctrl) & ~0x1f; in ep_clear_seqnum()
2856 writel(val, &dev->plregs->pl_ep_ctrl); in ep_clear_seqnum()
2858 writel(val, &dev->plregs->pl_ep_ctrl); in ep_clear_seqnum()
2863 static void handle_stat0_irqs_superspeed(struct net2280 *dev, in handle_stat0_irqs_superspeed() argument
2876 dev->addressed_state = !w_value; in handle_stat0_irqs_superspeed()
2882 status = dev->wakeup_enable ? 0x02 : 0x00; in handle_stat0_irqs_superspeed()
2883 if (dev->gadget.is_selfpowered) in handle_stat0_irqs_superspeed()
2885 status |= (dev->u1_enable << 2 | dev->u2_enable << 3 | in handle_stat0_irqs_superspeed()
2886 dev->ltm_enable << 4); in handle_stat0_irqs_superspeed()
2887 writel(0, &dev->epregs[0].ep_irqenb); in handle_stat0_irqs_superspeed()
2889 writel((__force u32) status, &dev->epregs[0].ep_data); in handle_stat0_irqs_superspeed()
2894 e = get_ep_by_addr(dev, w_index); in handle_stat0_irqs_superspeed()
2899 writel(0, &dev->epregs[0].ep_irqenb); in handle_stat0_irqs_superspeed()
2901 writel((__force u32) status, &dev->epregs[0].ep_data); in handle_stat0_irqs_superspeed()
2913 if (!dev->addressed_state) { in handle_stat0_irqs_superspeed()
2916 dev->u1_enable = 0; in handle_stat0_irqs_superspeed()
2917 writel(readl(&dev->usb_ext->usbctl2) & in handle_stat0_irqs_superspeed()
2919 &dev->usb_ext->usbctl2); in handle_stat0_irqs_superspeed()
2924 dev->u2_enable = 0; in handle_stat0_irqs_superspeed()
2925 writel(readl(&dev->usb_ext->usbctl2) & in handle_stat0_irqs_superspeed()
2927 &dev->usb_ext->usbctl2); in handle_stat0_irqs_superspeed()
2932 dev->ltm_enable = 0; in handle_stat0_irqs_superspeed()
2933 writel(readl(&dev->usb_ext->usbctl2) & in handle_stat0_irqs_superspeed()
2935 &dev->usb_ext->usbctl2); in handle_stat0_irqs_superspeed()
2944 dev->wakeup_enable = 0; in handle_stat0_irqs_superspeed()
2945 writel(readl(&dev->usb->usbctl) & in handle_stat0_irqs_superspeed()
2947 &dev->usb->usbctl); in handle_stat0_irqs_superspeed()
2954 e = get_ep_by_addr(dev, w_index); in handle_stat0_irqs_superspeed()
2959 ep_vdbg(dev, "%s clear halt\n", e->ep.name); in handle_stat0_irqs_superspeed()
2979 if (!dev->addressed_state) { in handle_stat0_irqs_superspeed()
2982 dev->u1_enable = 1; in handle_stat0_irqs_superspeed()
2983 writel(readl(&dev->usb_ext->usbctl2) | in handle_stat0_irqs_superspeed()
2985 &dev->usb_ext->usbctl2); in handle_stat0_irqs_superspeed()
2990 dev->u2_enable = 1; in handle_stat0_irqs_superspeed()
2991 writel(readl(&dev->usb_ext->usbctl2) | in handle_stat0_irqs_superspeed()
2993 &dev->usb_ext->usbctl2); in handle_stat0_irqs_superspeed()
2998 dev->ltm_enable = 1; in handle_stat0_irqs_superspeed()
2999 writel(readl(&dev->usb_ext->usbctl2) | in handle_stat0_irqs_superspeed()
3001 &dev->usb_ext->usbctl2); in handle_stat0_irqs_superspeed()
3010 dev->wakeup_enable = 1; in handle_stat0_irqs_superspeed()
3011 writel(readl(&dev->usb->usbctl) | in handle_stat0_irqs_superspeed()
3013 &dev->usb->usbctl); in handle_stat0_irqs_superspeed()
3020 e = get_ep_by_addr(dev, w_index); in handle_stat0_irqs_superspeed()
3025 ep->dev->protocol_stall = 1; in handle_stat0_irqs_superspeed()
3042 ep_vdbg(dev, "setup %02x.%02x v%04x i%04x l%04x ep_cfg %08x\n", in handle_stat0_irqs_superspeed()
3048 if (dev->async_callbacks) { in handle_stat0_irqs_superspeed()
3049 spin_unlock(&dev->lock); in handle_stat0_irqs_superspeed()
3050 tmp = dev->driver->setup(&dev->gadget, &r); in handle_stat0_irqs_superspeed()
3051 spin_lock(&dev->lock); in handle_stat0_irqs_superspeed()
3056 ep_vdbg(dev, "req %02x.%02x protocol STALL; stat %d\n", in handle_stat0_irqs_superspeed()
3058 dev->protocol_stall = 1; in handle_stat0_irqs_superspeed()
3072 static void usb338x_handle_ep_intr(struct net2280 *dev, u32 stat0) in usb338x_handle_ep_intr() argument
3088 handle_ep_small(&dev->ep[index]); in usb338x_handle_ep_intr()
3092 static void handle_stat0_irqs(struct net2280 *dev, u32 stat) in handle_stat0_irqs() argument
3112 if (dev->gadget.speed == USB_SPEED_UNKNOWN) { in handle_stat0_irqs()
3113 u32 val = readl(&dev->usb->usbstat); in handle_stat0_irqs()
3115 dev->gadget.speed = USB_SPEED_SUPER; in handle_stat0_irqs()
3116 usb_ep_set_maxpacket_limit(&dev->ep[0].ep, in handle_stat0_irqs()
3119 dev->gadget.speed = USB_SPEED_HIGH; in handle_stat0_irqs()
3120 usb_ep_set_maxpacket_limit(&dev->ep[0].ep, in handle_stat0_irqs()
3123 dev->gadget.speed = USB_SPEED_FULL; in handle_stat0_irqs()
3124 usb_ep_set_maxpacket_limit(&dev->ep[0].ep, in handle_stat0_irqs()
3127 net2280_led_speed(dev, dev->gadget.speed); in handle_stat0_irqs()
3128 ep_dbg(dev, "%s\n", in handle_stat0_irqs()
3129 usb_speed_string(dev->gadget.speed)); in handle_stat0_irqs()
3132 ep = &dev->ep[0]; in handle_stat0_irqs()
3144 dev->protocol_stall = 0; in handle_stat0_irqs()
3145 if (!(dev->quirks & PLX_PCIE)) { in handle_stat0_irqs()
3146 if (ep->dev->quirks & PLX_2280) in handle_stat0_irqs()
3166 u.raw[0] = readl(&dev->usb->setup0123); in handle_stat0_irqs()
3167 u.raw[1] = readl(&dev->usb->setup4567); in handle_stat0_irqs()
3172 if ((dev->quirks & PLX_PCIE) && !dev->bug7734_patched) in handle_stat0_irqs()
3173 defect7374_workaround(dev, u.r); in handle_stat0_irqs()
3182 writel(BIT(SETUP_PACKET_INTERRUPT), &dev->regs->irqstat0); in handle_stat0_irqs()
3200 writel(scratch, &dev->epregs[0].ep_irqenb); in handle_stat0_irqs()
3207 if (dev->gadget.speed == USB_SPEED_SUPER) { in handle_stat0_irqs()
3208 handle_stat0_irqs_superspeed(dev, ep, u.r); in handle_stat0_irqs()
3220 e = get_ep_by_addr(dev, w_index); in handle_stat0_irqs()
3230 writel(0, &dev->epregs[0].ep_irqenb); in handle_stat0_irqs()
3232 writel((__force u32)status, &dev->epregs[0].ep_data); in handle_stat0_irqs()
3234 ep_vdbg(dev, "%s stat %02x\n", ep->ep.name, status); in handle_stat0_irqs()
3246 e = get_ep_by_addr(dev, w_index); in handle_stat0_irqs()
3250 ep_vdbg(dev, "%s wedged, halt not cleared\n", in handle_stat0_irqs()
3253 ep_vdbg(dev, "%s clear halt\n", e->ep.name); in handle_stat0_irqs()
3255 if ((ep->dev->quirks & PLX_PCIE) && in handle_stat0_irqs()
3271 e = get_ep_by_addr(dev, w_index); in handle_stat0_irqs()
3277 if ((dev->quirks & PLX_PCIE) && e->dma) in handle_stat0_irqs()
3280 ep_vdbg(dev, "%s set halt\n", ep->ep.name); in handle_stat0_irqs()
3286 ep_vdbg(dev, "setup %02x.%02x v%04x i%04x l%04x " in handle_stat0_irqs()
3292 if (dev->async_callbacks) { in handle_stat0_irqs()
3293 spin_unlock(&dev->lock); in handle_stat0_irqs()
3294 tmp = dev->driver->setup(&dev->gadget, &u.r); in handle_stat0_irqs()
3295 spin_lock(&dev->lock); in handle_stat0_irqs()
3302 ep_vdbg(dev, "req %02x.%02x protocol STALL; stat %d\n", in handle_stat0_irqs()
3304 dev->protocol_stall = 1; in handle_stat0_irqs()
3318 if ((dev->quirks & PLX_PCIE) && dev->enhanced_mode) { in handle_stat0_irqs()
3324 usb338x_handle_ep_intr(dev, stat & mask); in handle_stat0_irqs()
3340 ep = &dev->ep[num]; in handle_stat0_irqs()
3346 ep_dbg(dev, "unhandled irqstat0 %08x\n", stat); in handle_stat0_irqs()
3358 static void handle_stat1_irqs(struct net2280 *dev, u32 stat) in handle_stat1_irqs() argument
3359 __releases(dev->lock) in handle_stat1_irqs()
3360 __acquires(dev->lock) in handle_stat1_irqs()
3382 writel(tmp, &dev->regs->irqstat1); in handle_stat1_irqs()
3383 if (dev->gadget.speed != USB_SPEED_UNKNOWN) { in handle_stat1_irqs()
3385 (readl(&dev->usb->usbctl) & in handle_stat1_irqs()
3388 ep_dbg(dev, "disconnect %s\n", in handle_stat1_irqs()
3389 dev->driver->driver.name); in handle_stat1_irqs()
3391 (readl(&dev->usb->usbstat) & mask) in handle_stat1_irqs()
3394 ep_dbg(dev, "reset %s\n", in handle_stat1_irqs()
3395 dev->driver->driver.name); in handle_stat1_irqs()
3399 stop_activity(dev, dev->driver); in handle_stat1_irqs()
3400 ep0_start(dev); in handle_stat1_irqs()
3401 if (dev->async_callbacks) { in handle_stat1_irqs()
3402 spin_unlock(&dev->lock); in handle_stat1_irqs()
3404 usb_gadget_udc_reset(&dev->gadget, dev->driver); in handle_stat1_irqs()
3406 (dev->driver->disconnect)(&dev->gadget); in handle_stat1_irqs()
3407 spin_lock(&dev->lock); in handle_stat1_irqs()
3426 writel(tmp, &dev->regs->irqstat1); in handle_stat1_irqs()
3427 spin_unlock(&dev->lock); in handle_stat1_irqs()
3429 if (dev->async_callbacks && dev->driver->suspend) in handle_stat1_irqs()
3430 dev->driver->suspend(&dev->gadget); in handle_stat1_irqs()
3434 if (dev->async_callbacks && dev->driver->resume) in handle_stat1_irqs()
3435 dev->driver->resume(&dev->gadget); in handle_stat1_irqs()
3438 spin_lock(&dev->lock); in handle_stat1_irqs()
3444 writel(stat, &dev->regs->irqstat1); in handle_stat1_irqs()
3447 if (dev->quirks & PLX_2280) in handle_stat1_irqs()
3474 ep = &dev->ep[num + 1]; in handle_stat1_irqs()
3485 if (dev->quirks & PLX_PCIE) { in handle_stat1_irqs()
3493 ep_dbg(ep->dev, "%s no xact done? %08x\n", in handle_stat1_irqs()
3523 ep_err(dev, "pci dma error; stat %08x\n", stat); in handle_stat1_irqs()
3528 stop_activity(dev, dev->driver); in handle_stat1_irqs()
3529 ep0_start(dev); in handle_stat1_irqs()
3534 ep_dbg(dev, "unhandled irqstat1 %08x\n", stat); in handle_stat1_irqs()
3539 struct net2280 *dev = _dev; in net2280_irq() local
3542 if ((dev->quirks & PLX_LEGACY) && in net2280_irq()
3543 (!(readl(&dev->regs->irqstat0) & BIT(INTA_ASSERTED)))) in net2280_irq()
3546 spin_lock(&dev->lock); in net2280_irq()
3549 handle_stat1_irqs(dev, readl(&dev->regs->irqstat1)); in net2280_irq()
3552 handle_stat0_irqs(dev, readl(&dev->regs->irqstat0)); in net2280_irq()
3554 if (dev->quirks & PLX_PCIE) { in net2280_irq()
3556 u32 pciirqenb1 = readl(&dev->regs->pciirqenb1); in net2280_irq()
3557 writel(pciirqenb1 & 0x7FFFFFFF, &dev->regs->pciirqenb1); in net2280_irq()
3558 writel(pciirqenb1, &dev->regs->pciirqenb1); in net2280_irq()
3561 spin_unlock(&dev->lock); in net2280_irq()
3570 struct net2280 *dev = container_of(_dev, struct net2280, gadget.dev); in gadget_release() local
3572 kfree(dev); in gadget_release()
3579 struct net2280 *dev = pci_get_drvdata(pdev); in net2280_remove() local
3581 if (dev->added) in net2280_remove()
3582 usb_del_gadget(&dev->gadget); in net2280_remove()
3584 BUG_ON(dev->driver); in net2280_remove()
3587 if (dev->requests) { in net2280_remove()
3590 if (!dev->ep[i].dummy) in net2280_remove()
3592 dma_pool_free(dev->requests, dev->ep[i].dummy, in net2280_remove()
3593 dev->ep[i].td_dma); in net2280_remove()
3595 dma_pool_destroy(dev->requests); in net2280_remove()
3597 if (dev->got_irq) in net2280_remove()
3598 free_irq(pdev->irq, dev); in net2280_remove()
3599 if (dev->quirks & PLX_PCIE) in net2280_remove()
3601 if (dev->regs) { in net2280_remove()
3602 net2280_led_shutdown(dev); in net2280_remove()
3603 iounmap(dev->regs); in net2280_remove()
3605 if (dev->region) in net2280_remove()
3608 if (dev->enabled) in net2280_remove()
3610 device_remove_file(&pdev->dev, &dev_attr_registers); in net2280_remove()
3612 ep_info(dev, "unbind\n"); in net2280_remove()
3613 usb_put_gadget(&dev->gadget); in net2280_remove()
3622 struct net2280 *dev; in net2280_probe() local
3628 dev = kzalloc(sizeof(*dev), GFP_KERNEL); in net2280_probe()
3629 if (dev == NULL) { in net2280_probe()
3634 pci_set_drvdata(pdev, dev); in net2280_probe()
3635 usb_initialize_gadget(&pdev->dev, &dev->gadget, gadget_release); in net2280_probe()
3636 spin_lock_init(&dev->lock); in net2280_probe()
3637 dev->quirks = id->driver_data; in net2280_probe()
3638 dev->pdev = pdev; in net2280_probe()
3639 dev->gadget.ops = &net2280_ops; in net2280_probe()
3640 dev->gadget.max_speed = (dev->quirks & PLX_SUPERSPEED) ? in net2280_probe()
3644 dev->gadget.name = driver_name; in net2280_probe()
3651 dev->enabled = 1; in net2280_probe()
3660 ep_dbg(dev, "controller already in use\n"); in net2280_probe()
3664 dev->region = 1; in net2280_probe()
3672 ep_dbg(dev, "can't map memory\n"); in net2280_probe()
3676 dev->regs = (struct net2280_regs __iomem *) base; in net2280_probe()
3677 dev->usb = (struct net2280_usb_regs __iomem *) (base + 0x0080); in net2280_probe()
3678 dev->pci = (struct net2280_pci_regs __iomem *) (base + 0x0100); in net2280_probe()
3679 dev->dma = (struct net2280_dma_regs __iomem *) (base + 0x0180); in net2280_probe()
3680 dev->dep = (struct net2280_dep_regs __iomem *) (base + 0x0200); in net2280_probe()
3681 dev->epregs = (struct net2280_ep_regs __iomem *) (base + 0x0300); in net2280_probe()
3683 if (dev->quirks & PLX_PCIE) { in net2280_probe()
3686 dev->usb_ext = (struct usb338x_usb_ext_regs __iomem *) in net2280_probe()
3688 dev->llregs = (struct usb338x_ll_regs __iomem *) in net2280_probe()
3690 dev->plregs = (struct usb338x_pl_regs __iomem *) in net2280_probe()
3692 usbstat = readl(&dev->usb->usbstat); in net2280_probe()
3693 dev->enhanced_mode = !!(usbstat & BIT(11)); in net2280_probe()
3694 dev->n_ep = (dev->enhanced_mode) ? 9 : 5; in net2280_probe()
3696 fsmvalue = get_idx_reg(dev->regs, SCRATCH) & in net2280_probe()
3700 dev->bug7734_patched = 1; in net2280_probe()
3701 writel(0, &dev->usb->usbctl); in net2280_probe()
3703 dev->bug7734_patched = 0; in net2280_probe()
3705 dev->enhanced_mode = 0; in net2280_probe()
3706 dev->n_ep = 7; in net2280_probe()
3708 writel(0, &dev->usb->usbctl); in net2280_probe()
3711 usb_reset(dev); in net2280_probe()
3712 usb_reinit(dev); in net2280_probe()
3716 ep_err(dev, "No IRQ. Check PCI setup!\n"); in net2280_probe()
3721 if (dev->quirks & PLX_PCIE) in net2280_probe()
3723 ep_err(dev, "Failed to enable MSI mode\n"); in net2280_probe()
3726 driver_name, dev)) { in net2280_probe()
3727 ep_err(dev, "request interrupt %d failed\n", pdev->irq); in net2280_probe()
3731 dev->got_irq = 1; in net2280_probe()
3735 dev->requests = dma_pool_create("requests", &pdev->dev, in net2280_probe()
3739 if (!dev->requests) { in net2280_probe()
3740 ep_dbg(dev, "can't get request pool\n"); in net2280_probe()
3747 td = dma_pool_alloc(dev->requests, GFP_KERNEL, in net2280_probe()
3748 &dev->ep[i].td_dma); in net2280_probe()
3750 ep_dbg(dev, "can't get dummy %d\n", i); in net2280_probe()
3756 dev->ep[i].dummy = td; in net2280_probe()
3760 if (dev->quirks & PLX_LEGACY) in net2280_probe()
3768 &dev->pci->pcimstctl); in net2280_probe()
3774 dev->chiprev = get_idx_reg(dev->regs, REG_CHIPREV) & 0xffff; in net2280_probe()
3777 ep_info(dev, "%s\n", driver_desc); in net2280_probe()
3778 ep_info(dev, "irq %d, pci mem %p, chip rev %04x\n", in net2280_probe()
3779 pdev->irq, base, dev->chiprev); in net2280_probe()
3780 ep_info(dev, "version: " DRIVER_VERSION "; %s\n", in net2280_probe()
3781 dev->enhanced_mode ? "enhanced mode" : "legacy mode"); in net2280_probe()
3782 retval = device_create_file(&pdev->dev, &dev_attr_registers); in net2280_probe()
3786 retval = usb_add_gadget(&dev->gadget); in net2280_probe()
3789 dev->added = 1; in net2280_probe()
3793 if (dev) { in net2280_probe()
3795 kfree(dev); in net2280_probe()
3806 struct net2280 *dev = pci_get_drvdata(pdev); in net2280_shutdown() local
3809 writel(0, &dev->regs->pciirqenb0); in net2280_shutdown()
3810 writel(0, &dev->regs->pciirqenb1); in net2280_shutdown()
3813 writel(0, &dev->usb->usbctl); in net2280_shutdown()