Lines Matching full:dwc3
41 int dwc3_gadget_set_test_mode(struct dwc3 *dwc, int mode) in dwc3_gadget_set_test_mode()
72 int dwc3_gadget_get_link_state(struct dwc3 *dwc) in dwc3_gadget_get_link_state()
89 int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state) in dwc3_gadget_set_link_state()
98 if (!DWC3_VER_IS_PRIOR(DWC3, 194A)) { in dwc3_gadget_set_link_state()
125 if (!DWC3_VER_IS_PRIOR(DWC3, 194A)) in dwc3_gadget_set_link_state()
142 static void dwc3_ep0_reset_state(struct dwc3 *dwc) in dwc3_ep0_reset_state()
196 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_del_and_unmap_request()
229 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_giveback()
248 int dwc3_send_gadget_generic_command(struct dwc3 *dwc, unsigned int cmd, in dwc3_send_gadget_generic_command()
309 struct dwc3 *dwc = dep->dwc; in dwc3_send_gadget_ep_cmd()
453 struct dwc3 *dwc = dep->dwc; in dwc3_send_clear_stall_ep_cmd()
466 !DWC3_VER_IS_PRIOR(DWC3, 260A) && in dwc3_send_clear_stall_ep_cmd()
485 struct dwc3 *dwc = dep->dwc; in dwc3_alloc_trb_pool()
504 struct dwc3 *dwc = dep->dwc; in dwc3_free_trb_pool()
536 * @dwc: pointer to the DWC3 context
545 int dwc3_gadget_start_config(struct dwc3 *dwc, unsigned int resource_index) in dwc3_gadget_start_config()
581 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_set_ep_config()
660 * @dwc: pointer to the DWC3 context
665 * DWC3 revision 280A and prior:
668 * DWC3 revision 290A and onwards:
675 static int dwc3_gadget_calc_tx_fifo_size(struct dwc3 *dwc, int mult) in dwc3_gadget_calc_tx_fifo_size()
686 if (DWC3_VER_IS_PRIOR(DWC3, 290A)) in dwc3_gadget_calc_tx_fifo_size()
695 * @dwc: pointer to the DWC3 context
697 static int dwc3_gadget_calc_ram_depth(struct dwc3 *dwc) in dwc3_gadget_calc_ram_depth()
733 * @dwc: pointer to the DWC3 context
738 void dwc3_gadget_clear_tx_fifos(struct dwc3 *dwc) in dwc3_gadget_clear_tx_fifos()
751 if (DWC3_IP_IS(DWC3)) in dwc3_gadget_clear_tx_fifos()
764 size = DWC3_IP_IS(DWC3) ? 0 : in dwc3_gadget_clear_tx_fifos()
797 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_resize_tx_fifos()
875 if (DWC3_IP_IS(DWC3)) in dwc3_gadget_resize_tx_fifos()
885 if (DWC3_IP_IS(DWC3)) in dwc3_gadget_resize_tx_fifos()
912 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_ep_enable()
1025 void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep, int status) in dwc3_remove_requests()
1067 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_ep_disable()
1087 * dwc3_remove_requests() can exit early if DWC3 EP delayed stop is in __dwc3_gadget_ep_disable()
1123 struct dwc3 *dwc; in dwc3_gadget_ep_enable()
1128 pr_debug("dwc3: invalid parameters\n"); in dwc3_gadget_ep_enable()
1133 pr_debug("dwc3: missing wMaxPacketSize\n"); in dwc3_gadget_ep_enable()
1155 struct dwc3 *dwc; in dwc3_gadget_ep_disable()
1160 pr_debug("dwc3: invalid parameters\n"); in dwc3_gadget_ep_disable()
1280 struct dwc3 *dwc = dep->dwc; in dwc3_prepare_one_trb()
1625 struct dwc3 *dwc = dep->dwc; in dwc3_prepare_trbs()
1736 static int __dwc3_gadget_get_frame(struct dwc3 *dwc) in __dwc3_gadget_get_frame()
1907 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_start_isoc()
1972 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_ep_queue()
2041 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_ep_queue()
2086 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_ep_cleanup_cancelled_requests()
2122 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_ep_dequeue()
2186 struct dwc3 *dwc = dep->dwc; in __dwc3_gadget_ep_set_halt()
2273 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_ep_set_halt()
2289 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_ep_set_wedge()
2337 static void dwc3_gadget_enable_linksts_evts(struct dwc3 *dwc, bool set) in dwc3_gadget_enable_linksts_evts()
2341 if (DWC3_VER_IS_PRIOR(DWC3, 250A)) in dwc3_gadget_enable_linksts_evts()
2355 struct dwc3 *dwc = gadget_to_dwc(g); in dwc3_gadget_get_frame()
2360 static int __dwc3_gadget_wakeup(struct dwc3 *dwc) in __dwc3_gadget_wakeup()
2399 if (DWC3_VER_IS_PRIOR(DWC3, 194A)) { in __dwc3_gadget_wakeup()
2415 struct dwc3 *dwc = gadget_to_dwc(g); in dwc3_gadget_wakeup()
2437 static void dwc3_resume_gadget(struct dwc3 *dwc);
2441 struct dwc3 *dwc = gadget_to_dwc(g); in dwc3_gadget_func_wakeup()
2477 struct dwc3 *dwc = gadget_to_dwc(g); in dwc3_gadget_set_remote_wakeup()
2490 struct dwc3 *dwc = gadget_to_dwc(g); in dwc3_gadget_set_selfpowered()
2500 static void dwc3_stop_active_transfers(struct dwc3 *dwc) in dwc3_stop_active_transfers()
2515 static void __dwc3_gadget_set_ssp_rate(struct dwc3 *dwc) in __dwc3_gadget_set_ssp_rate()
2539 static void __dwc3_gadget_set_speed(struct dwc3 *dwc) in __dwc3_gadget_set_speed()
2558 * WORKAROUND: DWC3 revision < 2.20a have an issue in __dwc3_gadget_set_speed()
2570 if (DWC3_VER_IS_PRIOR(DWC3, 220A) && in __dwc3_gadget_set_speed()
2585 if (DWC3_IP_IS(DWC3)) in __dwc3_gadget_set_speed()
2593 if (DWC3_IP_IS(DWC3)) in __dwc3_gadget_set_speed()
2608 static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on) in dwc3_gadget_run_stop()
2627 * mentioned in the dwc3 programming guide. It has been tested on an in dwc3_gadget_run_stop()
2646 if (DWC3_VER_IS_WITHIN(DWC3, ANY, 187A)) { in dwc3_gadget_run_stop()
2651 if (!DWC3_VER_IS_PRIOR(DWC3, 194A)) in dwc3_gadget_run_stop()
2683 static void dwc3_gadget_disable_irq(struct dwc3 *dwc);
2684 static void __dwc3_gadget_stop(struct dwc3 *dwc);
2685 static int __dwc3_gadget_start(struct dwc3 *dwc);
2687 static int dwc3_gadget_soft_disconnect(struct dwc3 *dwc) in dwc3_gadget_soft_disconnect()
2761 static int dwc3_gadget_soft_connect(struct dwc3 *dwc) in dwc3_gadget_soft_connect()
2782 struct dwc3 *dwc = gadget_to_dwc(g); in dwc3_gadget_pullup()
2791 * suspended state during gadget disconnect. DWC3 gadget was already in dwc3_gadget_pullup()
2802 * successful resume, the DWC3 runtime PM resume routine will handle in dwc3_gadget_pullup()
2830 static void dwc3_gadget_enable_irq(struct dwc3 *dwc) in dwc3_gadget_enable_irq()
2843 if (DWC3_VER_IS_PRIOR(DWC3, 250A)) in dwc3_gadget_enable_irq()
2847 if (!DWC3_VER_IS_PRIOR(DWC3, 230A)) in dwc3_gadget_enable_irq()
2853 static void dwc3_gadget_disable_irq(struct dwc3 *dwc) in dwc3_gadget_disable_irq()
2883 static void dwc3_gadget_setup_nump(struct dwc3 *dwc) in dwc3_gadget_setup_nump()
2903 static int __dwc3_gadget_start(struct dwc3 *dwc) in __dwc3_gadget_start()
2921 * We are telling dwc3 that we want to use DCFG.NUMP as ACK TP's NUMP in __dwc3_gadget_start()
2922 * field instead of letting dwc3 itself calculate that automatically. in __dwc3_gadget_start()
2928 if (DWC3_IP_IS(DWC3)) in __dwc3_gadget_start()
3002 struct dwc3 *dwc = gadget_to_dwc(g); in dwc3_gadget_start()
3009 IRQF_SHARED, "dwc3", dwc->ev_buf); in dwc3_gadget_start()
3026 static void __dwc3_gadget_stop(struct dwc3 *dwc) in __dwc3_gadget_stop()
3035 struct dwc3 *dwc = gadget_to_dwc(g); in dwc3_gadget_stop()
3054 struct dwc3 *dwc = gadget_to_dwc(g); in dwc3_gadget_config_params()
3093 struct dwc3 *dwc = gadget_to_dwc(g); in dwc3_gadget_set_speed()
3104 struct dwc3 *dwc = gadget_to_dwc(g); in dwc3_gadget_set_ssp_rate()
3115 struct dwc3 *dwc = gadget_to_dwc(g); in dwc3_gadget_vbus_draw()
3132 * dwc3_gadget_check_config - ensure dwc3 can support the USB configuration
3143 struct dwc3 *dwc = gadget_to_dwc(g); in dwc3_gadget_check_config()
3178 struct dwc3 *dwc = gadget_to_dwc(g); in dwc3_gadget_async_callbacks()
3207 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_init_control_endpoint()
3222 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_init_in_endpoint()
3233 if (DWC3_IP_IS(DWC3)) in dwc3_gadget_init_in_endpoint()
3241 * DWC3 revision 280A and prior: in dwc3_gadget_init_in_endpoint()
3245 * DWC3 revision 290A and onwards: in dwc3_gadget_init_in_endpoint()
3249 if (DWC3_VER_IS_PRIOR(DWC3, 290A)) in dwc3_gadget_init_in_endpoint()
3271 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_init_out_endpoint()
3282 if (DWC3_IP_IS(DWC3)) in dwc3_gadget_init_out_endpoint()
3320 struct dwc3 *dwc = dep->dwc; in dwc3_nostream_work()
3360 static int dwc3_gadget_init_endpoint(struct dwc3 *dwc, u8 epnum) in dwc3_gadget_init_endpoint()
3412 static int dwc3_gadget_get_reserved_endpoints(struct dwc3 *dwc, const char *propname, in dwc3_gadget_get_reserved_endpoints()
3433 static int dwc3_gadget_init_endpoints(struct dwc3 *dwc, u8 total) in dwc3_gadget_init_endpoints()
3468 static void dwc3_gadget_free_endpoints(struct dwc3 *dwc) in dwc3_gadget_free_endpoints()
3484 * with all sorts of bugs when removing dwc3.ko. in dwc3_gadget_free_endpoints()
3511 * receive a short transfer along the way, DWC3 will skip in dwc3_gadget_ep_reclaim_completed_trb()
3513 * where CHN bit is zero. DWC3 will also avoid clearing HWO in dwc3_gadget_ep_reclaim_completed_trb()
3666 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_ep_should_continue()
3695 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_endpoint_trbs_complete()
3719 if (DWC3_VER_IS_PRIOR(DWC3, 183A)) { in dwc3_gadget_endpoint_trbs_complete()
3819 struct dwc3 *dwc = dep->dwc; in dwc3_gadget_endpoint_command_complete()
3869 static void dwc3_endpoint_interrupt(struct dwc3 *dwc, in dwc3_endpoint_interrupt()
3920 static void dwc3_disconnect_gadget(struct dwc3 *dwc) in dwc3_disconnect_gadget()
3929 static void dwc3_suspend_gadget(struct dwc3 *dwc) in dwc3_suspend_gadget()
3938 static void dwc3_resume_gadget(struct dwc3 *dwc) in dwc3_resume_gadget()
3947 static void dwc3_reset_gadget(struct dwc3 *dwc) in dwc3_reset_gadget()
3962 struct dwc3 *dwc = dep->dwc; in dwc3_stop_active_transfer()
4019 * controller to handle the command completely before DWC3 in dwc3_stop_active_transfer()
4026 static void dwc3_clear_stall_all_ep(struct dwc3 *dwc) in dwc3_clear_stall_all_ep()
4048 static void dwc3_gadget_disconnect_interrupt(struct dwc3 *dwc) in dwc3_gadget_disconnect_interrupt()
4081 static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc) in dwc3_gadget_reset_interrupt()
4097 * WORKAROUND: DWC3 revisions <1.88a have an issue which in dwc3_gadget_reset_interrupt()
4122 if (DWC3_VER_IS_PRIOR(DWC3, 188A)) { in dwc3_gadget_reset_interrupt()
4159 static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc) in dwc3_gadget_conndone_interrupt()
4201 * WORKAROUND: DWC3 revisions <1.90a have an issue which in dwc3_gadget_conndone_interrupt()
4213 if (DWC3_VER_IS_PRIOR(DWC3, 190A)) in dwc3_gadget_conndone_interrupt()
4241 if (!DWC3_VER_IS_WITHIN(DWC3, ANY, 194A) && in dwc3_gadget_conndone_interrupt()
4256 * When dwc3 revisions >= 2.40a, LPM Erratum is enabled and in dwc3_gadget_conndone_interrupt()
4261 WARN_ONCE(DWC3_VER_IS_PRIOR(DWC3, 240A) && dwc->has_lpm_erratum, in dwc3_gadget_conndone_interrupt()
4262 "LPM Erratum not available on dwc3 revisions < 2.40a\n"); in dwc3_gadget_conndone_interrupt()
4264 if (dwc->has_lpm_erratum && !DWC3_VER_IS_PRIOR(DWC3, 240A)) { in dwc3_gadget_conndone_interrupt()
4305 static void dwc3_gadget_wakeup_interrupt(struct dwc3 *dwc, unsigned int evtinfo) in dwc3_gadget_wakeup_interrupt()
4323 static void dwc3_gadget_linksts_change_interrupt(struct dwc3 *dwc, in dwc3_gadget_linksts_change_interrupt()
4332 * WORKAROUND: DWC3 < 2.50a have an issue when configured without in dwc3_gadget_linksts_change_interrupt()
4349 if (DWC3_VER_IS_PRIOR(DWC3, 250A) && in dwc3_gadget_linksts_change_interrupt()
4358 * WORKAROUND: DWC3 Revisions <1.83a have an issue which, depending in dwc3_gadget_linksts_change_interrupt()
4375 if (DWC3_VER_IS_PRIOR(DWC3, 183A)) { in dwc3_gadget_linksts_change_interrupt()
4442 static void dwc3_gadget_suspend_interrupt(struct dwc3 *dwc, in dwc3_gadget_suspend_interrupt()
4455 static void dwc3_gadget_interrupt(struct dwc3 *dwc, in dwc3_gadget_interrupt()
4479 if (!DWC3_VER_IS_PRIOR(DWC3, 230A)) in dwc3_gadget_interrupt()
4492 static void dwc3_process_event_entry(struct dwc3 *dwc, in dwc3_process_event_entry()
4507 struct dwc3 *dwc = evt->dwc; in dwc3_process_event_buf()
4561 struct dwc3 *dwc = evt->dwc; in dwc3_thread_interrupt()
4576 struct dwc3 *dwc = evt->dwc; in dwc3_check_event_buf()
4637 static int dwc3_gadget_get_irq(struct dwc3 *dwc) in dwc3_gadget_get_irq()
4675 int dwc3_gadget_init(struct dwc3 *dwc) in dwc3_gadget_init()
4726 dwc->gadget->name = "dwc3-gadget"; in dwc3_gadget_init()
4732 * <2.20a of dwc3 have an issue with metastability (documented in dwc3_gadget_init()
4737 * drivers (i.e. it won't go into dwc3's registers) we are allowing this in dwc3_gadget_init()
4746 if (DWC3_VER_IS_PRIOR(DWC3, 220A) && in dwc3_gadget_init()
4802 void dwc3_gadget_exit(struct dwc3 *dwc) in dwc3_gadget_exit()
4818 int dwc3_gadget_suspend(struct dwc3 *dwc) in dwc3_gadget_suspend()
4846 int dwc3_gadget_resume(struct dwc3 *dwc) in dwc3_gadget_resume()