|
@@ -982,6 +982,10 @@ static int usbhsf_dma_prepare_pop_with_usb_dmac(struct usbhs_pkt *pkt,
|
|
|
if ((uintptr_t)pkt->buf & (USBHS_USB_DMAC_XFER_SIZE - 1))
|
|
|
goto usbhsf_pio_prepare_pop;
|
|
|
|
|
|
+ /* return at this time if the pipe is running */
|
|
|
+ if (usbhs_pipe_is_running(pipe))
|
|
|
+ return 0;
|
|
|
+
|
|
|
usbhs_pipe_config_change_bfre(pipe, 1);
|
|
|
|
|
|
ret = usbhsf_fifo_select(pipe, fifo, 0);
|
|
@@ -1172,6 +1176,7 @@ static int usbhsf_dma_pop_done_with_usb_dmac(struct usbhs_pkt *pkt,
|
|
|
usbhsf_fifo_clear(pipe, fifo);
|
|
|
pkt->actual = usbhs_dma_calc_received_size(pkt, chan, rcv_len);
|
|
|
|
|
|
+ usbhs_pipe_running(pipe, 0);
|
|
|
usbhsf_dma_stop(pipe, fifo);
|
|
|
usbhsf_dma_unmap(pkt);
|
|
|
usbhsf_fifo_unselect(pipe, pipe->fifo);
|