Lines Matching refs:priv_dev
96 static int cdns3_get_dma_pos(struct cdns3_device *priv_dev, in cdns3_get_dma_pos() argument
101 dma_index = readl(&priv_dev->regs->ep_traddr) - priv_ep->trb_pool_dma; in cdns3_get_dma_pos()
144 void cdns3_select_ep(struct cdns3_device *priv_dev, u32 ep) in cdns3_select_ep() argument
146 if (priv_dev->selected_ep == ep) in cdns3_select_ep()
149 priv_dev->selected_ep = ep; in cdns3_select_ep()
150 writel(ep, &priv_dev->regs->ep_sel); in cdns3_select_ep()
181 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_allocate_trb_pool() local
186 priv_ep->trb_pool = dma_alloc_coherent(priv_dev->sysdev, in cdns3_allocate_trb_pool()
210 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_free_trb_pool() local
213 dma_free_coherent(priv_dev->sysdev, in cdns3_free_trb_pool()
228 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_stall_flush() local
234 &priv_dev->regs->ep_cmd); in cdns3_ep_stall_flush()
237 readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val, in cdns3_ep_stall_flush()
247 void cdns3_hw_reset_eps_config(struct cdns3_device *priv_dev) in cdns3_hw_reset_eps_config() argument
249 writel(USB_CONF_CFGRST, &priv_dev->regs->usb_conf); in cdns3_hw_reset_eps_config()
251 cdns3_allow_enable_l1(priv_dev, 0); in cdns3_hw_reset_eps_config()
252 priv_dev->hw_configured_flag = 0; in cdns3_hw_reset_eps_config()
253 priv_dev->onchip_used_size = 0; in cdns3_hw_reset_eps_config()
254 priv_dev->out_mem_is_allocated = 0; in cdns3_hw_reset_eps_config()
255 priv_dev->wait_for_setup = 0; in cdns3_hw_reset_eps_config()
321 void cdns3_allow_enable_l1(struct cdns3_device *priv_dev, int enable) in cdns3_allow_enable_l1() argument
324 writel(USB_CONF_L1EN, &priv_dev->regs->usb_conf); in cdns3_allow_enable_l1()
326 writel(USB_CONF_L1DS, &priv_dev->regs->usb_conf); in cdns3_allow_enable_l1()
329 enum usb_device_speed cdns3_get_speed(struct cdns3_device *priv_dev) in cdns3_get_speed() argument
333 reg = readl(&priv_dev->regs->usb_sts); in cdns3_get_speed()
354 static int cdns3_start_all_request(struct cdns3_device *priv_dev, in cdns3_start_all_request() argument
382 #define cdns3_wa2_enable_detection(priv_dev, ep_priv, reg) do { \ argument
438 struct usb_request *cdns3_wa2_gadget_giveback(struct cdns3_device *priv_dev, in cdns3_wa2_gadget_giveback() argument
464 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_wa2_gadget_giveback()
471 int cdns3_wa2_gadget_ep_queue(struct cdns3_device *priv_dev, in cdns3_wa2_gadget_ep_queue() argument
485 cdns3_select_ep(priv_dev, priv_ep->num | priv_ep->dir); in cdns3_wa2_gadget_ep_queue()
487 reg = readl(&priv_dev->regs->ep_sts_en); in cdns3_wa2_gadget_ep_queue()
490 writel(reg, &priv_dev->regs->ep_sts_en); in cdns3_wa2_gadget_ep_queue()
638 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_giveback() local
646 usb_gadget_unmap_request_by_dev(priv_dev->sysdev, request, in cdns3_gadget_giveback()
657 if (priv_dev->dev_ver < DEV_VER_V2) { in cdns3_gadget_giveback()
658 request = cdns3_wa2_gadget_giveback(priv_dev, priv_ep, in cdns3_gadget_giveback()
665 spin_unlock(&priv_dev->lock); in cdns3_gadget_giveback()
668 spin_lock(&priv_dev->lock); in cdns3_gadget_giveback()
671 if (request->buf == priv_dev->zlp_buf) in cdns3_gadget_giveback()
695 struct cdns3_device *priv_dev = container_of(work, struct cdns3_device, in cdns3_free_aligned_request_buf() local
700 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_free_aligned_request_buf()
702 list_for_each_entry_safe(buf, tmp, &priv_dev->aligned_buf_list, list) { in cdns3_free_aligned_request_buf()
711 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_free_aligned_request_buf()
712 dma_free_coherent(priv_dev->sysdev, buf->size, in cdns3_free_aligned_request_buf()
715 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_free_aligned_request_buf()
719 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_free_aligned_request_buf()
725 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_prepare_aligned_request_buf() local
741 buf->buf = dma_alloc_coherent(priv_dev->sysdev, in cdns3_prepare_aligned_request_buf()
754 &priv_dev->aligned_buf_wq); in cdns3_prepare_aligned_request_buf()
761 &priv_dev->aligned_buf_list); in cdns3_prepare_aligned_request_buf()
778 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_wa1_update_guard() local
783 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY); in cdns3_wa1_update_guard()
797 static void cdns3_wa1_tray_restore_cycle_bit(struct cdns3_device *priv_dev, in cdns3_wa1_tray_restore_cycle_bit() argument
803 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY); in cdns3_wa1_tray_restore_cycle_bit()
804 dma_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_wa1_tray_restore_cycle_bit()
819 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_run_transfer() local
863 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY); in cdns3_ep_run_transfer()
864 dma_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_ep_run_transfer()
890 if (priv_dev->dev_ver <= DEV_VER_V2) in cdns3_ep_run_transfer()
910 if (likely(priv_dev->dev_ver >= DEV_VER_V2)) in cdns3_ep_run_transfer()
916 if (priv_dev->gadget.speed == USB_SPEED_SUPER) in cdns3_ep_run_transfer()
966 if (priv_dev->dev_ver <= DEV_VER_V2) in cdns3_ep_run_transfer()
967 cdns3_wa1_tray_restore_cycle_bit(priv_dev, priv_ep); in cdns3_ep_run_transfer()
990 cdns3_set_register_bit(&priv_dev->regs->ep_cfg, in cdns3_ep_run_transfer()
996 &priv_dev->regs->ep_traddr); in cdns3_ep_run_transfer()
1004 writel(EP_STS_TRBERR | EP_STS_DESCMIS, &priv_dev->regs->ep_sts); in cdns3_ep_run_transfer()
1005 writel(EP_CMD_DRDY, &priv_dev->regs->ep_cmd); in cdns3_ep_run_transfer()
1007 readl(&priv_dev->regs->ep_traddr)); in cdns3_ep_run_transfer()
1011 __cdns3_gadget_wakeup(priv_dev); in cdns3_ep_run_transfer()
1016 void cdns3_set_hw_configuration(struct cdns3_device *priv_dev) in cdns3_set_hw_configuration() argument
1022 if (priv_dev->hw_configured_flag) in cdns3_set_hw_configuration()
1025 writel(USB_CONF_CFGSET, &priv_dev->regs->usb_conf); in cdns3_set_hw_configuration()
1026 writel(EP_CMD_ERDY | EP_CMD_REQ_CMPL, &priv_dev->regs->ep_cmd); in cdns3_set_hw_configuration()
1028 cdns3_set_register_bit(&priv_dev->regs->usb_conf, in cdns3_set_hw_configuration()
1032 readl_poll_timeout_atomic(&priv_dev->regs->usb_sts, val, in cdns3_set_hw_configuration()
1035 priv_dev->hw_configured_flag = 1; in cdns3_set_hw_configuration()
1037 list_for_each_entry(ep, &priv_dev->gadget.ep_list, ep_list) { in cdns3_set_hw_configuration()
1040 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_set_hw_configuration()
1091 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_request_handled() local
1097 current_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_request_handled()
1098 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY); in cdns3_request_handled()
1137 static void cdns3_transfer_completed(struct cdns3_device *priv_dev, in cdns3_transfer_completed() argument
1159 cdns3_select_ep(priv_dev, priv_ep->endpoint.address); in cdns3_transfer_completed()
1168 dev_warn(priv_dev->dev, in cdns3_transfer_completed()
1185 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_transfer_completed()
1190 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_rearm_transfer() local
1199 writel(EP_CMD_DRDY, &priv_dev->regs->ep_cmd); in cdns3_rearm_transfer()
1201 __cdns3_gadget_wakeup(priv_dev); in cdns3_rearm_transfer()
1204 readl(&priv_dev->regs->ep_traddr)); in cdns3_rearm_transfer()
1216 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_check_ep_interrupt_proceed() local
1219 cdns3_select_ep(priv_dev, priv_ep->endpoint.address); in cdns3_check_ep_interrupt_proceed()
1221 trace_cdns3_epx_irq(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1223 ep_sts_reg = readl(&priv_dev->regs->ep_sts); in cdns3_check_ep_interrupt_proceed()
1224 writel(ep_sts_reg, &priv_dev->regs->ep_sts); in cdns3_check_ep_interrupt_proceed()
1229 priv_dev->dev_ver < DEV_VER_V2)) { in cdns3_check_ep_interrupt_proceed()
1243 u32 ep_cfg = readl(&priv_dev->regs->ep_cfg); in cdns3_check_ep_interrupt_proceed()
1246 writel(ep_cfg, &priv_dev->regs->ep_cfg); in cdns3_check_ep_interrupt_proceed()
1249 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1254 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1270 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1279 if (ep_sts_reg & EP_STS_DESCMIS && priv_dev->dev_ver < DEV_VER_V2 && in cdns3_check_ep_interrupt_proceed()
1286 static void cdns3_disconnect_gadget(struct cdns3_device *priv_dev) in cdns3_disconnect_gadget() argument
1288 if (priv_dev->gadget_driver && priv_dev->gadget_driver->disconnect) { in cdns3_disconnect_gadget()
1289 spin_unlock(&priv_dev->lock); in cdns3_disconnect_gadget()
1290 priv_dev->gadget_driver->disconnect(&priv_dev->gadget); in cdns3_disconnect_gadget()
1291 spin_lock(&priv_dev->lock); in cdns3_disconnect_gadget()
1301 static void cdns3_check_usb_interrupt_proceed(struct cdns3_device *priv_dev, in cdns3_check_usb_interrupt_proceed() argument
1306 trace_cdns3_usb_irq(priv_dev, usb_ists); in cdns3_check_usb_interrupt_proceed()
1313 if (readl(&priv_dev->regs->drbl)) in cdns3_check_usb_interrupt_proceed()
1314 __cdns3_gadget_wakeup(priv_dev); in cdns3_check_usb_interrupt_proceed()
1319 speed = cdns3_get_speed(priv_dev); in cdns3_check_usb_interrupt_proceed()
1320 priv_dev->gadget.speed = speed; in cdns3_check_usb_interrupt_proceed()
1321 usb_gadget_set_state(&priv_dev->gadget, USB_STATE_POWERED); in cdns3_check_usb_interrupt_proceed()
1322 cdns3_ep0_config(priv_dev); in cdns3_check_usb_interrupt_proceed()
1327 cdns3_disconnect_gadget(priv_dev); in cdns3_check_usb_interrupt_proceed()
1328 priv_dev->gadget.speed = USB_SPEED_UNKNOWN; in cdns3_check_usb_interrupt_proceed()
1329 usb_gadget_set_state(&priv_dev->gadget, USB_STATE_NOTATTACHED); in cdns3_check_usb_interrupt_proceed()
1330 cdns3_hw_reset_eps_config(priv_dev); in cdns3_check_usb_interrupt_proceed()
1334 if (priv_dev->gadget_driver && in cdns3_check_usb_interrupt_proceed()
1335 priv_dev->gadget_driver->suspend) { in cdns3_check_usb_interrupt_proceed()
1336 spin_unlock(&priv_dev->lock); in cdns3_check_usb_interrupt_proceed()
1337 priv_dev->gadget_driver->suspend(&priv_dev->gadget); in cdns3_check_usb_interrupt_proceed()
1338 spin_lock(&priv_dev->lock); in cdns3_check_usb_interrupt_proceed()
1343 if (priv_dev->gadget_driver && in cdns3_check_usb_interrupt_proceed()
1344 priv_dev->gadget_driver->resume) { in cdns3_check_usb_interrupt_proceed()
1345 spin_unlock(&priv_dev->lock); in cdns3_check_usb_interrupt_proceed()
1346 priv_dev->gadget_driver->resume(&priv_dev->gadget); in cdns3_check_usb_interrupt_proceed()
1347 spin_lock(&priv_dev->lock); in cdns3_check_usb_interrupt_proceed()
1353 if (priv_dev->gadget_driver) { in cdns3_check_usb_interrupt_proceed()
1354 spin_unlock(&priv_dev->lock); in cdns3_check_usb_interrupt_proceed()
1355 usb_gadget_udc_reset(&priv_dev->gadget, in cdns3_check_usb_interrupt_proceed()
1356 priv_dev->gadget_driver); in cdns3_check_usb_interrupt_proceed()
1357 spin_lock(&priv_dev->lock); in cdns3_check_usb_interrupt_proceed()
1360 speed = cdns3_get_speed(priv_dev); in cdns3_check_usb_interrupt_proceed()
1361 priv_dev->gadget.speed = speed; in cdns3_check_usb_interrupt_proceed()
1362 cdns3_hw_reset_eps_config(priv_dev); in cdns3_check_usb_interrupt_proceed()
1363 cdns3_ep0_config(priv_dev); in cdns3_check_usb_interrupt_proceed()
1378 struct cdns3_device *priv_dev; in cdns3_device_irq_handler() local
1383 priv_dev = cdns->gadget_dev; in cdns3_device_irq_handler()
1386 reg = readl(&priv_dev->regs->usb_ists); in cdns3_device_irq_handler()
1395 reg = ~reg & readl(&priv_dev->regs->usb_ien); in cdns3_device_irq_handler()
1397 writel(reg, &priv_dev->regs->usb_ien); in cdns3_device_irq_handler()
1402 reg = readl(&priv_dev->regs->ep_ists); in cdns3_device_irq_handler()
1404 writel(0, &priv_dev->regs->ep_ien); in cdns3_device_irq_handler()
1422 struct cdns3_device *priv_dev; in cdns3_device_thread_irq_handler() local
1429 priv_dev = cdns->gadget_dev; in cdns3_device_thread_irq_handler()
1430 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_device_thread_irq_handler()
1432 reg = readl(&priv_dev->regs->usb_ists); in cdns3_device_thread_irq_handler()
1434 writel(reg, &priv_dev->regs->usb_ists); in cdns3_device_thread_irq_handler()
1435 writel(USB_IEN_INIT, &priv_dev->regs->usb_ien); in cdns3_device_thread_irq_handler()
1436 cdns3_check_usb_interrupt_proceed(priv_dev, reg); in cdns3_device_thread_irq_handler()
1440 reg = readl(&priv_dev->regs->ep_ists); in cdns3_device_thread_irq_handler()
1444 cdns3_check_ep0_interrupt_proceed(priv_dev, USB_DIR_OUT); in cdns3_device_thread_irq_handler()
1450 cdns3_check_ep0_interrupt_proceed(priv_dev, USB_DIR_IN); in cdns3_device_thread_irq_handler()
1461 cdns3_check_ep_interrupt_proceed(priv_dev->eps[bit]); in cdns3_device_thread_irq_handler()
1466 writel(~0, &priv_dev->regs->ep_ien); in cdns3_device_thread_irq_handler()
1467 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_device_thread_irq_handler()
1484 static int cdns3_ep_onchip_buffer_reserve(struct cdns3_device *priv_dev, in cdns3_ep_onchip_buffer_reserve() argument
1490 remained = priv_dev->onchip_buffers - priv_dev->onchip_used_size - 2; in cdns3_ep_onchip_buffer_reserve()
1496 priv_dev->onchip_used_size += size; in cdns3_ep_onchip_buffer_reserve()
1504 if (priv_dev->out_mem_is_allocated >= size) in cdns3_ep_onchip_buffer_reserve()
1507 required = size - priv_dev->out_mem_is_allocated; in cdns3_ep_onchip_buffer_reserve()
1512 priv_dev->out_mem_is_allocated += required; in cdns3_ep_onchip_buffer_reserve()
1513 priv_dev->onchip_used_size += required; in cdns3_ep_onchip_buffer_reserve()
1519 void cdns3_configure_dmult(struct cdns3_device *priv_dev, in cdns3_configure_dmult() argument
1522 struct cdns3_usb_regs __iomem *regs = priv_dev->regs; in cdns3_configure_dmult()
1525 if (priv_dev->dev_ver <= DEV_VER_V2) in cdns3_configure_dmult()
1528 if (priv_dev->dev_ver == DEV_VER_V2) in cdns3_configure_dmult()
1531 if (priv_dev->dev_ver >= DEV_VER_V3 && priv_ep) { in cdns3_configure_dmult()
1560 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_config() local
1571 cdns3_configure_dmult(priv_dev, priv_ep); in cdns3_ep_config()
1577 if ((priv_dev->dev_ver == DEV_VER_V2 && !priv_ep->dir) || in cdns3_ep_config()
1578 priv_dev->dev_ver > DEV_VER_V2) in cdns3_ep_config()
1584 if ((priv_dev->dev_ver == DEV_VER_V2 && !priv_ep->dir) || in cdns3_ep_config()
1585 priv_dev->dev_ver > DEV_VER_V2) in cdns3_ep_config()
1594 switch (priv_dev->gadget.speed) { in cdns3_ep_config()
1628 ret = cdns3_ep_onchip_buffer_reserve(priv_dev, buffering + 1, in cdns3_ep_config()
1631 dev_err(priv_dev->dev, "onchip mem is full, ep is invalid\n"); in cdns3_ep_config()
1640 cdns3_select_ep(priv_dev, bEndpointAddress); in cdns3_ep_config()
1641 writel(ep_cfg, &priv_dev->regs->ep_cfg); in cdns3_ep_config()
1643 dev_dbg(priv_dev->dev, "Configure %s: with val %08x\n", in cdns3_ep_config()
1656 cdns3_endpoint *cdns3_find_available_ep(struct cdns3_device *priv_dev, in cdns3_find_available_ep() argument
1662 list_for_each_entry(ep, &priv_dev->gadget.ep_list, ep_list) { in cdns3_find_available_ep()
1705 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_match_ep() local
1709 priv_ep = cdns3_find_available_ep(priv_dev, desc); in cdns3_gadget_match_ep()
1711 dev_err(priv_dev->dev, "no available ep\n"); in cdns3_gadget_match_ep()
1715 dev_dbg(priv_dev->dev, "match endpoint: %s\n", priv_ep->name); in cdns3_gadget_match_ep()
1717 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_match_ep()
1724 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_match_ep()
1779 struct cdns3_device *priv_dev; in cdns3_gadget_ep_enable() local
1788 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_enable()
1791 dev_dbg(priv_dev->dev, "usbss: invalid parameters\n"); in cdns3_gadget_ep_enable()
1796 dev_err(priv_dev->dev, "usbss: missing wMaxPacketSize\n"); in cdns3_gadget_ep_enable()
1800 if (dev_WARN_ONCE(priv_dev->dev, priv_ep->flags & EP_ENABLED, in cdns3_gadget_ep_enable()
1804 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_ep_enable()
1812 dev_err(priv_dev->dev, "Driver is limited to %d period\n", in cdns3_gadget_ep_enable()
1825 cdns3_select_ep(priv_dev, bEndpointAddress); in cdns3_gadget_ep_enable()
1829 writel(EP_CMD_EPRST, &priv_dev->regs->ep_cmd); in cdns3_gadget_ep_enable()
1831 ret = readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val, in cdns3_gadget_ep_enable()
1842 cdns3_set_register_bit(&priv_dev->regs->ep_ien, in cdns3_gadget_ep_enable()
1845 if (priv_dev->dev_ver < DEV_VER_V2) in cdns3_gadget_ep_enable()
1846 cdns3_wa2_enable_detection(priv_dev, priv_ep, reg); in cdns3_gadget_ep_enable()
1848 writel(reg, &priv_dev->regs->ep_sts_en); in cdns3_gadget_ep_enable()
1862 cdns3_set_register_bit(&priv_dev->regs->ep_cfg, EP_CFG_ENABLE); in cdns3_gadget_ep_enable()
1871 reg = readl(&priv_dev->regs->ep_sts); in cdns3_gadget_ep_enable()
1877 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_ep_enable()
1892 struct cdns3_device *priv_dev; in cdns3_gadget_ep_disable() local
1905 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_disable()
1907 if (dev_WARN_ONCE(priv_dev->dev, !(priv_ep->flags & EP_ENABLED), in cdns3_gadget_ep_disable()
1911 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_ep_disable()
1915 cdns3_select_ep(priv_dev, ep->desc->bEndpointAddress); in cdns3_gadget_ep_disable()
1917 ep_cfg = readl(&priv_dev->regs->ep_cfg); in cdns3_gadget_ep_disable()
1919 writel(ep_cfg, &priv_dev->regs->ep_cfg); in cdns3_gadget_ep_disable()
1926 readl_poll_timeout_atomic(&priv_dev->regs->ep_sts, val, in cdns3_gadget_ep_disable()
1928 writel(EP_CMD_EPRST, &priv_dev->regs->ep_cmd); in cdns3_gadget_ep_disable()
1930 readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val, in cdns3_gadget_ep_disable()
1934 dev_err(priv_dev->dev, "Timeout: %s resetting failed.\n", in cdns3_gadget_ep_disable()
1966 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_ep_disable()
1984 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_queue() local
1993 if (priv_dev->dev_ver < DEV_VER_V2) { in __cdns3_gadget_ep_queue()
1994 ret = cdns3_wa2_gadget_ep_queue(priv_dev, priv_ep, in __cdns3_gadget_ep_queue()
2005 ret = usb_gadget_map_request_by_dev(priv_dev->sysdev, request, in __cdns3_gadget_ep_queue()
2017 if (priv_dev->hw_configured_flag && !(priv_ep->flags & EP_STALLED) && in __cdns3_gadget_ep_queue()
2019 cdns3_start_all_request(priv_dev, priv_ep); in __cdns3_gadget_ep_queue()
2029 struct cdns3_device *priv_dev; in cdns3_gadget_ep_queue() local
2037 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_queue()
2039 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_ep_queue()
2048 zlp_request->buf = priv_dev->zlp_buf; in cdns3_gadget_ep_queue()
2054 dev_dbg(priv_dev->dev, "Queuing ZLP for endpoint: %s\n", in cdns3_gadget_ep_queue()
2059 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_ep_queue()
2074 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_dequeue() local
2085 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_ep_dequeue()
2091 cdns3_select_ep(priv_dev, ep->desc->bEndpointAddress); in cdns3_gadget_ep_dequeue()
2126 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_ep_dequeue()
2137 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_set_halt() local
2142 u32 ep_sts_reg = readl(&priv_dev->regs->ep_sts); in __cdns3_gadget_ep_set_halt()
2158 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_clear_halt() local
2165 writel(EP_CMD_CSTALL | EP_CMD_EPRST, &priv_dev->regs->ep_cmd); in __cdns3_gadget_ep_clear_halt()
2168 ret = readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val, in __cdns3_gadget_ep_clear_halt()
2180 cdns3_start_all_request(priv_dev, priv_ep); in __cdns3_gadget_ep_clear_halt()
2194 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_set_halt() local
2201 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_ep_set_halt()
2203 cdns3_select_ep(priv_dev, ep->desc->bEndpointAddress); in cdns3_gadget_ep_set_halt()
2212 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_ep_set_halt()
2238 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_get_frame() local
2240 return readl(&priv_dev->regs->usb_itpn); in cdns3_gadget_get_frame()
2243 int __cdns3_gadget_wakeup(struct cdns3_device *priv_dev) in __cdns3_gadget_wakeup() argument
2247 speed = cdns3_get_speed(priv_dev); in __cdns3_gadget_wakeup()
2253 writel(USB_CONF_LGO_L0, &priv_dev->regs->usb_conf); in __cdns3_gadget_wakeup()
2260 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_wakeup() local
2264 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_wakeup()
2265 ret = __cdns3_gadget_wakeup(priv_dev); in cdns3_gadget_wakeup()
2266 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_wakeup()
2273 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_set_selfpowered() local
2276 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_set_selfpowered()
2277 priv_dev->is_selfpowered = !!is_selfpowered; in cdns3_gadget_set_selfpowered()
2278 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_set_selfpowered()
2284 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_pullup() local
2287 writel(USB_CONF_DEVEN, &priv_dev->regs->usb_conf); in cdns3_gadget_pullup()
2289 writel(USB_CONF_DEVDS, &priv_dev->regs->usb_conf); in cdns3_gadget_pullup()
2294 static void cdns3_gadget_config(struct cdns3_device *priv_dev) in cdns3_gadget_config() argument
2296 struct cdns3_usb_regs __iomem *regs = priv_dev->regs; in cdns3_gadget_config()
2299 cdns3_ep0_config(priv_dev); in cdns3_gadget_config()
2308 if (priv_dev->dev_ver == DEV_VER_TI_V1) { in cdns3_gadget_config()
2331 cdns3_configure_dmult(priv_dev, NULL); in cdns3_gadget_config()
2344 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_udc_start() local
2348 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_udc_start()
2349 priv_dev->gadget_driver = driver; in cdns3_gadget_udc_start()
2356 writel(USB_CONF_SFORCE_FS, &priv_dev->regs->usb_conf); in cdns3_gadget_udc_start()
2357 writel(USB_CONF_USB3DIS, &priv_dev->regs->usb_conf); in cdns3_gadget_udc_start()
2360 writel(USB_CONF_USB3DIS, &priv_dev->regs->usb_conf); in cdns3_gadget_udc_start()
2365 dev_err(priv_dev->dev, in cdns3_gadget_udc_start()
2375 cdns3_gadget_config(priv_dev); in cdns3_gadget_udc_start()
2376 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_udc_start()
2388 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_udc_stop() local
2395 priv_dev->gadget_driver = NULL; in cdns3_gadget_udc_stop()
2397 priv_dev->onchip_used_size = 0; in cdns3_gadget_udc_stop()
2398 priv_dev->out_mem_is_allocated = 0; in cdns3_gadget_udc_stop()
2399 priv_dev->gadget.speed = USB_SPEED_UNKNOWN; in cdns3_gadget_udc_stop()
2401 list_for_each_entry(ep, &priv_dev->gadget.ep_list, ep_list) { in cdns3_gadget_udc_stop()
2404 cdns3_select_ep(priv_dev, bEndpointAddress); in cdns3_gadget_udc_stop()
2405 writel(EP_CMD_EPRST, &priv_dev->regs->ep_cmd); in cdns3_gadget_udc_stop()
2406 readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val, in cdns3_gadget_udc_stop()
2413 writel(0, &priv_dev->regs->usb_ien); in cdns3_gadget_udc_stop()
2414 writel(USB_CONF_DEVDS, &priv_dev->regs->usb_conf); in cdns3_gadget_udc_stop()
2429 static void cdns3_free_all_eps(struct cdns3_device *priv_dev) in cdns3_free_all_eps() argument
2434 priv_dev->eps[16] = NULL; in cdns3_free_all_eps()
2437 if (priv_dev->eps[i]) { in cdns3_free_all_eps()
2438 cdns3_free_trb_pool(priv_dev->eps[i]); in cdns3_free_all_eps()
2439 devm_kfree(priv_dev->dev, priv_dev->eps[i]); in cdns3_free_all_eps()
2449 static int cdns3_init_eps(struct cdns3_device *priv_dev) in cdns3_init_eps() argument
2459 ep_enabled_reg = readl(&priv_dev->regs->usb_cap3); in cdns3_init_eps()
2460 iso_ep_reg = readl(&priv_dev->regs->usb_cap4); in cdns3_init_eps()
2462 dev_dbg(priv_dev->dev, "Initializing non-zero endpoints\n"); in cdns3_init_eps()
2473 priv_dev->eps[i] = priv_dev->eps[0]; in cdns3_init_eps()
2477 priv_ep = devm_kzalloc(priv_dev->dev, sizeof(*priv_ep), in cdns3_init_eps()
2483 priv_ep->cdns3_dev = priv_dev; in cdns3_init_eps()
2484 priv_dev->eps[i] = priv_ep; in cdns3_init_eps()
2489 ret = cdns3_init_ep0(priv_dev, priv_ep); in cdns3_init_eps()
2491 dev_err(priv_dev->dev, "Failed to init ep0\n"); in cdns3_init_eps()
2515 &priv_dev->gadget.ep_list); in cdns3_init_eps()
2520 dev_info(priv_dev->dev, "Initialized %s support: %s %s\n", in cdns3_init_eps()
2532 cdns3_free_all_eps(priv_dev); in cdns3_init_eps()
2538 struct cdns3_device *priv_dev; in cdns3_gadget_exit() local
2540 priv_dev = cdns->gadget_dev; in cdns3_gadget_exit()
2547 usb_del_gadget_udc(&priv_dev->gadget); in cdns3_gadget_exit()
2549 cdns3_free_all_eps(priv_dev); in cdns3_gadget_exit()
2551 while (!list_empty(&priv_dev->aligned_buf_list)) { in cdns3_gadget_exit()
2554 buf = cdns3_next_align_buf(&priv_dev->aligned_buf_list); in cdns3_gadget_exit()
2555 dma_free_coherent(priv_dev->sysdev, buf->size, in cdns3_gadget_exit()
2563 dma_free_coherent(priv_dev->sysdev, 8, priv_dev->setup_buf, in cdns3_gadget_exit()
2564 priv_dev->setup_dma); in cdns3_gadget_exit()
2566 kfree(priv_dev->zlp_buf); in cdns3_gadget_exit()
2567 kfree(priv_dev); in cdns3_gadget_exit()
2574 struct cdns3_device *priv_dev; in cdns3_gadget_start() local
2578 priv_dev = kzalloc(sizeof(*priv_dev), GFP_KERNEL); in cdns3_gadget_start()
2579 if (!priv_dev) in cdns3_gadget_start()
2582 cdns->gadget_dev = priv_dev; in cdns3_gadget_start()
2583 priv_dev->sysdev = cdns->dev; in cdns3_gadget_start()
2584 priv_dev->dev = cdns->dev; in cdns3_gadget_start()
2585 priv_dev->regs = cdns->dev_regs; in cdns3_gadget_start()
2587 device_property_read_u16(priv_dev->dev, "cdns,on-chip-buff-size", in cdns3_gadget_start()
2588 &priv_dev->onchip_buffers); in cdns3_gadget_start()
2590 if (priv_dev->onchip_buffers <= 0) { in cdns3_gadget_start()
2591 u32 reg = readl(&priv_dev->regs->usb_cap2); in cdns3_gadget_start()
2593 priv_dev->onchip_buffers = USB_CAP2_ACTUAL_MEM_SIZE(reg); in cdns3_gadget_start()
2596 if (!priv_dev->onchip_buffers) in cdns3_gadget_start()
2597 priv_dev->onchip_buffers = 256; in cdns3_gadget_start()
2618 priv_dev->gadget.max_speed = max_speed; in cdns3_gadget_start()
2619 priv_dev->gadget.speed = USB_SPEED_UNKNOWN; in cdns3_gadget_start()
2620 priv_dev->gadget.ops = &cdns3_gadget_ops; in cdns3_gadget_start()
2621 priv_dev->gadget.name = "usb-ss-gadget"; in cdns3_gadget_start()
2622 priv_dev->gadget.sg_supported = 1; in cdns3_gadget_start()
2623 priv_dev->gadget.quirk_avoids_skb_reserve = 1; in cdns3_gadget_start()
2625 spin_lock_init(&priv_dev->lock); in cdns3_gadget_start()
2626 INIT_WORK(&priv_dev->pending_status_wq, in cdns3_gadget_start()
2629 INIT_WORK(&priv_dev->aligned_buf_wq, in cdns3_gadget_start()
2633 INIT_LIST_HEAD(&priv_dev->gadget.ep_list); in cdns3_gadget_start()
2634 INIT_LIST_HEAD(&priv_dev->aligned_buf_list); in cdns3_gadget_start()
2636 ret = cdns3_init_eps(priv_dev); in cdns3_gadget_start()
2638 dev_err(priv_dev->dev, "Failed to create endpoints\n"); in cdns3_gadget_start()
2643 priv_dev->setup_buf = dma_alloc_coherent(priv_dev->sysdev, 8, in cdns3_gadget_start()
2644 &priv_dev->setup_dma, GFP_DMA); in cdns3_gadget_start()
2645 if (!priv_dev->setup_buf) { in cdns3_gadget_start()
2650 priv_dev->dev_ver = readl(&priv_dev->regs->usb_cap6); in cdns3_gadget_start()
2652 dev_dbg(priv_dev->dev, "Device Controller version: %08x\n", in cdns3_gadget_start()
2653 readl(&priv_dev->regs->usb_cap6)); in cdns3_gadget_start()
2654 dev_dbg(priv_dev->dev, "USB Capabilities:: %08x\n", in cdns3_gadget_start()
2655 readl(&priv_dev->regs->usb_cap1)); in cdns3_gadget_start()
2656 dev_dbg(priv_dev->dev, "On-Chip memory configuration: %08x\n", in cdns3_gadget_start()
2657 readl(&priv_dev->regs->usb_cap2)); in cdns3_gadget_start()
2659 priv_dev->dev_ver = GET_DEV_BASE_VERSION(priv_dev->dev_ver); in cdns3_gadget_start()
2661 priv_dev->zlp_buf = kzalloc(CDNS3_EP_ZLP_BUF_SIZE, GFP_KERNEL); in cdns3_gadget_start()
2662 if (!priv_dev->zlp_buf) { in cdns3_gadget_start()
2668 ret = usb_add_gadget_udc(priv_dev->dev, &priv_dev->gadget); in cdns3_gadget_start()
2670 dev_err(priv_dev->dev, in cdns3_gadget_start()
2677 kfree(priv_dev->zlp_buf); in cdns3_gadget_start()
2679 dma_free_coherent(priv_dev->sysdev, 8, priv_dev->setup_buf, in cdns3_gadget_start()
2680 priv_dev->setup_dma); in cdns3_gadget_start()
2682 cdns3_free_all_eps(priv_dev); in cdns3_gadget_start()
2726 struct cdns3_device *priv_dev = cdns->gadget_dev; in cdns3_gadget_suspend() local
2728 cdns3_disconnect_gadget(priv_dev); in cdns3_gadget_suspend()
2730 priv_dev->gadget.speed = USB_SPEED_UNKNOWN; in cdns3_gadget_suspend()
2731 usb_gadget_set_state(&priv_dev->gadget, USB_STATE_NOTATTACHED); in cdns3_gadget_suspend()
2732 cdns3_hw_reset_eps_config(priv_dev); in cdns3_gadget_suspend()
2735 writel(0, &priv_dev->regs->usb_ien); in cdns3_gadget_suspend()
2742 struct cdns3_device *priv_dev = cdns->gadget_dev; in cdns3_gadget_resume() local
2744 if (!priv_dev->gadget_driver) in cdns3_gadget_resume()
2747 cdns3_gadget_config(priv_dev); in cdns3_gadget_resume()