patch "usb: musb: cppi41: don't check early-TX-interrupt for Isoch transfer" added to usb-linus
Subsystems (3)
This is a note to let you know that I've just added the patch titled
usb: musb: cppi41: don't check early-TX-interrupt for Isoch transfer
to my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
Quoted 1 line
From
0090114d336a9604aa2d90bc83f20f7cd121b76cMon Sep 17 00:00:00 2001
From: Bin Liu <[email protected]>
Date: Fri, 10 Mar 2017 14:43:35 -0600
Subject: usb: musb: cppi41: don't check early-TX-interrupt for Isoch transfer
The CPPI 4.1 driver polls register to workaround the premature TX interrupt issue, but it causes audio playback underrun when triggered in Isoch transfers.
Isoch doesn't do back-to-back transfers, the TX should be done by the time the next transfer is scheduled. So skip this polling workaround for Isoch transfer.
--- drivers/usb/musb/musb_cppi41.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-)
drivers/usb/musb/musb_cppi41.c +21 -2
@@ -238,8 +238,27 @@ static void cppi41_dma_callback(void *private_data, transferred < cppi41_channel->packet_sz) cppi41_channel->prog_len =0 ; -if (cppi41_channel->is_tx) - empty =musb_is_tx_fifo_empty (hw_ep); +if (cppi41_channel->is_tx) { +u8 type; + +if (is_host_active (musb)) + type = hw_ep->out_qh->type; +else + type = hw_ep->ep_in.type; + +if (type ==USB_ENDPOINT_XFER_ISOC ) +/* +* Don't use the early-TX-interrupt workaround below +* for Isoch transfter. Since Isoch are periodic +* transfer, by the time the next transfer is +* scheduled, the current one should be done already. +* +* This avoids audio playback underrun issue. +*/ + empty = true; +else + empty =musb_is_tx_fifo_empty (hw_ep); + }if (!cppi41_channel->is_tx || empty) {cppi41_trans_done (cppi41_channel);
Signature · 1 line
2.12.0