Lines Matching refs:priv_dev
113 static int cdns3_get_dma_pos(struct cdns3_device *priv_dev,
118 dma_index = readl(&priv_dev->regs->ep_traddr) - priv_ep->trb_pool_dma;
158 * @priv_dev: extended gadget object
161 void cdns3_select_ep(struct cdns3_device *priv_dev, u32 ep)
163 if (priv_dev->selected_ep == ep)
166 priv_dev->selected_ep = ep;
167 writel(ep, &priv_dev->regs->ep_sel);
172 * @priv_dev: extended gadget object
177 static int cdns3_get_tdl(struct cdns3_device *priv_dev)
179 if (priv_dev->dev_ver < DEV_VER_V3)
180 return EP_CMD_TDL_GET(readl(&priv_dev->regs->ep_cmd));
182 return readl(&priv_dev->regs->ep_tdl);
210 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
213 dma_free_coherent(priv_dev->sysdev,
228 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
237 priv_ep->trb_pool = dma_alloc_coherent(priv_dev->sysdev,
278 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
284 &priv_dev->regs->ep_cmd);
287 readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val,
295 * @priv_dev: extended gadget object
297 void cdns3_hw_reset_eps_config(struct cdns3_device *priv_dev)
301 writel(USB_CONF_CFGRST, &priv_dev->regs->usb_conf);
303 cdns3_allow_enable_l1(priv_dev, 0);
304 priv_dev->hw_configured_flag = 0;
305 priv_dev->onchip_used_size = 0;
306 priv_dev->out_mem_is_allocated = 0;
307 priv_dev->wait_for_setup = 0;
308 priv_dev->using_streams = 0;
311 if (priv_dev->eps[i])
312 priv_dev->eps[i]->flags &= ~EP_CONFIGURED;
357 * @priv_dev: Extended gadget object
365 void cdns3_allow_enable_l1(struct cdns3_device *priv_dev, int enable)
368 writel(USB_CONF_L1EN, &priv_dev->regs->usb_conf);
370 writel(USB_CONF_L1DS, &priv_dev->regs->usb_conf);
373 enum usb_device_speed cdns3_get_speed(struct cdns3_device *priv_dev)
377 reg = readl(&priv_dev->regs->usb_sts);
392 * @priv_dev: Extended gadget object
398 static int cdns3_start_all_request(struct cdns3_device *priv_dev,
418 dev_dbg(priv_dev->dev, "Blocking external request\n");
452 #define cdns3_wa2_enable_detection(priv_dev, priv_ep, reg) do { \
524 static struct usb_request *cdns3_wa2_gadget_giveback(struct cdns3_device *priv_dev,
540 usb_gadget_unmap_request_by_dev(priv_dev->sysdev, req,
548 usb_gadget_map_request_by_dev(priv_dev->sysdev, req,
557 cdns3_start_all_request(priv_dev, priv_ep);
564 static int cdns3_wa2_gadget_ep_queue(struct cdns3_device *priv_dev,
578 cdns3_select_ep(priv_dev, priv_ep->num | priv_ep->dir);
580 reg = readl(&priv_dev->regs->ep_sts_en);
583 writel(reg, &priv_dev->regs->ep_sts_en);
726 static void cdns3_wa2_reset_tdl(struct cdns3_device *priv_dev)
728 u16 tdl = EP_CMD_TDL_GET(readl(&priv_dev->regs->ep_cmd));
734 &priv_dev->regs->ep_cmd);
738 static void cdns3_wa2_check_outq_status(struct cdns3_device *priv_dev)
743 cdns3_select_ep(priv_dev, 0);
745 ep_sts_reg = readl(&priv_dev->regs->ep_sts);
749 struct cdns3_endpoint *outq_ep = priv_dev->eps[outq_ep_num];
762 cdns3_select_ep(priv_dev, outq_ep->num |
764 ep_sts_en_reg = readl(&priv_dev->regs->ep_sts_en);
765 ep_cmd_reg = readl(&priv_dev->regs->ep_cmd);
768 cdns3_set_register_bit(&priv_dev->regs->ep_cfg,
771 cdns3_wa2_enable_detection(priv_dev, outq_ep,
774 &priv_dev->regs->ep_sts_en);
776 cdns3_wa2_reset_tdl(priv_dev);
791 &priv_dev->regs->ep_cmd);
812 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
820 usb_gadget_unmap_request_by_dev(priv_dev->sysdev, request,
833 if (priv_dev->dev_ver < DEV_VER_V2) {
834 request = cdns3_wa2_gadget_giveback(priv_dev, priv_ep,
841 spin_unlock(&priv_dev->lock);
844 spin_lock(&priv_dev->lock);
847 if (request->buf == priv_dev->zlp_buf)
871 struct cdns3_device *priv_dev = container_of(work, struct cdns3_device,
876 spin_lock_irqsave(&priv_dev->lock, flags);
878 list_for_each_entry_safe(buf, tmp, &priv_dev->aligned_buf_list, list) {
887 spin_unlock_irqrestore(&priv_dev->lock, flags);
888 dma_free_coherent(priv_dev->sysdev, buf->size,
891 spin_lock_irqsave(&priv_dev->lock, flags);
895 spin_unlock_irqrestore(&priv_dev->lock, flags);
901 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
917 buf->buf = dma_alloc_coherent(priv_dev->sysdev,
930 &priv_dev->aligned_buf_wq);
937 &priv_dev->aligned_buf_list);
954 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
959 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY);
973 static void cdns3_wa1_tray_restore_cycle_bit(struct cdns3_device *priv_dev,
979 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY);
980 dma_index = cdns3_get_dma_pos(priv_dev, priv_ep);
989 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
1038 if (priv_dev->dev_ver >= DEV_VER_V2) {
1039 if (priv_dev->gadget.speed == USB_SPEED_SUPER)
1056 &priv_dev->regs->ep_traddr);
1061 writel(EP_STS_TRBERR | EP_STS_DESCMIS, &priv_dev->regs->ep_sts);
1070 if (priv_dev->dev_ver < DEV_VER_V2)
1072 &priv_dev->regs->ep_cmd);
1073 else if (priv_dev->dev_ver > DEV_VER_V2)
1074 writel(tdl, &priv_dev->regs->ep_tdl);
1077 writel(EP_CMD_DRDY, &priv_dev->regs->ep_cmd);
1079 EP_CMD_ERDY, &priv_dev->regs->ep_cmd);
1082 readl(&priv_dev->regs->ep_traddr));
1086 __cdns3_gadget_wakeup(priv_dev);
1093 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
1095 if (priv_dev->dev_ver < DEV_VER_V3)
1098 if (readl(&priv_dev->regs->ep_sts) & EP_STS_TRBERR) {
1099 writel(EP_STS_TRBERR, &priv_dev->regs->ep_sts);
1100 writel(EP_CMD_DRDY, &priv_dev->regs->ep_cmd);
1114 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
1161 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY);
1162 dma_index = cdns3_get_dma_pos(priv_dev, priv_ep);
1208 if (priv_dev->dev_ver <= DEV_VER_V2)
1214 if (priv_dev->dev_ver >= DEV_VER_V2) {
1219 if (priv_dev->gadget.speed == USB_SPEED_SUPER)
1269 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && priv_dev->dev_ver <= DEV_VER_V2)
1323 if (priv_dev->dev_ver < DEV_VER_V2 &&
1326 u16 old_tdl = EP_CMD_TDL_GET(readl(&priv_dev->regs->ep_cmd));
1336 &priv_dev->regs->ep_cmd);
1349 if (priv_dev->dev_ver <= DEV_VER_V2)
1350 cdns3_wa1_tray_restore_cycle_bit(priv_dev, priv_ep);
1388 cdns3_set_register_bit(&priv_dev->regs->ep_cfg,
1394 &priv_dev->regs->ep_traddr);
1402 writel(EP_STS_TRBERR | EP_STS_DESCMIS, &priv_dev->regs->ep_sts);
1403 writel(EP_CMD_DRDY, &priv_dev->regs->ep_cmd);
1406 readl(&priv_dev->regs->ep_traddr));
1410 __cdns3_gadget_wakeup(priv_dev);
1415 void cdns3_set_hw_configuration(struct cdns3_device *priv_dev)
1420 if (priv_dev->hw_configured_flag)
1423 writel(USB_CONF_CFGSET, &priv_dev->regs->usb_conf);
1425 cdns3_set_register_bit(&priv_dev->regs->usb_conf,
1428 priv_dev->hw_configured_flag = 1;
1430 list_for_each_entry(ep, &priv_dev->gadget.ep_list, ep_list) {
1433 cdns3_start_all_request(priv_dev, priv_ep);
1437 cdns3_allow_enable_l1(priv_dev, 1);
1482 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
1488 current_index = cdns3_get_dma_pos(priv_dev, priv_ep);
1489 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY);
1542 static void cdns3_transfer_completed(struct cdns3_device *priv_dev,
1561 if (priv_ep->dequeue == cdns3_get_dma_pos(priv_dev, priv_ep) &&
1574 cdns3_select_ep(priv_dev, priv_ep->endpoint.address);
1615 cdns3_select_ep(priv_dev, priv_ep->endpoint.address);
1621 dev_warn(priv_dev->dev,
1643 cdns3_start_all_request(priv_dev, priv_ep);
1648 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
1657 writel(EP_CMD_DRDY, &priv_dev->regs->ep_cmd);
1659 __cdns3_gadget_wakeup(priv_dev);
1662 readl(&priv_dev->regs->ep_traddr));
1669 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
1678 writel(EP_CMD_TDL_SET(tdl) | EP_CMD_STDL, &priv_dev->regs->ep_cmd);
1689 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
1695 cdns3_select_ep(priv_dev, priv_ep->endpoint.address);
1697 trace_cdns3_epx_irq(priv_dev, priv_ep);
1699 ep_sts_reg = readl(&priv_dev->regs->ep_sts);
1700 writel(ep_sts_reg, &priv_dev->regs->ep_sts);
1705 tdl = cdns3_get_tdl(priv_dev);
1718 &priv_dev->regs->ep_cmd);
1727 cdns3_start_all_request(priv_dev, priv_ep);
1735 priv_dev->dev_ver < DEV_VER_V2)) {
1749 u32 ep_cfg = readl(&priv_dev->regs->ep_cfg);
1752 writel(ep_cfg, &priv_dev->regs->ep_cfg);
1756 cdns3_transfer_completed(priv_dev, priv_ep);
1761 cdns3_start_all_request(priv_dev, priv_ep);
1781 cdns3_transfer_completed(priv_dev, priv_ep);
1790 cdns3_transfer_completed(priv_dev, priv_ep);
1801 cdns3_transfer_completed(priv_dev, priv_ep);
1810 if (ep_sts_reg & EP_STS_DESCMIS && priv_dev->dev_ver < DEV_VER_V2 &&
1817 static void cdns3_disconnect_gadget(struct cdns3_device *priv_dev)
1819 if (priv_dev->gadget_driver && priv_dev->gadget_driver->disconnect)
1820 priv_dev->gadget_driver->disconnect(&priv_dev->gadget);
1825 * @priv_dev: extended gadget object
1829 static void cdns3_check_usb_interrupt_proceed(struct cdns3_device *priv_dev,
1831 __must_hold(&priv_dev->lock)
1835 trace_cdns3_usb_irq(priv_dev, usb_ists);
1842 if (readl(&priv_dev->regs->drbl))
1843 __cdns3_gadget_wakeup(priv_dev);
1848 speed = cdns3_get_speed(priv_dev);
1849 priv_dev->gadget.speed = speed;
1850 usb_gadget_set_state(&priv_dev->gadget, USB_STATE_POWERED);
1851 cdns3_ep0_config(priv_dev);
1856 spin_unlock(&priv_dev->lock);
1857 cdns3_disconnect_gadget(priv_dev);
1858 spin_lock(&priv_dev->lock);
1859 priv_dev->gadget.speed = USB_SPEED_UNKNOWN;
1860 usb_gadget_set_state(&priv_dev->gadget, USB_STATE_NOTATTACHED);
1861 cdns3_hw_reset_eps_config(priv_dev);
1865 if (priv_dev->gadget_driver &&
1866 priv_dev->gadget_driver->suspend) {
1867 spin_unlock(&priv_dev->lock);
1868 priv_dev->gadget_driver->suspend(&priv_dev->gadget);
1869 spin_lock(&priv_dev->lock);
1874 if (priv_dev->gadget_driver &&
1875 priv_dev->gadget_driver->resume) {
1876 spin_unlock(&priv_dev->lock);
1877 priv_dev->gadget_driver->resume(&priv_dev->gadget);
1878 spin_lock(&priv_dev->lock);
1884 if (priv_dev->gadget_driver) {
1885 spin_unlock(&priv_dev->lock);
1886 usb_gadget_udc_reset(&priv_dev->gadget,
1887 priv_dev->gadget_driver);
1888 spin_lock(&priv_dev->lock);
1891 speed = cdns3_get_speed(priv_dev);
1892 priv_dev->gadget.speed = speed;
1893 cdns3_hw_reset_eps_config(priv_dev);
1894 cdns3_ep0_config(priv_dev);
1909 struct cdns3_device *priv_dev = data;
1910 struct cdns3 *cdns = dev_get_drvdata(priv_dev->dev);
1918 reg = readl(&priv_dev->regs->usb_ists);
1927 reg = ~reg & readl(&priv_dev->regs->usb_ien);
1929 writel(reg, &priv_dev->regs->usb_ien);
1934 reg = readl(&priv_dev->regs->ep_ists);
1936 writel(0, &priv_dev->regs->ep_ien);
1954 struct cdns3_device *priv_dev = data;
1960 spin_lock_irqsave(&priv_dev->lock, flags);
1962 reg = readl(&priv_dev->regs->usb_ists);
1964 writel(reg, &priv_dev->regs->usb_ists);
1965 writel(USB_IEN_INIT, &priv_dev->regs->usb_ien);
1966 cdns3_check_usb_interrupt_proceed(priv_dev, reg);
1970 reg = readl(&priv_dev->regs->ep_ists);
1974 cdns3_check_ep0_interrupt_proceed(priv_dev, USB_DIR_OUT);
1980 cdns3_check_ep0_interrupt_proceed(priv_dev, USB_DIR_IN);
1991 cdns3_check_ep_interrupt_proceed(priv_dev->eps[bit]);
1995 if (priv_dev->dev_ver < DEV_VER_V2 && priv_dev->using_streams)
1996 cdns3_wa2_check_outq_status(priv_dev);
1999 writel(~0, &priv_dev->regs->ep_ien);
2000 spin_unlock_irqrestore(&priv_dev->lock, flags);
2011 * @priv_dev: extended gadget object
2017 static int cdns3_ep_onchip_buffer_reserve(struct cdns3_device *priv_dev,
2023 remained = priv_dev->onchip_buffers - priv_dev->onchip_used_size - 2;
2029 priv_dev->onchip_used_size += size;
2037 if (priv_dev->out_mem_is_allocated >= size)
2040 required = size - priv_dev->out_mem_is_allocated;
2045 priv_dev->out_mem_is_allocated += required;
2046 priv_dev->onchip_used_size += required;
2052 static void cdns3_configure_dmult(struct cdns3_device *priv_dev,
2055 struct cdns3_usb_regs __iomem *regs = priv_dev->regs;
2058 if (priv_dev->dev_ver <= DEV_VER_V2)
2061 if (priv_dev->dev_ver == DEV_VER_V2)
2064 if (priv_dev->dev_ver >= DEV_VER_V3 && priv_ep) {
2094 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
2102 buffering = priv_dev->ep_buf_size - 1;
2104 cdns3_configure_dmult(priv_dev, priv_ep);
2110 if (priv_dev->dev_ver >= DEV_VER_V2 && !priv_ep->dir)
2116 if (priv_dev->dev_ver >= DEV_VER_V2 && !priv_ep->dir)
2124 switch (priv_dev->gadget.speed) {
2134 maxburst = priv_dev->ep_buf_size - 1;
2159 if (priv_dev->dev_ver < DEV_VER_V2)
2166 if (!priv_dev->hw_configured_flag) {
2167 ret = cdns3_ep_onchip_buffer_reserve(priv_dev, buffering + 1,
2170 dev_err(priv_dev->dev, "onchip mem is full, ep is invalid\n");
2178 if (priv_ep->use_streams && priv_dev->gadget.speed >= USB_SPEED_SUPER) {
2179 if (priv_dev->dev_ver >= DEV_VER_V3) {
2186 cdns3_clear_register_bit(&priv_dev->regs->tdl_from_trb,
2199 cdns3_select_ep(priv_dev, bEndpointAddress);
2200 writel(ep_cfg, &priv_dev->regs->ep_cfg);
2203 dev_dbg(priv_dev->dev, "Configure %s: with val %08x\n",
2218 cdns3_endpoint *cdns3_find_available_ep(struct cdns3_device *priv_dev,
2224 list_for_each_entry(ep, &priv_dev->gadget.ep_list, ep_list) {
2267 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
2271 priv_ep = cdns3_find_available_ep(priv_dev, desc);
2273 dev_err(priv_dev->dev, "no available ep\n");
2277 dev_dbg(priv_dev->dev, "match endpoint: %s\n", priv_ep->name);
2279 spin_lock_irqsave(&priv_dev->lock, flags);
2293 spin_unlock_irqrestore(&priv_dev->lock, flags);
2348 struct cdns3_device *priv_dev;
2363 priv_dev = priv_ep->cdns3_dev;
2367 dev_dbg(priv_dev->dev, "usbss: invalid parameters\n");
2372 dev_err(priv_dev->dev, "usbss: missing wMaxPacketSize\n");
2376 if (dev_WARN_ONCE(priv_dev->dev, priv_ep->flags & EP_ENABLED,
2380 spin_lock_irqsave(&priv_dev->lock, flags);
2388 dev_err(priv_dev->dev, "Driver is limited to %d period\n",
2396 cdns3_select_ep(priv_dev, bEndpointAddress);
2414 if (priv_dev->gadget.speed >= USB_SPEED_SUPER) {
2420 priv_dev->using_streams |= true;
2434 cdns3_select_ep(priv_dev, bEndpointAddress);
2438 writel(EP_CMD_EPRST, &priv_dev->regs->ep_cmd);
2440 ret = readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val,
2451 cdns3_set_register_bit(&priv_dev->regs->ep_ien,
2454 if (priv_dev->dev_ver < DEV_VER_V2)
2455 cdns3_wa2_enable_detection(priv_dev, priv_ep, reg);
2457 writel(reg, &priv_dev->regs->ep_sts_en);
2466 reg = readl(&priv_dev->regs->ep_sts);
2472 spin_unlock_irqrestore(&priv_dev->lock, flags);
2487 struct cdns3_device *priv_dev;
2500 priv_dev = priv_ep->cdns3_dev;
2502 if (dev_WARN_ONCE(priv_dev->dev, !(priv_ep->flags & EP_ENABLED),
2506 spin_lock_irqsave(&priv_dev->lock, flags);
2510 cdns3_select_ep(priv_dev, ep->desc->bEndpointAddress);
2512 ep_cfg = readl(&priv_dev->regs->ep_cfg);
2514 writel(ep_cfg, &priv_dev->regs->ep_cfg);
2521 readl_poll_timeout_atomic(&priv_dev->regs->ep_sts, val,
2523 writel(EP_CMD_EPRST, &priv_dev->regs->ep_cmd);
2525 readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val,
2529 dev_err(priv_dev->dev, "Timeout: %s resetting failed.\n",
2562 spin_unlock_irqrestore(&priv_dev->lock, flags);
2580 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
2589 if (priv_dev->dev_ver < DEV_VER_V2) {
2590 ret = cdns3_wa2_gadget_ep_queue(priv_dev, priv_ep,
2601 ret = usb_gadget_map_request_by_dev(priv_dev->sysdev, request,
2616 if (priv_dev->hw_configured_flag &&
2619 cdns3_start_all_request(priv_dev, priv_ep);
2621 if (priv_dev->hw_configured_flag && priv_ep->prime_flag)
2622 cdns3_start_all_request(priv_dev, priv_ep);
2633 struct cdns3_device *priv_dev;
2641 priv_dev = priv_ep->cdns3_dev;
2643 spin_lock_irqsave(&priv_dev->lock, flags);
2652 zlp_request->buf = priv_dev->zlp_buf;
2658 dev_dbg(priv_dev->dev, "Queuing ZLP for endpoint: %s\n",
2663 spin_unlock_irqrestore(&priv_dev->lock, flags);
2678 struct cdns3_device *priv_dev;
2689 priv_dev = priv_ep->cdns3_dev;
2691 spin_lock_irqsave(&priv_dev->lock, flags);
2697 cdns3_select_ep(priv_dev, ep->desc->bEndpointAddress);
2732 spin_unlock_irqrestore(&priv_dev->lock, flags);
2743 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
2748 u32 ep_sts_reg = readl(&priv_dev->regs->ep_sts);
2764 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
2784 writel(EP_CMD_CSTALL | EP_CMD_EPRST, &priv_dev->regs->ep_cmd);
2787 ret = readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val,
2801 cdns3_start_all_request(priv_dev, priv_ep);
2815 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
2822 spin_lock_irqsave(&priv_dev->lock, flags);
2824 cdns3_select_ep(priv_dev, ep->desc->bEndpointAddress);
2833 spin_unlock_irqrestore(&priv_dev->lock, flags);
2859 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
2861 return readl(&priv_dev->regs->usb_itpn);
2864 int __cdns3_gadget_wakeup(struct cdns3_device *priv_dev)
2868 speed = cdns3_get_speed(priv_dev);
2874 writel(USB_CONF_LGO_L0, &priv_dev->regs->usb_conf);
2881 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
2885 spin_lock_irqsave(&priv_dev->lock, flags);
2886 ret = __cdns3_gadget_wakeup(priv_dev);
2887 spin_unlock_irqrestore(&priv_dev->lock, flags);
2894 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
2897 spin_lock_irqsave(&priv_dev->lock, flags);
2898 priv_dev->is_selfpowered = !!is_selfpowered;
2899 spin_unlock_irqrestore(&priv_dev->lock, flags);
2905 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
2908 writel(USB_CONF_DEVEN, &priv_dev->regs->usb_conf);
2910 writel(~0, &priv_dev->regs->ep_ists);
2911 writel(~0, &priv_dev->regs->usb_ists);
2912 writel(USB_CONF_DEVDS, &priv_dev->regs->usb_conf);
2918 static void cdns3_gadget_config(struct cdns3_device *priv_dev)
2920 struct cdns3_usb_regs __iomem *regs = priv_dev->regs;
2923 cdns3_ep0_config(priv_dev);
2932 if (priv_dev->dev_ver == DEV_VER_TI_V1) {
2955 writel(PUSB_PWR_FST_REG_ACCESS, &priv_dev->regs->usb_pwr);
2957 cdns3_configure_dmult(priv_dev, NULL);
2970 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
2974 spin_lock_irqsave(&priv_dev->lock, flags);
2975 priv_dev->gadget_driver = driver;
2982 writel(USB_CONF_SFORCE_FS, &priv_dev->regs->usb_conf);
2983 writel(USB_CONF_USB3DIS, &priv_dev->regs->usb_conf);
2986 writel(USB_CONF_USB3DIS, &priv_dev->regs->usb_conf);
2991 dev_err(priv_dev->dev,
3001 cdns3_gadget_config(priv_dev);
3002 spin_unlock_irqrestore(&priv_dev->lock, flags);
3014 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
3020 priv_dev->gadget_driver = NULL;
3022 priv_dev->onchip_used_size = 0;
3023 priv_dev->out_mem_is_allocated = 0;
3024 priv_dev->gadget.speed = USB_SPEED_UNKNOWN;
3026 list_for_each_entry(ep, &priv_dev->gadget.ep_list, ep_list) {
3029 cdns3_select_ep(priv_dev, bEndpointAddress);
3030 writel(EP_CMD_EPRST, &priv_dev->regs->ep_cmd);
3031 readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val,
3038 writel(0, &priv_dev->regs->usb_ien);
3039 writel(0, &priv_dev->regs->usb_pwr);
3040 writel(USB_CONF_DEVDS, &priv_dev->regs->usb_conf);
3057 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
3091 if (total > priv_dev->onchip_buffers)
3094 priv_dev->ep_buf_size = (priv_dev->onchip_buffers - 2 - iso) / (n_in + out);
3110 static void cdns3_free_all_eps(struct cdns3_device *priv_dev)
3115 priv_dev->eps[16] = NULL;
3118 if (priv_dev->eps[i]) {
3119 cdns3_free_trb_pool(priv_dev->eps[i]);
3120 devm_kfree(priv_dev->dev, priv_dev->eps[i]);
3126 * @priv_dev: extended gadget object
3130 static int cdns3_init_eps(struct cdns3_device *priv_dev)
3140 ep_enabled_reg = readl(&priv_dev->regs->usb_cap3);
3141 iso_ep_reg = readl(&priv_dev->regs->usb_cap4);
3143 dev_dbg(priv_dev->dev, "Initializing non-zero endpoints\n");
3154 priv_dev->eps[i] = priv_dev->eps[0];
3158 priv_ep = devm_kzalloc(priv_dev->dev, sizeof(*priv_ep),
3164 priv_ep->cdns3_dev = priv_dev;
3165 priv_dev->eps[i] = priv_ep;
3170 ret = cdns3_init_ep0(priv_dev, priv_ep);
3172 dev_err(priv_dev->dev, "Failed to init ep0\n");
3196 &priv_dev->gadget.ep_list);
3201 dev_dbg(priv_dev->dev, "Initialized %s support: %s %s\n",
3213 cdns3_free_all_eps(priv_dev);
3219 struct cdns3_device *priv_dev = container_of(dev,
3222 kfree(priv_dev);
3227 struct cdns3_device *priv_dev;
3229 priv_dev = cdns->gadget_dev;
3235 usb_del_gadget(&priv_dev->gadget);
3236 devm_free_irq(cdns->dev, cdns->dev_irq, priv_dev);
3238 cdns3_free_all_eps(priv_dev);
3240 while (!list_empty(&priv_dev->aligned_buf_list)) {
3243 buf = cdns3_next_align_buf(&priv_dev->aligned_buf_list);
3244 dma_free_coherent(priv_dev->sysdev, buf->size,
3252 dma_free_coherent(priv_dev->sysdev, 8, priv_dev->setup_buf,
3253 priv_dev->setup_dma);
3255 kfree(priv_dev->zlp_buf);
3256 usb_put_gadget(&priv_dev->gadget);
3263 struct cdns3_device *priv_dev;
3267 priv_dev = kzalloc(sizeof(*priv_dev), GFP_KERNEL);
3268 if (!priv_dev)
3271 usb_initialize_gadget(cdns->dev, &priv_dev->gadget,
3273 cdns->gadget_dev = priv_dev;
3274 priv_dev->sysdev = cdns->dev;
3275 priv_dev->dev = cdns->dev;
3276 priv_dev->regs = cdns->dev_regs;
3278 device_property_read_u16(priv_dev->dev, "cdns,on-chip-buff-size",
3279 &priv_dev->onchip_buffers);
3281 if (priv_dev->onchip_buffers <= 0) {
3282 u32 reg = readl(&priv_dev->regs->usb_cap2);
3284 priv_dev->onchip_buffers = USB_CAP2_ACTUAL_MEM_SIZE(reg);
3287 if (!priv_dev->onchip_buffers)
3288 priv_dev->onchip_buffers = 256;
3309 priv_dev->gadget.max_speed = max_speed;
3310 priv_dev->gadget.speed = USB_SPEED_UNKNOWN;
3311 priv_dev->gadget.ops = &cdns3_gadget_ops;
3312 priv_dev->gadget.name = "usb-ss-gadget";
3313 priv_dev->gadget.quirk_avoids_skb_reserve = 1;
3314 priv_dev->gadget.irq = cdns->dev_irq;
3316 spin_lock_init(&priv_dev->lock);
3317 INIT_WORK(&priv_dev->pending_status_wq,
3320 INIT_WORK(&priv_dev->aligned_buf_wq,
3324 INIT_LIST_HEAD(&priv_dev->gadget.ep_list);
3325 INIT_LIST_HEAD(&priv_dev->aligned_buf_list);
3327 ret = cdns3_init_eps(priv_dev);
3329 dev_err(priv_dev->dev, "Failed to create endpoints\n");
3334 priv_dev->setup_buf = dma_alloc_coherent(priv_dev->sysdev, 8,
3335 &priv_dev->setup_dma, GFP_DMA);
3336 if (!priv_dev->setup_buf) {
3341 priv_dev->dev_ver = readl(&priv_dev->regs->usb_cap6);
3343 dev_dbg(priv_dev->dev, "Device Controller version: %08x\n",
3344 readl(&priv_dev->regs->usb_cap6));
3345 dev_dbg(priv_dev->dev, "USB Capabilities:: %08x\n",
3346 readl(&priv_dev->regs->usb_cap1));
3347 dev_dbg(priv_dev->dev, "On-Chip memory configuration: %08x\n",
3348 readl(&priv_dev->regs->usb_cap2));
3350 priv_dev->dev_ver = GET_DEV_BASE_VERSION(priv_dev->dev_ver);
3351 if (priv_dev->dev_ver >= DEV_VER_V2)
3352 priv_dev->gadget.sg_supported = 1;
3354 priv_dev->zlp_buf = kzalloc(CDNS3_EP_ZLP_BUF_SIZE, GFP_KERNEL);
3355 if (!priv_dev->zlp_buf) {
3361 ret = usb_add_gadget(&priv_dev->gadget);
3363 dev_err(priv_dev->dev, "Failed to add gadget\n");
3369 kfree(priv_dev->zlp_buf);
3371 dma_free_coherent(priv_dev->sysdev, 8, priv_dev->setup_buf,
3372 priv_dev->setup_dma);
3374 cdns3_free_all_eps(priv_dev);
3376 usb_put_gadget(&priv_dev->gadget);
3423 struct cdns3_device *priv_dev = cdns->gadget_dev;
3426 cdns3_disconnect_gadget(priv_dev);
3429 priv_dev->gadget.speed = USB_SPEED_UNKNOWN;
3430 usb_gadget_set_state(&priv_dev->gadget, USB_STATE_NOTATTACHED);
3431 cdns3_hw_reset_eps_config(priv_dev);
3434 writel(0, &priv_dev->regs->usb_ien);
3441 struct cdns3_device *priv_dev = cdns->gadget_dev;
3443 if (!priv_dev->gadget_driver)
3446 cdns3_gadget_config(priv_dev);