• Home
  • Raw
  • Download

Lines Matching +full:saw +full:- +full:slave

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.
16 * 3. The names of the above-listed copyright holders may not be used
45 #include <linux/dma-mapping.h>
65 u16 curr_frame_number = hsotg->frame_number; in dwc2_track_missed_sofs()
66 u16 expected = dwc2_frame_num_inc(hsotg->last_frame_num, 1); in dwc2_track_missed_sofs()
73 if (hsotg->frame_num_idx < FRAME_NUM_ARRAY_SIZE) { in dwc2_track_missed_sofs()
75 hsotg->frame_num_array[hsotg->frame_num_idx] = in dwc2_track_missed_sofs()
77 hsotg->last_frame_num_array[hsotg->frame_num_idx] = in dwc2_track_missed_sofs()
78 hsotg->last_frame_num; in dwc2_track_missed_sofs()
79 hsotg->frame_num_idx++; in dwc2_track_missed_sofs()
81 } else if (!hsotg->dumped_frame_num_array) { in dwc2_track_missed_sofs()
84 dev_info(hsotg->dev, "Frame Last Frame\n"); in dwc2_track_missed_sofs()
85 dev_info(hsotg->dev, "----- ----------\n"); in dwc2_track_missed_sofs()
87 dev_info(hsotg->dev, "0x%04x 0x%04x\n", in dwc2_track_missed_sofs()
88 hsotg->frame_num_array[i], in dwc2_track_missed_sofs()
89 hsotg->last_frame_num_array[i]); in dwc2_track_missed_sofs()
91 hsotg->dumped_frame_num_array = 1; in dwc2_track_missed_sofs()
94 hsotg->last_frame_num = curr_frame_number; in dwc2_track_missed_sofs()
101 struct usb_device *root_hub = dwc2_hsotg_to_hcd(hsotg)->self.root_hub; in dwc2_hc_handle_tt_clear()
104 if (!chan->qh) in dwc2_hc_handle_tt_clear()
107 if (chan->qh->dev_speed == USB_SPEED_HIGH) in dwc2_hc_handle_tt_clear()
110 if (!qtd->urb) in dwc2_hc_handle_tt_clear()
113 usb_urb = qtd->urb->priv; in dwc2_hc_handle_tt_clear()
114 if (!usb_urb || !usb_urb->dev || !usb_urb->dev->tt) in dwc2_hc_handle_tt_clear()
123 if (usb_urb->dev->tt->hub == root_hub) in dwc2_hc_handle_tt_clear()
126 if (qtd->urb->status != -EPIPE && qtd->urb->status != -EREMOTEIO) { in dwc2_hc_handle_tt_clear()
127 chan->qh->tt_buffer_dirty = 1; in dwc2_hc_handle_tt_clear()
130 chan->qh->tt_buffer_dirty = 0; in dwc2_hc_handle_tt_clear()
135 * Handles the start-of-frame interrupt in host mode. Non-periodic
150 dev_vdbg(hsotg->dev, "--Start of Frame Interrupt--\n"); in dwc2_sof_intr()
153 hsotg->frame_number = dwc2_hcd_get_frame_number(hsotg); in dwc2_sof_intr()
158 qh_entry = hsotg->periodic_sched_inactive.next; in dwc2_sof_intr()
159 while (qh_entry != &hsotg->periodic_sched_inactive) { in dwc2_sof_intr()
161 qh_entry = qh_entry->next; in dwc2_sof_intr()
162 if (dwc2_frame_num_le(qh->next_active_frame, in dwc2_sof_intr()
163 hsotg->frame_number)) { in dwc2_sof_intr()
165 qh, hsotg->frame_number, in dwc2_sof_intr()
166 qh->next_active_frame); in dwc2_sof_intr()
172 list_move_tail(&qh->qh_list_entry, in dwc2_sof_intr()
173 &hsotg->periodic_sched_ready); in dwc2_sof_intr()
184 * memory if the DWC_otg controller is operating in Slave mode.
192 dev_vdbg(hsotg->dev, "--RxFIFO Level Interrupt--\n"); in dwc2_rx_fifo_level_intr()
196 chan = hsotg->hc_ptr_array[chnum]; in dwc2_rx_fifo_level_intr()
198 dev_err(hsotg->dev, "Unable to get corresponding channel\n"); in dwc2_rx_fifo_level_intr()
208 dev_vdbg(hsotg->dev, " Ch num = %d\n", chnum); in dwc2_rx_fifo_level_intr()
209 dev_vdbg(hsotg->dev, " Count = %d\n", bcnt); in dwc2_rx_fifo_level_intr()
210 dev_vdbg(hsotg->dev, " DPID = %d, chan.dpid = %d\n", dpid, in dwc2_rx_fifo_level_intr()
211 chan->data_pid_start); in dwc2_rx_fifo_level_intr()
212 dev_vdbg(hsotg->dev, " PStatus = %d\n", pktsts); in dwc2_rx_fifo_level_intr()
219 dwc2_read_packet(hsotg, chan->xfer_buf, bcnt); in dwc2_rx_fifo_level_intr()
222 chan->xfer_count += bcnt; in dwc2_rx_fifo_level_intr()
223 chan->xfer_buf += bcnt; in dwc2_rx_fifo_level_intr()
232 dev_err(hsotg->dev, in dwc2_rx_fifo_level_intr()
239 * This interrupt occurs when the non-periodic Tx FIFO is half-empty. More
241 * may be written to the non-periodic request queue for IN transfers. This
242 * interrupt is enabled only in Slave mode.
246 dev_vdbg(hsotg->dev, "--Non-Periodic TxFIFO Empty Interrupt--\n"); in dwc2_np_tx_fifo_empty_intr()
251 * This interrupt occurs when the periodic Tx FIFO is half-empty. More data
254 * enabled only in Slave mode.
259 dev_vdbg(hsotg->dev, "--Periodic TxFIFO Empty Interrupt--\n"); in dwc2_perio_tx_fifo_empty_intr()
266 struct dwc2_core_params *params = &hsotg->params; in dwc2_hprt0_enable()
274 dev_vdbg(hsotg->dev, "%s(%p)\n", __func__, hsotg); in dwc2_hprt0_enable()
284 if (!params->host_support_fs_ls_low_power) { in dwc2_hprt0_enable()
286 hsotg->flags.b.port_reset_change = 1; in dwc2_hprt0_enable()
307 params->host_ls_low_power_phy_clk) { in dwc2_hprt0_enable()
309 dev_vdbg(hsotg->dev, in dwc2_hprt0_enable()
320 dev_vdbg(hsotg->dev, in dwc2_hprt0_enable()
342 queue_delayed_work(hsotg->wq_otg, &hsotg->reset_work, in dwc2_hprt0_enable()
346 hsotg->flags.b.port_reset_change = 1; in dwc2_hprt0_enable()
360 dev_vdbg(hsotg->dev, "--Port Interrupt--\n"); in dwc2_port_intr()
379 dev_vdbg(hsotg->dev, in dwc2_port_intr()
380 "--Port Interrupt HPRT0=0x%08x Port Connect Detected--\n", in dwc2_port_intr()
392 * Clear if detected - Set internal flag if disabled in dwc2_port_intr()
396 dev_vdbg(hsotg->dev, in dwc2_port_intr()
397 " --Port Interrupt HPRT0=0x%08x Port Enable Changed (now %d)--\n", in dwc2_port_intr()
400 hsotg->new_connection = true; in dwc2_port_intr()
403 hsotg->flags.b.port_enable_change = 1; in dwc2_port_intr()
404 if (hsotg->params.dma_desc_fs_enable) { in dwc2_port_intr()
407 hsotg->params.dma_desc_enable = false; in dwc2_port_intr()
408 hsotg->new_connection = false; in dwc2_port_intr()
420 dev_vdbg(hsotg->dev, in dwc2_port_intr()
421 " --Port Interrupt HPRT0=0x%08x Port Overcurrent Changed--\n", in dwc2_port_intr()
423 hsotg->flags.b.port_over_current_change = 1; in dwc2_port_intr()
447 if (chan->ep_is_in) { in dwc2_get_actual_xfer_length()
450 length = chan->xfer_len - count; in dwc2_get_actual_xfer_length()
453 } else if (chan->qh->do_split) { in dwc2_get_actual_xfer_length()
454 length = qtd->ssplit_out_xfer_count; in dwc2_get_actual_xfer_length()
456 length = chan->xfer_len; in dwc2_get_actual_xfer_length()
469 length = (chan->start_pkt_count - count) * chan->max_packet; in dwc2_get_actual_xfer_length()
476 * dwc2_update_urb_state() - Updates the state of the URB after a Transfer
502 if (urb->actual_length + xfer_length > urb->length) { in dwc2_update_urb_state()
503 dev_dbg(hsotg->dev, "%s(): trimming xfer length\n", __func__); in dwc2_update_urb_state()
504 xfer_length = urb->length - urb->actual_length; in dwc2_update_urb_state()
507 dev_vdbg(hsotg->dev, "urb->actual_length=%d xfer_length=%d\n", in dwc2_update_urb_state()
508 urb->actual_length, xfer_length); in dwc2_update_urb_state()
509 urb->actual_length += xfer_length; in dwc2_update_urb_state()
511 if (xfer_length && chan->ep_type == USB_ENDPOINT_XFER_BULK && in dwc2_update_urb_state()
512 (urb->flags & URB_SEND_ZERO_PACKET) && in dwc2_update_urb_state()
513 urb->actual_length >= urb->length && in dwc2_update_urb_state()
514 !(urb->length % chan->max_packet)) { in dwc2_update_urb_state()
516 } else if (short_read || urb->actual_length >= urb->length) { in dwc2_update_urb_state()
518 urb->status = 0; in dwc2_update_urb_state()
522 dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n", in dwc2_update_urb_state()
523 __func__, (chan->ep_is_in ? "IN" : "OUT"), chnum); in dwc2_update_urb_state()
524 dev_vdbg(hsotg->dev, " chan->xfer_len %d\n", chan->xfer_len); in dwc2_update_urb_state()
525 dev_vdbg(hsotg->dev, " hctsiz.xfersize %d\n", in dwc2_update_urb_state()
527 dev_vdbg(hsotg->dev, " urb->transfer_buffer_length %d\n", urb->length); in dwc2_update_urb_state()
528 dev_vdbg(hsotg->dev, " urb->actual_length %d\n", urb->actual_length); in dwc2_update_urb_state()
529 dev_vdbg(hsotg->dev, " short_read %d, xfer_done %d\n", short_read, in dwc2_update_urb_state()
537 * saved in the QH for non-control transfers and it's saved in the QTD for
547 if (chan->ep_type != USB_ENDPOINT_XFER_CONTROL) { in dwc2_hcd_save_data_toggle()
548 if (WARN(!chan || !chan->qh, in dwc2_hcd_save_data_toggle()
549 "chan->qh must be specified for non-control eps\n")) in dwc2_hcd_save_data_toggle()
553 chan->qh->data_toggle = DWC2_HC_PID_DATA0; in dwc2_hcd_save_data_toggle()
555 chan->qh->data_toggle = DWC2_HC_PID_DATA1; in dwc2_hcd_save_data_toggle()
562 qtd->data_toggle = DWC2_HC_PID_DATA0; in dwc2_hcd_save_data_toggle()
564 qtd->data_toggle = DWC2_HC_PID_DATA1; in dwc2_hcd_save_data_toggle()
569 * dwc2_update_isoc_urb_state() - Updates the state of an Isochronous URB when
590 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_update_isoc_urb_state()
595 frame_desc = &urb->iso_descs[qtd->isoc_frame_index]; in dwc2_update_isoc_urb_state()
599 frame_desc->status = 0; in dwc2_update_isoc_urb_state()
600 frame_desc->actual_length = dwc2_get_actual_xfer_length(hsotg, in dwc2_update_isoc_urb_state()
604 urb->error_count++; in dwc2_update_isoc_urb_state()
605 if (chan->ep_is_in) in dwc2_update_isoc_urb_state()
606 frame_desc->status = -ENOSR; in dwc2_update_isoc_urb_state()
608 frame_desc->status = -ECOMM; in dwc2_update_isoc_urb_state()
609 frame_desc->actual_length = 0; in dwc2_update_isoc_urb_state()
612 urb->error_count++; in dwc2_update_isoc_urb_state()
613 frame_desc->status = -EOVERFLOW; in dwc2_update_isoc_urb_state()
617 urb->error_count++; in dwc2_update_isoc_urb_state()
618 frame_desc->status = -EPROTO; in dwc2_update_isoc_urb_state()
619 frame_desc->actual_length = dwc2_get_actual_xfer_length(hsotg, in dwc2_update_isoc_urb_state()
623 if (chan->qh->do_split && in dwc2_update_isoc_urb_state()
624 chan->ep_type == USB_ENDPOINT_XFER_ISOC && chan->ep_is_in && in dwc2_update_isoc_urb_state()
625 hsotg->params.host_dma) { in dwc2_update_isoc_urb_state()
626 qtd->complete_split = 0; in dwc2_update_isoc_urb_state()
627 qtd->isoc_split_offset = 0; in dwc2_update_isoc_urb_state()
632 dev_err(hsotg->dev, "Unhandled halt_status (%d)\n", in dwc2_update_isoc_urb_state()
637 if (++qtd->isoc_frame_index == urb->packet_count) { in dwc2_update_isoc_urb_state()
639 * urb->status is not used for isoc transfers. The individual in dwc2_update_isoc_urb_state()
652 * Frees the first QTD in the QH's list if free_qtd is 1. For non-periodic
653 * QHs, removes the QH from the active non-periodic schedule. If any QTDs are
655 * non-periodic schedule. For periodic QHs, removes the QH from the periodic
665 dev_vdbg(hsotg->dev, " %s(%p,%p,%d)\n", __func__, in dwc2_deactivate_qh()
668 if (list_empty(&qh->qtd_list)) { in dwc2_deactivate_qh()
669 dev_dbg(hsotg->dev, "## QTD list empty ##\n"); in dwc2_deactivate_qh()
673 qtd = list_first_entry(&qh->qtd_list, struct dwc2_qtd, qtd_list_entry); in dwc2_deactivate_qh()
675 if (qtd->complete_split) in dwc2_deactivate_qh()
677 else if (qtd->isoc_split_pos == DWC2_HCSPLT_XACTPOS_MID || in dwc2_deactivate_qh()
678 qtd->isoc_split_pos == DWC2_HCSPLT_XACTPOS_END) in dwc2_deactivate_qh()
687 qh->channel = NULL; in dwc2_deactivate_qh()
692 * dwc2_release_channel() - Releases a host channel for use by other transfers
714 dev_vdbg(hsotg->dev, " %s: channel %d, halt_status %d\n", in dwc2_release_channel()
715 __func__, chan->hc_num, halt_status); in dwc2_release_channel()
727 if (qtd && qtd->error_count >= 3) { in dwc2_release_channel()
728 dev_vdbg(hsotg->dev, in dwc2_release_channel()
731 dwc2_host_complete(hsotg, qtd, -EPROTO); in dwc2_release_channel()
742 dev_vdbg(hsotg->dev, " Complete URB with I/O error\n"); in dwc2_release_channel()
744 dwc2_host_complete(hsotg, qtd, -EIO); in dwc2_release_channel()
751 dwc2_deactivate_qh(hsotg, chan->qh, free_qtd); in dwc2_release_channel()
759 if (!list_empty(&chan->hc_list_entry)) in dwc2_release_channel()
760 list_del(&chan->hc_list_entry); in dwc2_release_channel()
762 list_add_tail(&chan->hc_list_entry, &hsotg->free_hc_list); in dwc2_release_channel()
764 if (hsotg->params.uframe_sched) { in dwc2_release_channel()
765 hsotg->available_host_channels++; in dwc2_release_channel()
767 switch (chan->ep_type) { in dwc2_release_channel()
770 hsotg->non_periodic_channels--; in dwc2_release_channel()
784 haintmsk &= ~(1 << chan->hc_num); in dwc2_release_channel()
808 dev_vdbg(hsotg->dev, "%s()\n", __func__); in dwc2_halt_channel()
810 if (hsotg->params.host_dma) { in dwc2_halt_channel()
812 dev_vdbg(hsotg->dev, "DMA enabled\n"); in dwc2_halt_channel()
817 /* Slave mode processing */ in dwc2_halt_channel()
820 if (chan->halt_on_queue) { in dwc2_halt_channel()
823 dev_vdbg(hsotg->dev, "Halt on queue\n"); in dwc2_halt_channel()
824 if (chan->ep_type == USB_ENDPOINT_XFER_CONTROL || in dwc2_halt_channel()
825 chan->ep_type == USB_ENDPOINT_XFER_BULK) { in dwc2_halt_channel()
826 dev_vdbg(hsotg->dev, "control/bulk\n"); in dwc2_halt_channel()
828 * Make sure the Non-periodic Tx FIFO empty interrupt in dwc2_halt_channel()
829 * is enabled so that the non-periodic schedule will in dwc2_halt_channel()
836 dev_vdbg(hsotg->dev, "isoc/intr\n"); in dwc2_halt_channel()
843 list_move_tail(&chan->qh->qh_list_entry, in dwc2_halt_channel()
844 &hsotg->periodic_sched_assigned); in dwc2_halt_channel()
859 * Performs common cleanup for non-periodic transfers after a Transfer
868 dev_vdbg(hsotg->dev, "%s()\n", __func__); in dwc2_complete_non_periodic_xfer()
870 qtd->error_count = 0; in dwc2_complete_non_periodic_xfer()
872 if (chan->hcint & HCINTMSK_NYET) { in dwc2_complete_non_periodic_xfer()
878 dev_vdbg(hsotg->dev, "got NYET\n"); in dwc2_complete_non_periodic_xfer()
879 chan->qh->ping_state = 1; in dwc2_complete_non_periodic_xfer()
887 * to the transfer when the non-periodic schedule is processed after in dwc2_complete_non_periodic_xfer()
892 if (chan->ep_is_in) { in dwc2_complete_non_periodic_xfer()
894 * IN transfers in Slave mode require an explicit disable to in dwc2_complete_non_periodic_xfer()
902 * transfers in Slave mode in dwc2_complete_non_periodic_xfer()
920 qtd->error_count = 0; in dwc2_complete_periodic_xfer()
922 if (!chan->ep_is_in || (hctsiz & TSIZ_PKTCNT_MASK) == 0) in dwc2_complete_periodic_xfer()
939 if (!qtd->urb) in dwc2_xfercomp_isoc_split_in()
942 frame_desc = &qtd->urb->iso_descs[qtd->isoc_frame_index]; in dwc2_xfercomp_isoc_split_in()
945 if (!len && !qtd->isoc_split_offset) { in dwc2_xfercomp_isoc_split_in()
946 qtd->complete_split = 0; in dwc2_xfercomp_isoc_split_in()
950 frame_desc->actual_length += len; in dwc2_xfercomp_isoc_split_in()
952 if (chan->align_buf) { in dwc2_xfercomp_isoc_split_in()
953 dev_vdbg(hsotg->dev, "non-aligned buffer\n"); in dwc2_xfercomp_isoc_split_in()
954 dma_unmap_single(hsotg->dev, chan->qh->dw_align_buf_dma, in dwc2_xfercomp_isoc_split_in()
956 memcpy(qtd->urb->buf + (chan->xfer_dma - qtd->urb->dma), in dwc2_xfercomp_isoc_split_in()
957 chan->qh->dw_align_buf, len); in dwc2_xfercomp_isoc_split_in()
960 qtd->isoc_split_offset += len; in dwc2_xfercomp_isoc_split_in()
965 if (frame_desc->actual_length >= frame_desc->length || pid == 0) { in dwc2_xfercomp_isoc_split_in()
966 frame_desc->status = 0; in dwc2_xfercomp_isoc_split_in()
967 qtd->isoc_frame_index++; in dwc2_xfercomp_isoc_split_in()
968 qtd->complete_split = 0; in dwc2_xfercomp_isoc_split_in()
969 qtd->isoc_split_offset = 0; in dwc2_xfercomp_isoc_split_in()
972 if (qtd->isoc_frame_index == qtd->urb->packet_count) { in dwc2_xfercomp_isoc_split_in()
986 * called in either DMA mode or Slave mode.
992 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_hc_xfercomp_intr()
998 dev_vdbg(hsotg->dev, in dwc2_hc_xfercomp_intr()
999 "--Host Channel %d Interrupt: Transfer Complete--\n", in dwc2_hc_xfercomp_intr()
1005 pipe_type = dwc2_hcd_get_pipe_type(&urb->pipe_info); in dwc2_hc_xfercomp_intr()
1007 if (hsotg->params.dma_desc_enable) { in dwc2_hc_xfercomp_intr()
1016 if (chan->qh->do_split) { in dwc2_hc_xfercomp_intr()
1017 if (chan->ep_type == USB_ENDPOINT_XFER_ISOC && chan->ep_is_in && in dwc2_hc_xfercomp_intr()
1018 hsotg->params.host_dma) { in dwc2_hc_xfercomp_intr()
1019 if (qtd->complete_split && in dwc2_hc_xfercomp_intr()
1024 qtd->complete_split = 0; in dwc2_hc_xfercomp_intr()
1031 switch (qtd->control_phase) { in dwc2_hc_xfercomp_intr()
1033 if (urb->length > 0) in dwc2_hc_xfercomp_intr()
1034 qtd->control_phase = DWC2_CONTROL_DATA; in dwc2_hc_xfercomp_intr()
1036 qtd->control_phase = DWC2_CONTROL_STATUS; in dwc2_hc_xfercomp_intr()
1037 dev_vdbg(hsotg->dev, in dwc2_hc_xfercomp_intr()
1045 qtd->control_phase = DWC2_CONTROL_STATUS; in dwc2_hc_xfercomp_intr()
1046 dev_vdbg(hsotg->dev, in dwc2_hc_xfercomp_intr()
1055 dev_vdbg(hsotg->dev, " Control transfer complete\n"); in dwc2_hc_xfercomp_intr()
1056 if (urb->status == -EINPROGRESS) in dwc2_hc_xfercomp_intr()
1057 urb->status = 0; in dwc2_hc_xfercomp_intr()
1058 dwc2_host_complete(hsotg, qtd, urb->status); in dwc2_hc_xfercomp_intr()
1067 dev_vdbg(hsotg->dev, " Bulk transfer complete\n"); in dwc2_hc_xfercomp_intr()
1071 dwc2_host_complete(hsotg, qtd, urb->status); in dwc2_hc_xfercomp_intr()
1082 dev_vdbg(hsotg->dev, " Interrupt transfer complete\n"); in dwc2_hc_xfercomp_intr()
1091 dwc2_host_complete(hsotg, qtd, urb->status); in dwc2_hc_xfercomp_intr()
1103 dev_vdbg(hsotg->dev, " Isochronous transfer complete\n"); in dwc2_hc_xfercomp_intr()
1104 if (qtd->isoc_split_pos == DWC2_HCSPLT_XACTPOS_ALL) in dwc2_hc_xfercomp_intr()
1119 * either DMA mode or Slave mode.
1125 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_hc_stall_intr()
1128 dev_dbg(hsotg->dev, "--Host Channel %d Interrupt: STALL Received--\n", in dwc2_hc_stall_intr()
1131 if (hsotg->params.dma_desc_enable) { in dwc2_hc_stall_intr()
1140 pipe_type = dwc2_hcd_get_pipe_type(&urb->pipe_info); in dwc2_hc_stall_intr()
1143 dwc2_host_complete(hsotg, qtd, -EPIPE); in dwc2_hc_stall_intr()
1147 dwc2_host_complete(hsotg, qtd, -EPIPE); in dwc2_hc_stall_intr()
1155 chan->qh->data_toggle = 0; in dwc2_hc_stall_intr()
1181 if (urb->actual_length + xfer_length > urb->length) { in dwc2_update_urb_state_abn()
1182 dev_warn(hsotg->dev, "%s(): trimming xfer length\n", __func__); in dwc2_update_urb_state_abn()
1183 xfer_length = urb->length - urb->actual_length; in dwc2_update_urb_state_abn()
1186 urb->actual_length += xfer_length; in dwc2_update_urb_state_abn()
1189 dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n", in dwc2_update_urb_state_abn()
1190 __func__, (chan->ep_is_in ? "IN" : "OUT"), chnum); in dwc2_update_urb_state_abn()
1191 dev_vdbg(hsotg->dev, " chan->start_pkt_count %d\n", in dwc2_update_urb_state_abn()
1192 chan->start_pkt_count); in dwc2_update_urb_state_abn()
1193 dev_vdbg(hsotg->dev, " hctsiz.pktcnt %d\n", in dwc2_update_urb_state_abn()
1195 dev_vdbg(hsotg->dev, " chan->max_packet %d\n", chan->max_packet); in dwc2_update_urb_state_abn()
1196 dev_vdbg(hsotg->dev, " bytes_transferred %d\n", in dwc2_update_urb_state_abn()
1198 dev_vdbg(hsotg->dev, " urb->actual_length %d\n", in dwc2_update_urb_state_abn()
1199 urb->actual_length); in dwc2_update_urb_state_abn()
1200 dev_vdbg(hsotg->dev, " urb->transfer_buffer_length %d\n", in dwc2_update_urb_state_abn()
1201 urb->length); in dwc2_update_urb_state_abn()
1206 * DMA mode or Slave mode.
1213 dev_dbg(hsotg->dev, "%s: qtd is NULL\n", __func__); in dwc2_hc_nak_intr()
1217 if (!qtd->urb) { in dwc2_hc_nak_intr()
1218 dev_dbg(hsotg->dev, "%s: qtd->urb is NULL\n", __func__); in dwc2_hc_nak_intr()
1223 dev_vdbg(hsotg->dev, "--Host Channel %d Interrupt: NAK Received--\n", in dwc2_hc_nak_intr()
1228 * interrupt. Re-start the SSPLIT transfer. in dwc2_hc_nak_intr()
1230 * Normally for non-periodic transfers we'll retry right away, but to in dwc2_hc_nak_intr()
1239 * Note that in DMA mode software only gets involved to re-send NAKed in dwc2_hc_nak_intr()
1241 * delaying logic when handling splits. In non-DMA mode presumably we in dwc2_hc_nak_intr()
1245 if (chan->do_split) { in dwc2_hc_nak_intr()
1246 if (chan->complete_split) in dwc2_hc_nak_intr()
1247 qtd->error_count = 0; in dwc2_hc_nak_intr()
1248 qtd->complete_split = 0; in dwc2_hc_nak_intr()
1249 qtd->num_naks++; in dwc2_hc_nak_intr()
1250 qtd->qh->want_wait = qtd->num_naks >= DWC2_NAKS_BEFORE_DELAY && in dwc2_hc_nak_intr()
1251 !(chan->ep_type == USB_ENDPOINT_XFER_CONTROL && in dwc2_hc_nak_intr()
1252 chan->ep_is_in); in dwc2_hc_nak_intr()
1257 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_nak_intr()
1260 if (hsotg->params.host_dma && chan->ep_is_in) { in dwc2_hc_nak_intr()
1267 qtd->error_count = 0; in dwc2_hc_nak_intr()
1273 * or Slave mode. For IN transfers, more requests will be in dwc2_hc_nak_intr()
1276 qtd->error_count = 0; in dwc2_hc_nak_intr()
1278 if (!chan->qh->ping_state) { in dwc2_hc_nak_intr()
1279 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_nak_intr()
1283 if (chan->speed == USB_SPEED_HIGH) in dwc2_hc_nak_intr()
1284 chan->qh->ping_state = 1; in dwc2_hc_nak_intr()
1288 * Halt the channel so the transfer can be re-started from in dwc2_hc_nak_intr()
1295 qtd->error_count = 0; in dwc2_hc_nak_intr()
1300 dev_err(hsotg->dev, "NACK interrupt for ISOC transfer\n"); in dwc2_hc_nak_intr()
1310 * performing the PING protocol in Slave mode, when errors occur during
1311 * either Slave mode or DMA mode, and during Start Split transactions.
1320 dev_vdbg(hsotg->dev, "--Host Channel %d Interrupt: ACK Received--\n", in dwc2_hc_ack_intr()
1323 if (chan->do_split) { in dwc2_hc_ack_intr()
1325 if (!chan->ep_is_in && in dwc2_hc_ack_intr()
1326 chan->data_pid_start != DWC2_HC_PID_SETUP) in dwc2_hc_ack_intr()
1327 qtd->ssplit_out_xfer_count = chan->xfer_len; in dwc2_hc_ack_intr()
1329 if (chan->ep_type != USB_ENDPOINT_XFER_ISOC || chan->ep_is_in) { in dwc2_hc_ack_intr()
1330 qtd->complete_split = 1; in dwc2_hc_ack_intr()
1334 switch (chan->xact_pos) { in dwc2_hc_ack_intr()
1338 qtd->isoc_split_pos = DWC2_HCSPLT_XACTPOS_ALL; in dwc2_hc_ack_intr()
1339 qtd->isoc_split_offset = 0; in dwc2_hc_ack_intr()
1348 frame_desc = &qtd->urb->iso_descs[ in dwc2_hc_ack_intr()
1349 qtd->isoc_frame_index]; in dwc2_hc_ack_intr()
1350 qtd->isoc_split_offset += 188; in dwc2_hc_ack_intr()
1352 if (frame_desc->length - qtd->isoc_split_offset in dwc2_hc_ack_intr()
1354 qtd->isoc_split_pos = in dwc2_hc_ack_intr()
1357 qtd->isoc_split_pos = in dwc2_hc_ack_intr()
1363 qtd->error_count = 0; in dwc2_hc_ack_intr()
1365 if (chan->qh->ping_state) { in dwc2_hc_ack_intr()
1366 chan->qh->ping_state = 0; in dwc2_hc_ack_intr()
1368 * Halt the channel so the transfer can be re-started in dwc2_hc_ack_intr()
1370 * Slave mode. In DMA mode, the ping_state is cleared in dwc2_hc_ack_intr()
1390 * called in either DMA mode or Slave mode.
1397 dev_vdbg(hsotg->dev, "--Host Channel %d Interrupt: NYET Received--\n", in dwc2_hc_nyet_intr()
1402 * re-do the CSPLIT immediately on non-periodic in dwc2_hc_nyet_intr()
1404 if (chan->do_split && chan->complete_split) { in dwc2_hc_nyet_intr()
1405 if (chan->ep_is_in && chan->ep_type == USB_ENDPOINT_XFER_ISOC && in dwc2_hc_nyet_intr()
1406 hsotg->params.host_dma) { in dwc2_hc_nyet_intr()
1407 qtd->complete_split = 0; in dwc2_hc_nyet_intr()
1408 qtd->isoc_split_offset = 0; in dwc2_hc_nyet_intr()
1409 qtd->isoc_frame_index++; in dwc2_hc_nyet_intr()
1410 if (qtd->urb && in dwc2_hc_nyet_intr()
1411 qtd->isoc_frame_index == qtd->urb->packet_count) { in dwc2_hc_nyet_intr()
1422 if (chan->ep_type == USB_ENDPOINT_XFER_INT || in dwc2_hc_nyet_intr()
1423 chan->ep_type == USB_ENDPOINT_XFER_ISOC) { in dwc2_hc_nyet_intr()
1424 struct dwc2_qh *qh = chan->qh; in dwc2_hc_nyet_intr()
1427 if (!hsotg->params.uframe_sched) { in dwc2_hc_nyet_intr()
1432 dwc2_full_frame_num(qh->next_active_frame); in dwc2_hc_nyet_intr()
1451 * and we saw 1 NYET then we're done. in dwc2_hc_nyet_intr()
1459 qh->start_active_frame, in dwc2_hc_nyet_intr()
1460 qh->num_hs_transfers); in dwc2_hc_nyet_intr()
1462 if (qh->ep_type != USB_ENDPOINT_XFER_ISOC || in dwc2_hc_nyet_intr()
1463 qh->ep_is_in) in dwc2_hc_nyet_intr()
1468 end_frnum, qh->next_active_frame); in dwc2_hc_nyet_intr()
1479 * occurs regularly in Slave mode. in dwc2_hc_nyet_intr()
1481 qtd->error_count++; in dwc2_hc_nyet_intr()
1483 qtd->complete_split = 0; in dwc2_hc_nyet_intr()
1495 chan->qh->ping_state = 1; in dwc2_hc_nyet_intr()
1496 qtd->error_count = 0; in dwc2_hc_nyet_intr()
1498 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, qtd, in dwc2_hc_nyet_intr()
1503 * Halt the channel and re-start the transfer so the PING protocol in dwc2_hc_nyet_intr()
1514 * either DMA mode or Slave mode.
1520 dev_dbg(hsotg->dev, "--Host Channel %d Interrupt: Babble Error--\n", in dwc2_hc_babble_intr()
1525 if (hsotg->params.dma_desc_enable) { in dwc2_hc_babble_intr()
1531 if (chan->ep_type != USB_ENDPOINT_XFER_ISOC) { in dwc2_hc_babble_intr()
1532 dwc2_host_complete(hsotg, qtd, -EOVERFLOW); in dwc2_hc_babble_intr()
1554 struct dwc2_hcd_urb *urb = qtd->urb; in dwc2_hc_ahberr_intr()
1561 dev_dbg(hsotg->dev, "--Host Channel %d Interrupt: AHB Error--\n", in dwc2_hc_ahberr_intr()
1574 dev_err(hsotg->dev, "AHB ERROR, Channel %d\n", chnum); in dwc2_hc_ahberr_intr()
1575 dev_err(hsotg->dev, " hcchar 0x%08x, hcsplt 0x%08x\n", hcchar, hcsplt); in dwc2_hc_ahberr_intr()
1576 dev_err(hsotg->dev, " hctsiz 0x%08x, hc_dma 0x%08x\n", hctsiz, hc_dma); in dwc2_hc_ahberr_intr()
1577 dev_err(hsotg->dev, " Device address: %d\n", in dwc2_hc_ahberr_intr()
1578 dwc2_hcd_get_dev_addr(&urb->pipe_info)); in dwc2_hc_ahberr_intr()
1579 dev_err(hsotg->dev, " Endpoint: %d, %s\n", in dwc2_hc_ahberr_intr()
1580 dwc2_hcd_get_ep_num(&urb->pipe_info), in dwc2_hc_ahberr_intr()
1581 dwc2_hcd_is_pipe_in(&urb->pipe_info) ? "IN" : "OUT"); in dwc2_hc_ahberr_intr()
1583 switch (dwc2_hcd_get_pipe_type(&urb->pipe_info)) { in dwc2_hc_ahberr_intr()
1601 dev_err(hsotg->dev, " Endpoint type: %s\n", pipetype); in dwc2_hc_ahberr_intr()
1603 switch (chan->speed) { in dwc2_hc_ahberr_intr()
1618 dev_err(hsotg->dev, " Speed: %s\n", speed); in dwc2_hc_ahberr_intr()
1620 dev_err(hsotg->dev, " Max packet size: %d (mult %d)\n", in dwc2_hc_ahberr_intr()
1621 dwc2_hcd_get_maxp(&urb->pipe_info), in dwc2_hc_ahberr_intr()
1622 dwc2_hcd_get_maxp_mult(&urb->pipe_info)); in dwc2_hc_ahberr_intr()
1623 dev_err(hsotg->dev, " Data buffer length: %d\n", urb->length); in dwc2_hc_ahberr_intr()
1624 dev_err(hsotg->dev, " Transfer buffer: %p, Transfer DMA: %08lx\n", in dwc2_hc_ahberr_intr()
1625 urb->buf, (unsigned long)urb->dma); in dwc2_hc_ahberr_intr()
1626 dev_err(hsotg->dev, " Setup buffer: %p, Setup DMA: %08lx\n", in dwc2_hc_ahberr_intr()
1627 urb->setup_packet, (unsigned long)urb->setup_dma); in dwc2_hc_ahberr_intr()
1628 dev_err(hsotg->dev, " Interval: %d\n", urb->interval); in dwc2_hc_ahberr_intr()
1631 if (hsotg->params.dma_desc_enable) { in dwc2_hc_ahberr_intr()
1637 dwc2_host_complete(hsotg, qtd, -EIO); in dwc2_hc_ahberr_intr()
1652 * called in either DMA mode or Slave mode.
1658 dev_dbg(hsotg->dev, in dwc2_hc_xacterr_intr()
1659 "--Host Channel %d Interrupt: Transaction Error--\n", chnum); in dwc2_hc_xacterr_intr()
1663 if (hsotg->params.dma_desc_enable) { in dwc2_hc_xacterr_intr()
1669 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_xacterr_intr()
1672 qtd->error_count++; in dwc2_hc_xacterr_intr()
1673 if (!chan->qh->ping_state) { in dwc2_hc_xacterr_intr()
1674 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_xacterr_intr()
1677 if (!chan->ep_is_in && chan->speed == USB_SPEED_HIGH) in dwc2_hc_xacterr_intr()
1678 chan->qh->ping_state = 1; in dwc2_hc_xacterr_intr()
1682 * Halt the channel so the transfer can be re-started from in dwc2_hc_xacterr_intr()
1688 qtd->error_count++; in dwc2_hc_xacterr_intr()
1689 if (chan->do_split && chan->complete_split) in dwc2_hc_xacterr_intr()
1690 qtd->complete_split = 0; in dwc2_hc_xacterr_intr()
1710 * in either DMA mode or Slave mode.
1719 dev_dbg(hsotg->dev, "--Host Channel %d Interrupt: Frame Overrun--\n", in dwc2_hc_frmovrun_intr()
1724 switch (dwc2_hcd_get_pipe_type(&qtd->urb->pipe_info)) { in dwc2_hc_frmovrun_intr()
1743 * called in either DMA mode or Slave mode.
1749 dev_dbg(hsotg->dev, in dwc2_hc_datatglerr_intr()
1750 "--Host Channel %d Interrupt: Data Toggle Error--\n", chnum); in dwc2_hc_datatglerr_intr()
1752 if (chan->ep_is_in) in dwc2_hc_datatglerr_intr()
1753 qtd->error_count = 0; in dwc2_hc_datatglerr_intr()
1755 dev_err(hsotg->dev, in dwc2_hc_datatglerr_intr()
1780 if (chan->halt_status == DWC2_HC_XFER_NO_HALT_STATUS) { in dwc2_halt_status_ok()
1789 dev_dbg(hsotg->dev, in dwc2_halt_status_ok()
1790 "%s: chan->halt_status DWC2_HC_XFER_NO_HALT_STATUS,\n", in dwc2_halt_status_ok()
1792 dev_dbg(hsotg->dev, in dwc2_halt_status_ok()
1795 dev_dbg(hsotg->dev, in dwc2_halt_status_ok()
1797 chan->hcint, hcintmsk, hcsplt); in dwc2_halt_status_ok()
1799 dev_dbg(hsotg->dev, "qtd->complete_split %d\n", in dwc2_halt_status_ok()
1800 qtd->complete_split); in dwc2_halt_status_ok()
1801 dev_warn(hsotg->dev, in dwc2_halt_status_ok()
1814 dev_warn(hsotg->dev, in dwc2_halt_status_ok()
1817 chan->halt_pending = 0; in dwc2_halt_status_ok()
1818 dwc2_halt_channel(hsotg, chan, qtd, chan->halt_status); in dwc2_halt_status_ok()
1838 dev_vdbg(hsotg->dev, in dwc2_hc_chhltd_intr_dma()
1839 "--Host Channel %d Interrupt: DMA Channel Halted--\n", in dwc2_hc_chhltd_intr_dma()
1843 * For core with OUT NAK enhancement, the flow for high-speed in dwc2_hc_chhltd_intr_dma()
1846 if (hsotg->hw_params.snpsid >= DWC2_CORE_REV_2_71a) { in dwc2_hc_chhltd_intr_dma()
1847 if (chan->speed == USB_SPEED_HIGH && !chan->ep_is_in && in dwc2_hc_chhltd_intr_dma()
1848 (chan->ep_type == USB_ENDPOINT_XFER_CONTROL || in dwc2_hc_chhltd_intr_dma()
1849 chan->ep_type == USB_ENDPOINT_XFER_BULK)) { in dwc2_hc_chhltd_intr_dma()
1854 if (chan->halt_status == DWC2_HC_XFER_URB_DEQUEUE || in dwc2_hc_chhltd_intr_dma()
1855 (chan->halt_status == DWC2_HC_XFER_AHB_ERR && in dwc2_hc_chhltd_intr_dma()
1856 !hsotg->params.dma_desc_enable)) { in dwc2_hc_chhltd_intr_dma()
1857 if (hsotg->params.dma_desc_enable) in dwc2_hc_chhltd_intr_dma()
1859 chan->halt_status); in dwc2_hc_chhltd_intr_dma()
1868 chan->halt_status); in dwc2_hc_chhltd_intr_dma()
1874 if (chan->hcint & HCINTMSK_XFERCOMPL) { in dwc2_hc_chhltd_intr_dma()
1877 * says that on SPLIT-ISOC OUT transfers in DMA mode that a HALT in dwc2_hc_chhltd_intr_dma()
1882 if (chan->ep_type == USB_ENDPOINT_XFER_ISOC && !chan->ep_is_in) in dwc2_hc_chhltd_intr_dma()
1885 } else if (chan->hcint & HCINTMSK_STALL) { in dwc2_hc_chhltd_intr_dma()
1887 } else if ((chan->hcint & HCINTMSK_XACTERR) && in dwc2_hc_chhltd_intr_dma()
1888 !hsotg->params.dma_desc_enable) { in dwc2_hc_chhltd_intr_dma()
1890 if (chan->hcint & in dwc2_hc_chhltd_intr_dma()
1892 dev_vdbg(hsotg->dev, in dwc2_hc_chhltd_intr_dma()
1894 qtd->error_count = 0; in dwc2_hc_chhltd_intr_dma()
1896 dev_vdbg(hsotg->dev, in dwc2_hc_chhltd_intr_dma()
1907 } else if ((chan->hcint & HCINTMSK_XCS_XACT) && in dwc2_hc_chhltd_intr_dma()
1908 hsotg->params.dma_desc_enable) { in dwc2_hc_chhltd_intr_dma()
1910 } else if ((chan->hcint & HCINTMSK_AHBERR) && in dwc2_hc_chhltd_intr_dma()
1911 hsotg->params.dma_desc_enable) { in dwc2_hc_chhltd_intr_dma()
1913 } else if (chan->hcint & HCINTMSK_BBLERR) { in dwc2_hc_chhltd_intr_dma()
1915 } else if (chan->hcint & HCINTMSK_FRMOVRUN) { in dwc2_hc_chhltd_intr_dma()
1918 if (chan->hcint & HCINTMSK_NYET) { in dwc2_hc_chhltd_intr_dma()
1926 } else if ((chan->hcint & HCINTMSK_NAK) && in dwc2_hc_chhltd_intr_dma()
1929 * If nak is not masked, it's because a non-split IN in dwc2_hc_chhltd_intr_dma()
1936 } else if ((chan->hcint & HCINTMSK_ACK) && in dwc2_hc_chhltd_intr_dma()
1939 * If ack is not masked, it's because a non-split IN in dwc2_hc_chhltd_intr_dma()
1947 if (chan->ep_type == USB_ENDPOINT_XFER_INT || in dwc2_hc_chhltd_intr_dma()
1948 chan->ep_type == USB_ENDPOINT_XFER_ISOC) { in dwc2_hc_chhltd_intr_dma()
1955 dev_dbg(hsotg->dev, in dwc2_hc_chhltd_intr_dma()
1961 dev_err(hsotg->dev, in dwc2_hc_chhltd_intr_dma()
1962 "%s: Channel %d - ChHltd set, but reason is unknown\n", in dwc2_hc_chhltd_intr_dma()
1964 dev_err(hsotg->dev, in dwc2_hc_chhltd_intr_dma()
1966 chan->hcint, in dwc2_hc_chhltd_intr_dma()
1972 dev_info(hsotg->dev, in dwc2_hc_chhltd_intr_dma()
1973 "NYET/NAK/ACK/other in non-error case, 0x%08x\n", in dwc2_hc_chhltd_intr_dma()
1974 chan->hcint); in dwc2_hc_chhltd_intr_dma()
1976 /* Failthrough: use 3-strikes rule */ in dwc2_hc_chhltd_intr_dma()
1977 qtd->error_count++; in dwc2_hc_chhltd_intr_dma()
1978 dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, in dwc2_hc_chhltd_intr_dma()
1982 * (urb->actual_length >= urb->length) which was not reported in dwc2_hc_chhltd_intr_dma()
1985 * subsequently. If urb->actual_length is not DMA-aligned, in dwc2_hc_chhltd_intr_dma()
1990 if (qtd->urb->actual_length >= qtd->urb->length) in dwc2_hc_chhltd_intr_dma()
1991 qtd->error_count = 3; in dwc2_hc_chhltd_intr_dma()
2000 * In slave mode, this handler is called only when the driver specifically
2013 dev_vdbg(hsotg->dev, "--Host Channel %d Interrupt: Channel Halted--\n", in dwc2_hc_chhltd_intr()
2016 if (hsotg->params.host_dma) { in dwc2_hc_chhltd_intr()
2021 dwc2_release_channel(hsotg, chan, qtd, chan->halt_status); in dwc2_hc_chhltd_intr()
2038 cur_head = list_first_entry(&qh->qtd_list, struct dwc2_qtd, in dwc2_check_qtd_still_ok()
2050 chan = hsotg->hc_ptr_array[chnum]; in dwc2_hc_n_intr()
2058 dev_err(hsotg->dev, "## hc_ptr_array for channel is NULL ##\n"); in dwc2_hc_n_intr()
2063 dev_vdbg(hsotg->dev, "--Host Channel Interrupt--, Channel %d\n", in dwc2_hc_n_intr()
2065 dev_vdbg(hsotg->dev, in dwc2_hc_n_intr()
2074 if (!chan->qh) { in dwc2_hc_n_intr()
2075 dev_warn(hsotg->dev, "Interrupt on disabled channel\n"); in dwc2_hc_n_intr()
2079 chan->hcint = hcintraw; in dwc2_hc_n_intr()
2086 if (chan->halt_status == DWC2_HC_XFER_URB_DEQUEUE) { in dwc2_hc_n_intr()
2092 if (hsotg->params.dma_desc_enable) in dwc2_hc_n_intr()
2094 chan->halt_status); in dwc2_hc_n_intr()
2097 chan->halt_status); in dwc2_hc_n_intr()
2101 if (list_empty(&chan->qh->qtd_list)) { in dwc2_hc_n_intr()
2106 dev_dbg(hsotg->dev, "## no QTD queued for channel %d ##\n", in dwc2_hc_n_intr()
2108 dev_dbg(hsotg->dev, in dwc2_hc_n_intr()
2110 chan->hcint, hcintmsk, hcint); in dwc2_hc_n_intr()
2111 chan->halt_status = DWC2_HC_XFER_NO_HALT_STATUS; in dwc2_hc_n_intr()
2113 chan->hcint = 0; in dwc2_hc_n_intr()
2117 qtd = list_first_entry(&chan->qh->qtd_list, struct dwc2_qtd, in dwc2_hc_n_intr()
2120 if (!hsotg->params.host_dma) { 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 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2162 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2167 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2172 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2177 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2182 if (!dwc2_check_qtd_still_ok(qtd, chan->qh)) in dwc2_hc_n_intr()
2187 chan->hcint = 0; in dwc2_hc_n_intr()
2204 dev_vdbg(hsotg->dev, "%s()\n", __func__); in dwc2_hc_intr()
2206 dev_vdbg(hsotg->dev, "HAINT=%08x\n", haint); in dwc2_hc_intr()
2211 * issue complete-split transactions in a microframe for a in dwc2_hc_intr()
2212 * set of full-/low-speed endpoints in the same relative in dwc2_hc_intr()
2213 * order as the start-splits were issued in a microframe for. in dwc2_hc_intr()
2215 list_for_each_entry_safe(chan, chan_tmp, &hsotg->split_order, in dwc2_hc_intr()
2217 int hc_num = chan->hc_num; in dwc2_hc_intr()
2225 for (i = 0; i < hsotg->params.host_channels; i++) { in dwc2_hc_intr()
2238 dev_warn(hsotg->dev, "Controller is dead\n"); in dwc2_handle_hcd_intr()
2242 spin_lock(&hsotg->lock); in dwc2_handle_hcd_intr()
2248 spin_unlock(&hsotg->lock); in dwc2_handle_hcd_intr()
2262 /* Only print if there are any non-suppressed interrupts left */ in dwc2_handle_hcd_intr()
2264 dev_vdbg(hsotg->dev, in dwc2_handle_hcd_intr()
2282 dev_vdbg(hsotg->dev, in dwc2_handle_hcd_intr()
2284 dev_vdbg(hsotg->dev, in dwc2_handle_hcd_intr()
2291 spin_unlock(&hsotg->lock); in dwc2_handle_hcd_intr()