Lines Matching refs:priv_dev
102 static int cdns3_get_dma_pos(struct cdns3_device *priv_dev, in cdns3_get_dma_pos() argument
107 dma_index = readl(&priv_dev->regs->ep_traddr) - priv_ep->trb_pool_dma; in cdns3_get_dma_pos()
150 void cdns3_select_ep(struct cdns3_device *priv_dev, u32 ep) in cdns3_select_ep() argument
152 if (priv_dev->selected_ep == ep) in cdns3_select_ep()
155 priv_dev->selected_ep = ep; in cdns3_select_ep()
156 writel(ep, &priv_dev->regs->ep_sel); in cdns3_select_ep()
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(&priv_dev->gadget, 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()
693 static void cdns3_free_aligned_request_buf(struct cdns3_device *priv_dev) in cdns3_free_aligned_request_buf() argument
698 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_free_aligned_request_buf()
700 list_for_each_entry_safe(buf, tmp, &priv_dev->aligned_buf_list, list) { in cdns3_free_aligned_request_buf()
709 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_free_aligned_request_buf()
712 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_free_aligned_request_buf()
716 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_free_aligned_request_buf()
722 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_prepare_aligned_request_buf() local
750 &priv_dev->aligned_buf_wq); in cdns3_prepare_aligned_request_buf()
752 cdns3_free_aligned_request_buf(priv_dev); in cdns3_prepare_aligned_request_buf()
760 &priv_dev->aligned_buf_list); in cdns3_prepare_aligned_request_buf()
777 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_wa1_update_guard() local
782 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY); in cdns3_wa1_update_guard()
796 static void cdns3_wa1_tray_restore_cycle_bit(struct cdns3_device *priv_dev, in cdns3_wa1_tray_restore_cycle_bit() argument
802 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY); in cdns3_wa1_tray_restore_cycle_bit()
803 dma_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_wa1_tray_restore_cycle_bit()
818 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_run_transfer() local
857 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY); in cdns3_ep_run_transfer()
858 dma_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_ep_run_transfer()
884 if (priv_dev->dev_ver <= DEV_VER_V2) in cdns3_ep_run_transfer()
900 if (likely(priv_dev->dev_ver >= DEV_VER_V2)) in cdns3_ep_run_transfer()
906 if (priv_dev->gadget.speed == USB_SPEED_SUPER) in cdns3_ep_run_transfer()
956 if (priv_dev->dev_ver <= DEV_VER_V2) in cdns3_ep_run_transfer()
957 cdns3_wa1_tray_restore_cycle_bit(priv_dev, priv_ep); in cdns3_ep_run_transfer()
980 cdns3_set_register_bit(&priv_dev->regs->ep_cfg, in cdns3_ep_run_transfer()
986 &priv_dev->regs->ep_traddr); in cdns3_ep_run_transfer()
994 writel(EP_STS_TRBERR | EP_STS_DESCMIS, &priv_dev->regs->ep_sts); in cdns3_ep_run_transfer()
995 writel(EP_CMD_DRDY, &priv_dev->regs->ep_cmd); in cdns3_ep_run_transfer()
997 readl(&priv_dev->regs->ep_traddr)); in cdns3_ep_run_transfer()
1001 __cdns3_gadget_wakeup(priv_dev); in cdns3_ep_run_transfer()
1006 void cdns3_set_hw_configuration(struct cdns3_device *priv_dev) in cdns3_set_hw_configuration() argument
1012 if (priv_dev->hw_configured_flag) in cdns3_set_hw_configuration()
1015 writel(USB_CONF_CFGSET, &priv_dev->regs->usb_conf); in cdns3_set_hw_configuration()
1016 writel(EP_CMD_ERDY | EP_CMD_REQ_CMPL, &priv_dev->regs->ep_cmd); in cdns3_set_hw_configuration()
1018 cdns3_set_register_bit(&priv_dev->regs->usb_conf, in cdns3_set_hw_configuration()
1022 readl_poll_timeout_atomic(&priv_dev->regs->usb_sts, val, in cdns3_set_hw_configuration()
1025 priv_dev->hw_configured_flag = 1; in cdns3_set_hw_configuration()
1027 list_for_each_entry(ep, &priv_dev->gadget.ep_list, ep_list) { in cdns3_set_hw_configuration()
1030 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_set_hw_configuration()
1080 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_request_handled() local
1086 current_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_request_handled()
1087 doorbell = !!(readl(&priv_dev->regs->ep_cmd) & EP_CMD_DRDY); in cdns3_request_handled()
1126 static void cdns3_transfer_completed(struct cdns3_device *priv_dev, in cdns3_transfer_completed() argument
1141 cdns3_select_ep(priv_dev, priv_ep->endpoint.address); in cdns3_transfer_completed()
1143 cdns3_select_ep(priv_dev, in cdns3_transfer_completed()
1154 dev_warn(priv_dev->dev, in cdns3_transfer_completed()
1171 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_transfer_completed()
1176 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_rearm_transfer() local
1185 writel(EP_CMD_DRDY, &priv_dev->regs->ep_cmd); in cdns3_rearm_transfer()
1187 __cdns3_gadget_wakeup(priv_dev); in cdns3_rearm_transfer()
1190 readl(&priv_dev->regs->ep_traddr)); in cdns3_rearm_transfer()
1202 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_check_ep_interrupt_proceed() local
1206 cdns3_select_ep(priv_dev, priv_ep->endpoint.address); in cdns3_check_ep_interrupt_proceed()
1208 cdns3_select_ep(priv_dev, priv_ep->endpoint.desc->bEndpointAddress); in cdns3_check_ep_interrupt_proceed()
1211 trace_cdns3_epx_irq(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1213 ep_sts_reg = readl(&priv_dev->regs->ep_sts); in cdns3_check_ep_interrupt_proceed()
1214 writel(ep_sts_reg, &priv_dev->regs->ep_sts); in cdns3_check_ep_interrupt_proceed()
1219 priv_dev->dev_ver < DEV_VER_V2)) { in cdns3_check_ep_interrupt_proceed()
1233 u32 ep_cfg = readl(&priv_dev->regs->ep_cfg); in cdns3_check_ep_interrupt_proceed()
1236 writel(ep_cfg, &priv_dev->regs->ep_cfg); in cdns3_check_ep_interrupt_proceed()
1239 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1244 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1260 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1269 if (ep_sts_reg & EP_STS_DESCMIS && priv_dev->dev_ver < DEV_VER_V2 && in cdns3_check_ep_interrupt_proceed()
1276 static void cdns3_disconnect_gadget(struct cdns3_device *priv_dev) in cdns3_disconnect_gadget() argument
1278 if (priv_dev->gadget_driver && priv_dev->gadget_driver->disconnect) { in cdns3_disconnect_gadget()
1279 spin_unlock(&priv_dev->lock); in cdns3_disconnect_gadget()
1280 priv_dev->gadget_driver->disconnect(&priv_dev->gadget); in cdns3_disconnect_gadget()
1281 spin_lock(&priv_dev->lock); in cdns3_disconnect_gadget()
1291 static void cdns3_check_usb_interrupt_proceed(struct cdns3_device *priv_dev, in cdns3_check_usb_interrupt_proceed() argument
1296 trace_cdns3_usb_irq(priv_dev, usb_ists); in cdns3_check_usb_interrupt_proceed()
1303 if (readl(&priv_dev->regs->drbl)) in cdns3_check_usb_interrupt_proceed()
1304 __cdns3_gadget_wakeup(priv_dev); in cdns3_check_usb_interrupt_proceed()
1309 speed = cdns3_get_speed(priv_dev); in cdns3_check_usb_interrupt_proceed()
1310 priv_dev->gadget.speed = speed; in cdns3_check_usb_interrupt_proceed()
1311 usb_gadget_set_state(&priv_dev->gadget, USB_STATE_POWERED); in cdns3_check_usb_interrupt_proceed()
1312 cdns3_ep0_config(priv_dev); in cdns3_check_usb_interrupt_proceed()
1317 cdns3_disconnect_gadget(priv_dev); in cdns3_check_usb_interrupt_proceed()
1318 priv_dev->gadget.speed = USB_SPEED_UNKNOWN; in cdns3_check_usb_interrupt_proceed()
1319 usb_gadget_set_state(&priv_dev->gadget, USB_STATE_NOTATTACHED); in cdns3_check_usb_interrupt_proceed()
1320 cdns3_hw_reset_eps_config(priv_dev); in cdns3_check_usb_interrupt_proceed()
1324 if (priv_dev->gadget_driver && in cdns3_check_usb_interrupt_proceed()
1325 priv_dev->gadget_driver->suspend) { in cdns3_check_usb_interrupt_proceed()
1326 spin_unlock(&priv_dev->lock); in cdns3_check_usb_interrupt_proceed()
1327 priv_dev->gadget_driver->suspend(&priv_dev->gadget); in cdns3_check_usb_interrupt_proceed()
1328 spin_lock(&priv_dev->lock); in cdns3_check_usb_interrupt_proceed()
1333 if (priv_dev->gadget_driver && in cdns3_check_usb_interrupt_proceed()
1334 priv_dev->gadget_driver->resume) { in cdns3_check_usb_interrupt_proceed()
1335 spin_unlock(&priv_dev->lock); in cdns3_check_usb_interrupt_proceed()
1336 priv_dev->gadget_driver->resume(&priv_dev->gadget); in cdns3_check_usb_interrupt_proceed()
1337 spin_lock(&priv_dev->lock); in cdns3_check_usb_interrupt_proceed()
1343 if (priv_dev->gadget_driver) { in cdns3_check_usb_interrupt_proceed()
1344 spin_unlock(&priv_dev->lock); in cdns3_check_usb_interrupt_proceed()
1345 usb_gadget_udc_reset(&priv_dev->gadget, in cdns3_check_usb_interrupt_proceed()
1346 priv_dev->gadget_driver); in cdns3_check_usb_interrupt_proceed()
1347 spin_lock(&priv_dev->lock); in cdns3_check_usb_interrupt_proceed()
1350 speed = cdns3_get_speed(priv_dev); in cdns3_check_usb_interrupt_proceed()
1351 priv_dev->gadget.speed = speed; in cdns3_check_usb_interrupt_proceed()
1352 cdns3_hw_reset_eps_config(priv_dev); in cdns3_check_usb_interrupt_proceed()
1353 cdns3_ep0_config(priv_dev); in cdns3_check_usb_interrupt_proceed()
1368 struct cdns3_device *priv_dev; in cdns3_device_irq_handler() local
1373 priv_dev = cdns->gadget_dev; in cdns3_device_irq_handler()
1376 reg = readl(&priv_dev->regs->usb_ists); in cdns3_device_irq_handler()
1385 reg = ~reg & readl(&priv_dev->regs->usb_ien); in cdns3_device_irq_handler()
1387 writel(reg, &priv_dev->regs->usb_ien); in cdns3_device_irq_handler()
1392 reg = readl(&priv_dev->regs->ep_ists); in cdns3_device_irq_handler()
1394 writel(0, &priv_dev->regs->ep_ien); in cdns3_device_irq_handler()
1412 struct cdns3_device *priv_dev; in cdns3_device_thread_irq_handler() local
1419 priv_dev = cdns->gadget_dev; in cdns3_device_thread_irq_handler()
1420 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_device_thread_irq_handler()
1422 reg = readl(&priv_dev->regs->usb_ists); in cdns3_device_thread_irq_handler()
1424 writel(reg, &priv_dev->regs->usb_ists); in cdns3_device_thread_irq_handler()
1425 writel(USB_IEN_INIT, &priv_dev->regs->usb_ien); in cdns3_device_thread_irq_handler()
1426 cdns3_check_usb_interrupt_proceed(priv_dev, reg); in cdns3_device_thread_irq_handler()
1430 reg = readl(&priv_dev->regs->ep_ists); in cdns3_device_thread_irq_handler()
1434 cdns3_check_ep0_interrupt_proceed(priv_dev, USB_DIR_OUT); in cdns3_device_thread_irq_handler()
1440 cdns3_check_ep0_interrupt_proceed(priv_dev, USB_DIR_IN); in cdns3_device_thread_irq_handler()
1451 cdns3_check_ep_interrupt_proceed(priv_dev->eps[bit]); in cdns3_device_thread_irq_handler()
1456 writel(~0, &priv_dev->regs->ep_ien); in cdns3_device_thread_irq_handler()
1457 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_device_thread_irq_handler()
1474 static int cdns3_ep_onchip_buffer_reserve(struct cdns3_device *priv_dev, in cdns3_ep_onchip_buffer_reserve() argument
1480 remained = priv_dev->onchip_buffers - priv_dev->onchip_used_size - 2; in cdns3_ep_onchip_buffer_reserve()
1486 priv_dev->onchip_used_size += size; in cdns3_ep_onchip_buffer_reserve()
1494 if (priv_dev->out_mem_is_allocated >= size) in cdns3_ep_onchip_buffer_reserve()
1497 required = size - priv_dev->out_mem_is_allocated; in cdns3_ep_onchip_buffer_reserve()
1502 priv_dev->out_mem_is_allocated += required; in cdns3_ep_onchip_buffer_reserve()
1503 priv_dev->onchip_used_size += required; in cdns3_ep_onchip_buffer_reserve()
1509 void cdns3_configure_dmult(struct cdns3_device *priv_dev, in cdns3_configure_dmult() argument
1512 struct cdns3_usb_regs __iomem *regs = priv_dev->regs; in cdns3_configure_dmult()
1515 if (priv_dev->dev_ver <= DEV_VER_V2) in cdns3_configure_dmult()
1518 if (priv_dev->dev_ver == DEV_VER_V2) in cdns3_configure_dmult()
1521 if (priv_dev->dev_ver >= DEV_VER_V3 && priv_ep) { in cdns3_configure_dmult()
1550 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_config() local
1561 cdns3_configure_dmult(priv_dev, priv_ep); in cdns3_ep_config()
1567 if ((priv_dev->dev_ver == DEV_VER_V2 && !priv_ep->dir) || in cdns3_ep_config()
1568 priv_dev->dev_ver > DEV_VER_V2) in cdns3_ep_config()
1574 if ((priv_dev->dev_ver == DEV_VER_V2 && !priv_ep->dir) || in cdns3_ep_config()
1575 priv_dev->dev_ver > DEV_VER_V2) in cdns3_ep_config()
1584 switch (priv_dev->gadget.speed) { in cdns3_ep_config()
1618 ret = cdns3_ep_onchip_buffer_reserve(priv_dev, buffering + 1, in cdns3_ep_config()
1621 dev_err(priv_dev->dev, "onchip mem is full, ep is invalid\n"); in cdns3_ep_config()
1630 cdns3_select_ep(priv_dev, bEndpointAddress); in cdns3_ep_config()
1631 writel(ep_cfg, &priv_dev->regs->ep_cfg); in cdns3_ep_config()
1633 dev_dbg(priv_dev->dev, "Configure %s: with val %08x\n", in cdns3_ep_config()
1646 cdns3_endpoint *cdns3_find_available_ep(struct cdns3_device *priv_dev, in cdns3_find_available_ep() argument
1652 list_for_each_entry(ep, &priv_dev->gadget.ep_list, ep_list) { in cdns3_find_available_ep()
1692 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_match_ep() local
1696 priv_ep = cdns3_find_available_ep(priv_dev, desc); in cdns3_gadget_match_ep()
1698 dev_err(priv_dev->dev, "no available ep\n"); in cdns3_gadget_match_ep()
1702 dev_dbg(priv_dev->dev, "match endpoint: %s\n", priv_ep->name); in cdns3_gadget_match_ep()
1704 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_match_ep()
1711 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_match_ep()
1766 struct cdns3_device *priv_dev; in cdns3_gadget_ep_enable() local
1775 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_enable()
1778 dev_dbg(priv_dev->dev, "usbss: invalid parameters\n"); in cdns3_gadget_ep_enable()
1783 dev_err(priv_dev->dev, "usbss: missing wMaxPacketSize\n"); in cdns3_gadget_ep_enable()
1790 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_ep_enable()
1798 dev_err(priv_dev->dev, "Driver is limited to %d period\n", in cdns3_gadget_ep_enable()
1811 cdns3_select_ep(priv_dev, bEndpointAddress); in cdns3_gadget_ep_enable()
1815 writel(EP_CMD_EPRST, &priv_dev->regs->ep_cmd); in cdns3_gadget_ep_enable()
1817 ret = readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val, in cdns3_gadget_ep_enable()
1828 cdns3_set_register_bit(&priv_dev->regs->ep_ien, in cdns3_gadget_ep_enable()
1831 if (priv_dev->dev_ver < DEV_VER_V2) in cdns3_gadget_ep_enable()
1832 cdns3_wa2_enable_detection(priv_dev, priv_ep, reg); in cdns3_gadget_ep_enable()
1834 writel(reg, &priv_dev->regs->ep_sts_en); in cdns3_gadget_ep_enable()
1848 cdns3_set_register_bit(&priv_dev->regs->ep_cfg, EP_CFG_ENABLE); in cdns3_gadget_ep_enable()
1857 reg = readl(&priv_dev->regs->ep_sts); in cdns3_gadget_ep_enable()
1863 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_ep_enable()
1878 struct cdns3_device *priv_dev; in cdns3_gadget_ep_disable() local
1891 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_disable()
1896 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_ep_disable()
1900 cdns3_select_ep(priv_dev, ep->desc->bEndpointAddress); in cdns3_gadget_ep_disable()
1902 ep_cfg = readl(&priv_dev->regs->ep_cfg); in cdns3_gadget_ep_disable()
1904 writel(ep_cfg, &priv_dev->regs->ep_cfg); in cdns3_gadget_ep_disable()
1911 readl_poll_timeout_atomic(&priv_dev->regs->ep_sts, val, in cdns3_gadget_ep_disable()
1913 writel(EP_CMD_EPRST, &priv_dev->regs->ep_cmd); in cdns3_gadget_ep_disable()
1915 readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val, in cdns3_gadget_ep_disable()
1919 dev_err(priv_dev->dev, "Timeout: %s resetting failed.\n", in cdns3_gadget_ep_disable()
1951 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_ep_disable()
1969 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_queue() local
1978 if (priv_dev->dev_ver < DEV_VER_V2) { in __cdns3_gadget_ep_queue()
1979 ret = cdns3_wa2_gadget_ep_queue(priv_dev, priv_ep, in __cdns3_gadget_ep_queue()
1990 ret = usb_gadget_map_request(&priv_dev->gadget, request, in __cdns3_gadget_ep_queue()
2002 if (priv_dev->hw_configured_flag && !(priv_ep->flags & EP_STALLED) && in __cdns3_gadget_ep_queue()
2004 cdns3_start_all_request(priv_dev, priv_ep); in __cdns3_gadget_ep_queue()
2014 struct cdns3_device *priv_dev; in cdns3_gadget_ep_queue() local
2022 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_queue()
2024 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_ep_queue()
2033 zlp_request->buf = priv_dev->zlp_buf; in cdns3_gadget_ep_queue()
2039 dev_dbg(priv_dev->dev, "Queuing ZLP for endpoint: %s\n", in cdns3_gadget_ep_queue()
2044 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_ep_queue()
2059 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_dequeue() local
2069 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_ep_dequeue()
2075 cdns3_select_ep(priv_dev, ep->desc->bEndpointAddress); in cdns3_gadget_ep_dequeue()
2114 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_ep_dequeue()
2125 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_set_halt() local
2130 u32 ep_sts_reg = readl(&priv_dev->regs->ep_sts); in __cdns3_gadget_ep_set_halt()
2146 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_clear_halt() local
2153 writel(EP_CMD_CSTALL | EP_CMD_EPRST, &priv_dev->regs->ep_cmd); in __cdns3_gadget_ep_clear_halt()
2156 readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val, in __cdns3_gadget_ep_clear_halt()
2168 cdns3_start_all_request(priv_dev, priv_ep); in __cdns3_gadget_ep_clear_halt()
2182 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_set_halt() local
2189 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_ep_set_halt()
2191 cdns3_select_ep(priv_dev, ep->desc->bEndpointAddress); in cdns3_gadget_ep_set_halt()
2200 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_ep_set_halt()
2226 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_get_frame() local
2228 return readl(&priv_dev->regs->usb_itpn); in cdns3_gadget_get_frame()
2231 int __cdns3_gadget_wakeup(struct cdns3_device *priv_dev) in __cdns3_gadget_wakeup() argument
2235 speed = cdns3_get_speed(priv_dev); in __cdns3_gadget_wakeup()
2241 writel(USB_CONF_LGO_L0, &priv_dev->regs->usb_conf); in __cdns3_gadget_wakeup()
2248 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_wakeup() local
2252 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_wakeup()
2253 ret = __cdns3_gadget_wakeup(priv_dev); in cdns3_gadget_wakeup()
2254 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_wakeup()
2261 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_set_selfpowered() local
2264 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_set_selfpowered()
2265 priv_dev->is_selfpowered = !!is_selfpowered; in cdns3_gadget_set_selfpowered()
2266 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_set_selfpowered()
2272 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_pullup() local
2275 writel(USB_CONF_DEVEN, &priv_dev->regs->usb_conf); in cdns3_gadget_pullup()
2277 writel(USB_CONF_DEVDS, &priv_dev->regs->usb_conf); in cdns3_gadget_pullup()
2282 static void cdns3_gadget_config(struct cdns3_device *priv_dev) in cdns3_gadget_config() argument
2284 struct cdns3_usb_regs __iomem *regs = priv_dev->regs; in cdns3_gadget_config()
2287 cdns3_ep0_config(priv_dev); in cdns3_gadget_config()
2296 if (priv_dev->dev_ver == DEV_VER_TI_V1) { in cdns3_gadget_config()
2319 cdns3_configure_dmult(priv_dev, NULL); in cdns3_gadget_config()
2321 cdns3_gadget_pullup(&priv_dev->gadget, 1); in cdns3_gadget_config()
2334 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_udc_start() local
2337 spin_lock_irqsave(&priv_dev->lock, flags); in cdns3_gadget_udc_start()
2338 priv_dev->gadget_driver = driver; in cdns3_gadget_udc_start()
2339 cdns3_gadget_config(priv_dev); in cdns3_gadget_udc_start()
2340 spin_unlock_irqrestore(&priv_dev->lock, flags); in cdns3_gadget_udc_start()
2352 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_udc_stop() local
2359 priv_dev->gadget_driver = NULL; in cdns3_gadget_udc_stop()
2361 priv_dev->onchip_used_size = 0; in cdns3_gadget_udc_stop()
2362 priv_dev->out_mem_is_allocated = 0; in cdns3_gadget_udc_stop()
2363 priv_dev->gadget.speed = USB_SPEED_UNKNOWN; in cdns3_gadget_udc_stop()
2365 list_for_each_entry(ep, &priv_dev->gadget.ep_list, ep_list) { in cdns3_gadget_udc_stop()
2368 cdns3_select_ep(priv_dev, bEndpointAddress); in cdns3_gadget_udc_stop()
2369 writel(EP_CMD_EPRST, &priv_dev->regs->ep_cmd); in cdns3_gadget_udc_stop()
2370 readl_poll_timeout_atomic(&priv_dev->regs->ep_cmd, val, in cdns3_gadget_udc_stop()
2375 writel(0, &priv_dev->regs->usb_ien); in cdns3_gadget_udc_stop()
2376 writel(USB_CONF_DEVDS, &priv_dev->regs->usb_conf); in cdns3_gadget_udc_stop()
2384 struct cdns3_device *priv_dev = gadget_to_cdns3_device(gadget); in cdns3_gadget_udc_set_speed() local
2388 writel(USB_CONF_SFORCE_FS, &priv_dev->regs->usb_conf); in cdns3_gadget_udc_set_speed()
2389 writel(USB_CONF_USB3DIS, &priv_dev->regs->usb_conf); in cdns3_gadget_udc_set_speed()
2392 writel(USB_CONF_USB3DIS, &priv_dev->regs->usb_conf); in cdns3_gadget_udc_set_speed()
2401 priv_dev->gadget.speed = speed; in cdns3_gadget_udc_set_speed()
2415 static void cdns3_free_all_eps(struct cdns3_device *priv_dev) in cdns3_free_all_eps() argument
2420 priv_dev->eps[16] = NULL; in cdns3_free_all_eps()
2423 if (priv_dev->eps[i]) { in cdns3_free_all_eps()
2424 cdns3_free_trb_pool(priv_dev->eps[i]); in cdns3_free_all_eps()
2425 devm_kfree(priv_dev->dev, priv_dev->eps[i]); in cdns3_free_all_eps()
2435 static int cdns3_init_eps(struct cdns3_device *priv_dev) in cdns3_init_eps() argument
2445 ep_enabled_reg = readl(&priv_dev->regs->usb_cap3); in cdns3_init_eps()
2446 iso_ep_reg = readl(&priv_dev->regs->usb_cap4); in cdns3_init_eps()
2448 dev_dbg(priv_dev->dev, "Initializing non-zero endpoints\n"); in cdns3_init_eps()
2459 priv_dev->eps[i] = priv_dev->eps[0]; in cdns3_init_eps()
2463 priv_ep = devm_kzalloc(priv_dev->dev, sizeof(*priv_ep), in cdns3_init_eps()
2471 priv_ep->cdns3_dev = priv_dev; in cdns3_init_eps()
2472 priv_dev->eps[i] = priv_ep; in cdns3_init_eps()
2477 ret = cdns3_init_ep0(priv_dev, priv_ep); in cdns3_init_eps()
2479 dev_err(priv_dev->dev, "Failed to init ep0\n"); in cdns3_init_eps()
2503 &priv_dev->gadget.ep_list); in cdns3_init_eps()
2508 dev_info(priv_dev->dev, "Initialized %s support: %s %s\n", in cdns3_init_eps()
2520 cdns3_free_all_eps(priv_dev); in cdns3_init_eps()
2526 struct cdns3_device *priv_dev; in cdns3_gadget_exit() local
2528 priv_dev = cdns->gadget_dev; in cdns3_gadget_exit()
2530 usb_del_gadget_udc(&priv_dev->gadget); in cdns3_gadget_exit()
2532 cdns3_free_all_eps(priv_dev); in cdns3_gadget_exit()
2534 while (!list_empty(&priv_dev->aligned_buf_list)) { in cdns3_gadget_exit()
2537 buf = cdns3_next_align_buf(&priv_dev->aligned_buf_list); in cdns3_gadget_exit()
2544 dma_free_coherent(priv_dev->setup_buf); in cdns3_gadget_exit()
2546 kfree(priv_dev->zlp_buf); in cdns3_gadget_exit()
2547 kfree(priv_dev); in cdns3_gadget_exit()
2554 struct cdns3_device *priv_dev; in cdns3_gadget_start() local
2558 priv_dev = kzalloc(sizeof(*priv_dev), GFP_KERNEL); in cdns3_gadget_start()
2559 if (!priv_dev) in cdns3_gadget_start()
2562 cdns->gadget_dev = priv_dev; in cdns3_gadget_start()
2563 priv_dev->sysdev = cdns->dev; in cdns3_gadget_start()
2564 priv_dev->dev = cdns->dev; in cdns3_gadget_start()
2565 priv_dev->regs = cdns->dev_regs; in cdns3_gadget_start()
2567 dev_read_u32(priv_dev->dev, "cdns,on-chip-buff-size", in cdns3_gadget_start()
2568 &priv_dev->onchip_buffers); in cdns3_gadget_start()
2570 if (priv_dev->onchip_buffers <= 0) { in cdns3_gadget_start()
2571 u32 reg = readl(&priv_dev->regs->usb_cap2); in cdns3_gadget_start()
2573 priv_dev->onchip_buffers = USB_CAP2_ACTUAL_MEM_SIZE(reg); in cdns3_gadget_start()
2576 if (!priv_dev->onchip_buffers) in cdns3_gadget_start()
2577 priv_dev->onchip_buffers = 256; in cdns3_gadget_start()
2600 priv_dev->gadget.max_speed = max_speed; in cdns3_gadget_start()
2601 priv_dev->gadget.speed = USB_SPEED_UNKNOWN; in cdns3_gadget_start()
2602 priv_dev->gadget.ops = &cdns3_gadget_ops; in cdns3_gadget_start()
2603 priv_dev->gadget.name = "cdns3-gadget"; in cdns3_gadget_start()
2605 priv_dev->gadget.name = "usb-ss-gadget"; in cdns3_gadget_start()
2606 priv_dev->gadget.sg_supported = 1; in cdns3_gadget_start()
2607 priv_dev->gadget.quirk_avoids_skb_reserve = 1; in cdns3_gadget_start()
2610 spin_lock_init(&priv_dev->lock); in cdns3_gadget_start()
2611 INIT_WORK(&priv_dev->pending_status_wq, in cdns3_gadget_start()
2615 INIT_LIST_HEAD(&priv_dev->gadget.ep_list); in cdns3_gadget_start()
2616 INIT_LIST_HEAD(&priv_dev->aligned_buf_list); in cdns3_gadget_start()
2618 ret = cdns3_init_eps(priv_dev); in cdns3_gadget_start()
2620 dev_err(priv_dev->dev, "Failed to create endpoints\n"); in cdns3_gadget_start()
2625 priv_dev->setup_buf = in cdns3_gadget_start()
2626 dma_alloc_coherent(8, (unsigned long *)&priv_dev->setup_dma); in cdns3_gadget_start()
2627 if (!priv_dev->setup_buf) { in cdns3_gadget_start()
2632 priv_dev->dev_ver = readl(&priv_dev->regs->usb_cap6); in cdns3_gadget_start()
2634 dev_dbg(priv_dev->dev, "Device Controller version: %08x\n", in cdns3_gadget_start()
2635 readl(&priv_dev->regs->usb_cap6)); in cdns3_gadget_start()
2636 dev_dbg(priv_dev->dev, "USB Capabilities:: %08x\n", in cdns3_gadget_start()
2637 readl(&priv_dev->regs->usb_cap1)); in cdns3_gadget_start()
2638 dev_dbg(priv_dev->dev, "On-Chip memory cnfiguration: %08x\n", in cdns3_gadget_start()
2639 readl(&priv_dev->regs->usb_cap2)); in cdns3_gadget_start()
2641 priv_dev->dev_ver = GET_DEV_BASE_VERSION(priv_dev->dev_ver); in cdns3_gadget_start()
2643 priv_dev->zlp_buf = kzalloc(CDNS3_EP_ZLP_BUF_SIZE, GFP_KERNEL); in cdns3_gadget_start()
2644 if (!priv_dev->zlp_buf) { in cdns3_gadget_start()
2650 ret = usb_add_gadget_udc((struct device *)priv_dev->dev, in cdns3_gadget_start()
2651 &priv_dev->gadget); in cdns3_gadget_start()
2653 dev_err(priv_dev->dev, in cdns3_gadget_start()
2660 kfree(priv_dev->zlp_buf); in cdns3_gadget_start()
2662 dma_free_coherent(priv_dev->setup_buf); in cdns3_gadget_start()
2664 cdns3_free_all_eps(priv_dev); in cdns3_gadget_start()
2685 struct cdns3_device *priv_dev = cdns->gadget_dev; in cdns3_gadget_suspend() local
2687 cdns3_disconnect_gadget(priv_dev); in cdns3_gadget_suspend()
2689 priv_dev->gadget.speed = USB_SPEED_UNKNOWN; in cdns3_gadget_suspend()
2690 usb_gadget_set_state(&priv_dev->gadget, USB_STATE_NOTATTACHED); in cdns3_gadget_suspend()
2691 cdns3_hw_reset_eps_config(priv_dev); in cdns3_gadget_suspend()
2694 writel(0, &priv_dev->regs->usb_ien); in cdns3_gadget_suspend()
2696 cdns3_gadget_pullup(&priv_dev->gadget, 0); in cdns3_gadget_suspend()
2703 struct cdns3_device *priv_dev = cdns->gadget_dev; in cdns3_gadget_resume() local
2705 if (!priv_dev->gadget_driver) in cdns3_gadget_resume()
2708 cdns3_gadget_config(priv_dev); in cdns3_gadget_resume()