Lines Matching +full:micro +full:- +full:frames
1 // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
3 * hcd_intr.c - DesignWare HS OTG Controller host-mode interrupt handling
5 * Copyright (C) 2004-2013 Synopsys, Inc.
15 #include <linux/dma-mapping.h>
35 u16 curr_frame_number = hsotg->frame_number; in dwc2_track_missed_sofs()
36 u16 expected = dwc2_frame_num_inc(hsotg->last_frame_num, 1); in dwc2_track_missed_sofs()
43 if (hsotg->frame_num_idx < FRAME_NUM_ARRAY_SIZE) { in dwc2_track_missed_sofs()
45 hsotg->frame_num_array[hsotg->frame_num_idx] = in dwc2_track_missed_sofs()
47 hsotg->last_frame_num_array[hsotg->frame_num_idx] = in dwc2_track_missed_sofs()
48 hsotg->last_frame_num; in dwc2_track_missed_sofs()
49 hsotg->frame_num_idx++; in dwc2_track_missed_sofs()
51 } else if (!hsotg->dumped_frame_num_array) { in dwc2_track_missed_sofs()
54 dev_info(hsotg->dev, "Frame Last Frame\n"); in dwc2_track_missed_sofs()
55 dev_info(hsotg->dev, "----- ----------\n"); in dwc2_track_missed_sofs()
57 dev_info(hsotg->dev, "0x%04x 0x%04x\n", in dwc2_track_missed_sofs()
58 hsotg->frame_num_array[i], in dwc2_track_missed_sofs()
59 hsotg->last_frame_num_array[i]); in dwc2_track_missed_sofs()
61 hsotg->dumped_frame_num_array = 1; in dwc2_track_missed_sofs()
64 hsotg->last_frame_num = curr_frame_number; in dwc2_track_missed_sofs()
71 struct usb_device *root_hub = dwc2_hsotg_to_hcd(hsotg)->self.root_hub; in dwc2_hc_handle_tt_clear()
74 if (!chan->qh) in dwc2_hc_handle_tt_clear()
77 if (chan->qh->dev_speed == USB_SPEED_HIGH) in dwc2_hc_handle_tt_clear()
80 if (!qtd->urb) in dwc2_hc_handle_tt_clear()
83 usb_urb = qtd->urb->priv; in dwc2_hc_handle_tt_clear()
84 if (!usb_urb || !usb_urb->dev || !usb_urb->dev->tt) in dwc2_hc_handle_tt_clear()
93 if (usb_urb->dev->tt->hub == root_hub) in dwc2_hc_handle_tt_clear()
96 if (qtd->urb->status != -EPIPE && qtd->urb->status != -EREMOTEIO) { in dwc2_hc_handle_tt_clear()
97 chan->qh->tt_buffer_dirty = 1; in dwc2_hc_handle_tt_clear()
100 chan->qh->tt_buffer_dirty = 0; in dwc2_hc_handle_tt_clear()
105 * Handles the start-of-frame interrupt in host mode. Non-periodic
107 * (micro)frame. Periodic transactions may be queued to the controller
108 * for the next (micro)frame.
120 dev_vdbg(hsotg->dev, "--Start of Frame Interrupt--\n"); in dwc2_sof_intr()
123 hsotg->frame_number = dwc2_hcd_get_frame_number(hsotg); in dwc2_sof_intr()
128 qh_entry = hsotg->periodic_sched_inactive.next; in dwc2_sof_intr()
129 while (qh_entry != &hsotg->periodic_sched_inactive) { in dwc2_sof_intr()
131 qh_entry = qh_entry->next; in dwc2_sof_intr()
132 if (dwc2_frame_num_le(qh->next_active_frame, in dwc2_sof_intr()
133 hsotg->frame_number)) { in dwc2_sof_intr()
135 qh, hsotg->frame_number, in dwc2_sof_intr()
136 qh->next_active_frame); in dwc2_sof_intr()
140 * (micro)frame in dwc2_sof_intr()
142 list_move_tail(&qh->qh_list_entry, in dwc2_sof_intr()
143 &hsotg->periodic_sched_ready); in dwc2_sof_intr()
162 dev_vdbg(hsotg->dev, "--RxFIFO Level Interrupt--\n"); in dwc2_rx_fifo_level_intr()
166 chan = hsotg->hc_ptr_array[chnum]; in dwc2_rx_fifo_level_intr()
168 dev_err(hsotg->dev, "Unable to get corresponding channel\n"); in dwc2_rx_fifo_level_intr()
178 dev_vdbg(hsotg->dev, " Ch num = %d\n", chnum); in dwc2_rx_fifo_level_intr()
179 dev_vdbg(hsotg->dev, " Count = %d\n", bcnt); in dwc2_rx_fifo_level_intr()
180 dev_vdbg(hsotg->dev, " DPID = %d, chan.dpid = %d\n", dpid, in dwc2_rx_fifo_level_intr()
181 chan->data_pid_start); in dwc2_rx_fifo_level_intr()
182 dev_vdbg(hsotg->dev, " PStatus = %d\n", pktsts); in dwc2_rx_fifo_level_intr()
189 dwc2_read_packet(hsotg, chan->xfer_buf, bcnt); in dwc2_rx_fifo_level_intr()
192 chan->xfer_count += bcnt; in dwc2_rx_fifo_level_intr()
193 chan->xfer_buf += bcnt; in dwc2_rx_fifo_level_intr()
202 dev_err(hsotg->dev, in dwc2_rx_fifo_level_intr()
209 * This interrupt occurs when the non-periodic Tx FIFO is half-empty. More
211 * may be written to the non-periodic request queue for IN transfers. This
216 dev_vdbg(hsotg->dev, "--Non-Periodic TxFIFO Empty Interrupt--\n"); in dwc2_np_tx_fifo_empty_intr()
221 * This interrupt occurs when the periodic Tx FIFO is half-empty. More data
229 dev_vdbg(hsotg->dev, "--Periodic TxFIFO Empty Interrupt--\n"); in dwc2_perio_tx_fifo_empty_intr()
236 struct dwc2_core_params *params = &hsotg->params; in dwc2_hprt0_enable()
244 dev_vdbg(hsotg->dev, "%s(%p)\n", __func__, hsotg); in dwc2_hprt0_enable()
254 if (!params->host_support_fs_ls_low_power) { in dwc2_hprt0_enable()
256 hsotg->flags.b.port_reset_change = 1; in dwc2_hprt0_enable()
277 params->host_ls_low_power_phy_clk) { in dwc2_hprt0_enable()
279 dev_vdbg(hsotg->dev, in dwc2_hprt0_enable()
290 dev_vdbg(hsotg->dev, in dwc2_hprt0_enable()
312 queue_delayed_work(hsotg->wq_otg, &hsotg->reset_work, in dwc2_hprt0_enable()
316 hsotg->flags.b.port_reset_change = 1; in dwc2_hprt0_enable()
330 dev_vdbg(hsotg->dev, "--Port Interrupt--\n"); in dwc2_port_intr()
349 dev_vdbg(hsotg->dev, in dwc2_port_intr()
350 "--Port Interrupt HPRT0=0x%08x Port Connect Detected--\n", in dwc2_port_intr()
362 * Clear if detected - Set internal flag if disabled in dwc2_port_intr()
366 dev_vdbg(hsotg->dev, in dwc2_port_intr()
367 " --Port Interrupt HPRT0=0x%08x Port Enable Changed (now %d)--\n", in dwc2_port_intr()
370 hsotg->new_connection = true; in dwc2_port_intr()
373 hsotg->flags.b.port_enable_change = 1; in dwc2_port_intr()
374 if (hsotg->params.dma_desc_fs_enable) { in dwc2_port_intr()
377 hsotg->params.dma_desc_enable = false; in dwc2_port_intr()
378 hsotg->new_connection = false; in dwc2_port_intr()
390 dev_vdbg(hsotg->dev, in dwc2_port_intr()
391 " --Port Interrupt HPRT0=0x%08x Port Overcurrent Changed--\n", in dwc2_port_intr()
393 hsotg->flags.b.port_over_current_change = 1; in dwc2_port_intr()
417 if (chan->ep_is_in) { in dwc2_get_actual_xfer_length()
420 length = chan->xfer_len - count; in dwc2_get_actual_xfer_length()
423 } else if (chan->qh->do_split) { in dwc2_get_actual_xfer_length()
424 length = qtd->ssplit_out_xfer_count; in dwc2_get_actual_xfer_length()
426 length = chan->xfer_len; in dwc2_get_actual_xfer_length()
439 length = (chan->start_pkt_count - count) * chan->max_packet; in dwc2_get_actual_xfer_length()
446 * dwc2_update_urb_state() - Updates the state of the URB after a Transfer
472 if (urb->actual_length + xfer_length > urb->length) { in dwc2_update_urb_state()
473 dev_dbg(hsotg->dev, "%s(): trimming xfer length\n", __func__); in dwc2_update_urb_state()
474 xfer_length = urb->length - urb->actual_length; in dwc2_update_urb_state()
477 dev_vdbg(hsotg->dev, "urb->actual_length=%d xfer_length=%d\n", in dwc2_update_urb_state()
478 urb->actual_length, xfer_length); in dwc2_update_urb_state()
479 urb->actual_length += xfer_length; in dwc2_update_urb_state()
481 if (xfer_length && chan->ep_type == USB_ENDPOINT_XFER_BULK && in dwc2_update_urb_state()
482 (urb->flags & URB_SEND_ZERO_PACKET) && in dwc2_update_urb_state()
483 urb->actual_length >= urb->length && in dwc2_update_urb_state()
484 !(urb->length % chan->max_packet)) { in dwc2_update_urb_state()
486 } else if (short_read || urb->actual_length >= urb->length) { in dwc2_update_urb_state()
488 urb->status = 0; in dwc2_update_urb_state()
492 dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n", in dwc2_update_urb_state()
493 __func__, (chan->ep_is_in ? "IN" : "OUT"), chnum); in dwc2_update_urb_state()
494 dev_vdbg(hsotg->dev, " chan->xfer_len %d\n", chan->xfer_len); in dwc2_update_urb_state()
495 dev_vdbg(hsotg->dev, " hctsiz.xfersize %d\n", in dwc2_update_urb_state()
497 dev_vdbg(hsotg->dev, " urb->transfer_buffer_length %d\n", urb->length); in dwc2_update_urb_state()
498 dev_vdbg(hsotg->dev, " urb->actual_length %d\n", urb->actual_length); in dwc2_update_urb_state()
499 dev_vdbg(hsotg->dev, " short_read %d, xfer_done %d\n", short_read, in dwc2_update_urb_state()
507 * saved in the QH for non-control transfers and it's saved in the QTD for
517 if (chan->ep_type != USB_ENDPOINT_XFER_CONTROL) { in dwc2_hcd_save_data_toggle()
518 if (WARN(!chan || !chan->qh, in dwc2_hcd_save_data_toggle()
519 "chan->qh must be specified for non-control eps\n")) in dwc2_hcd_save_data_toggle()
523 chan->qh->data_toggle = DWC2_HC_PID_DATA0; in dwc2_hcd_save_data_toggle()
525 chan->qh->data_toggle = DWC2_HC_PID_DATA1; in dwc2_hcd_save_data_toggle()
532 qtd->data_toggle = DWC2_HC_PID_DATA0; in dwc2_hcd_save_data_toggle()
534 qtd->data_toggle = DWC2_HC_PID_DATA1; in dwc2_hcd_save_data_toggle()
539 * dwc2_update_isoc_urb_state() - Updates the state of an Isochronous URB when
542 * halt_status. Completes the Isochronous URB if all the URB frames have been
551 * Return: DWC2_HC_XFER_COMPLETE if there are more frames remaining to be
560 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_update_isoc_urb_state()
565 frame_desc = &urb->iso_descs[qtd->isoc_frame_index]; in dwc2_update_isoc_urb_state()
569 frame_desc->status = 0; in dwc2_update_isoc_urb_state()
570 frame_desc->actual_length = dwc2_get_actual_xfer_length(hsotg, in dwc2_update_isoc_urb_state()
574 urb->error_count++; in dwc2_update_isoc_urb_state()
575 if (chan->ep_is_in) in dwc2_update_isoc_urb_state()
576 frame_desc->status = -ENOSR; in dwc2_update_isoc_urb_state()
578 frame_desc->status = -ECOMM; in dwc2_update_isoc_urb_state()
579 frame_desc->actual_length = 0; in dwc2_update_isoc_urb_state()
582 urb->error_count++; in dwc2_update_isoc_urb_state()
583 frame_desc->status = -EOVERFLOW; in dwc2_update_isoc_urb_state()
587 urb->error_count++; in dwc2_update_isoc_urb_state()
588 frame_desc->status = -EPROTO; in dwc2_update_isoc_urb_state()
589 frame_desc->actual_length = dwc2_get_actual_xfer_length(hsotg, in dwc2_update_isoc_urb_state()
593 if (chan->qh->do_split && in dwc2_update_isoc_urb_state()
594 chan->ep_type == USB_ENDPOINT_XFER_ISOC && chan->ep_is_in && in dwc2_update_isoc_urb_state()
595 hsotg->params.host_dma) { in dwc2_update_isoc_urb_state()
596 qtd->complete_split = 0; in dwc2_update_isoc_urb_state()
597 qtd->isoc_split_offset = 0; in dwc2_update_isoc_urb_state()
602 dev_err(hsotg->dev, "Unhandled halt_status (%d)\n", in dwc2_update_isoc_urb_state()
607 if (++qtd->isoc_frame_index == urb->packet_count) { in dwc2_update_isoc_urb_state()
609 * urb->status is not used for isoc transfers. The individual in dwc2_update_isoc_urb_state()
622 * Frees the first QTD in the QH's list if free_qtd is 1. For non-periodic
623 * QHs, removes the QH from the active non-periodic schedule. If any QTDs are
625 * non-periodic schedule. For periodic QHs, removes the QH from the periodic
635 dev_vdbg(hsotg->dev, " %s(%p,%p,%d)\n", __func__, in dwc2_deactivate_qh()
638 if (list_empty(&qh->qtd_list)) { in dwc2_deactivate_qh()
639 dev_dbg(hsotg->dev, "## QTD list empty ##\n"); in dwc2_deactivate_qh()
643 qtd = list_first_entry(&qh->qtd_list, struct dwc2_qtd, qtd_list_entry); in dwc2_deactivate_qh()
645 if (qtd->complete_split) in dwc2_deactivate_qh()
647 else if (qtd->isoc_split_pos == DWC2_HCSPLT_XACTPOS_MID || in dwc2_deactivate_qh()
648 qtd->isoc_split_pos == DWC2_HCSPLT_XACTPOS_END) in dwc2_deactivate_qh()
657 qh->channel = NULL; in dwc2_deactivate_qh()
662 * dwc2_release_channel() - Releases a host channel for use by other transfers
684 dev_vdbg(hsotg->dev, " %s: channel %d, halt_status %d\n", in dwc2_release_channel()
685 __func__, chan->hc_num, halt_status); in dwc2_release_channel()
697 if (qtd && qtd->error_count >= 3) { in dwc2_release_channel()
698 dev_vdbg(hsotg->dev, in dwc2_release_channel()
701 dwc2_host_complete(hsotg, qtd, -EPROTO); in dwc2_release_channel()
712 dev_vdbg(hsotg->dev, " Complete URB with I/O error\n"); in dwc2_release_channel()
714 dwc2_host_complete(hsotg, qtd, -EIO); in dwc2_release_channel()
721 dwc2_deactivate_qh(hsotg, chan->qh, free_qtd); in dwc2_release_channel()
729 if (!list_empty(&chan->hc_list_entry)) in dwc2_release_channel()
730 list_del(&chan->hc_list_entry); in dwc2_release_channel()
732 list_add_tail(&chan->hc_list_entry, &hsotg->free_hc_list); in dwc2_release_channel()
734 if (hsotg->params.uframe_sched) { in dwc2_release_channel()
735 hsotg->available_host_channels++; in dwc2_release_channel()
737 switch (chan->ep_type) { in dwc2_release_channel()
740 hsotg->non_periodic_channels--; in dwc2_release_channel()
754 haintmsk &= ~(1 << chan->hc_num); in dwc2_release_channel()
778 dev_vdbg(hsotg->dev, "%s()\n", __func__); in dwc2_halt_channel()
780 if (hsotg->params.host_dma) { in dwc2_halt_channel()
782 dev_vdbg(hsotg->dev, "DMA enabled\n"); in dwc2_halt_channel()
790 if (chan->halt_on_queue) { in dwc2_halt_channel()
793 dev_vdbg(hsotg->dev, "Halt on queue\n"); in dwc2_halt_channel()
794 if (chan->ep_type == USB_ENDPOINT_XFER_CONTROL || in dwc2_halt_channel()
795 chan->ep_type == USB_ENDPOINT_XFER_BULK) { in dwc2_halt_channel()
796 dev_vdbg(hsotg->dev, "control/bulk\n"); in dwc2_halt_channel()
798 * Make sure the Non-periodic Tx FIFO empty interrupt in dwc2_halt_channel()
799 * is enabled so that the non-periodic schedule will in dwc2_halt_channel()
806 dev_vdbg(hsotg->dev, "isoc/intr\n"); in dwc2_halt_channel()
813 list_move_tail(&chan->qh->qh_list_entry, in dwc2_halt_channel()
814 &hsotg->periodic_sched_assigned); in dwc2_halt_channel()
829 * Performs common cleanup for non-periodic transfers after a Transfer
838 dev_vdbg(hsotg->dev, "%s()\n", __func__); in dwc2_complete_non_periodic_xfer()
840 qtd->error_count = 0; in dwc2_complete_non_periodic_xfer()
842 if (chan->hcint & HCINTMSK_NYET) { in dwc2_complete_non_periodic_xfer()
848 dev_vdbg(hsotg->dev, "got NYET\n"); in dwc2_complete_non_periodic_xfer()
849 chan->qh->ping_state = 1; in dwc2_complete_non_periodic_xfer()
857 * to the transfer when the non-periodic schedule is processed after in dwc2_complete_non_periodic_xfer()
862 if (chan->ep_is_in) { in dwc2_complete_non_periodic_xfer()
890 qtd->error_count = 0; in dwc2_complete_periodic_xfer()
892 if (!chan->ep_is_in || (hctsiz & TSIZ_PKTCNT_MASK) == 0) in dwc2_complete_periodic_xfer()
909 if (!qtd->urb) in dwc2_xfercomp_isoc_split_in()
912 frame_desc = &qtd->urb->iso_descs[qtd->isoc_frame_index]; in dwc2_xfercomp_isoc_split_in()
915 if (!len && !qtd->isoc_split_offset) { in dwc2_xfercomp_isoc_split_in()
916 qtd->complete_split = 0; in dwc2_xfercomp_isoc_split_in()
920 frame_desc->actual_length += len; in dwc2_xfercomp_isoc_split_in()
922 if (chan->align_buf) { in dwc2_xfercomp_isoc_split_in()
923 dev_vdbg(hsotg->dev, "non-aligned buffer\n"); in dwc2_xfercomp_isoc_split_in()
924 dma_unmap_single(hsotg->dev, chan->qh->dw_align_buf_dma, in dwc2_xfercomp_isoc_split_in()
926 memcpy(qtd->urb->buf + (chan->xfer_dma - qtd->urb->dma), in dwc2_xfercomp_isoc_split_in()
927 chan->qh->dw_align_buf, len); in dwc2_xfercomp_isoc_split_in()
930 qtd->isoc_split_offset += len; in dwc2_xfercomp_isoc_split_in()
935 if (frame_desc->actual_length >= frame_desc->length || pid == 0) { in dwc2_xfercomp_isoc_split_in()
936 frame_desc->status = 0; in dwc2_xfercomp_isoc_split_in()
937 qtd->isoc_frame_index++; in dwc2_xfercomp_isoc_split_in()
938 qtd->complete_split = 0; in dwc2_xfercomp_isoc_split_in()
939 qtd->isoc_split_offset = 0; in dwc2_xfercomp_isoc_split_in()
942 if (qtd->isoc_frame_index == qtd->urb->packet_count) { in dwc2_xfercomp_isoc_split_in()
962 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_hc_xfercomp_intr()
968 dev_vdbg(hsotg->dev, in dwc2_hc_xfercomp_intr()
969 "--Host Channel %d Interrupt: Transfer Complete--\n", in dwc2_hc_xfercomp_intr()
975 pipe_type = dwc2_hcd_get_pipe_type(&urb->pipe_info); in dwc2_hc_xfercomp_intr()
977 if (hsotg->params.dma_desc_enable) { in dwc2_hc_xfercomp_intr()
986 if (chan->qh->do_split) { in dwc2_hc_xfercomp_intr()
987 if (chan->ep_type == USB_ENDPOINT_XFER_ISOC && chan->ep_is_in && in dwc2_hc_xfercomp_intr()
988 hsotg->params.host_dma) { in dwc2_hc_xfercomp_intr()
989 if (qtd->complete_split && in dwc2_hc_xfercomp_intr()
994 qtd->complete_split = 0; in dwc2_hc_xfercomp_intr()
1001 switch (qtd->control_phase) { in dwc2_hc_xfercomp_intr()
1003 if (urb->length > 0) in dwc2_hc_xfercomp_intr()
1004 qtd->control_phase = DWC2_CONTROL_DATA; in dwc2_hc_xfercomp_intr()
1006 qtd->control_phase = DWC2_CONTROL_STATUS; in dwc2_hc_xfercomp_intr()
1007 dev_vdbg(hsotg->dev, in dwc2_hc_xfercomp_intr()
1015 qtd->control_phase = DWC2_CONTROL_STATUS; in dwc2_hc_xfercomp_intr()
1016 dev_vdbg(hsotg->dev, in dwc2_hc_xfercomp_intr()
1025 dev_vdbg(hsotg->dev, " Control transfer complete\n"); in dwc2_hc_xfercomp_intr()
1026 if (urb->status == -EINPROGRESS) in dwc2_hc_xfercomp_intr()
1027 urb->status = 0; in dwc2_hc_xfercomp_intr()
1028 dwc2_host_complete(hsotg, qtd, urb->status); in dwc2_hc_xfercomp_intr()
1037 dev_vdbg(hsotg->dev, " Bulk transfer complete\n"); in dwc2_hc_xfercomp_intr()
1041 dwc2_host_complete(hsotg, qtd, urb->status); in dwc2_hc_xfercomp_intr()
1052 dev_vdbg(hsotg->dev, " Interrupt transfer complete\n"); in dwc2_hc_xfercomp_intr()
1061 dwc2_host_complete(hsotg, qtd, urb->status); in dwc2_hc_xfercomp_intr()
1073 dev_vdbg(hsotg->dev, " Isochronous transfer complete\n"); in dwc2_hc_xfercomp_intr()
1074 if (qtd->isoc_split_pos == DWC2_HCSPLT_XACTPOS_ALL) in dwc2_hc_xfercomp_intr()
1095 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_hc_stall_intr()
1098 dev_dbg(hsotg->dev, "--Host Channel %d Interrupt: STALL Received--\n", in dwc2_hc_stall_intr()
1101 if (hsotg->params.dma_desc_enable) { in dwc2_hc_stall_intr()
1110 pipe_type = dwc2_hcd_get_pipe_type(&urb->pipe_info); in dwc2_hc_stall_intr()
1113 dwc2_host_complete(hsotg, qtd, -EPIPE); in dwc2_hc_stall_intr()
1117 dwc2_host_complete(hsotg, qtd, -EPIPE); in dwc2_hc_stall_intr()
1125 chan->qh->data_toggle = 0; in dwc2_hc_stall_intr()
1151 if (urb->actual_length + xfer_length > urb->length) { in dwc2_update_urb_state_abn()
1152 dev_warn(hsotg->dev, "%s(): trimming xfer length\n", __func__); in dwc2_update_urb_state_abn()
1153 xfer_length = urb->length - urb->actual_length; in dwc2_update_urb_state_abn()
1156 urb->actual_length += xfer_length; in dwc2_update_urb_state_abn()
1159 dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n", in dwc2_update_urb_state_abn()
1160 __func__, (chan->ep_is_in ? "IN" : "OUT"), chnum); in dwc2_update_urb_state_abn()
1161 dev_vdbg(hsotg->dev, " chan->start_pkt_count %d\n", in dwc2_update_urb_state_abn()
1162 chan->start_pkt_count); in dwc2_update_urb_state_abn()
1163 dev_vdbg(hsotg->dev, " hctsiz.pktcnt %d\n", in dwc2_update_urb_state_abn()
1165 dev_vdbg(hsotg->dev, " chan->max_packet %d\n", chan->max_packet); in dwc2_update_urb_state_abn()
1166 dev_vdbg(hsotg->dev, " bytes_transferred %d\n", in dwc2_update_urb_state_abn()
1168 dev_vdbg(hsotg->dev, " urb->actual_length %d\n", in dwc2_update_urb_state_abn()
1169 urb->actual_length); in dwc2_update_urb_state_abn()
1170 dev_vdbg(hsotg->dev, " urb->transfer_buffer_length %d\n", in dwc2_update_urb_state_abn()
1171 urb->length); in dwc2_update_urb_state_abn()
1183 dev_dbg(hsotg->dev, "%s: qtd is NULL\n", __func__); in dwc2_hc_nak_intr()
1187 if (!qtd->urb) { in dwc2_hc_nak_intr()
1188 dev_dbg(hsotg->dev, "%s: qtd->urb is NULL\n", __func__); in dwc2_hc_nak_intr()
1193 dev_vdbg(hsotg->dev, "--Host Channel %d Interrupt: NAK Received--\n", in dwc2_hc_nak_intr()
1198 * interrupt. Re-start the SSPLIT transfer. in dwc2_hc_nak_intr()
1200 * Normally for non-periodic transfers we'll retry right away, but to in dwc2_hc_nak_intr()
1209 * Note that in DMA mode software only gets involved to re-send NAKed in dwc2_hc_nak_intr()
1211 * delaying logic when handling splits. In non-DMA mode presumably we in dwc2_hc_nak_intr()
1215 if (chan->do_split) { in dwc2_hc_nak_intr()
1216 if (chan->complete_split) in dwc2_hc_nak_intr()
1217 qtd->error_count = 0; in dwc2_hc_nak_intr()
1218 qtd->complete_split = 0; in dwc2_hc_nak_intr()
1219 qtd->num_naks++; in dwc2_hc_nak_intr()
1220 qtd->qh->want_wait = qtd->num_naks >= DWC2_NAKS_BEFORE_DELAY && in dwc2_hc_nak_intr()
1221 !(chan->ep_type == USB_ENDPOINT_XFER_CONTROL && in dwc2_hc_nak_intr()
1222 chan->ep_is_in); in dwc2_hc_nak_intr()
1227 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_nak_intr()
1230 if (hsotg->params.host_dma && chan->ep_is_in) { in dwc2_hc_nak_intr()
1237 qtd->error_count = 0; in dwc2_hc_nak_intr()
1246 qtd->error_count = 0; in dwc2_hc_nak_intr()
1248 if (!chan->qh->ping_state) { in dwc2_hc_nak_intr()
1249 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_nak_intr()
1253 if (chan->speed == USB_SPEED_HIGH) in dwc2_hc_nak_intr()
1254 chan->qh->ping_state = 1; in dwc2_hc_nak_intr()
1258 * Halt the channel so the transfer can be re-started from in dwc2_hc_nak_intr()
1265 qtd->error_count = 0; in dwc2_hc_nak_intr()
1270 dev_err(hsotg->dev, "NACK interrupt for ISOC transfer\n"); in dwc2_hc_nak_intr()
1290 dev_vdbg(hsotg->dev, "--Host Channel %d Interrupt: ACK Received--\n", in dwc2_hc_ack_intr()
1293 if (chan->do_split) { in dwc2_hc_ack_intr()
1295 if (!chan->ep_is_in && in dwc2_hc_ack_intr()
1296 chan->data_pid_start != DWC2_HC_PID_SETUP) in dwc2_hc_ack_intr()
1297 qtd->ssplit_out_xfer_count = chan->xfer_len; in dwc2_hc_ack_intr()
1299 if (chan->ep_type != USB_ENDPOINT_XFER_ISOC || chan->ep_is_in) { in dwc2_hc_ack_intr()
1300 qtd->complete_split = 1; in dwc2_hc_ack_intr()
1304 switch (chan->xact_pos) { in dwc2_hc_ack_intr()
1308 qtd->isoc_split_pos = DWC2_HCSPLT_XACTPOS_ALL; in dwc2_hc_ack_intr()
1309 qtd->isoc_split_offset = 0; in dwc2_hc_ack_intr()
1318 frame_desc = &qtd->urb->iso_descs[ in dwc2_hc_ack_intr()
1319 qtd->isoc_frame_index]; in dwc2_hc_ack_intr()
1320 qtd->isoc_split_offset += 188; in dwc2_hc_ack_intr()
1322 if (frame_desc->length - qtd->isoc_split_offset in dwc2_hc_ack_intr()
1324 qtd->isoc_split_pos = in dwc2_hc_ack_intr()
1327 qtd->isoc_split_pos = in dwc2_hc_ack_intr()
1333 qtd->error_count = 0; in dwc2_hc_ack_intr()
1335 if (chan->qh->ping_state) { in dwc2_hc_ack_intr()
1336 chan->qh->ping_state = 0; in dwc2_hc_ack_intr()
1338 * Halt the channel so the transfer can be re-started in dwc2_hc_ack_intr()
1367 dev_vdbg(hsotg->dev, "--Host Channel %d Interrupt: NYET Received--\n", in dwc2_hc_nyet_intr()
1372 * re-do the CSPLIT immediately on non-periodic in dwc2_hc_nyet_intr()
1374 if (chan->do_split && chan->complete_split) { in dwc2_hc_nyet_intr()
1375 if (chan->ep_is_in && chan->ep_type == USB_ENDPOINT_XFER_ISOC && in dwc2_hc_nyet_intr()
1376 hsotg->params.host_dma) { in dwc2_hc_nyet_intr()
1377 qtd->complete_split = 0; in dwc2_hc_nyet_intr()
1378 qtd->isoc_split_offset = 0; in dwc2_hc_nyet_intr()
1379 qtd->isoc_frame_index++; in dwc2_hc_nyet_intr()
1380 if (qtd->urb && in dwc2_hc_nyet_intr()
1381 qtd->isoc_frame_index == qtd->urb->packet_count) { in dwc2_hc_nyet_intr()
1392 if (chan->ep_type == USB_ENDPOINT_XFER_INT || in dwc2_hc_nyet_intr()
1393 chan->ep_type == USB_ENDPOINT_XFER_ISOC) { in dwc2_hc_nyet_intr()
1394 struct dwc2_qh *qh = chan->qh; in dwc2_hc_nyet_intr()
1397 if (!hsotg->params.uframe_sched) { in dwc2_hc_nyet_intr()
1402 dwc2_full_frame_num(qh->next_active_frame); in dwc2_hc_nyet_intr()
1429 qh->start_active_frame, in dwc2_hc_nyet_intr()
1430 qh->num_hs_transfers); in dwc2_hc_nyet_intr()
1432 if (qh->ep_type != USB_ENDPOINT_XFER_ISOC || in dwc2_hc_nyet_intr()
1433 qh->ep_is_in) in dwc2_hc_nyet_intr()
1438 end_frnum, qh->next_active_frame); in dwc2_hc_nyet_intr()
1451 qtd->error_count++; in dwc2_hc_nyet_intr()
1453 qtd->complete_split = 0; in dwc2_hc_nyet_intr()
1465 chan->qh->ping_state = 1; in dwc2_hc_nyet_intr()
1466 qtd->error_count = 0; in dwc2_hc_nyet_intr()
1468 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, qtd, in dwc2_hc_nyet_intr()
1473 * Halt the channel and re-start the transfer so the PING protocol in dwc2_hc_nyet_intr()
1490 dev_dbg(hsotg->dev, "--Host Channel %d Interrupt: Babble Error--\n", in dwc2_hc_babble_intr()
1495 if (hsotg->params.dma_desc_enable) { in dwc2_hc_babble_intr()
1501 if (chan->ep_type != USB_ENDPOINT_XFER_ISOC) { in dwc2_hc_babble_intr()
1502 dwc2_host_complete(hsotg, qtd, -EOVERFLOW); in dwc2_hc_babble_intr()
1524 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_hc_ahberr_intr()
1531 dev_dbg(hsotg->dev, "--Host Channel %d Interrupt: AHB Error--\n", in dwc2_hc_ahberr_intr()
1544 dev_err(hsotg->dev, "AHB ERROR, Channel %d\n", chnum); in dwc2_hc_ahberr_intr()
1545 dev_err(hsotg->dev, " hcchar 0x%08x, hcsplt 0x%08x\n", hcchar, hcsplt); in dwc2_hc_ahberr_intr()
1546 dev_err(hsotg->dev, " hctsiz 0x%08x, hc_dma 0x%08x\n", hctsiz, hc_dma); in dwc2_hc_ahberr_intr()
1547 dev_err(hsotg->dev, " Device address: %d\n", in dwc2_hc_ahberr_intr()
1548 dwc2_hcd_get_dev_addr(&urb->pipe_info)); in dwc2_hc_ahberr_intr()
1549 dev_err(hsotg->dev, " Endpoint: %d, %s\n", in dwc2_hc_ahberr_intr()
1550 dwc2_hcd_get_ep_num(&urb->pipe_info), in dwc2_hc_ahberr_intr()
1551 dwc2_hcd_is_pipe_in(&urb->pipe_info) ? "IN" : "OUT"); in dwc2_hc_ahberr_intr()
1553 switch (dwc2_hcd_get_pipe_type(&urb->pipe_info)) { in dwc2_hc_ahberr_intr()
1571 dev_err(hsotg->dev, " Endpoint type: %s\n", pipetype); in dwc2_hc_ahberr_intr()
1573 switch (chan->speed) { in dwc2_hc_ahberr_intr()
1588 dev_err(hsotg->dev, " Speed: %s\n", speed); in dwc2_hc_ahberr_intr()
1590 dev_err(hsotg->dev, " Max packet size: %d (mult %d)\n", in dwc2_hc_ahberr_intr()
1591 dwc2_hcd_get_maxp(&urb->pipe_info), in dwc2_hc_ahberr_intr()
1592 dwc2_hcd_get_maxp_mult(&urb->pipe_info)); in dwc2_hc_ahberr_intr()
1593 dev_err(hsotg->dev, " Data buffer length: %d\n", urb->length); in dwc2_hc_ahberr_intr()
1594 dev_err(hsotg->dev, " Transfer buffer: %p, Transfer DMA: %08lx\n", in dwc2_hc_ahberr_intr()
1595 urb->buf, (unsigned long)urb->dma); in dwc2_hc_ahberr_intr()
1596 dev_err(hsotg->dev, " Setup buffer: %p, Setup DMA: %08lx\n", in dwc2_hc_ahberr_intr()
1597 urb->setup_packet, (unsigned long)urb->setup_dma); in dwc2_hc_ahberr_intr()
1598 dev_err(hsotg->dev, " Interval: %d\n", urb->interval); in dwc2_hc_ahberr_intr()
1601 if (hsotg->params.dma_desc_enable) { in dwc2_hc_ahberr_intr()
1607 dwc2_host_complete(hsotg, qtd, -EIO); in dwc2_hc_ahberr_intr()
1628 dev_dbg(hsotg->dev, in dwc2_hc_xacterr_intr()
1629 "--Host Channel %d Interrupt: Transaction Error--\n", chnum); in dwc2_hc_xacterr_intr()
1633 if (hsotg->params.dma_desc_enable) { in dwc2_hc_xacterr_intr()
1639 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_xacterr_intr()
1642 qtd->error_count++; in dwc2_hc_xacterr_intr()
1643 if (!chan->qh->ping_state) { in dwc2_hc_xacterr_intr()
1644 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_xacterr_intr()
1647 if (!chan->ep_is_in && chan->speed == USB_SPEED_HIGH) in dwc2_hc_xacterr_intr()
1648 chan->qh->ping_state = 1; in dwc2_hc_xacterr_intr()
1652 * Halt the channel so the transfer can be re-started from in dwc2_hc_xacterr_intr()
1658 qtd->error_count++; in dwc2_hc_xacterr_intr()
1659 if (chan->do_split && chan->complete_split) in dwc2_hc_xacterr_intr()
1660 qtd->complete_split = 0; in dwc2_hc_xacterr_intr()
1689 dev_dbg(hsotg->dev, "--Host Channel %d Interrupt: Frame Overrun--\n", in dwc2_hc_frmovrun_intr()
1694 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_frmovrun_intr()
1719 dev_dbg(hsotg->dev, in dwc2_hc_datatglerr_intr()
1720 "--Host Channel %d Interrupt: Data Toggle Error--\n", chnum); in dwc2_hc_datatglerr_intr()
1722 if (chan->ep_is_in) in dwc2_hc_datatglerr_intr()
1723 qtd->error_count = 0; in dwc2_hc_datatglerr_intr()
1725 dev_err(hsotg->dev, in dwc2_hc_datatglerr_intr()
1750 if (chan->halt_status == DWC2_HC_XFER_NO_HALT_STATUS) { in dwc2_halt_status_ok()
1759 dev_dbg(hsotg->dev, in dwc2_halt_status_ok()
1760 "%s: chan->halt_status DWC2_HC_XFER_NO_HALT_STATUS,\n", in dwc2_halt_status_ok()
1762 dev_dbg(hsotg->dev, in dwc2_halt_status_ok()
1765 dev_dbg(hsotg->dev, in dwc2_halt_status_ok()
1767 chan->hcint, hcintmsk, hcsplt); in dwc2_halt_status_ok()
1769 dev_dbg(hsotg->dev, "qtd->complete_split %d\n", in dwc2_halt_status_ok()
1770 qtd->complete_split); in dwc2_halt_status_ok()
1771 dev_warn(hsotg->dev, in dwc2_halt_status_ok()
1784 dev_warn(hsotg->dev, in dwc2_halt_status_ok()
1787 chan->halt_pending = 0; in dwc2_halt_status_ok()
1788 dwc2_halt_channel(hsotg, chan, qtd, chan->halt_status); in dwc2_halt_status_ok()
1808 dev_vdbg(hsotg->dev, in dwc2_hc_chhltd_intr_dma()
1809 "--Host Channel %d Interrupt: DMA Channel Halted--\n", in dwc2_hc_chhltd_intr_dma()
1813 * For core with OUT NAK enhancement, the flow for high-speed in dwc2_hc_chhltd_intr_dma()
1816 if (hsotg->hw_params.snpsid >= DWC2_CORE_REV_2_71a) { in dwc2_hc_chhltd_intr_dma()
1817 if (chan->speed == USB_SPEED_HIGH && !chan->ep_is_in && in dwc2_hc_chhltd_intr_dma()
1818 (chan->ep_type == USB_ENDPOINT_XFER_CONTROL || in dwc2_hc_chhltd_intr_dma()
1819 chan->ep_type == USB_ENDPOINT_XFER_BULK)) { in dwc2_hc_chhltd_intr_dma()
1824 if (chan->halt_status == DWC2_HC_XFER_URB_DEQUEUE || in dwc2_hc_chhltd_intr_dma()
1825 (chan->halt_status == DWC2_HC_XFER_AHB_ERR && in dwc2_hc_chhltd_intr_dma()
1826 !hsotg->params.dma_desc_enable)) { in dwc2_hc_chhltd_intr_dma()
1827 if (hsotg->params.dma_desc_enable) in dwc2_hc_chhltd_intr_dma()
1829 chan->halt_status); in dwc2_hc_chhltd_intr_dma()
1838 chan->halt_status); in dwc2_hc_chhltd_intr_dma()
1844 if (chan->hcint & HCINTMSK_XFERCOMPL) { in dwc2_hc_chhltd_intr_dma()
1847 * says that on SPLIT-ISOC OUT transfers in DMA mode that a HALT in dwc2_hc_chhltd_intr_dma()
1852 if (chan->ep_type == USB_ENDPOINT_XFER_ISOC && !chan->ep_is_in) in dwc2_hc_chhltd_intr_dma()
1855 } else if (chan->hcint & HCINTMSK_STALL) { in dwc2_hc_chhltd_intr_dma()
1857 } else if ((chan->hcint & HCINTMSK_XACTERR) && in dwc2_hc_chhltd_intr_dma()
1858 !hsotg->params.dma_desc_enable) { in dwc2_hc_chhltd_intr_dma()
1860 if (chan->hcint & in dwc2_hc_chhltd_intr_dma()
1862 dev_vdbg(hsotg->dev, in dwc2_hc_chhltd_intr_dma()
1864 qtd->error_count = 0; in dwc2_hc_chhltd_intr_dma()
1866 dev_vdbg(hsotg->dev, in dwc2_hc_chhltd_intr_dma()
1877 } else if ((chan->hcint & HCINTMSK_XCS_XACT) && in dwc2_hc_chhltd_intr_dma()
1878 hsotg->params.dma_desc_enable) { in dwc2_hc_chhltd_intr_dma()
1880 } else if ((chan->hcint & HCINTMSK_AHBERR) && in dwc2_hc_chhltd_intr_dma()
1881 hsotg->params.dma_desc_enable) { in dwc2_hc_chhltd_intr_dma()
1883 } else if (chan->hcint & HCINTMSK_BBLERR) { in dwc2_hc_chhltd_intr_dma()
1885 } else if (chan->hcint & HCINTMSK_FRMOVRUN) { in dwc2_hc_chhltd_intr_dma()
1888 if (chan->hcint & HCINTMSK_NYET) { in dwc2_hc_chhltd_intr_dma()
1896 } else if ((chan->hcint & HCINTMSK_NAK) && in dwc2_hc_chhltd_intr_dma()
1899 * If nak is not masked, it's because a non-split IN in dwc2_hc_chhltd_intr_dma()
1906 } else if ((chan->hcint & HCINTMSK_ACK) && in dwc2_hc_chhltd_intr_dma()
1909 * If ack is not masked, it's because a non-split IN in dwc2_hc_chhltd_intr_dma()
1917 if (chan->ep_type == USB_ENDPOINT_XFER_INT || in dwc2_hc_chhltd_intr_dma()
1918 chan->ep_type == USB_ENDPOINT_XFER_ISOC) { in dwc2_hc_chhltd_intr_dma()
1923 * in its scheduled (micro)frame. in dwc2_hc_chhltd_intr_dma()
1925 dev_dbg(hsotg->dev, in dwc2_hc_chhltd_intr_dma()
1931 dev_err(hsotg->dev, in dwc2_hc_chhltd_intr_dma()
1932 "%s: Channel %d - ChHltd set, but reason is unknown\n", in dwc2_hc_chhltd_intr_dma()
1934 dev_err(hsotg->dev, in dwc2_hc_chhltd_intr_dma()
1936 chan->hcint, in dwc2_hc_chhltd_intr_dma()
1942 dev_info(hsotg->dev, in dwc2_hc_chhltd_intr_dma()
1943 "NYET/NAK/ACK/other in non-error case, 0x%08x\n", in dwc2_hc_chhltd_intr_dma()
1944 chan->hcint); in dwc2_hc_chhltd_intr_dma()
1946 /* Failthrough: use 3-strikes rule */ in dwc2_hc_chhltd_intr_dma()
1947 qtd->error_count++; in dwc2_hc_chhltd_intr_dma()
1948 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_chhltd_intr_dma()
1952 * (urb->actual_length >= urb->length) which was not reported in dwc2_hc_chhltd_intr_dma()
1955 * subsequently. If urb->actual_length is not DMA-aligned, in dwc2_hc_chhltd_intr_dma()
1960 if (qtd->urb->actual_length >= qtd->urb->length) in dwc2_hc_chhltd_intr_dma()
1961 qtd->error_count = 3; in dwc2_hc_chhltd_intr_dma()
1983 dev_vdbg(hsotg->dev, "--Host Channel %d Interrupt: Channel Halted--\n", in dwc2_hc_chhltd_intr()
1986 if (hsotg->params.host_dma) { in dwc2_hc_chhltd_intr()
1991 dwc2_release_channel(hsotg, chan, qtd, chan->halt_status); in dwc2_hc_chhltd_intr()
2008 cur_head = list_first_entry(&qh->qtd_list, struct dwc2_qtd, in dwc2_check_qtd_still_ok()
2020 chan = hsotg->hc_ptr_array[chnum]; in dwc2_hc_n_intr()
2028 dev_err(hsotg->dev, "## hc_ptr_array for channel is NULL ##\n"); in dwc2_hc_n_intr()
2033 dev_vdbg(hsotg->dev, "--Host Channel Interrupt--, Channel %d\n", in dwc2_hc_n_intr()
2035 dev_vdbg(hsotg->dev, in dwc2_hc_n_intr()
2044 if (!chan->qh) { in dwc2_hc_n_intr()
2045 dev_warn(hsotg->dev, "Interrupt on disabled channel\n"); in dwc2_hc_n_intr()
2049 chan->hcint = hcintraw; in dwc2_hc_n_intr()
2056 if (chan->halt_status == DWC2_HC_XFER_URB_DEQUEUE) { in dwc2_hc_n_intr()
2062 if (hsotg->params.dma_desc_enable) in dwc2_hc_n_intr()
2064 chan->halt_status); in dwc2_hc_n_intr()
2067 chan->halt_status); in dwc2_hc_n_intr()
2071 if (list_empty(&chan->qh->qtd_list)) { in dwc2_hc_n_intr()
2076 dev_dbg(hsotg->dev, "## no QTD queued for channel %d ##\n", in dwc2_hc_n_intr()
2078 dev_dbg(hsotg->dev, in dwc2_hc_n_intr()
2080 chan->hcint, hcintmsk, hcint); in dwc2_hc_n_intr()
2081 chan->halt_status = DWC2_HC_XFER_NO_HALT_STATUS; in dwc2_hc_n_intr()
2083 chan->hcint = 0; in dwc2_hc_n_intr()
2087 qtd = list_first_entry(&chan->qh->qtd_list, struct dwc2_qtd, in dwc2_hc_n_intr()
2090 if (!hsotg->params.host_dma) { in dwc2_hc_n_intr()
2107 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2112 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2117 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2122 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2127 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2132 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2137 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2142 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2147 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2152 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2157 chan->hcint = 0; in dwc2_hc_n_intr()
2174 dev_vdbg(hsotg->dev, "%s()\n", __func__); in dwc2_hc_intr()
2176 dev_vdbg(hsotg->dev, "HAINT=%08x\n", haint); in dwc2_hc_intr()
2181 * issue complete-split transactions in a microframe for a in dwc2_hc_intr()
2182 * set of full-/low-speed endpoints in the same relative in dwc2_hc_intr()
2183 * order as the start-splits were issued in a microframe for. in dwc2_hc_intr()
2185 list_for_each_entry_safe(chan, chan_tmp, &hsotg->split_order, in dwc2_hc_intr()
2187 int hc_num = chan->hc_num; in dwc2_hc_intr()
2195 for (i = 0; i < hsotg->params.host_channels; i++) { in dwc2_hc_intr()
2208 dev_warn(hsotg->dev, "Controller is dead\n"); in dwc2_handle_hcd_intr()
2214 spin_lock(&hsotg->lock); in dwc2_handle_hcd_intr()
2220 spin_unlock(&hsotg->lock); in dwc2_handle_hcd_intr()
2234 /* Only print if there are any non-suppressed interrupts left */ in dwc2_handle_hcd_intr()
2236 dev_vdbg(hsotg->dev, in dwc2_handle_hcd_intr()
2254 dev_vdbg(hsotg->dev, in dwc2_handle_hcd_intr()
2256 dev_vdbg(hsotg->dev, in dwc2_handle_hcd_intr()
2263 spin_unlock(&hsotg->lock); in dwc2_handle_hcd_intr()