Lines Matching refs:priv_ep

76 static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep,
79 static int cdns3_ep_run_stream_transfer(struct cdns3_endpoint *priv_ep,
116 struct cdns3_endpoint *priv_ep) in cdns3_get_dma_pos() argument
120 dma_index = readl(&priv_dev->regs->ep_traddr) - priv_ep->trb_pool_dma; in cdns3_get_dma_pos()
187 dma_addr_t cdns3_trb_virt_to_dma(struct cdns3_endpoint *priv_ep, in cdns3_trb_virt_to_dma() argument
190 u32 offset = (char *)trb - (char *)priv_ep->trb_pool; in cdns3_trb_virt_to_dma()
192 return priv_ep->trb_pool_dma + offset; in cdns3_trb_virt_to_dma()
195 static void cdns3_free_trb_pool(struct cdns3_endpoint *priv_ep) in cdns3_free_trb_pool() argument
197 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_free_trb_pool()
199 if (priv_ep->trb_pool) { in cdns3_free_trb_pool()
201 priv_ep->trb_pool, priv_ep->trb_pool_dma); in cdns3_free_trb_pool()
202 priv_ep->trb_pool = NULL; in cdns3_free_trb_pool()
212 int cdns3_allocate_trb_pool(struct cdns3_endpoint *priv_ep) in cdns3_allocate_trb_pool() argument
214 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_allocate_trb_pool()
219 if (priv_ep->trb_pool && priv_ep->alloc_ring_size < ring_size) in cdns3_allocate_trb_pool()
220 cdns3_free_trb_pool(priv_ep); in cdns3_allocate_trb_pool()
222 if (!priv_ep->trb_pool) { in cdns3_allocate_trb_pool()
223 priv_ep->trb_pool = dma_pool_alloc(priv_dev->eps_dma_pool, in cdns3_allocate_trb_pool()
225 &priv_ep->trb_pool_dma); in cdns3_allocate_trb_pool()
227 if (!priv_ep->trb_pool) in cdns3_allocate_trb_pool()
230 priv_ep->alloc_ring_size = ring_size; in cdns3_allocate_trb_pool()
233 memset(priv_ep->trb_pool, 0, ring_size); in cdns3_allocate_trb_pool()
235 priv_ep->num_trbs = num_trbs; in cdns3_allocate_trb_pool()
237 if (!priv_ep->num) in cdns3_allocate_trb_pool()
241 link_trb = (priv_ep->trb_pool + (priv_ep->num_trbs - 1)); in cdns3_allocate_trb_pool()
243 if (priv_ep->use_streams) { in cdns3_allocate_trb_pool()
250 link_trb->buffer = cpu_to_le32(TRB_BUFFER(priv_ep->trb_pool_dma)); in cdns3_allocate_trb_pool()
262 static void cdns3_ep_stall_flush(struct cdns3_endpoint *priv_ep) in cdns3_ep_stall_flush() argument
264 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_stall_flush()
267 trace_cdns3_halt(priv_ep, 1, 1); in cdns3_ep_stall_flush()
275 priv_ep->flags |= EP_STALLED; in cdns3_ep_stall_flush()
276 priv_ep->flags &= ~EP_STALL_PENDING; in cdns3_ep_stall_flush()
325 static void cdns3_ep_inc_enq(struct cdns3_endpoint *priv_ep) in cdns3_ep_inc_enq() argument
327 priv_ep->free_trbs--; in cdns3_ep_inc_enq()
328 cdns3_ep_inc_trb(&priv_ep->enqueue, &priv_ep->pcs, priv_ep->num_trbs); in cdns3_ep_inc_enq()
335 static void cdns3_ep_inc_deq(struct cdns3_endpoint *priv_ep) in cdns3_ep_inc_deq() argument
337 priv_ep->free_trbs++; in cdns3_ep_inc_deq()
338 cdns3_ep_inc_trb(&priv_ep->dequeue, &priv_ep->ccs, priv_ep->num_trbs); in cdns3_ep_inc_deq()
385 struct cdns3_endpoint *priv_ep) in cdns3_start_all_request() argument
389 u8 pending_empty = list_empty(&priv_ep->pending_req_list); in cdns3_start_all_request()
399 request = cdns3_next_request(&priv_ep->pending_req_list); in cdns3_start_all_request()
402 (priv_ep->flags & EP_TDLCHK_EN) || in cdns3_start_all_request()
403 priv_ep->use_streams) { in cdns3_start_all_request()
409 while (!list_empty(&priv_ep->deferred_req_list)) { in cdns3_start_all_request()
410 request = cdns3_next_request(&priv_ep->deferred_req_list); in cdns3_start_all_request()
412 if (!priv_ep->use_streams) { in cdns3_start_all_request()
413 ret = cdns3_ep_run_transfer(priv_ep, request); in cdns3_start_all_request()
415 priv_ep->stream_sg_idx = 0; in cdns3_start_all_request()
416 ret = cdns3_ep_run_stream_transfer(priv_ep, request); in cdns3_start_all_request()
421 list_move_tail(&request->list, &priv_ep->pending_req_list); in cdns3_start_all_request()
422 if (request->stream_id != 0 || (priv_ep->flags & EP_TDLCHK_EN)) in cdns3_start_all_request()
426 priv_ep->flags &= ~EP_RING_FULL; in cdns3_start_all_request()
436 #define cdns3_wa2_enable_detection(priv_dev, priv_ep, reg) do { \ argument
437 if (!priv_ep->dir && priv_ep->type != USB_ENDPOINT_XFER_ISOC) { \
438 priv_ep->flags |= EP_QUIRK_EXTRA_BUF_DET; \
478 static void cdns3_wa2_descmiss_copy_data(struct cdns3_endpoint *priv_ep, in cdns3_wa2_descmiss_copy_data() argument
484 while (!list_empty(&priv_ep->wa2_descmiss_req_list)) { in cdns3_wa2_descmiss_copy_data()
488 cdns3_next_priv_request(&priv_ep->wa2_descmiss_req_list); in cdns3_wa2_descmiss_copy_data()
500 cdns3_gadget_ep_free_request(&priv_ep->endpoint, descmiss_req); in cdns3_wa2_descmiss_copy_data()
501 --priv_ep->wa2_counter; in cdns3_wa2_descmiss_copy_data()
509 struct cdns3_endpoint *priv_ep, in cdns3_wa2_gadget_giveback() argument
512 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_EN && in cdns3_wa2_gadget_giveback()
516 req = cdns3_next_request(&priv_ep->deferred_req_list); in cdns3_wa2_gadget_giveback()
518 priv_ep->descmis_req = NULL; in cdns3_wa2_gadget_giveback()
525 priv_ep->dir); in cdns3_wa2_gadget_giveback()
527 cdns3_wa2_descmiss_copy_data(priv_ep, req); in cdns3_wa2_gadget_giveback()
528 if (!(priv_ep->flags & EP_QUIRK_END_TRANSFER) && in cdns3_wa2_gadget_giveback()
533 usb_endpoint_dir_in(priv_ep->endpoint.desc)); in cdns3_wa2_gadget_giveback()
541 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_wa2_gadget_giveback()
549 struct cdns3_endpoint *priv_ep, in cdns3_wa2_gadget_ep_queue() argument
559 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_DET) { in cdns3_wa2_gadget_ep_queue()
562 cdns3_select_ep(priv_dev, priv_ep->num | priv_ep->dir); in cdns3_wa2_gadget_ep_queue()
563 priv_ep->flags &= ~EP_QUIRK_EXTRA_BUF_DET; in cdns3_wa2_gadget_ep_queue()
566 trace_cdns3_wa2(priv_ep, "workaround disabled\n"); in cdns3_wa2_gadget_ep_queue()
570 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_EN) { in cdns3_wa2_gadget_ep_queue()
571 u8 pending_empty = list_empty(&priv_ep->pending_req_list); in cdns3_wa2_gadget_ep_queue()
572 u8 descmiss_empty = list_empty(&priv_ep->wa2_descmiss_req_list); in cdns3_wa2_gadget_ep_queue()
581 cdns3_wa2_descmiss_copy_data(priv_ep, in cdns3_wa2_gadget_ep_queue()
584 trace_cdns3_wa2(priv_ep, "get internal stored data"); in cdns3_wa2_gadget_ep_queue()
587 &priv_ep->pending_req_list); in cdns3_wa2_gadget_ep_queue()
588 cdns3_gadget_giveback(priv_ep, priv_req, in cdns3_wa2_gadget_ep_queue()
604 trace_cdns3_wa2(priv_ep, "wait for pending transfer\n"); in cdns3_wa2_gadget_ep_queue()
610 &priv_ep->wa2_descmiss_req_list); in cdns3_wa2_gadget_ep_queue()
616 static void cdns3_wa2_remove_old_request(struct cdns3_endpoint *priv_ep) in cdns3_wa2_remove_old_request() argument
620 while (!list_empty(&priv_ep->wa2_descmiss_req_list)) { in cdns3_wa2_remove_old_request()
623 priv_req = cdns3_next_priv_request(&priv_ep->wa2_descmiss_req_list); in cdns3_wa2_remove_old_request()
626 trace_cdns3_wa2(priv_ep, "removes eldest request"); in cdns3_wa2_remove_old_request()
630 cdns3_gadget_ep_free_request(&priv_ep->endpoint, in cdns3_wa2_remove_old_request()
632 --priv_ep->wa2_counter; in cdns3_wa2_remove_old_request()
646 static void cdns3_wa2_descmissing_packet(struct cdns3_endpoint *priv_ep) in cdns3_wa2_descmissing_packet() argument
650 u8 pending_empty = list_empty(&priv_ep->pending_req_list); in cdns3_wa2_descmissing_packet()
654 trace_cdns3_wa2(priv_ep, "Ignoring Descriptor missing IRQ\n"); in cdns3_wa2_descmissing_packet()
658 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_DET) { in cdns3_wa2_descmissing_packet()
659 priv_ep->flags &= ~EP_QUIRK_EXTRA_BUF_DET; in cdns3_wa2_descmissing_packet()
660 priv_ep->flags |= EP_QUIRK_EXTRA_BUF_EN; in cdns3_wa2_descmissing_packet()
663 trace_cdns3_wa2(priv_ep, "Description Missing detected\n"); in cdns3_wa2_descmissing_packet()
665 if (priv_ep->wa2_counter >= CDNS3_WA2_NUM_BUFFERS) { in cdns3_wa2_descmissing_packet()
666 trace_cdns3_wa2(priv_ep, "WA2 overflow\n"); in cdns3_wa2_descmissing_packet()
667 cdns3_wa2_remove_old_request(priv_ep); in cdns3_wa2_descmissing_packet()
670 request = cdns3_gadget_ep_alloc_request(&priv_ep->endpoint, in cdns3_wa2_descmissing_packet()
684 if (priv_ep->descmis_req) in cdns3_wa2_descmissing_packet()
685 priv_ep->descmis_req->flags |= REQUEST_INTERNAL_CH; in cdns3_wa2_descmissing_packet()
689 priv_ep->wa2_counter++; in cdns3_wa2_descmissing_packet()
692 cdns3_gadget_ep_free_request(&priv_ep->endpoint, request); in cdns3_wa2_descmissing_packet()
697 priv_ep->descmis_req = priv_req; in cdns3_wa2_descmissing_packet()
699 __cdns3_gadget_ep_queue(&priv_ep->endpoint, in cdns3_wa2_descmissing_packet()
700 &priv_ep->descmis_req->request, in cdns3_wa2_descmissing_packet()
706 dev_err(priv_ep->cdns3_dev->dev, in cdns3_wa2_descmissing_packet()
792 void cdns3_gadget_giveback(struct cdns3_endpoint *priv_ep, in cdns3_gadget_giveback() argument
796 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_giveback()
806 priv_ep->dir); in cdns3_gadget_giveback()
809 priv_ep->dir == USB_DIR_OUT && !request->status) { in cdns3_gadget_giveback()
825 request = cdns3_wa2_gadget_giveback(priv_dev, priv_ep, in cdns3_gadget_giveback()
837 usb_gadget_giveback_request(&priv_ep->endpoint, in cdns3_gadget_giveback()
843 cdns3_gadget_ep_free_request(&priv_ep->endpoint, request); in cdns3_gadget_giveback()
846 static void cdns3_wa1_restore_cycle_bit(struct cdns3_endpoint *priv_ep) in cdns3_wa1_restore_cycle_bit() argument
849 if (priv_ep->wa1_set) { in cdns3_wa1_restore_cycle_bit()
850 trace_cdns3_wa1(priv_ep, "restore cycle bit"); in cdns3_wa1_restore_cycle_bit()
852 priv_ep->wa1_set = 0; in cdns3_wa1_restore_cycle_bit()
853 priv_ep->wa1_trb_index = 0xFFFF; in cdns3_wa1_restore_cycle_bit()
854 if (priv_ep->wa1_cycle_bit) { in cdns3_wa1_restore_cycle_bit()
855 priv_ep->wa1_trb->control = in cdns3_wa1_restore_cycle_bit()
856 priv_ep->wa1_trb->control | cpu_to_le32(0x1); in cdns3_wa1_restore_cycle_bit()
858 priv_ep->wa1_trb->control = in cdns3_wa1_restore_cycle_bit()
859 priv_ep->wa1_trb->control & cpu_to_le32(~0x1); in cdns3_wa1_restore_cycle_bit()
895 struct cdns3_endpoint *priv_ep = priv_req->priv_ep; in cdns3_prepare_aligned_request_buf() local
896 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_prepare_aligned_request_buf()
911 buf->dir = usb_endpoint_dir_in(priv_ep->endpoint.desc) ? in cdns3_prepare_aligned_request_buf()
938 if (priv_ep->dir == USB_DIR_IN) { in cdns3_prepare_aligned_request_buf()
956 static int cdns3_wa1_update_guard(struct cdns3_endpoint *priv_ep, in cdns3_wa1_update_guard() argument
959 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_wa1_update_guard()
961 if (!priv_ep->wa1_set) { in cdns3_wa1_update_guard()
967 priv_ep->wa1_cycle_bit = priv_ep->pcs ? TRB_CYCLE : 0; in cdns3_wa1_update_guard()
968 priv_ep->wa1_set = 1; in cdns3_wa1_update_guard()
969 priv_ep->wa1_trb = trb; in cdns3_wa1_update_guard()
970 priv_ep->wa1_trb_index = priv_ep->enqueue; in cdns3_wa1_update_guard()
971 trace_cdns3_wa1(priv_ep, "set guard"); in cdns3_wa1_update_guard()
979 struct cdns3_endpoint *priv_ep) in cdns3_wa1_tray_restore_cycle_bit() argument
985 dma_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_wa1_tray_restore_cycle_bit()
987 if (!doorbell || dma_index != priv_ep->wa1_trb_index) in cdns3_wa1_tray_restore_cycle_bit()
988 cdns3_wa1_restore_cycle_bit(priv_ep); in cdns3_wa1_tray_restore_cycle_bit()
991 static int cdns3_ep_run_stream_transfer(struct cdns3_endpoint *priv_ep, in cdns3_ep_run_stream_transfer() argument
994 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_run_stream_transfer()
1002 unsigned int sg_idx = priv_ep->stream_sg_idx; in cdns3_ep_run_stream_transfer()
1005 address = priv_ep->endpoint.desc->bEndpointAddress; in cdns3_ep_run_stream_transfer()
1007 priv_ep->flags |= EP_PENDING_REQUEST; in cdns3_ep_run_stream_transfer()
1016 trb = priv_ep->trb_pool + priv_ep->enqueue; in cdns3_ep_run_stream_transfer()
1017 priv_req->start_trb = priv_ep->enqueue; in cdns3_ep_run_stream_transfer()
1021 cdns3_select_ep(priv_ep->cdns3_dev, address); in cdns3_ep_run_stream_transfer()
1034 tdl = DIV_ROUND_UP(length, priv_ep->endpoint.maxpacket); in cdns3_ep_run_stream_transfer()
1051 trace_cdns3_prepare_trb(priv_ep, priv_req->trb); in cdns3_ep_run_stream_transfer()
1060 writel(EP_TRADDR_TRADDR(priv_ep->trb_pool_dma), in cdns3_ep_run_stream_transfer()
1063 if (!(priv_ep->flags & EP_STALLED)) { in cdns3_ep_run_stream_transfer()
1064 trace_cdns3_ring(priv_ep); in cdns3_ep_run_stream_transfer()
1068 priv_ep->prime_flag = false; in cdns3_ep_run_stream_transfer()
1081 priv_ep->last_stream_id = priv_req->request.stream_id; in cdns3_ep_run_stream_transfer()
1086 trace_cdns3_doorbell_epx(priv_ep->name, in cdns3_ep_run_stream_transfer()
1096 static void cdns3_rearm_drdy_if_needed(struct cdns3_endpoint *priv_ep) in cdns3_rearm_drdy_if_needed() argument
1098 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_rearm_drdy_if_needed()
1116 static int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep, in cdns3_ep_run_transfer() argument
1119 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_run_transfer()
1139 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC) in cdns3_ep_run_transfer()
1140 num_trb = priv_ep->interval * num_trb_req; in cdns3_ep_run_transfer()
1145 address = priv_ep->endpoint.desc->bEndpointAddress; in cdns3_ep_run_transfer()
1147 priv_ep->flags |= EP_PENDING_REQUEST; in cdns3_ep_run_transfer()
1155 trb = priv_ep->trb_pool + priv_ep->enqueue; in cdns3_ep_run_transfer()
1156 priv_req->start_trb = priv_ep->enqueue; in cdns3_ep_run_transfer()
1159 cdns3_select_ep(priv_ep->cdns3_dev, address); in cdns3_ep_run_transfer()
1162 if ((priv_ep->enqueue + num_trb) >= (priv_ep->num_trbs - 1)) { in cdns3_ep_run_transfer()
1167 dma_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_ep_run_transfer()
1170 if (doorbell && dma_index == priv_ep->num_trbs - 1) { in cdns3_ep_run_transfer()
1171 priv_ep->flags |= EP_DEFERRED_DRDY; in cdns3_ep_run_transfer()
1176 link_trb = priv_ep->trb_pool + (priv_ep->num_trbs - 1); in cdns3_ep_run_transfer()
1185 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC || in cdns3_ep_run_transfer()
1189 link_trb->control = cpu_to_le32(((priv_ep->pcs) ? TRB_CYCLE : 0) | in cdns3_ep_run_transfer()
1192 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC) { in cdns3_ep_run_transfer()
1197 while (priv_ep->enqueue) { in cdns3_ep_run_transfer()
1199 trace_cdns3_prepare_trb(priv_ep, trb); in cdns3_ep_run_transfer()
1201 cdns3_ep_inc_enq(priv_ep); in cdns3_ep_run_transfer()
1202 trb = priv_ep->trb_pool + priv_ep->enqueue; in cdns3_ep_run_transfer()
1208 if (num_trb > priv_ep->free_trbs) { in cdns3_ep_run_transfer()
1209 priv_ep->flags |= EP_RING_FULL; in cdns3_ep_run_transfer()
1214 togle_pcs = cdns3_wa1_update_guard(priv_ep, trb); in cdns3_ep_run_transfer()
1217 control = priv_ep->pcs ? 0 : TRB_CYCLE; in cdns3_ep_run_transfer()
1223 priv_ep->endpoint.maxpacket); in cdns3_ep_run_transfer()
1246 if (priv_ep->flags & EP_TDLCHK_EN) in cdns3_ep_run_transfer()
1248 priv_ep->endpoint.maxpacket); in cdns3_ep_run_transfer()
1250 trb_burst = priv_ep->trb_burst_size; in cdns3_ep_run_transfer()
1274 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && priv_dev->dev_ver <= DEV_VER_V2) in cdns3_ep_run_transfer()
1281 pcs = priv_ep->pcs ? TRB_CYCLE : 0; in cdns3_ep_run_transfer()
1290 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && !priv_ep->dir) { in cdns3_ep_run_transfer()
1314 priv_req->end_trb = priv_ep->enqueue; in cdns3_ep_run_transfer()
1315 cdns3_ep_inc_enq(priv_ep); in cdns3_ep_run_transfer()
1316 trb = priv_ep->trb_pool + priv_ep->enqueue; in cdns3_ep_run_transfer()
1329 (priv_ep->flags & EP_TDLCHK_EN)) { in cdns3_ep_run_transfer()
1335 priv_ep->pending_tdl = total_tdl - EP_CMD_TDL_MAX; in cdns3_ep_run_transfer()
1355 cdns3_wa1_tray_restore_cycle_bit(priv_dev, priv_ep); in cdns3_ep_run_transfer()
1361 trace_cdns3_prepare_trb(priv_ep, trb + i); in cdns3_ep_run_transfer()
1363 trb = priv_ep->trb_pool; in cdns3_ep_run_transfer()
1371 trace_cdns3_prepare_trb(priv_ep, priv_req->trb); in cdns3_ep_run_transfer()
1384 if (priv_ep->flags & EP_UPDATE_EP_TRBADDR) { in cdns3_ep_run_transfer()
1390 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && !priv_ep->dir && in cdns3_ep_run_transfer()
1391 !(priv_ep->flags & EP_QUIRK_ISO_OUT_EN)) { in cdns3_ep_run_transfer()
1392 priv_ep->flags |= EP_QUIRK_ISO_OUT_EN; in cdns3_ep_run_transfer()
1397 writel(EP_TRADDR_TRADDR(priv_ep->trb_pool_dma + in cdns3_ep_run_transfer()
1401 priv_ep->flags &= ~EP_UPDATE_EP_TRBADDR; in cdns3_ep_run_transfer()
1404 if (!priv_ep->wa1_set && !(priv_ep->flags & EP_STALLED)) { in cdns3_ep_run_transfer()
1405 trace_cdns3_ring(priv_ep); in cdns3_ep_run_transfer()
1409 cdns3_rearm_drdy_if_needed(priv_ep); in cdns3_ep_run_transfer()
1410 trace_cdns3_doorbell_epx(priv_ep->name, in cdns3_ep_run_transfer()
1422 struct cdns3_endpoint *priv_ep; in cdns3_set_hw_configuration() local
1437 priv_ep = ep_to_cdns3_ep(ep); in cdns3_set_hw_configuration()
1438 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_set_hw_configuration()
1484 static bool cdns3_trb_handled(struct cdns3_endpoint *priv_ep, in cdns3_trb_handled() argument
1487 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_trb_handled()
1493 current_index = cdns3_get_dma_pos(priv_dev, priv_ep); in cdns3_trb_handled()
1498 if (priv_ep->dequeue > priv_req->end_trb) in cdns3_trb_handled()
1501 if (priv_ep->dequeue < priv_req->start_trb) in cdns3_trb_handled()
1506 (priv_ep->dequeue > priv_req->end_trb) && in cdns3_trb_handled()
1507 (priv_ep->dequeue < priv_req->start_trb)) in cdns3_trb_handled()
1511 (priv_ep->dequeue != priv_req->end_trb)) in cdns3_trb_handled()
1514 trb = &priv_ep->trb_pool[priv_ep->dequeue]; in cdns3_trb_handled()
1516 if ((le32_to_cpu(trb->control) & TRB_CYCLE) != priv_ep->ccs) in cdns3_trb_handled()
1519 if (doorbell == 1 && current_index == priv_ep->dequeue) in cdns3_trb_handled()
1523 if (TRBS_PER_SEGMENT == 2 && priv_ep->type != USB_ENDPOINT_XFER_ISOC) { in cdns3_trb_handled()
1528 if (priv_ep->enqueue == priv_ep->dequeue && in cdns3_trb_handled()
1529 priv_ep->free_trbs == 0) { in cdns3_trb_handled()
1531 } else if (priv_ep->dequeue < current_index) { in cdns3_trb_handled()
1532 if ((current_index == (priv_ep->num_trbs - 1)) && in cdns3_trb_handled()
1533 !priv_ep->dequeue) in cdns3_trb_handled()
1537 } else if (priv_ep->dequeue > current_index) { in cdns3_trb_handled()
1548 struct cdns3_endpoint *priv_ep) in cdns3_transfer_completed() argument
1556 while (!list_empty(&priv_ep->pending_req_list)) { in cdns3_transfer_completed()
1557 request = cdns3_next_request(&priv_ep->pending_req_list); in cdns3_transfer_completed()
1560 trb = priv_ep->trb_pool + priv_ep->dequeue; in cdns3_transfer_completed()
1566 if (priv_ep->dequeue == cdns3_get_dma_pos(priv_dev, priv_ep) && in cdns3_transfer_completed()
1567 priv_ep->type == USB_ENDPOINT_XFER_ISOC) in cdns3_transfer_completed()
1570 trace_cdns3_complete_trb(priv_ep, trb); in cdns3_transfer_completed()
1571 cdns3_ep_inc_deq(priv_ep); in cdns3_transfer_completed()
1572 trb = priv_ep->trb_pool + priv_ep->dequeue; in cdns3_transfer_completed()
1579 cdns3_select_ep(priv_dev, priv_ep->endpoint.address); in cdns3_transfer_completed()
1581 while (cdns3_trb_handled(priv_ep, priv_req)) { in cdns3_transfer_completed()
1586 trb = priv_ep->trb_pool + priv_ep->dequeue; in cdns3_transfer_completed()
1587 trace_cdns3_complete_trb(priv_ep, trb); in cdns3_transfer_completed()
1598 cdns3_ep_inc_deq(priv_ep); in cdns3_transfer_completed()
1603 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && priv_ep->dir) in cdns3_transfer_completed()
1604 request->actual /= priv_ep->interval; in cdns3_transfer_completed()
1606 cdns3_gadget_giveback(priv_ep, priv_req, 0); in cdns3_transfer_completed()
1613 if (priv_ep->type != USB_ENDPOINT_XFER_ISOC && in cdns3_transfer_completed()
1620 cdns3_select_ep(priv_dev, priv_ep->endpoint.address); in cdns3_transfer_completed()
1622 trb = priv_ep->trb_pool; in cdns3_transfer_completed()
1623 trace_cdns3_complete_trb(priv_ep, trb); in cdns3_transfer_completed()
1633 (request->num_sgs == (priv_ep->stream_sg_idx + 1))) { in cdns3_transfer_completed()
1634 priv_ep->stream_sg_idx = 0; in cdns3_transfer_completed()
1635 cdns3_gadget_giveback(priv_ep, priv_req, 0); in cdns3_transfer_completed()
1637 priv_ep->stream_sg_idx++; in cdns3_transfer_completed()
1638 cdns3_ep_run_stream_transfer(priv_ep, request); in cdns3_transfer_completed()
1643 priv_ep->flags &= ~EP_PENDING_REQUEST; in cdns3_transfer_completed()
1646 if (!(priv_ep->flags & EP_STALLED) && in cdns3_transfer_completed()
1647 !(priv_ep->flags & EP_STALL_PENDING)) in cdns3_transfer_completed()
1648 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_transfer_completed()
1651 void cdns3_rearm_transfer(struct cdns3_endpoint *priv_ep, u8 rearm) in cdns3_rearm_transfer() argument
1653 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_rearm_transfer()
1655 cdns3_wa1_restore_cycle_bit(priv_ep); in cdns3_rearm_transfer()
1658 trace_cdns3_ring(priv_ep); in cdns3_rearm_transfer()
1666 trace_cdns3_doorbell_epx(priv_ep->name, in cdns3_rearm_transfer()
1671 static void cdns3_reprogram_tdl(struct cdns3_endpoint *priv_ep) in cdns3_reprogram_tdl() argument
1673 u16 tdl = priv_ep->pending_tdl; in cdns3_reprogram_tdl()
1674 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_reprogram_tdl()
1678 priv_ep->pending_tdl -= EP_CMD_TDL_MAX; in cdns3_reprogram_tdl()
1680 priv_ep->pending_tdl = 0; in cdns3_reprogram_tdl()
1692 static int cdns3_check_ep_interrupt_proceed(struct cdns3_endpoint *priv_ep) in cdns3_check_ep_interrupt_proceed() argument
1694 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_check_ep_interrupt_proceed()
1700 cdns3_select_ep(priv_dev, priv_ep->endpoint.address); in cdns3_check_ep_interrupt_proceed()
1702 trace_cdns3_epx_irq(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1707 if ((ep_sts_reg & EP_STS_PRIME) && priv_ep->use_streams) { in cdns3_check_ep_interrupt_proceed()
1722 EP_CMD_ERDY_SID(priv_ep->last_stream_id), in cdns3_check_ep_interrupt_proceed()
1726 priv_ep->prime_flag = true; in cdns3_check_ep_interrupt_proceed()
1728 pending_request = cdns3_next_request(&priv_ep->pending_req_list); in cdns3_check_ep_interrupt_proceed()
1729 deferred_request = cdns3_next_request(&priv_ep->deferred_req_list); in cdns3_check_ep_interrupt_proceed()
1732 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1738 if (priv_ep->flags & EP_STALL_PENDING && in cdns3_check_ep_interrupt_proceed()
1741 cdns3_ep_stall_flush(priv_ep); in cdns3_check_ep_interrupt_proceed()
1751 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && in cdns3_check_ep_interrupt_proceed()
1752 !priv_ep->wa1_set) { in cdns3_check_ep_interrupt_proceed()
1753 if (!priv_ep->dir) { in cdns3_check_ep_interrupt_proceed()
1758 priv_ep->flags &= ~EP_QUIRK_ISO_OUT_EN; in cdns3_check_ep_interrupt_proceed()
1759 priv_ep->flags |= EP_UPDATE_EP_TRBADDR; in cdns3_check_ep_interrupt_proceed()
1761 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1762 } else if (!(priv_ep->flags & EP_STALLED) && in cdns3_check_ep_interrupt_proceed()
1763 !(priv_ep->flags & EP_STALL_PENDING)) { in cdns3_check_ep_interrupt_proceed()
1764 if (priv_ep->flags & EP_DEFERRED_DRDY) { in cdns3_check_ep_interrupt_proceed()
1765 priv_ep->flags &= ~EP_DEFERRED_DRDY; in cdns3_check_ep_interrupt_proceed()
1766 cdns3_start_all_request(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1768 cdns3_rearm_transfer(priv_ep, in cdns3_check_ep_interrupt_proceed()
1769 priv_ep->wa1_set); in cdns3_check_ep_interrupt_proceed()
1776 if (priv_ep->flags & EP_QUIRK_EXTRA_BUF_EN) { in cdns3_check_ep_interrupt_proceed()
1778 priv_ep->flags |= EP_QUIRK_END_TRANSFER; in cdns3_check_ep_interrupt_proceed()
1780 priv_ep->flags &= ~EP_QUIRK_END_TRANSFER; in cdns3_check_ep_interrupt_proceed()
1783 if (!priv_ep->use_streams) { in cdns3_check_ep_interrupt_proceed()
1786 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1787 } else if ((priv_ep->flags & EP_TDLCHK_EN) & in cdns3_check_ep_interrupt_proceed()
1788 priv_ep->pending_tdl) { in cdns3_check_ep_interrupt_proceed()
1790 cdns3_reprogram_tdl(priv_ep); in cdns3_check_ep_interrupt_proceed()
1792 } else if (priv_ep->dir == USB_DIR_OUT) { in cdns3_check_ep_interrupt_proceed()
1793 priv_ep->ep_sts_pending |= ep_sts_reg; in cdns3_check_ep_interrupt_proceed()
1795 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1803 if (priv_ep->dir == USB_DIR_OUT && (ep_sts_reg & EP_STS_MD_EXIT) && in cdns3_check_ep_interrupt_proceed()
1804 (priv_ep->ep_sts_pending & EP_STS_IOT) && priv_ep->use_streams) { in cdns3_check_ep_interrupt_proceed()
1805 priv_ep->ep_sts_pending = 0; in cdns3_check_ep_interrupt_proceed()
1806 cdns3_transfer_completed(priv_dev, priv_ep); in cdns3_check_ep_interrupt_proceed()
1816 !(priv_ep->flags & EP_STALLED)) in cdns3_check_ep_interrupt_proceed()
1817 cdns3_wa2_descmissing_packet(priv_ep); in cdns3_check_ep_interrupt_proceed()
2058 struct cdns3_endpoint *priv_ep) in cdns3_configure_dmult() argument
2069 if (priv_dev->dev_ver >= DEV_VER_V3 && priv_ep) { in cdns3_configure_dmult()
2072 if (priv_ep->dir) in cdns3_configure_dmult()
2073 mask = BIT(priv_ep->num + 16); in cdns3_configure_dmult()
2075 mask = BIT(priv_ep->num); in cdns3_configure_dmult()
2077 if (priv_ep->type != USB_ENDPOINT_XFER_ISOC && !priv_ep->dir) { in cdns3_configure_dmult()
2084 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && !priv_ep->dir) in cdns3_configure_dmult()
2096 int cdns3_ep_config(struct cdns3_endpoint *priv_ep, bool enable) in cdns3_ep_config() argument
2098 bool is_iso_ep = (priv_ep->type == USB_ENDPOINT_XFER_ISOC); in cdns3_ep_config()
2099 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_ep_config()
2100 u32 bEndpointAddress = priv_ep->num | priv_ep->dir; in cdns3_ep_config()
2101 u32 max_packet_size = priv_ep->wMaxPacketSize; in cdns3_ep_config()
2102 u8 maxburst = priv_ep->bMaxBurst; in cdns3_ep_config()
2109 cdns3_configure_dmult(priv_dev, priv_ep); in cdns3_ep_config()
2111 switch (priv_ep->type) { in cdns3_ep_config()
2115 if (priv_dev->dev_ver >= DEV_VER_V2 && !priv_ep->dir) in cdns3_ep_config()
2121 if (priv_dev->dev_ver >= DEV_VER_V2 && !priv_ep->dir) in cdns3_ep_config()
2126 buffering = (priv_ep->bMaxBurst + 1) * (priv_ep->mult + 1) - 1; in cdns3_ep_config()
2137 if (priv_ep->type != USB_ENDPOINT_XFER_ISOC) { in cdns3_ep_config()
2148 priv_ep->trb_burst_size = 128; in cdns3_ep_config()
2150 priv_ep->trb_burst_size = 64; in cdns3_ep_config()
2152 priv_ep->trb_burst_size = 16; in cdns3_ep_config()
2165 priv_ep->trb_burst_size = 16; in cdns3_ep_config()
2173 !!priv_ep->dir); in cdns3_ep_config()
2183 if (priv_ep->use_streams && priv_dev->gadget.speed >= USB_SPEED_SUPER) { in cdns3_ep_config()
2185 u32 mask = BIT(priv_ep->num + (priv_ep->dir ? 16 : 0)); in cdns3_ep_config()
2200 EP_CFG_MULT(priv_ep->mult) | /* must match EP setting */ in cdns3_ep_config()
2206 priv_ep->flags |= EP_CONFIGURED; in cdns3_ep_config()
2209 priv_ep->name, ep_cfg); in cdns3_ep_config()
2216 struct cdns3_endpoint *priv_ep) in cdns3_ep_dir_is_correct() argument
2218 return (priv_ep->endpoint.caps.dir_in && usb_endpoint_dir_in(desc)) || in cdns3_ep_dir_is_correct()
2219 (priv_ep->endpoint.caps.dir_out && usb_endpoint_dir_out(desc)); in cdns3_ep_dir_is_correct()
2227 struct cdns3_endpoint *priv_ep; in cdns3_find_available_ep() local
2239 priv_ep = ep_to_cdns3_ep(ep); in cdns3_find_available_ep()
2240 if (cdns3_ep_dir_is_correct(desc, priv_ep)) { in cdns3_find_available_ep()
2241 if (!(priv_ep->flags & EP_CLAIMED)) { in cdns3_find_available_ep()
2242 priv_ep->num = num; in cdns3_find_available_ep()
2243 return priv_ep; in cdns3_find_available_ep()
2273 struct cdns3_endpoint *priv_ep; in cdns3_gadget_match_ep() local
2276 priv_ep = cdns3_find_available_ep(priv_dev, desc); in cdns3_gadget_match_ep()
2277 if (IS_ERR(priv_ep)) { in cdns3_gadget_match_ep()
2282 dev_dbg(priv_dev->dev, "match endpoint: %s\n", priv_ep->name); in cdns3_gadget_match_ep()
2285 priv_ep->endpoint.desc = desc; in cdns3_gadget_match_ep()
2286 priv_ep->dir = usb_endpoint_dir_in(desc) ? USB_DIR_IN : USB_DIR_OUT; in cdns3_gadget_match_ep()
2287 priv_ep->type = usb_endpoint_type(desc); in cdns3_gadget_match_ep()
2288 priv_ep->flags |= EP_CLAIMED; in cdns3_gadget_match_ep()
2289 priv_ep->interval = desc->bInterval ? BIT(desc->bInterval - 1) : 0; in cdns3_gadget_match_ep()
2290 priv_ep->wMaxPacketSize = usb_endpoint_maxp(desc); in cdns3_gadget_match_ep()
2291 priv_ep->mult = USB_EP_MAXP_MULT(priv_ep->wMaxPacketSize); in cdns3_gadget_match_ep()
2292 priv_ep->wMaxPacketSize &= USB_ENDPOINT_MAXP_MASK; in cdns3_gadget_match_ep()
2293 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && comp_desc) { in cdns3_gadget_match_ep()
2294 priv_ep->mult = USB_SS_MULT(comp_desc->bmAttributes) - 1; in cdns3_gadget_match_ep()
2295 priv_ep->bMaxBurst = comp_desc->bMaxBurst; in cdns3_gadget_match_ep()
2299 return &priv_ep->endpoint; in cdns3_gadget_match_ep()
2312 struct cdns3_endpoint *priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_alloc_request() local
2319 priv_req->priv_ep = priv_ep; in cdns3_gadget_ep_alloc_request()
2352 struct cdns3_endpoint *priv_ep; in cdns3_gadget_ep_enable() local
2367 priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_enable()
2368 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_enable()
2369 comp_desc = priv_ep->endpoint.comp_desc; in cdns3_gadget_ep_enable()
2381 if (dev_WARN_ONCE(priv_dev->dev, priv_ep->flags & EP_ENABLED, in cdns3_gadget_ep_enable()
2382 "%s is already enabled\n", priv_ep->name)) in cdns3_gadget_ep_enable()
2387 priv_ep->endpoint.desc = desc; in cdns3_gadget_ep_enable()
2388 priv_ep->type = usb_endpoint_type(desc); in cdns3_gadget_ep_enable()
2389 priv_ep->interval = desc->bInterval ? BIT(desc->bInterval - 1) : 0; in cdns3_gadget_ep_enable()
2391 if (priv_ep->interval > ISO_MAX_INTERVAL && in cdns3_gadget_ep_enable()
2392 priv_ep->type == USB_ENDPOINT_XFER_ISOC) { in cdns3_gadget_ep_enable()
2400 bEndpointAddress = priv_ep->num | priv_ep->dir; in cdns3_gadget_ep_enable()
2411 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC && !priv_ep->dir) in cdns3_gadget_ep_enable()
2423 priv_ep->use_streams = true; in cdns3_gadget_ep_enable()
2424 ret = cdns3_ep_config(priv_ep, enable); in cdns3_gadget_ep_enable()
2428 ret = cdns3_ep_config(priv_ep, enable); in cdns3_gadget_ep_enable()
2434 ret = cdns3_allocate_trb_pool(priv_ep); in cdns3_gadget_ep_enable()
2438 bEndpointAddress = priv_ep->num | priv_ep->dir; in cdns3_gadget_ep_enable()
2441 trace_cdns3_gadget_ep_enable(priv_ep); in cdns3_gadget_ep_enable()
2450 cdns3_free_trb_pool(priv_ep); in cdns3_gadget_ep_enable()
2460 cdns3_wa2_enable_detection(priv_dev, priv_ep, reg); in cdns3_gadget_ep_enable()
2465 priv_ep->flags &= ~(EP_PENDING_REQUEST | EP_STALLED | EP_STALL_PENDING | in cdns3_gadget_ep_enable()
2467 priv_ep->flags |= EP_ENABLED | EP_UPDATE_EP_TRBADDR; in cdns3_gadget_ep_enable()
2468 priv_ep->wa1_set = 0; in cdns3_gadget_ep_enable()
2469 priv_ep->enqueue = 0; in cdns3_gadget_ep_enable()
2470 priv_ep->dequeue = 0; in cdns3_gadget_ep_enable()
2472 priv_ep->pcs = !!EP_STS_CCS(reg); in cdns3_gadget_ep_enable()
2473 priv_ep->ccs = !!EP_STS_CCS(reg); in cdns3_gadget_ep_enable()
2475 priv_ep->free_trbs = priv_ep->num_trbs - 1; in cdns3_gadget_ep_enable()
2490 struct cdns3_endpoint *priv_ep; in cdns3_gadget_ep_disable() local
2504 priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_disable()
2505 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_disable()
2507 if (dev_WARN_ONCE(priv_dev->dev, !(priv_ep->flags & EP_ENABLED), in cdns3_gadget_ep_disable()
2508 "%s is already disabled\n", priv_ep->name)) in cdns3_gadget_ep_disable()
2513 trace_cdns3_gadget_ep_disable(priv_ep); in cdns3_gadget_ep_disable()
2535 priv_ep->name); in cdns3_gadget_ep_disable()
2537 while (!list_empty(&priv_ep->pending_req_list)) { in cdns3_gadget_ep_disable()
2538 request = cdns3_next_request(&priv_ep->pending_req_list); in cdns3_gadget_ep_disable()
2540 cdns3_gadget_giveback(priv_ep, to_cdns3_request(request), in cdns3_gadget_ep_disable()
2544 while (!list_empty(&priv_ep->wa2_descmiss_req_list)) { in cdns3_gadget_ep_disable()
2545 priv_req = cdns3_next_priv_request(&priv_ep->wa2_descmiss_req_list); in cdns3_gadget_ep_disable()
2549 cdns3_gadget_ep_free_request(&priv_ep->endpoint, in cdns3_gadget_ep_disable()
2551 --priv_ep->wa2_counter; in cdns3_gadget_ep_disable()
2554 while (!list_empty(&priv_ep->deferred_req_list)) { in cdns3_gadget_ep_disable()
2555 request = cdns3_next_request(&priv_ep->deferred_req_list); in cdns3_gadget_ep_disable()
2557 cdns3_gadget_giveback(priv_ep, to_cdns3_request(request), in cdns3_gadget_ep_disable()
2561 priv_ep->descmis_req = NULL; in cdns3_gadget_ep_disable()
2564 priv_ep->flags &= ~EP_ENABLED; in cdns3_gadget_ep_disable()
2565 priv_ep->use_streams = false; in cdns3_gadget_ep_disable()
2584 struct cdns3_endpoint *priv_ep = ep_to_cdns3_ep(ep); in __cdns3_gadget_ep_queue() local
2585 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_queue()
2595 ret = cdns3_wa2_gadget_ep_queue(priv_dev, priv_ep, in __cdns3_gadget_ep_queue()
2613 list_add_tail(&request->list, &priv_ep->deferred_req_list); in __cdns3_gadget_ep_queue()
2624 !(priv_ep->flags & EP_STALLED) && in __cdns3_gadget_ep_queue()
2625 !(priv_ep->flags & EP_STALL_PENDING)) in __cdns3_gadget_ep_queue()
2626 cdns3_start_all_request(priv_dev, priv_ep); in __cdns3_gadget_ep_queue()
2628 if (priv_dev->hw_configured_flag && priv_ep->prime_flag) in __cdns3_gadget_ep_queue()
2629 cdns3_start_all_request(priv_dev, priv_ep); in __cdns3_gadget_ep_queue()
2639 struct cdns3_endpoint *priv_ep; in cdns3_gadget_ep_queue() local
2647 priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_queue()
2648 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_queue()
2666 priv_ep->name); in cdns3_gadget_ep_queue()
2684 struct cdns3_endpoint *priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_dequeue() local
2697 priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_dequeue()
2707 list_for_each_entry_safe(req, req_temp, &priv_ep->pending_req_list, in cdns3_gadget_ep_dequeue()
2715 list_for_each_entry_safe(req, req_temp, &priv_ep->deferred_req_list, in cdns3_gadget_ep_dequeue()
2735 link_trb->buffer = cpu_to_le32(TRB_BUFFER(priv_ep->trb_pool_dma + in cdns3_gadget_ep_dequeue()
2740 if (priv_ep->wa1_trb == priv_req->trb) in cdns3_gadget_ep_dequeue()
2741 cdns3_wa1_restore_cycle_bit(priv_ep); in cdns3_gadget_ep_dequeue()
2744 cdns3_gadget_giveback(priv_ep, priv_req, -ECONNRESET); in cdns3_gadget_ep_dequeue()
2746 req = cdns3_next_request(&priv_ep->pending_req_list); in cdns3_gadget_ep_dequeue()
2748 cdns3_rearm_transfer(priv_ep, 1); in cdns3_gadget_ep_dequeue()
2760 void __cdns3_gadget_ep_set_halt(struct cdns3_endpoint *priv_ep) in __cdns3_gadget_ep_set_halt() argument
2762 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_set_halt()
2764 trace_cdns3_halt(priv_ep, 1, 0); in __cdns3_gadget_ep_set_halt()
2766 if (!(priv_ep->flags & EP_STALLED)) { in __cdns3_gadget_ep_set_halt()
2770 cdns3_ep_stall_flush(priv_ep); in __cdns3_gadget_ep_set_halt()
2772 priv_ep->flags |= EP_STALL_PENDING; in __cdns3_gadget_ep_set_halt()
2781 int __cdns3_gadget_ep_clear_halt(struct cdns3_endpoint *priv_ep) in __cdns3_gadget_ep_clear_halt() argument
2783 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in __cdns3_gadget_ep_clear_halt()
2791 trace_cdns3_halt(priv_ep, 0, 0); in __cdns3_gadget_ep_clear_halt()
2793 request = cdns3_next_request(&priv_ep->pending_req_list); in __cdns3_gadget_ep_clear_halt()
2811 priv_ep->flags &= ~(EP_STALLED | EP_STALL_PENDING); in __cdns3_gadget_ep_clear_halt()
2817 cdns3_rearm_transfer(priv_ep, 1); in __cdns3_gadget_ep_clear_halt()
2820 cdns3_start_all_request(priv_dev, priv_ep); in __cdns3_gadget_ep_clear_halt()
2833 struct cdns3_endpoint *priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_ep_set_halt() local
2834 struct cdns3_device *priv_dev = priv_ep->cdns3_dev; in cdns3_gadget_ep_set_halt()
2838 if (!(priv_ep->flags & EP_ENABLED)) in cdns3_gadget_ep_set_halt()
2846 priv_ep->flags &= ~EP_WEDGE; in cdns3_gadget_ep_set_halt()
2847 ret = __cdns3_gadget_ep_clear_halt(priv_ep); in cdns3_gadget_ep_set_halt()
2849 __cdns3_gadget_ep_set_halt(priv_ep); in cdns3_gadget_ep_set_halt()
3034 struct cdns3_endpoint *priv_ep; in cdns3_gadget_udc_stop() local
3046 priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_udc_stop()
3047 bEndpointAddress = priv_ep->num | priv_ep->dir; in cdns3_gadget_udc_stop()
3053 priv_ep->flags &= ~EP_CLAIMED; in cdns3_gadget_udc_stop()
3077 struct cdns3_endpoint *priv_ep; in cdns3_gadget_check_config() local
3086 priv_ep = ep_to_cdns3_ep(ep); in cdns3_gadget_check_config()
3087 if (!(priv_ep->flags & EP_CLAIMED)) in cdns3_gadget_check_config()
3090 n = (priv_ep->mult + 1) * (priv_ep->bMaxBurst + 1); in cdns3_gadget_check_config()
3097 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC) in cdns3_gadget_check_config()
3102 if (priv_ep->type == USB_ENDPOINT_XFER_ISOC) in cdns3_gadget_check_config()
3152 struct cdns3_endpoint *priv_ep; in cdns3_init_eps() local
3177 priv_ep = devm_kzalloc(priv_dev->dev, sizeof(*priv_ep), in cdns3_init_eps()
3179 if (!priv_ep) in cdns3_init_eps()
3183 priv_ep->cdns3_dev = priv_dev; in cdns3_init_eps()
3184 priv_dev->eps[i] = priv_ep; in cdns3_init_eps()
3185 priv_ep->num = ep_number; in cdns3_init_eps()
3186 priv_ep->dir = ep_dir ? USB_DIR_IN : USB_DIR_OUT; in cdns3_init_eps()
3189 ret = cdns3_init_ep0(priv_dev, priv_ep); in cdns3_init_eps()
3195 snprintf(priv_ep->name, sizeof(priv_ep->name), "ep%d%s", in cdns3_init_eps()
3197 priv_ep->endpoint.name = priv_ep->name; in cdns3_init_eps()
3199 usb_ep_set_maxpacket_limit(&priv_ep->endpoint, in cdns3_init_eps()
3201 priv_ep->endpoint.max_streams = CDNS3_EP_MAX_STREAMS; in cdns3_init_eps()
3202 priv_ep->endpoint.ops = &cdns3_gadget_ep_ops; in cdns3_init_eps()
3204 priv_ep->endpoint.caps.dir_in = 1; in cdns3_init_eps()
3206 priv_ep->endpoint.caps.dir_out = 1; in cdns3_init_eps()
3209 priv_ep->endpoint.caps.type_iso = 1; in cdns3_init_eps()
3211 priv_ep->endpoint.caps.type_bulk = 1; in cdns3_init_eps()
3212 priv_ep->endpoint.caps.type_int = 1; in cdns3_init_eps()
3214 list_add_tail(&priv_ep->endpoint.ep_list, in cdns3_init_eps()
3218 priv_ep->flags = 0; in cdns3_init_eps()
3221 priv_ep->name, in cdns3_init_eps()
3222 priv_ep->endpoint.caps.type_bulk ? "BULK, INT" : "", in cdns3_init_eps()
3223 priv_ep->endpoint.caps.type_iso ? "ISO" : ""); in cdns3_init_eps()
3225 INIT_LIST_HEAD(&priv_ep->pending_req_list); in cdns3_init_eps()
3226 INIT_LIST_HEAD(&priv_ep->deferred_req_list); in cdns3_init_eps()
3227 INIT_LIST_HEAD(&priv_ep->wa2_descmiss_req_list); in cdns3_init_eps()