mirror of
https://github.com/torvalds/linux.git
synced 2024-11-07 04:32:03 +00:00
usb: musb: set AUTOSET for full speed bulk DMA transfer in host mode
The "mult" factor is not updated properly for the can_bulk_split() case. The AUTOSET bit in the TXCSR is not being set if the "mult" factor is greater than 1 for the High Bandwidth ISO case. But the "mult" factor is also greater than 1 in case of Full speed bulk transfers with the packet splitting in TXMAXP register enabled with can_bulk_split(). Without the AUTOSET the DMA transfers will not progress in mode1 [ balbi@ti.com : fix braces placement ] Signed-off-by: supriya karanth <supriya.karanth@stericsson.com> Signed-off-by: Praveena NADAHALLY <praveen.nadahally@stericsson.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
parent
bb3a2ef2eb
commit
f278628193
@ -634,7 +634,17 @@ static bool musb_tx_dma_program(struct dma_controller *dma,
|
||||
mode = 1;
|
||||
csr |= MUSB_TXCSR_DMAMODE | MUSB_TXCSR_DMAENAB;
|
||||
/* autoset shouldn't be set in high bandwidth */
|
||||
if (qh->hb_mult == 1)
|
||||
/*
|
||||
* Enable Autoset according to table
|
||||
* below
|
||||
* bulk_split hb_mult Autoset_Enable
|
||||
* 0 1 Yes(Normal)
|
||||
* 0 >1 No(High BW ISO)
|
||||
* 1 1 Yes(HS bulk)
|
||||
* 1 >1 Yes(FS bulk)
|
||||
*/
|
||||
if (qh->hb_mult == 1 || (qh->hb_mult > 1 &&
|
||||
can_bulk_split(hw_ep->musb, qh->type)))
|
||||
csr |= MUSB_TXCSR_AUTOSET;
|
||||
} else {
|
||||
mode = 0;
|
||||
@ -791,17 +801,19 @@ static void musb_ep_program(struct musb *musb, u8 epnum,
|
||||
/* protocol/endpoint/interval/NAKlimit */
|
||||
if (epnum) {
|
||||
musb_writeb(epio, MUSB_TXTYPE, qh->type_reg);
|
||||
if (musb->double_buffer_not_ok)
|
||||
if (musb->double_buffer_not_ok) {
|
||||
musb_writew(epio, MUSB_TXMAXP,
|
||||
hw_ep->max_packet_sz_tx);
|
||||
else if (can_bulk_split(musb, qh->type))
|
||||
} else if (can_bulk_split(musb, qh->type)) {
|
||||
qh->hb_mult = hw_ep->max_packet_sz_tx
|
||||
/ packet_sz;
|
||||
musb_writew(epio, MUSB_TXMAXP, packet_sz
|
||||
| ((hw_ep->max_packet_sz_tx /
|
||||
packet_sz) - 1) << 11);
|
||||
else
|
||||
| ((qh->hb_mult) - 1) << 11);
|
||||
} else {
|
||||
musb_writew(epio, MUSB_TXMAXP,
|
||||
qh->maxpacket |
|
||||
((qh->hb_mult - 1) << 11));
|
||||
}
|
||||
musb_writeb(epio, MUSB_TXINTERVAL, qh->intv_reg);
|
||||
} else {
|
||||
musb_writeb(epio, MUSB_NAKLIMIT0, qh->intv_reg);
|
||||
|
Loading…
Reference in New Issue
Block a user