Loading drivers/usb/dwc3/dwc3-msm.c +55 −3 Original line number Diff line number Diff line Loading @@ -1470,6 +1470,7 @@ static void dwc3_restart_usb_work(struct work_struct *w) return; } dbg_event(0xFF, "RestartUSB", 0); /* Reset active USB connection */ dwc3_resume_work(&mdwc->resume_work); Loading @@ -1480,6 +1481,8 @@ static void dwc3_restart_usb_work(struct work_struct *w) if (!timeout) { dev_dbg(mdwc->dev, "Not in LPM after disconnect, forcing suspend...\n"); dbg_event(0xFF, "ReStart:RT SUSP", atomic_read(&mdwc->dev->power.usage_count)); pm_runtime_suspend(mdwc->dev); } Loading Loading @@ -1866,6 +1869,8 @@ static void dwc3_msm_power_collapse_por(struct dwc3_msm *mdwc) } if (!mdwc->init) { dbg_event(0xFF, "dwc3 init", atomic_read(&mdwc->dev->power.usage_count)); dwc3_core_pre_init(dwc); mdwc->init = true; } Loading Loading @@ -2262,6 +2267,7 @@ static int dwc3_msm_resume(struct dwc3_msm *mdwc) */ dwc3_pwr_event_handler(mdwc); dbg_event(0xFF, "Ctl Res", atomic_read(&dwc->in_lpm)); return 0; } Loading Loading @@ -2305,6 +2311,7 @@ static void dwc3_ext_event_notify(struct dwc3_msm *mdwc) static void dwc3_resume_work(struct work_struct *w) { struct dwc3_msm *mdwc = container_of(w, struct dwc3_msm, resume_work); struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); dev_dbg(mdwc->dev, "%s: dwc3 resume work\n", __func__); Loading @@ -2320,9 +2327,11 @@ static void dwc3_resume_work(struct work_struct *w) mdwc->resume_pending = false; } if (atomic_read(&mdwc->pm_suspended)) if (atomic_read(&mdwc->pm_suspended)) { dbg_event(0xFF, "RWrk PMSus", 0); /* let pm resume kick in resume work later */ return; } dwc3_ext_event_notify(mdwc); } Loading Loading @@ -2394,6 +2403,7 @@ static irqreturn_t msm_dwc3_pwr_irq_thread(int irq, void *_mdwc) else dwc3_pwr_event_handler(mdwc); dbg_event(0xFF, "PWR IRQ", atomic_read(&dwc->in_lpm)); return IRQ_HANDLED; } Loading Loading @@ -2578,7 +2588,7 @@ static int dwc3_msm_id_notifier(struct notifier_block *nb, mdwc->typec_orientation = cc_state ? ORIENTATION_CC2 : ORIENTATION_CC1; dev_dbg(mdwc->dev, "cc_state:%d", mdwc->typec_orientation); dbg_event(0xFF, "cc_state", mdwc->typec_orientation); speed = extcon_get_cable_state_(edev, EXTCON_USB_SPEED); dwc->maximum_speed = (speed == 0) ? USB_SPEED_HIGH : USB_SPEED_SUPER; Loading @@ -2587,6 +2597,7 @@ static int dwc3_msm_id_notifier(struct notifier_block *nb, if (mdwc->id_state != id) { mdwc->id_state = id; dbg_event(0xFF, "id_state", mdwc->id_state); queue_work(mdwc->dwc3_wq, &mdwc->resume_work); } Loading Loading @@ -2620,7 +2631,7 @@ static int dwc3_msm_vbus_notifier(struct notifier_block *nb, mdwc->typec_orientation = cc_state ? ORIENTATION_CC2 : ORIENTATION_CC1; dev_dbg(mdwc->dev, "cc_state:%d", mdwc->typec_orientation); dbg_event(0xFF, "cc_state", mdwc->typec_orientation); speed = extcon_get_cable_state_(edev, EXTCON_USB_SPEED); dwc->maximum_speed = (speed == 0) ? USB_SPEED_HIGH : USB_SPEED_SUPER; Loading Loading @@ -3105,6 +3116,7 @@ static int dwc3_msm_remove_children(struct device *dev, void *data) static int dwc3_msm_remove(struct platform_device *pdev) { struct dwc3_msm *mdwc = platform_get_drvdata(pdev); struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); int ret_pm; device_remove_file(&pdev->dev, &dev_attr_mode); Loading @@ -3117,6 +3129,7 @@ static int dwc3_msm_remove(struct platform_device *pdev) * Hence turn ON the clocks manually. */ ret_pm = pm_runtime_get_sync(mdwc->dev); dbg_event(0xFF, "Remov gsyn", ret_pm); if (ret_pm < 0) { dev_err(mdwc->dev, "pm_runtime_get_sync failed with %d\n", ret_pm); Loading @@ -3138,6 +3151,7 @@ static int dwc3_msm_remove(struct platform_device *pdev) platform_device_put(mdwc->dwc3); device_for_each_child(&pdev->dev, NULL, dwc3_msm_remove_children); dbg_event(0xFF, "Remov put", 0); pm_runtime_disable(mdwc->dev); pm_runtime_barrier(mdwc->dev); pm_runtime_put_sync(mdwc->dev); Loading Loading @@ -3275,6 +3289,8 @@ static int dwc3_otg_start_host(struct dwc3_msm *mdwc, int on) mdwc->ss_phy->flags |= PHY_HOST_MODE; pm_runtime_get_sync(mdwc->dev); dbg_event(0xFF, "StrtHost gync", atomic_read(&mdwc->dev->power.usage_count)); usb_phy_notify_connect(mdwc->hs_phy, USB_SPEED_HIGH); if (!IS_ERR(mdwc->vbus_reg)) ret = regulator_enable(mdwc->vbus_reg); Loading @@ -3283,6 +3299,8 @@ static int dwc3_otg_start_host(struct dwc3_msm *mdwc, int on) mdwc->hs_phy->flags &= ~PHY_HOST_MODE; mdwc->ss_phy->flags &= ~PHY_HOST_MODE; pm_runtime_put_sync(mdwc->dev); dbg_event(0xFF, "vregerr psync", atomic_read(&mdwc->dev->power.usage_count)); return ret; } Loading @@ -3309,6 +3327,8 @@ static int dwc3_otg_start_host(struct dwc3_msm *mdwc, int on) mdwc->hs_phy->flags &= ~PHY_HOST_MODE; mdwc->ss_phy->flags &= ~PHY_HOST_MODE; pm_runtime_put_sync(mdwc->dev); dbg_event(0xFF, "pdeverr psync", atomic_read(&mdwc->dev->power.usage_count)); usb_unregister_notify(&mdwc->host_nb); return ret; } Loading @@ -3325,6 +3345,8 @@ static int dwc3_otg_start_host(struct dwc3_msm *mdwc, int on) dwc3_usb3_phy_suspend(dwc, true); /* xHCI should have incremented child count as necessary */ dbg_event(0xFF, "StrtHost psync", atomic_read(&mdwc->dev->power.usage_count)); pm_runtime_mark_last_busy(mdwc->dev); pm_runtime_put_sync_autosuspend(mdwc->dev); } else { Loading @@ -3338,6 +3360,8 @@ static int dwc3_otg_start_host(struct dwc3_msm *mdwc, int on) } pm_runtime_get_sync(mdwc->dev); dbg_event(0xFF, "StopHost gsync", atomic_read(&mdwc->dev->power.usage_count)); usb_phy_notify_disconnect(mdwc->hs_phy, USB_SPEED_HIGH); mdwc->hs_phy->flags &= ~PHY_HOST_MODE; mdwc->ss_phy->flags &= ~PHY_HOST_MODE; Loading @@ -3360,6 +3384,8 @@ static int dwc3_otg_start_host(struct dwc3_msm *mdwc, int on) dwc3_post_host_reset_core_init(dwc); pm_runtime_mark_last_busy(mdwc->dev); pm_runtime_put_sync_autosuspend(mdwc->dev); dbg_event(0xFF, "StopHost psync", atomic_read(&mdwc->dev->power.usage_count)); } return 0; Loading Loading @@ -3397,6 +3423,8 @@ static int dwc3_otg_start_peripheral(struct dwc3_msm *mdwc, int on) struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); pm_runtime_get_sync(mdwc->dev); dbg_event(0xFF, "StrtGdgt gsync", atomic_read(&mdwc->dev->power.usage_count)); if (on) { dev_dbg(mdwc->dev, "%s: turn on gadget %s\n", Loading Loading @@ -3425,6 +3453,8 @@ static int dwc3_otg_start_peripheral(struct dwc3_msm *mdwc, int on) } pm_runtime_put_sync(mdwc->dev); dbg_event(0xFF, "StopGdgt psync", atomic_read(&mdwc->dev->power.usage_count)); return 0; } Loading Loading @@ -3494,6 +3524,7 @@ static void dwc3_otg_sm_work(struct work_struct *w) state = usb_otg_state_string(mdwc->otg_state); dev_dbg(mdwc->dev, "%s state\n", state); dbg_event(0xFF, state, 0); /* Check OTG state */ switch (mdwc->otg_state) { Loading @@ -3503,6 +3534,7 @@ static void dwc3_otg_sm_work(struct work_struct *w) !test_bit(B_SESS_VLD, &mdwc->inputs)) break; dbg_event(0xFF, "Exit UNDEF", 0); mdwc->otg_state = OTG_STATE_B_IDLE; /* fall-through */ case OTG_STATE_B_IDLE: Loading @@ -3518,6 +3550,8 @@ static void dwc3_otg_sm_work(struct work_struct *w) * cable disconnect or in bus suspend. */ pm_runtime_get_sync(mdwc->dev); dbg_event(0xFF, "BIDLE gsync", atomic_read(&mdwc->dev->power.usage_count)); dwc3_otg_start_peripheral(mdwc, 1); mdwc->otg_state = OTG_STATE_B_PERIPHERAL; work = 1; Loading @@ -3539,6 +3573,8 @@ static void dwc3_otg_sm_work(struct work_struct *w) * OTG_STATE_B_IDLE state */ pm_runtime_put_sync(mdwc->dev); dbg_event(0xFF, "!BSV psync", atomic_read(&mdwc->dev->power.usage_count)); work = 1; } else if (test_bit(B_SUSPEND, &mdwc->inputs) && test_bit(B_SESS_VLD, &mdwc->inputs)) { Loading @@ -3553,6 +3589,8 @@ static void dwc3_otg_sm_work(struct work_struct *w) */ pm_runtime_mark_last_busy(mdwc->dev); pm_runtime_put_autosuspend(mdwc->dev); dbg_event(0xFF, "SUSP put", atomic_read(&mdwc->dev->power.usage_count)); } break; Loading @@ -3571,6 +3609,8 @@ static void dwc3_otg_sm_work(struct work_struct *w) * OTG_STATE_B_PERIPHERAL state. */ pm_runtime_get_sync(mdwc->dev); dbg_event(0xFF, "!SUSP gsync", atomic_read(&mdwc->dev->power.usage_count)); } break; Loading Loading @@ -3612,6 +3652,7 @@ static void dwc3_otg_sm_work(struct work_struct *w) work = 1; } else { dev_dbg(mdwc->dev, "still in a_host state. Resuming root hub.\n"); dbg_event(0xFF, "XHCIResume", 0); if (dwc) pm_runtime_resume(&dwc->xhci->dev); } Loading @@ -3637,6 +3678,7 @@ static int dwc3_msm_pm_suspend(struct device *dev) struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); dev_dbg(dev, "dwc3-msm PM suspend\n"); dbg_event(0xFF, "PM Sus", 0); flush_workqueue(mdwc->dwc3_wq); if (!atomic_read(&dwc->in_lpm)) { Loading @@ -3654,8 +3696,10 @@ static int dwc3_msm_pm_suspend(struct device *dev) static int dwc3_msm_pm_resume(struct device *dev) { struct dwc3_msm *mdwc = dev_get_drvdata(dev); struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); dev_dbg(dev, "dwc3-msm PM resume\n"); dbg_event(0xFF, "PM Res", 0); /* flush to avoid race in read/write of pm_suspended */ flush_workqueue(mdwc->dwc3_wq); Loading @@ -3671,7 +3715,11 @@ static int dwc3_msm_pm_resume(struct device *dev) #ifdef CONFIG_PM static int dwc3_msm_runtime_idle(struct device *dev) { struct dwc3_msm *mdwc = dev_get_drvdata(dev); struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); dev_dbg(dev, "DWC3-msm runtime idle\n"); dbg_event(0xFF, "RT Idle", 0); return 0; } Loading @@ -3679,8 +3727,10 @@ static int dwc3_msm_runtime_idle(struct device *dev) static int dwc3_msm_runtime_suspend(struct device *dev) { struct dwc3_msm *mdwc = dev_get_drvdata(dev); struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); dev_dbg(dev, "DWC3-msm runtime suspend\n"); dbg_event(0xFF, "RT Sus", 0); return dwc3_msm_suspend(mdwc); } Loading @@ -3688,8 +3738,10 @@ static int dwc3_msm_runtime_suspend(struct device *dev) static int dwc3_msm_runtime_resume(struct device *dev) { struct dwc3_msm *mdwc = dev_get_drvdata(dev); struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); dev_dbg(dev, "DWC3-msm runtime resume\n"); dbg_event(0xFF, "RT Res", 0); return dwc3_msm_resume(mdwc); } Loading drivers/usb/dwc3/ep0.c +28 −8 Original line number Diff line number Diff line Loading @@ -288,6 +288,7 @@ int __dwc3_gadget_ep0_set_halt(struct usb_ep *ep, int value) struct dwc3_ep *dep = to_dwc3_ep(ep); struct dwc3 *dwc = dep->dwc; dbg_event(dep->number, "EP0STAL", value); dwc3_ep0_stall_and_restart(dwc); return 0; Loading @@ -314,7 +315,8 @@ void dwc3_ep0_out_start(struct dwc3 *dwc) dwc3_ep0_prepare_one_trb(dwc, 0, dwc->ctrl_req_addr, 8, DWC3_TRBCTL_CONTROL_SETUP, false); ret = dwc3_ep0_start_trans(dwc, 0); WARN_ON(ret < 0); if (WARN_ON(ret < 0)) dbg_event(dwc->eps[0]->number, "EOUTSTART", ret); } static struct dwc3_ep *dwc3_wIndex_to_dep(struct dwc3 *dwc, __le16 wIndex_le) Loading Loading @@ -656,7 +658,8 @@ static void dwc3_ep0_set_sel_cmpl(struct usb_ep *ep, struct usb_request *req) /* now that we have the time, issue DGCMD Set Sel */ ret = dwc3_send_gadget_generic_command(dwc, DWC3_DGCMD_SET_PERIODIC_PAR, param); WARN_ON(ret < 0); if (WARN_ON(ret < 0)) dbg_event(dep->number, "ESET_SELCMPL", ret); } static int dwc3_ep0_set_sel(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) Loading Loading @@ -782,6 +785,7 @@ static void dwc3_ep0_inspect_setup(struct dwc3 *dwc, dwc->ep0_next_event = DWC3_EP0_NRDY_DATA; } dbg_setup(0x00, ctrl); if ((ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) ret = dwc3_ep0_std_request(dwc, ctrl); else Loading @@ -791,9 +795,11 @@ static void dwc3_ep0_inspect_setup(struct dwc3 *dwc, dwc->delayed_status = true; out: if (ret < 0) if (ret < 0) { dbg_event(0x0, "ERRSTAL", ret); dwc3_ep0_stall_and_restart(dwc); } } static void dwc3_ep0_complete_data(struct dwc3 *dwc, const struct dwc3_event_depevt *event) Loading Loading @@ -876,7 +882,7 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc, if ((epnum & 1) && ur->actual < ur->length) { /* for some reason we did not get everything out */ dbg_event(epnum, "INDATSTAL", 0); dwc3_ep0_stall_and_restart(dwc); } else { dwc3_gadget_giveback(ep0, r, 0); Loading @@ -890,7 +896,8 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc, dwc3_ep0_prepare_one_trb(dwc, epnum, dwc->ctrl_req_addr, 0, DWC3_TRBCTL_CONTROL_DATA, false); ret = dwc3_ep0_start_trans(dwc, epnum); WARN_ON(ret < 0); if (WARN_ON(ret < 0)) dbg_event(epnum, "ECTRL_DATA", ret); } } } Loading Loading @@ -921,6 +928,7 @@ static void dwc3_ep0_complete_status(struct dwc3 *dwc, if (ret < 0) { dwc3_trace(trace_dwc3_ep0, "Invalid Test #%d", dwc->test_mode_nr); dbg_event(0x00, "INVALTEST", ret); dwc3_ep0_stall_and_restart(dwc); return; } Loading @@ -932,6 +940,7 @@ static void dwc3_ep0_complete_status(struct dwc3 *dwc, dwc3_trace(trace_dwc3_ep0, "Setup Pending received"); } dbg_print(dep->number, "DONE", status, "STATUS"); dwc->ep0state = EP0_SETUP_PHASE; dwc3_ep0_out_start(dwc); } Loading Loading @@ -1025,6 +1034,7 @@ static void __dwc3_ep0_do_control_data(struct dwc3 *dwc, } WARN_ON(ret < 0); dbg_queue(dep->number, &req->request, ret); } static int dwc3_ep0_start_control_status(struct dwc3_ep *dep) Loading @@ -1042,13 +1052,17 @@ static int dwc3_ep0_start_control_status(struct dwc3_ep *dep) static void __dwc3_ep0_do_control_status(struct dwc3 *dwc, struct dwc3_ep *dep) { int ret; if (dwc->resize_fifos) { dwc3_trace(trace_dwc3_ep0, "Resizing FIFOs"); dwc3_gadget_resize_tx_fifos(dwc); dwc->resize_fifos = 0; } WARN_ON(dwc3_ep0_start_control_status(dep)); ret = dwc3_ep0_start_control_status(dep); if (WARN_ON_ONCE(ret)) dbg_event(dep->number, "ECTRLSTATUS", ret); } static void dwc3_ep0_do_control_status(struct dwc3 *dwc, Loading @@ -1073,7 +1087,11 @@ static void dwc3_ep0_end_control_data(struct dwc3 *dwc, struct dwc3_ep *dep) cmd |= DWC3_DEPCMD_PARAM(dep->resource_index); memset(¶ms, 0, sizeof(params)); ret = dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms); WARN_ON_ONCE(ret); if (ret) { dev_dbg(dwc->dev, "%s: send ep cmd ENDTRANSFER failed", dep->name); dbg_event(dep->number, "EENDXFER", ret); } dep->resource_index = 0; } Loading Loading @@ -1106,6 +1124,7 @@ static void dwc3_ep0_xfernotready(struct dwc3 *dwc, dwc3_trace(trace_dwc3_ep0, "Wrong direction for Data phase"); dwc3_ep0_end_control_data(dwc, dep); dbg_event(epnum, "WRONGDR", 0); dwc3_ep0_stall_and_restart(dwc); return; } Loading @@ -1122,7 +1141,8 @@ static void dwc3_ep0_xfernotready(struct dwc3 *dwc, dwc->ep0state = EP0_STATUS_PHASE; if (dwc->delayed_status) { WARN_ON_ONCE(event->endpoint_number != 1); if (event->endpoint_number != 1) dbg_event(epnum, "EEPNUM", event->status); dwc3_trace(trace_dwc3_ep0, "Delayed Status"); return; } Loading Loading
drivers/usb/dwc3/dwc3-msm.c +55 −3 Original line number Diff line number Diff line Loading @@ -1470,6 +1470,7 @@ static void dwc3_restart_usb_work(struct work_struct *w) return; } dbg_event(0xFF, "RestartUSB", 0); /* Reset active USB connection */ dwc3_resume_work(&mdwc->resume_work); Loading @@ -1480,6 +1481,8 @@ static void dwc3_restart_usb_work(struct work_struct *w) if (!timeout) { dev_dbg(mdwc->dev, "Not in LPM after disconnect, forcing suspend...\n"); dbg_event(0xFF, "ReStart:RT SUSP", atomic_read(&mdwc->dev->power.usage_count)); pm_runtime_suspend(mdwc->dev); } Loading Loading @@ -1866,6 +1869,8 @@ static void dwc3_msm_power_collapse_por(struct dwc3_msm *mdwc) } if (!mdwc->init) { dbg_event(0xFF, "dwc3 init", atomic_read(&mdwc->dev->power.usage_count)); dwc3_core_pre_init(dwc); mdwc->init = true; } Loading Loading @@ -2262,6 +2267,7 @@ static int dwc3_msm_resume(struct dwc3_msm *mdwc) */ dwc3_pwr_event_handler(mdwc); dbg_event(0xFF, "Ctl Res", atomic_read(&dwc->in_lpm)); return 0; } Loading Loading @@ -2305,6 +2311,7 @@ static void dwc3_ext_event_notify(struct dwc3_msm *mdwc) static void dwc3_resume_work(struct work_struct *w) { struct dwc3_msm *mdwc = container_of(w, struct dwc3_msm, resume_work); struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); dev_dbg(mdwc->dev, "%s: dwc3 resume work\n", __func__); Loading @@ -2320,9 +2327,11 @@ static void dwc3_resume_work(struct work_struct *w) mdwc->resume_pending = false; } if (atomic_read(&mdwc->pm_suspended)) if (atomic_read(&mdwc->pm_suspended)) { dbg_event(0xFF, "RWrk PMSus", 0); /* let pm resume kick in resume work later */ return; } dwc3_ext_event_notify(mdwc); } Loading Loading @@ -2394,6 +2403,7 @@ static irqreturn_t msm_dwc3_pwr_irq_thread(int irq, void *_mdwc) else dwc3_pwr_event_handler(mdwc); dbg_event(0xFF, "PWR IRQ", atomic_read(&dwc->in_lpm)); return IRQ_HANDLED; } Loading Loading @@ -2578,7 +2588,7 @@ static int dwc3_msm_id_notifier(struct notifier_block *nb, mdwc->typec_orientation = cc_state ? ORIENTATION_CC2 : ORIENTATION_CC1; dev_dbg(mdwc->dev, "cc_state:%d", mdwc->typec_orientation); dbg_event(0xFF, "cc_state", mdwc->typec_orientation); speed = extcon_get_cable_state_(edev, EXTCON_USB_SPEED); dwc->maximum_speed = (speed == 0) ? USB_SPEED_HIGH : USB_SPEED_SUPER; Loading @@ -2587,6 +2597,7 @@ static int dwc3_msm_id_notifier(struct notifier_block *nb, if (mdwc->id_state != id) { mdwc->id_state = id; dbg_event(0xFF, "id_state", mdwc->id_state); queue_work(mdwc->dwc3_wq, &mdwc->resume_work); } Loading Loading @@ -2620,7 +2631,7 @@ static int dwc3_msm_vbus_notifier(struct notifier_block *nb, mdwc->typec_orientation = cc_state ? ORIENTATION_CC2 : ORIENTATION_CC1; dev_dbg(mdwc->dev, "cc_state:%d", mdwc->typec_orientation); dbg_event(0xFF, "cc_state", mdwc->typec_orientation); speed = extcon_get_cable_state_(edev, EXTCON_USB_SPEED); dwc->maximum_speed = (speed == 0) ? USB_SPEED_HIGH : USB_SPEED_SUPER; Loading Loading @@ -3105,6 +3116,7 @@ static int dwc3_msm_remove_children(struct device *dev, void *data) static int dwc3_msm_remove(struct platform_device *pdev) { struct dwc3_msm *mdwc = platform_get_drvdata(pdev); struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); int ret_pm; device_remove_file(&pdev->dev, &dev_attr_mode); Loading @@ -3117,6 +3129,7 @@ static int dwc3_msm_remove(struct platform_device *pdev) * Hence turn ON the clocks manually. */ ret_pm = pm_runtime_get_sync(mdwc->dev); dbg_event(0xFF, "Remov gsyn", ret_pm); if (ret_pm < 0) { dev_err(mdwc->dev, "pm_runtime_get_sync failed with %d\n", ret_pm); Loading @@ -3138,6 +3151,7 @@ static int dwc3_msm_remove(struct platform_device *pdev) platform_device_put(mdwc->dwc3); device_for_each_child(&pdev->dev, NULL, dwc3_msm_remove_children); dbg_event(0xFF, "Remov put", 0); pm_runtime_disable(mdwc->dev); pm_runtime_barrier(mdwc->dev); pm_runtime_put_sync(mdwc->dev); Loading Loading @@ -3275,6 +3289,8 @@ static int dwc3_otg_start_host(struct dwc3_msm *mdwc, int on) mdwc->ss_phy->flags |= PHY_HOST_MODE; pm_runtime_get_sync(mdwc->dev); dbg_event(0xFF, "StrtHost gync", atomic_read(&mdwc->dev->power.usage_count)); usb_phy_notify_connect(mdwc->hs_phy, USB_SPEED_HIGH); if (!IS_ERR(mdwc->vbus_reg)) ret = regulator_enable(mdwc->vbus_reg); Loading @@ -3283,6 +3299,8 @@ static int dwc3_otg_start_host(struct dwc3_msm *mdwc, int on) mdwc->hs_phy->flags &= ~PHY_HOST_MODE; mdwc->ss_phy->flags &= ~PHY_HOST_MODE; pm_runtime_put_sync(mdwc->dev); dbg_event(0xFF, "vregerr psync", atomic_read(&mdwc->dev->power.usage_count)); return ret; } Loading @@ -3309,6 +3327,8 @@ static int dwc3_otg_start_host(struct dwc3_msm *mdwc, int on) mdwc->hs_phy->flags &= ~PHY_HOST_MODE; mdwc->ss_phy->flags &= ~PHY_HOST_MODE; pm_runtime_put_sync(mdwc->dev); dbg_event(0xFF, "pdeverr psync", atomic_read(&mdwc->dev->power.usage_count)); usb_unregister_notify(&mdwc->host_nb); return ret; } Loading @@ -3325,6 +3345,8 @@ static int dwc3_otg_start_host(struct dwc3_msm *mdwc, int on) dwc3_usb3_phy_suspend(dwc, true); /* xHCI should have incremented child count as necessary */ dbg_event(0xFF, "StrtHost psync", atomic_read(&mdwc->dev->power.usage_count)); pm_runtime_mark_last_busy(mdwc->dev); pm_runtime_put_sync_autosuspend(mdwc->dev); } else { Loading @@ -3338,6 +3360,8 @@ static int dwc3_otg_start_host(struct dwc3_msm *mdwc, int on) } pm_runtime_get_sync(mdwc->dev); dbg_event(0xFF, "StopHost gsync", atomic_read(&mdwc->dev->power.usage_count)); usb_phy_notify_disconnect(mdwc->hs_phy, USB_SPEED_HIGH); mdwc->hs_phy->flags &= ~PHY_HOST_MODE; mdwc->ss_phy->flags &= ~PHY_HOST_MODE; Loading @@ -3360,6 +3384,8 @@ static int dwc3_otg_start_host(struct dwc3_msm *mdwc, int on) dwc3_post_host_reset_core_init(dwc); pm_runtime_mark_last_busy(mdwc->dev); pm_runtime_put_sync_autosuspend(mdwc->dev); dbg_event(0xFF, "StopHost psync", atomic_read(&mdwc->dev->power.usage_count)); } return 0; Loading Loading @@ -3397,6 +3423,8 @@ static int dwc3_otg_start_peripheral(struct dwc3_msm *mdwc, int on) struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); pm_runtime_get_sync(mdwc->dev); dbg_event(0xFF, "StrtGdgt gsync", atomic_read(&mdwc->dev->power.usage_count)); if (on) { dev_dbg(mdwc->dev, "%s: turn on gadget %s\n", Loading Loading @@ -3425,6 +3453,8 @@ static int dwc3_otg_start_peripheral(struct dwc3_msm *mdwc, int on) } pm_runtime_put_sync(mdwc->dev); dbg_event(0xFF, "StopGdgt psync", atomic_read(&mdwc->dev->power.usage_count)); return 0; } Loading Loading @@ -3494,6 +3524,7 @@ static void dwc3_otg_sm_work(struct work_struct *w) state = usb_otg_state_string(mdwc->otg_state); dev_dbg(mdwc->dev, "%s state\n", state); dbg_event(0xFF, state, 0); /* Check OTG state */ switch (mdwc->otg_state) { Loading @@ -3503,6 +3534,7 @@ static void dwc3_otg_sm_work(struct work_struct *w) !test_bit(B_SESS_VLD, &mdwc->inputs)) break; dbg_event(0xFF, "Exit UNDEF", 0); mdwc->otg_state = OTG_STATE_B_IDLE; /* fall-through */ case OTG_STATE_B_IDLE: Loading @@ -3518,6 +3550,8 @@ static void dwc3_otg_sm_work(struct work_struct *w) * cable disconnect or in bus suspend. */ pm_runtime_get_sync(mdwc->dev); dbg_event(0xFF, "BIDLE gsync", atomic_read(&mdwc->dev->power.usage_count)); dwc3_otg_start_peripheral(mdwc, 1); mdwc->otg_state = OTG_STATE_B_PERIPHERAL; work = 1; Loading @@ -3539,6 +3573,8 @@ static void dwc3_otg_sm_work(struct work_struct *w) * OTG_STATE_B_IDLE state */ pm_runtime_put_sync(mdwc->dev); dbg_event(0xFF, "!BSV psync", atomic_read(&mdwc->dev->power.usage_count)); work = 1; } else if (test_bit(B_SUSPEND, &mdwc->inputs) && test_bit(B_SESS_VLD, &mdwc->inputs)) { Loading @@ -3553,6 +3589,8 @@ static void dwc3_otg_sm_work(struct work_struct *w) */ pm_runtime_mark_last_busy(mdwc->dev); pm_runtime_put_autosuspend(mdwc->dev); dbg_event(0xFF, "SUSP put", atomic_read(&mdwc->dev->power.usage_count)); } break; Loading @@ -3571,6 +3609,8 @@ static void dwc3_otg_sm_work(struct work_struct *w) * OTG_STATE_B_PERIPHERAL state. */ pm_runtime_get_sync(mdwc->dev); dbg_event(0xFF, "!SUSP gsync", atomic_read(&mdwc->dev->power.usage_count)); } break; Loading Loading @@ -3612,6 +3652,7 @@ static void dwc3_otg_sm_work(struct work_struct *w) work = 1; } else { dev_dbg(mdwc->dev, "still in a_host state. Resuming root hub.\n"); dbg_event(0xFF, "XHCIResume", 0); if (dwc) pm_runtime_resume(&dwc->xhci->dev); } Loading @@ -3637,6 +3678,7 @@ static int dwc3_msm_pm_suspend(struct device *dev) struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); dev_dbg(dev, "dwc3-msm PM suspend\n"); dbg_event(0xFF, "PM Sus", 0); flush_workqueue(mdwc->dwc3_wq); if (!atomic_read(&dwc->in_lpm)) { Loading @@ -3654,8 +3696,10 @@ static int dwc3_msm_pm_suspend(struct device *dev) static int dwc3_msm_pm_resume(struct device *dev) { struct dwc3_msm *mdwc = dev_get_drvdata(dev); struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); dev_dbg(dev, "dwc3-msm PM resume\n"); dbg_event(0xFF, "PM Res", 0); /* flush to avoid race in read/write of pm_suspended */ flush_workqueue(mdwc->dwc3_wq); Loading @@ -3671,7 +3715,11 @@ static int dwc3_msm_pm_resume(struct device *dev) #ifdef CONFIG_PM static int dwc3_msm_runtime_idle(struct device *dev) { struct dwc3_msm *mdwc = dev_get_drvdata(dev); struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); dev_dbg(dev, "DWC3-msm runtime idle\n"); dbg_event(0xFF, "RT Idle", 0); return 0; } Loading @@ -3679,8 +3727,10 @@ static int dwc3_msm_runtime_idle(struct device *dev) static int dwc3_msm_runtime_suspend(struct device *dev) { struct dwc3_msm *mdwc = dev_get_drvdata(dev); struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); dev_dbg(dev, "DWC3-msm runtime suspend\n"); dbg_event(0xFF, "RT Sus", 0); return dwc3_msm_suspend(mdwc); } Loading @@ -3688,8 +3738,10 @@ static int dwc3_msm_runtime_suspend(struct device *dev) static int dwc3_msm_runtime_resume(struct device *dev) { struct dwc3_msm *mdwc = dev_get_drvdata(dev); struct dwc3 *dwc = platform_get_drvdata(mdwc->dwc3); dev_dbg(dev, "DWC3-msm runtime resume\n"); dbg_event(0xFF, "RT Res", 0); return dwc3_msm_resume(mdwc); } Loading
drivers/usb/dwc3/ep0.c +28 −8 Original line number Diff line number Diff line Loading @@ -288,6 +288,7 @@ int __dwc3_gadget_ep0_set_halt(struct usb_ep *ep, int value) struct dwc3_ep *dep = to_dwc3_ep(ep); struct dwc3 *dwc = dep->dwc; dbg_event(dep->number, "EP0STAL", value); dwc3_ep0_stall_and_restart(dwc); return 0; Loading @@ -314,7 +315,8 @@ void dwc3_ep0_out_start(struct dwc3 *dwc) dwc3_ep0_prepare_one_trb(dwc, 0, dwc->ctrl_req_addr, 8, DWC3_TRBCTL_CONTROL_SETUP, false); ret = dwc3_ep0_start_trans(dwc, 0); WARN_ON(ret < 0); if (WARN_ON(ret < 0)) dbg_event(dwc->eps[0]->number, "EOUTSTART", ret); } static struct dwc3_ep *dwc3_wIndex_to_dep(struct dwc3 *dwc, __le16 wIndex_le) Loading Loading @@ -656,7 +658,8 @@ static void dwc3_ep0_set_sel_cmpl(struct usb_ep *ep, struct usb_request *req) /* now that we have the time, issue DGCMD Set Sel */ ret = dwc3_send_gadget_generic_command(dwc, DWC3_DGCMD_SET_PERIODIC_PAR, param); WARN_ON(ret < 0); if (WARN_ON(ret < 0)) dbg_event(dep->number, "ESET_SELCMPL", ret); } static int dwc3_ep0_set_sel(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl) Loading Loading @@ -782,6 +785,7 @@ static void dwc3_ep0_inspect_setup(struct dwc3 *dwc, dwc->ep0_next_event = DWC3_EP0_NRDY_DATA; } dbg_setup(0x00, ctrl); if ((ctrl->bRequestType & USB_TYPE_MASK) == USB_TYPE_STANDARD) ret = dwc3_ep0_std_request(dwc, ctrl); else Loading @@ -791,9 +795,11 @@ static void dwc3_ep0_inspect_setup(struct dwc3 *dwc, dwc->delayed_status = true; out: if (ret < 0) if (ret < 0) { dbg_event(0x0, "ERRSTAL", ret); dwc3_ep0_stall_and_restart(dwc); } } static void dwc3_ep0_complete_data(struct dwc3 *dwc, const struct dwc3_event_depevt *event) Loading Loading @@ -876,7 +882,7 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc, if ((epnum & 1) && ur->actual < ur->length) { /* for some reason we did not get everything out */ dbg_event(epnum, "INDATSTAL", 0); dwc3_ep0_stall_and_restart(dwc); } else { dwc3_gadget_giveback(ep0, r, 0); Loading @@ -890,7 +896,8 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc, dwc3_ep0_prepare_one_trb(dwc, epnum, dwc->ctrl_req_addr, 0, DWC3_TRBCTL_CONTROL_DATA, false); ret = dwc3_ep0_start_trans(dwc, epnum); WARN_ON(ret < 0); if (WARN_ON(ret < 0)) dbg_event(epnum, "ECTRL_DATA", ret); } } } Loading Loading @@ -921,6 +928,7 @@ static void dwc3_ep0_complete_status(struct dwc3 *dwc, if (ret < 0) { dwc3_trace(trace_dwc3_ep0, "Invalid Test #%d", dwc->test_mode_nr); dbg_event(0x00, "INVALTEST", ret); dwc3_ep0_stall_and_restart(dwc); return; } Loading @@ -932,6 +940,7 @@ static void dwc3_ep0_complete_status(struct dwc3 *dwc, dwc3_trace(trace_dwc3_ep0, "Setup Pending received"); } dbg_print(dep->number, "DONE", status, "STATUS"); dwc->ep0state = EP0_SETUP_PHASE; dwc3_ep0_out_start(dwc); } Loading Loading @@ -1025,6 +1034,7 @@ static void __dwc3_ep0_do_control_data(struct dwc3 *dwc, } WARN_ON(ret < 0); dbg_queue(dep->number, &req->request, ret); } static int dwc3_ep0_start_control_status(struct dwc3_ep *dep) Loading @@ -1042,13 +1052,17 @@ static int dwc3_ep0_start_control_status(struct dwc3_ep *dep) static void __dwc3_ep0_do_control_status(struct dwc3 *dwc, struct dwc3_ep *dep) { int ret; if (dwc->resize_fifos) { dwc3_trace(trace_dwc3_ep0, "Resizing FIFOs"); dwc3_gadget_resize_tx_fifos(dwc); dwc->resize_fifos = 0; } WARN_ON(dwc3_ep0_start_control_status(dep)); ret = dwc3_ep0_start_control_status(dep); if (WARN_ON_ONCE(ret)) dbg_event(dep->number, "ECTRLSTATUS", ret); } static void dwc3_ep0_do_control_status(struct dwc3 *dwc, Loading @@ -1073,7 +1087,11 @@ static void dwc3_ep0_end_control_data(struct dwc3 *dwc, struct dwc3_ep *dep) cmd |= DWC3_DEPCMD_PARAM(dep->resource_index); memset(¶ms, 0, sizeof(params)); ret = dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms); WARN_ON_ONCE(ret); if (ret) { dev_dbg(dwc->dev, "%s: send ep cmd ENDTRANSFER failed", dep->name); dbg_event(dep->number, "EENDXFER", ret); } dep->resource_index = 0; } Loading Loading @@ -1106,6 +1124,7 @@ static void dwc3_ep0_xfernotready(struct dwc3 *dwc, dwc3_trace(trace_dwc3_ep0, "Wrong direction for Data phase"); dwc3_ep0_end_control_data(dwc, dep); dbg_event(epnum, "WRONGDR", 0); dwc3_ep0_stall_and_restart(dwc); return; } Loading @@ -1122,7 +1141,8 @@ static void dwc3_ep0_xfernotready(struct dwc3 *dwc, dwc->ep0state = EP0_STATUS_PHASE; if (dwc->delayed_status) { WARN_ON_ONCE(event->endpoint_number != 1); if (event->endpoint_number != 1) dbg_event(epnum, "EEPNUM", event->status); dwc3_trace(trace_dwc3_ep0, "Delayed Status"); return; } Loading