Lines Matching defs:priv_dev

115 static int cdns3_get_dma_pos(struct cdns3_device *priv_dev,
120 dma_index = readl(&priv_dev->regs->ep_traddr) - priv_ep->trb_pool_dma;
160 * @priv_dev: extended gadget object
163 void cdns3_select_ep(struct cdns3_device *priv_dev, u32 ep)
165 if (priv_dev->selected_ep == ep)
168 priv_dev->selected_ep = ep;
169 writel(ep, &priv_dev->regs->ep_sel);
174 * @priv_dev: extended gadget object
179 static int cdns3_get_tdl(struct cdns3_device *priv_dev)
181 if (priv_dev->dev_ver < DEV_VER_V3)
182 return EP_CMD_TDL_GET(readl(&priv_dev->regs->ep_cmd));
184 return readl(&priv_dev->regs->ep_tdl);
197 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
200 dma_pool_free(priv_dev->eps_dma_pool,
214 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
223 priv_ep->trb_pool = dma_pool_alloc(priv_dev->eps_dma_pool,
264 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
270 &priv_dev->regs->ep_cmd);
273 readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val,
281 * @priv_dev: extended gadget object
283 void cdns3_hw_reset_eps_config(struct cdns3_device *priv_dev)
287 writel(USB_CONF_CFGRST, &priv_dev->regs->usb_conf);
289 cdns3_allow_enable_l1(priv_dev, 0);
290 priv_dev->hw_configured_flag = 0;
291 priv_dev->onchip_used_size = 0;
292 priv_dev->out_mem_is_allocated = 0;
293 priv_dev->wait_for_setup = 0;
294 priv_dev->using_streams = 0;
297 if (priv_dev->eps[i])
298 priv_dev->eps[i]->flags &= ~EP_CONFIGURED;
343 * @priv_dev: Extended gadget object
351 void cdns3_allow_enable_l1(struct cdns3_device *priv_dev, int enable)
354 writel(USB_CONF_L1EN, &priv_dev->regs->usb_conf);
356 writel(USB_CONF_L1DS, &priv_dev->regs->usb_conf);
359 enum usb_device_speed cdns3_get_speed(struct cdns3_device *priv_dev)
363 reg = readl(&priv_dev->regs->usb_sts);
378 * @priv_dev: Extended gadget object
384 static int cdns3_start_all_request(struct cdns3_device *priv_dev,
404 dev_dbg(priv_dev->dev, "Blocking external request\n");
436 #define cdns3_wa2_enable_detection(priv_dev, priv_ep, reg) do { \
508 static struct usb_request *cdns3_wa2_gadget_giveback(struct cdns3_device *priv_dev,
524 usb_gadget_unmap_request_by_dev(priv_dev->sysdev, req,
532 usb_gadget_map_request_by_dev(priv_dev->sysdev, req,
541 cdns3_start_all_request(priv_dev, priv_ep);
548 static int cdns3_wa2_gadget_ep_queue(struct cdns3_device *priv_dev,
562 cdns3_select_ep(priv_dev, priv_ep->num | priv_ep->dir);
564 reg = readl(&priv_dev->regs->ep_sts_en);
567 writel(reg, &priv_dev->regs->ep_sts_en);
710 static void cdns3_wa2_reset_tdl(struct cdns3_device *priv_dev)
712 u16 tdl = EP_CMD_TDL_GET(readl(&priv_dev->regs->ep_cmd));
718 &priv_dev->regs->ep_cmd);
722 static void cdns3_wa2_check_outq_status(struct cdns3_device *priv_dev)
727 cdns3_select_ep(priv_dev, 0);
729 ep_sts_reg = readl(&priv_dev->regs->ep_sts);
733 struct cdns3_endpoint *outq_ep = priv_dev->eps[outq_ep_num];
746 cdns3_select_ep(priv_dev, outq_ep->num |
748 ep_sts_en_reg = readl(&priv_dev->regs->ep_sts_en);
749 ep_cmd_reg = readl(&priv_dev->regs->ep_cmd);
752 cdns3_set_register_bit(&priv_dev->regs->ep_cfg,
755 cdns3_wa2_enable_detection(priv_dev, outq_ep,
758 &priv_dev->regs->ep_sts_en);
760 cdns3_wa2_reset_tdl(priv_dev);
775 &priv_dev->regs->ep_cmd);
796 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
805 usb_gadget_unmap_request_by_dev(priv_dev->sysdev, request,
811 dma_sync_single_for_cpu(priv_dev->sysdev,
824 if (priv_dev->dev_ver < DEV_VER_V2) {
825 request = cdns3_wa2_gadget_giveback(priv_dev, priv_ep,
835 if (request->complete && request->buf != priv_dev->zlp_buf) {
836 spin_unlock(&priv_dev->lock);
839 spin_lock(&priv_dev->lock);
842 if (request->buf == priv_dev->zlp_buf)
866 struct cdns3_device *priv_dev = container_of(work, struct cdns3_device,
871 spin_lock_irqsave(&priv_dev->lock, flags);
873 list_for_each_entry_safe(buf, tmp, &priv_dev->aligned_buf_list, list) {
882 spin_unlock_irqrestore(&priv_dev->lock, flags);
883 dma_free_noncoherent(priv_dev->sysdev, buf->size,
886 spin_lock_irqsave(&priv_dev->lock, flags);
890 spin_unlock_irqrestore(&priv_dev->lock, flags);
896 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
914 buf->buf = dma_alloc_noncoherent(priv_dev->sysdev,
928 &priv_dev->aligned_buf_wq);
935 &priv_dev->aligned_buf_list);
940 dma_sync_single_for_cpu(priv_dev->sysdev,
947 dma_sync_single_for_device(priv_dev->sysdev,
959 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
964 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY);
978 static void cdns3_wa1_tray_restore_cycle_bit(struct cdns3_device *priv_dev,
984 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY);
985 dma_index = cdns3_get_dma_pos(priv_dev, priv_ep);
994 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
1043 if (priv_dev->dev_ver >= DEV_VER_V2) {
1044 if (priv_dev->gadget.speed == USB_SPEED_SUPER)
1061 &priv_dev->regs->ep_traddr);
1066 writel(EP_STS_TRBERR | EP_STS_DESCMIS, &priv_dev->regs->ep_sts);
1075 if (priv_dev->dev_ver < DEV_VER_V2)
1077 &priv_dev->regs->ep_cmd);
1078 else if (priv_dev->dev_ver > DEV_VER_V2)
1079 writel(tdl, &priv_dev->regs->ep_tdl);
1082 writel(EP_CMD_DRDY, &priv_dev->regs->ep_cmd);
1084 EP_CMD_ERDY, &priv_dev->regs->ep_cmd);
1087 readl(&priv_dev->regs->ep_traddr));
1091 __cdns3_gadget_wakeup(priv_dev);
1098 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
1100 if (priv_dev->dev_ver < DEV_VER_V3)
1103 if (readl(&priv_dev->regs->ep_sts) & EP_STS_TRBERR) {
1104 writel(EP_STS_TRBERR, &priv_dev->regs->ep_sts);
1105 writel(EP_CMD_DRDY, &priv_dev->regs->ep_cmd);
1119 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
1167 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY);
1168 dma_index = cdns3_get_dma_pos(priv_dev, priv_ep);
1214 if (priv_dev->dev_ver <= DEV_VER_V2)
1220 if (priv_dev->dev_ver >= DEV_VER_V2) {
1225 if (priv_dev->gadget.speed == USB_SPEED_SUPER)
1275 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && priv_dev->dev_ver <= DEV_VER_V2)
1329 if (priv_dev->dev_ver < DEV_VER_V2 &&
1332 u16 old_tdl = EP_CMD_TDL_GET(readl(&priv_dev->regs->ep_cmd));
1342 &priv_dev->regs->ep_cmd);
1355 if (priv_dev->dev_ver <= DEV_VER_V2)
1356 cdns3_wa1_tray_restore_cycle_bit(priv_dev, priv_ep);
1394 cdns3_set_register_bit(&priv_dev->regs->ep_cfg,
1400 &priv_dev->regs->ep_traddr);
1408 writel(EP_STS_TRBERR | EP_STS_DESCMIS, &priv_dev->regs->ep_sts);
1409 writel(EP_CMD_DRDY, &priv_dev->regs->ep_cmd);
1412 readl(&priv_dev->regs->ep_traddr));
1416 __cdns3_gadget_wakeup(priv_dev);
1421 void cdns3_set_hw_configuration(struct cdns3_device *priv_dev)
1426 if (priv_dev->hw_configured_flag)
1429 writel(USB_CONF_CFGSET, &priv_dev->regs->usb_conf);
1431 cdns3_set_register_bit(&priv_dev->regs->usb_conf,
1434 priv_dev->hw_configured_flag = 1;
1436 list_for_each_entry(ep, &priv_dev->gadget.ep_list, ep_list) {
1439 cdns3_start_all_request(priv_dev, priv_ep);
1443 cdns3_allow_enable_l1(priv_dev, 1);
1488 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
1494 current_index = cdns3_get_dma_pos(priv_dev, priv_ep);
1495 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY);
1548 static void cdns3_transfer_completed(struct cdns3_device *priv_dev,
1567 if (priv_ep->dequeue == cdns3_get_dma_pos(priv_dev, priv_ep) &&
1580 cdns3_select_ep(priv_dev, priv_ep->endpoint.address);
1621 cdns3_select_ep(priv_dev, priv_ep->endpoint.address);
1627 dev_warn(priv_dev->dev,
1649 cdns3_start_all_request(priv_dev, priv_ep);
1654 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
1663 writel(EP_CMD_DRDY, &priv_dev->regs->ep_cmd);
1665 __cdns3_gadget_wakeup(priv_dev);
1668 readl(&priv_dev->regs->ep_traddr));
1675 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
1684 writel(EP_CMD_TDL_SET(tdl) | EP_CMD_STDL, &priv_dev->regs->ep_cmd);
1695 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
1701 cdns3_select_ep(priv_dev, priv_ep->endpoint.address);
1703 trace_cdns3_epx_irq(priv_dev, priv_ep);
1705 ep_sts_reg = readl(&priv_dev->regs->ep_sts);
1706 writel(ep_sts_reg, &priv_dev->regs->ep_sts);
1711 tdl = cdns3_get_tdl(priv_dev);
1724 &priv_dev->regs->ep_cmd);
1733 cdns3_start_all_request(priv_dev, priv_ep);
1741 priv_dev->dev_ver < DEV_VER_V2)) {
1755 u32 ep_cfg = readl(&priv_dev->regs->ep_cfg);
1758 writel(ep_cfg, &priv_dev->regs->ep_cfg);
1762 cdns3_transfer_completed(priv_dev, priv_ep);
1767 cdns3_start_all_request(priv_dev, priv_ep);
1787 cdns3_transfer_completed(priv_dev, priv_ep);
1796 cdns3_transfer_completed(priv_dev, priv_ep);
1807 cdns3_transfer_completed(priv_dev, priv_ep);
1816 if (ep_sts_reg & EP_STS_DESCMIS && priv_dev->dev_ver < DEV_VER_V2 &&
1823 static void cdns3_disconnect_gadget(struct cdns3_device *priv_dev)
1825 if (priv_dev->gadget_driver && priv_dev->gadget_driver->disconnect)
1826 priv_dev->gadget_driver->disconnect(&priv_dev->gadget);
1831 * @priv_dev: extended gadget object
1835 static void cdns3_check_usb_interrupt_proceed(struct cdns3_device *priv_dev,
1837 __must_hold(&priv_dev->lock)
1841 trace_cdns3_usb_irq(priv_dev, usb_ists);
1848 if (readl(&priv_dev->regs->drbl))
1849 __cdns3_gadget_wakeup(priv_dev);
1854 speed = cdns3_get_speed(priv_dev);
1855 priv_dev->gadget.speed = speed;
1856 usb_gadget_set_state(&priv_dev->gadget, USB_STATE_POWERED);
1857 cdns3_ep0_config(priv_dev);
1862 spin_unlock(&priv_dev->lock);
1863 cdns3_disconnect_gadget(priv_dev);
1864 spin_lock(&priv_dev->lock);
1865 priv_dev->gadget.speed = USB_SPEED_UNKNOWN;
1866 usb_gadget_set_state(&priv_dev->gadget, USB_STATE_NOTATTACHED);
1867 cdns3_hw_reset_eps_config(priv_dev);
1871 if (priv_dev->gadget_driver &&
1872 priv_dev->gadget_driver->suspend) {
1873 spin_unlock(&priv_dev->lock);
1874 priv_dev->gadget_driver->suspend(&priv_dev->gadget);
1875 spin_lock(&priv_dev->lock);
1880 if (priv_dev->gadget_driver &&
1881 priv_dev->gadget_driver->resume) {
1882 spin_unlock(&priv_dev->lock);
1883 priv_dev->gadget_driver->resume(&priv_dev->gadget);
1884 spin_lock(&priv_dev->lock);
1890 if (priv_dev->gadget_driver) {
1891 spin_unlock(&priv_dev->lock);
1892 usb_gadget_udc_reset(&priv_dev->gadget,
1893 priv_dev->gadget_driver);
1894 spin_lock(&priv_dev->lock);
1897 speed = cdns3_get_speed(priv_dev);
1898 priv_dev->gadget.speed = speed;
1899 cdns3_hw_reset_eps_config(priv_dev);
1900 cdns3_ep0_config(priv_dev);
1915 struct cdns3_device *priv_dev = data;
1916 struct cdns *cdns = dev_get_drvdata(priv_dev->dev);
1924 reg = readl(&priv_dev->regs->usb_ists);
1933 reg = ~reg & readl(&priv_dev->regs->usb_ien);
1935 writel(reg, &priv_dev->regs->usb_ien);
1940 reg = readl(&priv_dev->regs->ep_ists);
1942 writel(0, &priv_dev->regs->ep_ien);
1960 struct cdns3_device *priv_dev = data;
1966 spin_lock_irqsave(&priv_dev->lock, flags);
1968 reg = readl(&priv_dev->regs->usb_ists);
1970 writel(reg, &priv_dev->regs->usb_ists);
1971 writel(USB_IEN_INIT, &priv_dev->regs->usb_ien);
1972 cdns3_check_usb_interrupt_proceed(priv_dev, reg);
1976 reg = readl(&priv_dev->regs->ep_ists);
1980 cdns3_check_ep0_interrupt_proceed(priv_dev, USB_DIR_OUT);
1986 cdns3_check_ep0_interrupt_proceed(priv_dev, USB_DIR_IN);
1997 cdns3_check_ep_interrupt_proceed(priv_dev->eps[bit]);
2001 if (priv_dev->dev_ver < DEV_VER_V2 && priv_dev->using_streams)
2002 cdns3_wa2_check_outq_status(priv_dev);
2005 writel(~0, &priv_dev->regs->ep_ien);
2006 spin_unlock_irqrestore(&priv_dev->lock, flags);
2017 * @priv_dev: extended gadget object
2023 static int cdns3_ep_onchip_buffer_reserve(struct cdns3_device *priv_dev,
2029 remained = priv_dev->onchip_buffers - priv_dev->onchip_used_size - 2;
2035 priv_dev->onchip_used_size += size;
2043 if (priv_dev->out_mem_is_allocated >= size)
2046 required = size - priv_dev->out_mem_is_allocated;
2051 priv_dev->out_mem_is_allocated += required;
2052 priv_dev->onchip_used_size += required;
2058 static void cdns3_configure_dmult(struct cdns3_device *priv_dev,
2061 struct cdns3_usb_regs __iomem *regs = priv_dev->regs;
2064 if (priv_dev->dev_ver <= DEV_VER_V2)
2067 if (priv_dev->dev_ver == DEV_VER_V2)
2070 if (priv_dev->dev_ver >= DEV_VER_V3 && priv_ep) {
2100 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
2108 buffering = priv_dev->ep_buf_size - 1;
2110 cdns3_configure_dmult(priv_dev, priv_ep);
2116 if (priv_dev->dev_ver >= DEV_VER_V2 && !priv_ep->dir)
2122 if (priv_dev->dev_ver >= DEV_VER_V2 && !priv_ep->dir)
2130 switch (priv_dev->gadget.speed) {
2140 maxburst = priv_dev->ep_buf_size - 1;
2165 if (priv_dev->dev_ver < DEV_VER_V2)
2172 if (!priv_dev->hw_configured_flag) {
2173 ret = cdns3_ep_onchip_buffer_reserve(priv_dev, buffering + 1,
2176 dev_err(priv_dev->dev, "onchip mem is full, ep is invalid\n");
2184 if (priv_ep->use_streams && priv_dev->gadget.speed >= USB_SPEED_SUPER) {
2185 if (priv_dev->dev_ver >= DEV_VER_V3) {
2192 cdns3_clear_register_bit(&priv_dev->regs->tdl_from_trb,
2205 cdns3_select_ep(priv_dev, bEndpointAddress);
2206 writel(ep_cfg, &priv_dev->regs->ep_cfg);
2209 dev_dbg(priv_dev->dev, "Configure %s: with val %08x\n",
2224 cdns3_endpoint *cdns3_find_available_ep(struct cdns3_device *priv_dev,
2230 list_for_each_entry(ep, &priv_dev->gadget.ep_list, ep_list) {
2273 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
2277 priv_ep = cdns3_find_available_ep(priv_dev, desc);
2279 dev_err(priv_dev->dev, "no available ep\n");
2283 dev_dbg(priv_dev->dev, "match endpoint: %s\n", priv_ep->name);
2285 spin_lock_irqsave(&priv_dev->lock, flags);
2299 spin_unlock_irqrestore(&priv_dev->lock, flags);
2354 struct cdns3_device *priv_dev;
2369 priv_dev = priv_ep->cdns3_dev;
2373 dev_dbg(priv_dev->dev, "usbss: invalid parameters\n");
2378 dev_err(priv_dev->dev, "usbss: missing wMaxPacketSize\n");
2382 if (dev_WARN_ONCE(priv_dev->dev, priv_ep->flags & EP_ENABLED,
2386 spin_lock_irqsave(&priv_dev->lock, flags);
2394 dev_err(priv_dev->dev, "Driver is limited to %d period\n",
2402 cdns3_select_ep(priv_dev, bEndpointAddress);
2420 if (priv_dev->gadget.speed >= USB_SPEED_SUPER) {
2426 priv_dev->using_streams |= true;
2440 cdns3_select_ep(priv_dev, bEndpointAddress);
2444 writel(EP_CMD_EPRST, &priv_dev->regs->ep_cmd);
2446 ret = readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val,
2457 cdns3_set_register_bit(&priv_dev->regs->ep_ien,
2460 if (priv_dev->dev_ver < DEV_VER_V2)
2461 cdns3_wa2_enable_detection(priv_dev, priv_ep, reg);
2463 writel(reg, &priv_dev->regs->ep_sts_en);
2472 reg = readl(&priv_dev->regs->ep_sts);
2478 spin_unlock_irqrestore(&priv_dev->lock, flags);
2493 struct cdns3_device *priv_dev;
2506 priv_dev = priv_ep->cdns3_dev;
2508 if (dev_WARN_ONCE(priv_dev->dev, !(priv_ep->flags & EP_ENABLED),
2512 spin_lock_irqsave(&priv_dev->lock, flags);
2516 cdns3_select_ep(priv_dev, ep->desc->bEndpointAddress);
2518 ep_cfg = readl(&priv_dev->regs->ep_cfg);
2520 writel(ep_cfg, &priv_dev->regs->ep_cfg);
2527 readl_poll_timeout_atomic(&priv_dev->regs->ep_sts, val,
2529 writel(EP_CMD_EPRST, &priv_dev->regs->ep_cmd);
2531 readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val,
2535 dev_err(priv_dev->dev, "Timeout: %s resetting failed.\n",
2568 spin_unlock_irqrestore(&priv_dev->lock, flags);
2586 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
2595 if (priv_dev->dev_ver < DEV_VER_V2) {
2596 ret = cdns3_wa2_gadget_ep_queue(priv_dev, priv_ep,
2608 ret = usb_gadget_map_request_by_dev(priv_dev->sysdev, request,
2624 if (priv_dev->hw_configured_flag &&
2627 cdns3_start_all_request(priv_dev, priv_ep);
2629 if (priv_dev->hw_configured_flag && priv_ep->prime_flag)
2630 cdns3_start_all_request(priv_dev, priv_ep);
2641 struct cdns3_device *priv_dev;
2649 priv_dev = priv_ep->cdns3_dev;
2651 spin_lock_irqsave(&priv_dev->lock, flags);
2660 zlp_request->buf = priv_dev->zlp_buf;
2666 dev_dbg(priv_dev->dev, "Queuing ZLP for endpoint: %s\n",
2671 spin_unlock_irqrestore(&priv_dev->lock, flags);
2686 struct cdns3_device *priv_dev;
2698 priv_dev = priv_ep->cdns3_dev;
2700 spin_lock_irqsave(&priv_dev->lock, flags);
2706 cdns3_select_ep(priv_dev, ep->desc->bEndpointAddress);
2730 writel(EP_CMD_DFLUSH, &priv_dev->regs->ep_cmd);
2733 readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val,
2752 spin_unlock_irqrestore(&priv_dev->lock, flags);
2763 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
2768 u32 ep_sts_reg = readl(&priv_dev->regs->ep_sts);
2784 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
2804 writel(EP_CMD_CSTALL | EP_CMD_EPRST, &priv_dev->regs->ep_cmd);
2807 ret = readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val,
2821 cdns3_start_all_request(priv_dev, priv_ep);
2835 struct cdns3_device *priv_dev = priv_ep->cdns3_dev;
2842 spin_lock_irqsave(&priv_dev->lock, flags);
2844 cdns3_select_ep(priv_dev, ep->desc->bEndpointAddress);
2853 spin_unlock_irqrestore(&priv_dev->lock, flags);
2879 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
2881 return readl(&priv_dev->regs->usb_itpn);
2884 int __cdns3_gadget_wakeup(struct cdns3_device *priv_dev)
2888 speed = cdns3_get_speed(priv_dev);
2894 writel(USB_CONF_LGO_L0, &priv_dev->regs->usb_conf);
2901 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
2905 spin_lock_irqsave(&priv_dev->lock, flags);
2906 ret = __cdns3_gadget_wakeup(priv_dev);
2907 spin_unlock_irqrestore(&priv_dev->lock, flags);
2914 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
2917 spin_lock_irqsave(&priv_dev->lock, flags);
2918 priv_dev->is_selfpowered = !!is_selfpowered;
2919 spin_unlock_irqrestore(&priv_dev->lock, flags);
2925 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
2928 writel(USB_CONF_DEVEN, &priv_dev->regs->usb_conf);
2930 writel(~0, &priv_dev->regs->ep_ists);
2931 writel(~0, &priv_dev->regs->usb_ists);
2932 writel(USB_CONF_DEVDS, &priv_dev->regs->usb_conf);
2938 static void cdns3_gadget_config(struct cdns3_device *priv_dev)
2940 struct cdns3_usb_regs __iomem *regs = priv_dev->regs;
2943 cdns3_ep0_config(priv_dev);
2952 if (priv_dev->dev_ver == DEV_VER_TI_V1) {
2975 writel(PUSB_PWR_FST_REG_ACCESS, &priv_dev->regs->usb_pwr);
2977 cdns3_configure_dmult(priv_dev, NULL);
2990 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
2994 spin_lock_irqsave(&priv_dev->lock, flags);
2995 priv_dev->gadget_driver = driver;
3002 writel(USB_CONF_SFORCE_FS, &priv_dev->regs->usb_conf);
3003 writel(USB_CONF_USB3DIS, &priv_dev->regs->usb_conf);
3006 writel(USB_CONF_USB3DIS, &priv_dev->regs->usb_conf);
3011 dev_err(priv_dev->dev,
3021 cdns3_gadget_config(priv_dev);
3022 spin_unlock_irqrestore(&priv_dev->lock, flags);
3034 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
3040 priv_dev->gadget_driver = NULL;
3042 priv_dev->onchip_used_size = 0;
3043 priv_dev->out_mem_is_allocated = 0;
3044 priv_dev->gadget.speed = USB_SPEED_UNKNOWN;
3046 list_for_each_entry(ep, &priv_dev->gadget.ep_list, ep_list) {
3049 cdns3_select_ep(priv_dev, bEndpointAddress);
3050 writel(EP_CMD_EPRST, &priv_dev->regs->ep_cmd);
3051 readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val,
3058 writel(0, &priv_dev->regs->usb_ien);
3059 writel(0, &priv_dev->regs->usb_pwr);
3060 writel(USB_CONF_DEVDS, &priv_dev->regs->usb_conf);
3077 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget);
3111 if (total > priv_dev->onchip_buffers)
3114 priv_dev->ep_buf_size = (priv_dev->onchip_buffers - 2 - iso) / (n_in + out);
3130 static void cdns3_free_all_eps(struct cdns3_device *priv_dev)
3135 priv_dev->eps[16] = NULL;
3138 if (priv_dev->eps[i]) {
3139 cdns3_free_trb_pool(priv_dev->eps[i]);
3140 devm_kfree(priv_dev->dev, priv_dev->eps[i]);
3146 * @priv_dev: extended gadget object
3150 static int cdns3_init_eps(struct cdns3_device *priv_dev)
3160 ep_enabled_reg = readl(&priv_dev->regs->usb_cap3);
3161 iso_ep_reg = readl(&priv_dev->regs->usb_cap4);
3163 dev_dbg(priv_dev->dev, "Initializing non-zero endpoints\n");
3174 priv_dev->eps[i] = priv_dev->eps[0];
3178 priv_ep = devm_kzalloc(priv_dev->dev, sizeof(*priv_ep),
3184 priv_ep->cdns3_dev = priv_dev;
3185 priv_dev->eps[i] = priv_ep;
3190 ret = cdns3_init_ep0(priv_dev, priv_ep);
3192 dev_err(priv_dev->dev, "Failed to init ep0\n");
3216 &priv_dev->gadget.ep_list);
3221 dev_dbg(priv_dev->dev, "Initialized %s support: %s %s\n",
3233 cdns3_free_all_eps(priv_dev);
3239 struct cdns3_device *priv_dev = container_of(dev,
3242 kfree(priv_dev);
3247 struct cdns3_device *priv_dev;
3249 priv_dev = cdns->gadget_dev;
3255 usb_del_gadget(&priv_dev->gadget);
3256 devm_free_irq(cdns->dev, cdns->dev_irq, priv_dev);
3258 cdns3_free_all_eps(priv_dev);
3260 while (!list_empty(&priv_dev->aligned_buf_list)) {
3263 buf = cdns3_next_align_buf(&priv_dev->aligned_buf_list);
3264 dma_free_noncoherent(priv_dev->sysdev, buf->size,
3273 dma_free_coherent(priv_dev->sysdev, 8, priv_dev->setup_buf,
3274 priv_dev->setup_dma);
3275 dma_pool_destroy(priv_dev->eps_dma_pool);
3277 kfree(priv_dev->zlp_buf);
3278 usb_put_gadget(&priv_dev->gadget);
3285 struct cdns3_device *priv_dev;
3289 priv_dev = kzalloc(sizeof(*priv_dev), GFP_KERNEL);
3290 if (!priv_dev)
3293 usb_initialize_gadget(cdns->dev, &priv_dev->gadget,
3295 cdns->gadget_dev = priv_dev;
3296 priv_dev->sysdev = cdns->dev;
3297 priv_dev->dev = cdns->dev;
3298 priv_dev->regs = cdns->dev_regs;
3300 device_property_read_u16(priv_dev->dev, "cdns,on-chip-buff-size",
3301 &priv_dev->onchip_buffers);
3303 if (priv_dev->onchip_buffers <= 0) {
3304 u32 reg = readl(&priv_dev->regs->usb_cap2);
3306 priv_dev->onchip_buffers = USB_CAP2_ACTUAL_MEM_SIZE(reg);
3309 if (!priv_dev->onchip_buffers)
3310 priv_dev->onchip_buffers = 256;
3331 priv_dev->gadget.max_speed = max_speed;
3332 priv_dev->gadget.speed = USB_SPEED_UNKNOWN;
3333 priv_dev->gadget.ops = &cdns3_gadget_ops;
3334 priv_dev->gadget.name = "usb-ss-gadget";
3335 priv_dev->gadget.quirk_avoids_skb_reserve = 1;
3336 priv_dev->gadget.irq = cdns->dev_irq;
3338 spin_lock_init(&priv_dev->lock);
3339 INIT_WORK(&priv_dev->pending_status_wq,
3342 INIT_WORK(&priv_dev->aligned_buf_wq,
3346 INIT_LIST_HEAD(&priv_dev->gadget.ep_list);
3347 INIT_LIST_HEAD(&priv_dev->aligned_buf_list);
3348 priv_dev->eps_dma_pool = dma_pool_create("cdns3_eps_dma_pool",
3349 priv_dev->sysdev,
3351 if (!priv_dev->eps_dma_pool) {
3352 dev_err(priv_dev->dev, "Failed to create TRB dma pool\n");
3357 ret = cdns3_init_eps(priv_dev);
3359 dev_err(priv_dev->dev, "Failed to create endpoints\n");
3364 priv_dev->setup_buf = dma_alloc_coherent(priv_dev->sysdev, 8,
3365 &priv_dev->setup_dma, GFP_DMA);
3366 if (!priv_dev->setup_buf) {
3371 priv_dev->dev_ver = readl(&priv_dev->regs->usb_cap6);
3373 dev_dbg(priv_dev->dev, "Device Controller version: %08x\n",
3374 readl(&priv_dev->regs->usb_cap6));
3375 dev_dbg(priv_dev->dev, "USB Capabilities:: %08x\n",
3376 readl(&priv_dev->regs->usb_cap1));
3377 dev_dbg(priv_dev->dev, "On-Chip memory configuration: %08x\n",
3378 readl(&priv_dev->regs->usb_cap2));
3380 priv_dev->dev_ver = GET_DEV_BASE_VERSION(priv_dev->dev_ver);
3381 if (priv_dev->dev_ver >= DEV_VER_V2)
3382 priv_dev->gadget.sg_supported = 1;
3384 priv_dev->zlp_buf = kzalloc(CDNS3_EP_ZLP_BUF_SIZE, GFP_KERNEL);
3385 if (!priv_dev->zlp_buf) {
3391 ret = usb_add_gadget(&priv_dev->gadget);
3393 dev_err(priv_dev->dev, "Failed to add gadget\n");
3399 kfree(priv_dev->zlp_buf);
3401 dma_free_coherent(priv_dev->sysdev, 8, priv_dev->setup_buf,
3402 priv_dev->setup_dma);
3404 cdns3_free_all_eps(priv_dev);
3406 dma_pool_destroy(priv_dev->eps_dma_pool);
3408 usb_put_gadget(&priv_dev->gadget);
3455 struct cdns3_device *priv_dev = cdns->gadget_dev;
3458 cdns3_disconnect_gadget(priv_dev);
3461 priv_dev->gadget.speed = USB_SPEED_UNKNOWN;
3462 usb_gadget_set_state(&priv_dev->gadget, USB_STATE_NOTATTACHED);
3463 cdns3_hw_reset_eps_config(priv_dev);
3466 writel(0, &priv_dev->regs->usb_ien);
3473 struct cdns3_device *priv_dev = cdns->gadget_dev;
3475 if (!priv_dev->gadget_driver)
3478 cdns3_gadget_config(priv_dev);
3480 writel(USB_CONF_DEVEN, &priv_dev->regs->usb_conf);