1
2
3
4
5
6
7
8
9
10
11#include <linux/module.h>
12#include <linux/kernel.h>
13#include <linux/delay.h>
14#include <linux/sched.h>
15#include <linux/slab.h>
16#include <linux/errno.h>
17#include <linux/list.h>
18#include <linux/dma-mapping.h>
19
20#include "musb_core.h"
21#include "musb_host.h"
22#include "musb_trace.h"
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73struct musb *hcd_to_musb(struct usb_hcd *hcd)
74{
75 return *(struct musb **) hcd->hcd_priv;
76}
77
78
79static void musb_ep_program(struct musb *musb, u8 epnum,
80 struct urb *urb, int is_out,
81 u8 *buf, u32 offset, u32 len);
82
83
84
85
86static void musb_h_tx_flush_fifo(struct musb_hw_ep *ep)
87{
88 struct musb *musb = ep->musb;
89 void __iomem *epio = ep->regs;
90 u16 csr;
91 int retries = 1000;
92
93 csr = musb_readw(epio, MUSB_TXCSR);
94 while (csr & MUSB_TXCSR_FIFONOTEMPTY) {
95 csr |= MUSB_TXCSR_FLUSHFIFO | MUSB_TXCSR_TXPKTRDY;
96 musb_writew(epio, MUSB_TXCSR, csr);
97 csr = musb_readw(epio, MUSB_TXCSR);
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113 if (dev_WARN_ONCE(musb->controller, retries-- < 1,
114 "Could not flush host TX%d fifo: csr: %04x\n",
115 ep->epnum, csr))
116 return;
117 mdelay(1);
118 }
119}
120
121static void musb_h_ep0_flush_fifo(struct musb_hw_ep *ep)
122{
123 void __iomem *epio = ep->regs;
124 u16 csr;
125 int retries = 5;
126
127
128 do {
129 csr = musb_readw(epio, MUSB_TXCSR);
130 if (!(csr & (MUSB_CSR0_TXPKTRDY | MUSB_CSR0_RXPKTRDY)))
131 break;
132 musb_writew(epio, MUSB_TXCSR, MUSB_CSR0_FLUSHFIFO);
133 csr = musb_readw(epio, MUSB_TXCSR);
134 udelay(10);
135 } while (--retries);
136
137 WARN(!retries, "Could not flush host TX%d fifo: csr: %04x\n",
138 ep->epnum, csr);
139
140
141 musb_writew(epio, MUSB_TXCSR, 0);
142}
143
144
145
146
147
148static inline void musb_h_tx_start(struct musb_hw_ep *ep)
149{
150 u16 txcsr;
151
152
153 if (ep->epnum) {
154 txcsr = musb_readw(ep->regs, MUSB_TXCSR);
155 txcsr |= MUSB_TXCSR_TXPKTRDY | MUSB_TXCSR_H_WZC_BITS;
156 musb_writew(ep->regs, MUSB_TXCSR, txcsr);
157 } else {
158 txcsr = MUSB_CSR0_H_SETUPPKT | MUSB_CSR0_TXPKTRDY;
159 musb_writew(ep->regs, MUSB_CSR0, txcsr);
160 }
161
162}
163
164static inline void musb_h_tx_dma_start(struct musb_hw_ep *ep)
165{
166 u16 txcsr;
167
168
169 txcsr = musb_readw(ep->regs, MUSB_TXCSR);
170 txcsr |= MUSB_TXCSR_DMAENAB | MUSB_TXCSR_H_WZC_BITS;
171 if (is_cppi_enabled(ep->musb))
172 txcsr |= MUSB_TXCSR_DMAMODE;
173 musb_writew(ep->regs, MUSB_TXCSR, txcsr);
174}
175
176static void musb_ep_set_qh(struct musb_hw_ep *ep, int is_in, struct musb_qh *qh)
177{
178 if (is_in != 0 || ep->is_shared_fifo)
179 ep->in_qh = qh;
180 if (is_in == 0 || ep->is_shared_fifo)
181 ep->out_qh = qh;
182}
183
184static struct musb_qh *musb_ep_get_qh(struct musb_hw_ep *ep, int is_in)
185{
186 return is_in ? ep->in_qh : ep->out_qh;
187}
188
189
190
191
192
193
194
195static void
196musb_start_urb(struct musb *musb, int is_in, struct musb_qh *qh)
197{
198 u32 len;
199 void __iomem *mbase = musb->mregs;
200 struct urb *urb = next_urb(qh);
201 void *buf = urb->transfer_buffer;
202 u32 offset = 0;
203 struct musb_hw_ep *hw_ep = qh->hw_ep;
204 int epnum = hw_ep->epnum;
205
206
207 qh->offset = 0;
208 qh->segsize = 0;
209
210
211 switch (qh->type) {
212 case USB_ENDPOINT_XFER_CONTROL:
213
214 is_in = 0;
215 musb->ep0_stage = MUSB_EP0_START;
216 buf = urb->setup_packet;
217 len = 8;
218 break;
219 case USB_ENDPOINT_XFER_ISOC:
220 qh->iso_idx = 0;
221 qh->frame = 0;
222 offset = urb->iso_frame_desc[0].offset;
223 len = urb->iso_frame_desc[0].length;
224 break;
225 default:
226
227 buf = urb->transfer_buffer + urb->actual_length;
228 len = urb->transfer_buffer_length - urb->actual_length;
229 }
230
231 trace_musb_urb_start(musb, urb);
232
233
234 musb_ep_set_qh(hw_ep, is_in, qh);
235 musb_ep_program(musb, epnum, urb, !is_in, buf, offset, len);
236
237
238 if (is_in)
239 return;
240
241
242 switch (qh->type) {
243 case USB_ENDPOINT_XFER_ISOC:
244 case USB_ENDPOINT_XFER_INT:
245 musb_dbg(musb, "check whether there's still time for periodic Tx");
246
247
248
249 if (1) {
250
251
252
253 qh->frame = 0;
254 goto start;
255 } else {
256 qh->frame = urb->start_frame;
257
258 musb_dbg(musb, "SOF for %d", epnum);
259#if 1
260 musb_writeb(mbase, MUSB_INTRUSBE, 0xff);
261#endif
262 }
263 break;
264 default:
265start:
266 musb_dbg(musb, "Start TX%d %s", epnum,
267 hw_ep->tx_channel ? "dma" : "pio");
268
269 if (!hw_ep->tx_channel)
270 musb_h_tx_start(hw_ep);
271 else if (is_cppi_enabled(musb) || tusb_dma_omap(musb))
272 musb_h_tx_dma_start(hw_ep);
273 }
274}
275
276
277static void musb_giveback(struct musb *musb, struct urb *urb, int status)
278__releases(musb->lock)
279__acquires(musb->lock)
280{
281 trace_musb_urb_gb(musb, urb);
282
283 usb_hcd_unlink_urb_from_ep(musb->hcd, urb);
284 spin_unlock(&musb->lock);
285 usb_hcd_giveback_urb(musb->hcd, urb, status);
286 spin_lock(&musb->lock);
287}
288
289
290static inline void musb_save_toggle(struct musb_qh *qh, int is_in,
291 struct urb *urb)
292{
293 void __iomem *epio = qh->hw_ep->regs;
294 u16 csr;
295
296
297
298
299
300
301 if (is_in)
302 csr = musb_readw(epio, MUSB_RXCSR) & MUSB_RXCSR_H_DATATOGGLE;
303 else
304 csr = musb_readw(epio, MUSB_TXCSR) & MUSB_TXCSR_H_DATATOGGLE;
305
306 usb_settoggle(urb->dev, qh->epnum, !is_in, csr ? 1 : 0);
307}
308
309
310
311
312
313
314
315
316static void musb_advance_schedule(struct musb *musb, struct urb *urb,
317 struct musb_hw_ep *hw_ep, int is_in)
318{
319 struct musb_qh *qh = musb_ep_get_qh(hw_ep, is_in);
320 struct musb_hw_ep *ep = qh->hw_ep;
321 int ready = qh->is_ready;
322 int status;
323
324 status = (urb->status == -EINPROGRESS) ? 0 : urb->status;
325
326
327 switch (qh->type) {
328 case USB_ENDPOINT_XFER_BULK:
329 case USB_ENDPOINT_XFER_INT:
330 musb_save_toggle(qh, is_in, urb);
331 break;
332 case USB_ENDPOINT_XFER_ISOC:
333 if (status == 0 && urb->error_count)
334 status = -EXDEV;
335 break;
336 }
337
338 qh->is_ready = 0;
339 musb_giveback(musb, urb, status);
340 qh->is_ready = ready;
341
342
343
344
345 if (list_empty(&qh->hep->urb_list)) {
346 struct list_head *head;
347 struct dma_controller *dma = musb->dma_controller;
348
349 if (is_in) {
350 ep->rx_reinit = 1;
351 if (ep->rx_channel) {
352 dma->channel_release(ep->rx_channel);
353 ep->rx_channel = NULL;
354 }
355 } else {
356 ep->tx_reinit = 1;
357 if (ep->tx_channel) {
358 dma->channel_release(ep->tx_channel);
359 ep->tx_channel = NULL;
360 }
361 }
362
363
364 musb_ep_set_qh(ep, is_in, NULL);
365 qh->hep->hcpriv = NULL;
366
367 switch (qh->type) {
368
369 case USB_ENDPOINT_XFER_CONTROL:
370 case USB_ENDPOINT_XFER_BULK:
371
372
373
374 if (qh->mux == 1) {
375 head = qh->ring.prev;
376 list_del(&qh->ring);
377 kfree(qh);
378 qh = first_qh(head);
379 break;
380 }
381
382 case USB_ENDPOINT_XFER_ISOC:
383 case USB_ENDPOINT_XFER_INT:
384
385
386
387
388 kfree(qh);
389 qh = NULL;
390 break;
391 }
392 }
393
394 if (qh != NULL && qh->is_ready) {
395 musb_dbg(musb, "... next ep%d %cX urb %p",
396 hw_ep->epnum, is_in ? 'R' : 'T', next_urb(qh));
397 musb_start_urb(musb, is_in, qh);
398 }
399}
400
401static u16 musb_h_flush_rxfifo(struct musb_hw_ep *hw_ep, u16 csr)
402{
403
404
405
406
407 csr |= MUSB_RXCSR_FLUSHFIFO | MUSB_RXCSR_RXPKTRDY;
408 csr &= ~(MUSB_RXCSR_H_REQPKT
409 | MUSB_RXCSR_H_AUTOREQ
410 | MUSB_RXCSR_AUTOCLEAR);
411
412
413 musb_writew(hw_ep->regs, MUSB_RXCSR, csr);
414 musb_writew(hw_ep->regs, MUSB_RXCSR, csr);
415
416
417 return musb_readw(hw_ep->regs, MUSB_RXCSR);
418}
419
420
421
422
423static bool
424musb_host_packet_rx(struct musb *musb, struct urb *urb, u8 epnum, u8 iso_err)
425{
426 u16 rx_count;
427 u8 *buf;
428 u16 csr;
429 bool done = false;
430 u32 length;
431 int do_flush = 0;
432 struct musb_hw_ep *hw_ep = musb->endpoints + epnum;
433 void __iomem *epio = hw_ep->regs;
434 struct musb_qh *qh = hw_ep->in_qh;
435 int pipe = urb->pipe;
436 void *buffer = urb->transfer_buffer;
437
438
439 rx_count = musb_readw(epio, MUSB_RXCOUNT);
440 musb_dbg(musb, "RX%d count %d, buffer %p len %d/%d", epnum, rx_count,
441 urb->transfer_buffer, qh->offset,
442 urb->transfer_buffer_length);
443
444
445 if (usb_pipeisoc(pipe)) {
446 int status = 0;
447 struct usb_iso_packet_descriptor *d;
448
449 if (iso_err) {
450 status = -EILSEQ;
451 urb->error_count++;
452 }
453
454 d = urb->iso_frame_desc + qh->iso_idx;
455 buf = buffer + d->offset;
456 length = d->length;
457 if (rx_count > length) {
458 if (status == 0) {
459 status = -EOVERFLOW;
460 urb->error_count++;
461 }
462 musb_dbg(musb, "OVERFLOW %d into %d", rx_count, length);
463 do_flush = 1;
464 } else
465 length = rx_count;
466 urb->actual_length += length;
467 d->actual_length = length;
468
469 d->status = status;
470
471
472 done = (++qh->iso_idx >= urb->number_of_packets);
473 } else {
474
475 buf = buffer + qh->offset;
476 length = urb->transfer_buffer_length - qh->offset;
477 if (rx_count > length) {
478 if (urb->status == -EINPROGRESS)
479 urb->status = -EOVERFLOW;
480 musb_dbg(musb, "OVERFLOW %d into %d", rx_count, length);
481 do_flush = 1;
482 } else
483 length = rx_count;
484 urb->actual_length += length;
485 qh->offset += length;
486
487
488 done = (urb->actual_length == urb->transfer_buffer_length)
489 || (rx_count < qh->maxpacket)
490 || (urb->status != -EINPROGRESS);
491 if (done
492 && (urb->status == -EINPROGRESS)
493 && (urb->transfer_flags & URB_SHORT_NOT_OK)
494 && (urb->actual_length
495 < urb->transfer_buffer_length))
496 urb->status = -EREMOTEIO;
497 }
498
499 musb_read_fifo(hw_ep, length, buf);
500
501 csr = musb_readw(epio, MUSB_RXCSR);
502 csr |= MUSB_RXCSR_H_WZC_BITS;
503 if (unlikely(do_flush))
504 musb_h_flush_rxfifo(hw_ep, csr);
505 else {
506
507 csr &= ~(MUSB_RXCSR_RXPKTRDY | MUSB_RXCSR_H_REQPKT);
508 if (!done)
509 csr |= MUSB_RXCSR_H_REQPKT;
510 musb_writew(epio, MUSB_RXCSR, csr);
511 }
512
513 return done;
514}
515
516
517
518
519
520
521
522
523
524static void
525musb_rx_reinit(struct musb *musb, struct musb_qh *qh, u8 epnum)
526{
527 struct musb_hw_ep *ep = musb->endpoints + epnum;
528 u16 csr;
529
530
531
532
533
534
535
536 if (ep->is_shared_fifo) {
537 csr = musb_readw(ep->regs, MUSB_TXCSR);
538 if (csr & MUSB_TXCSR_MODE) {
539 musb_h_tx_flush_fifo(ep);
540 csr = musb_readw(ep->regs, MUSB_TXCSR);
541 musb_writew(ep->regs, MUSB_TXCSR,
542 csr | MUSB_TXCSR_FRCDATATOG);
543 }
544
545
546
547
548
549 if (csr & MUSB_TXCSR_DMAMODE)
550 musb_writew(ep->regs, MUSB_TXCSR, MUSB_TXCSR_DMAMODE);
551 musb_writew(ep->regs, MUSB_TXCSR, 0);
552
553
554 }
555 csr = musb_readw(ep->regs, MUSB_RXCSR);
556 if (csr & MUSB_RXCSR_RXPKTRDY)
557 WARNING("rx%d, packet/%d ready?\n", ep->epnum,
558 musb_readw(ep->regs, MUSB_RXCOUNT));
559
560 musb_h_flush_rxfifo(ep, MUSB_RXCSR_CLRDATATOG);
561
562
563 if (musb->is_multipoint) {
564 musb_write_rxfunaddr(musb, epnum, qh->addr_reg);
565 musb_write_rxhubaddr(musb, epnum, qh->h_addr_reg);
566 musb_write_rxhubport(musb, epnum, qh->h_port_reg);
567 } else
568 musb_writeb(musb->mregs, MUSB_FADDR, qh->addr_reg);
569
570
571 musb_writeb(ep->regs, MUSB_RXTYPE, qh->type_reg);
572 musb_writeb(ep->regs, MUSB_RXINTERVAL, qh->intv_reg);
573
574
575
576
577 if (musb->double_buffer_not_ok)
578 musb_writew(ep->regs, MUSB_RXMAXP, ep->max_packet_sz_rx);
579 else
580 musb_writew(ep->regs, MUSB_RXMAXP,
581 qh->maxpacket | ((qh->hb_mult - 1) << 11));
582
583 ep->rx_reinit = 0;
584}
585
586static void musb_tx_dma_set_mode_mentor(struct dma_controller *dma,
587 struct musb_hw_ep *hw_ep, struct musb_qh *qh,
588 struct urb *urb, u32 offset,
589 u32 *length, u8 *mode)
590{
591 struct dma_channel *channel = hw_ep->tx_channel;
592 void __iomem *epio = hw_ep->regs;
593 u16 pkt_size = qh->maxpacket;
594 u16 csr;
595
596 if (*length > channel->max_len)
597 *length = channel->max_len;
598
599 csr = musb_readw(epio, MUSB_TXCSR);
600 if (*length > pkt_size) {
601 *mode = 1;
602 csr |= MUSB_TXCSR_DMAMODE | MUSB_TXCSR_DMAENAB;
603
604
605
606
607
608
609
610
611
612
613 if (qh->hb_mult == 1 || (qh->hb_mult > 1 &&
614 can_bulk_split(hw_ep->musb, qh->type)))
615 csr |= MUSB_TXCSR_AUTOSET;
616 } else {
617 *mode = 0;
618 csr &= ~(MUSB_TXCSR_AUTOSET | MUSB_TXCSR_DMAMODE);
619 csr |= MUSB_TXCSR_DMAENAB;
620 }
621 channel->desired_mode = *mode;
622 musb_writew(epio, MUSB_TXCSR, csr);
623}
624
625static void musb_tx_dma_set_mode_cppi_tusb(struct dma_controller *dma,
626 struct musb_hw_ep *hw_ep,
627 struct musb_qh *qh,
628 struct urb *urb,
629 u32 offset,
630 u32 *length,
631 u8 *mode)
632{
633 struct dma_channel *channel = hw_ep->tx_channel;
634
635 channel->actual_len = 0;
636
637
638
639
640
641 *mode = (urb->transfer_flags & URB_ZERO_PACKET) ? 1 : 0;
642}
643
644static bool musb_tx_dma_program(struct dma_controller *dma,
645 struct musb_hw_ep *hw_ep, struct musb_qh *qh,
646 struct urb *urb, u32 offset, u32 length)
647{
648 struct dma_channel *channel = hw_ep->tx_channel;
649 u16 pkt_size = qh->maxpacket;
650 u8 mode;
651
652 if (musb_dma_inventra(hw_ep->musb) || musb_dma_ux500(hw_ep->musb))
653 musb_tx_dma_set_mode_mentor(dma, hw_ep, qh, urb, offset,
654 &length, &mode);
655 else if (is_cppi_enabled(hw_ep->musb) || tusb_dma_omap(hw_ep->musb))
656 musb_tx_dma_set_mode_cppi_tusb(dma, hw_ep, qh, urb, offset,
657 &length, &mode);
658 else
659 return false;
660
661 qh->segsize = length;
662
663
664
665
666
667 wmb();
668
669 if (!dma->channel_program(channel, pkt_size, mode,
670 urb->transfer_dma + offset, length)) {
671 void __iomem *epio = hw_ep->regs;
672 u16 csr;
673
674 dma->channel_release(channel);
675 hw_ep->tx_channel = NULL;
676
677 csr = musb_readw(epio, MUSB_TXCSR);
678 csr &= ~(MUSB_TXCSR_AUTOSET | MUSB_TXCSR_DMAENAB);
679 musb_writew(epio, MUSB_TXCSR, csr | MUSB_TXCSR_H_WZC_BITS);
680 return false;
681 }
682 return true;
683}
684
685
686
687
688
689static void musb_ep_program(struct musb *musb, u8 epnum,
690 struct urb *urb, int is_out,
691 u8 *buf, u32 offset, u32 len)
692{
693 struct dma_controller *dma_controller;
694 struct dma_channel *dma_channel;
695 u8 dma_ok;
696 void __iomem *mbase = musb->mregs;
697 struct musb_hw_ep *hw_ep = musb->endpoints + epnum;
698 void __iomem *epio = hw_ep->regs;
699 struct musb_qh *qh = musb_ep_get_qh(hw_ep, !is_out);
700 u16 packet_sz = qh->maxpacket;
701 u8 use_dma = 1;
702 u16 csr;
703
704 musb_dbg(musb, "%s hw%d urb %p spd%d dev%d ep%d%s "
705 "h_addr%02x h_port%02x bytes %d",
706 is_out ? "-->" : "<--",
707 epnum, urb, urb->dev->speed,
708 qh->addr_reg, qh->epnum, is_out ? "out" : "in",
709 qh->h_addr_reg, qh->h_port_reg,
710 len);
711
712 musb_ep_select(mbase, epnum);
713
714 if (is_out && !len) {
715 use_dma = 0;
716 csr = musb_readw(epio, MUSB_TXCSR);
717 csr &= ~MUSB_TXCSR_DMAENAB;
718 musb_writew(epio, MUSB_TXCSR, csr);
719 hw_ep->tx_channel = NULL;
720 }
721
722
723 dma_controller = musb->dma_controller;
724 if (use_dma && is_dma_capable() && epnum && dma_controller) {
725 dma_channel = is_out ? hw_ep->tx_channel : hw_ep->rx_channel;
726 if (!dma_channel) {
727 dma_channel = dma_controller->channel_alloc(
728 dma_controller, hw_ep, is_out);
729 if (is_out)
730 hw_ep->tx_channel = dma_channel;
731 else
732 hw_ep->rx_channel = dma_channel;
733 }
734 } else
735 dma_channel = NULL;
736
737
738
739
740 if (is_out) {
741 u16 csr;
742 u16 int_txe;
743 u16 load_count;
744
745 csr = musb_readw(epio, MUSB_TXCSR);
746
747
748 int_txe = musb->intrtxe;
749 musb_writew(mbase, MUSB_INTRTXE, int_txe & ~(1 << epnum));
750
751
752 if (epnum) {
753
754
755
756
757
758
759 if (!hw_ep->tx_double_buffered)
760 musb_h_tx_flush_fifo(hw_ep);
761
762
763
764
765
766
767 csr &= ~(MUSB_TXCSR_H_NAKTIMEOUT
768 | MUSB_TXCSR_AUTOSET
769 | MUSB_TXCSR_DMAENAB
770 | MUSB_TXCSR_FRCDATATOG
771 | MUSB_TXCSR_H_RXSTALL
772 | MUSB_TXCSR_H_ERROR
773 | MUSB_TXCSR_TXPKTRDY
774 );
775 csr |= MUSB_TXCSR_MODE;
776
777 if (!hw_ep->tx_double_buffered) {
778 if (usb_gettoggle(urb->dev, qh->epnum, 1))
779 csr |= MUSB_TXCSR_H_WR_DATATOGGLE
780 | MUSB_TXCSR_H_DATATOGGLE;
781 else
782 csr |= MUSB_TXCSR_CLRDATATOG;
783 }
784
785 musb_writew(epio, MUSB_TXCSR, csr);
786
787 csr &= ~MUSB_TXCSR_DMAMODE;
788 musb_writew(epio, MUSB_TXCSR, csr);
789 csr = musb_readw(epio, MUSB_TXCSR);
790 } else {
791
792 musb_h_ep0_flush_fifo(hw_ep);
793 }
794
795
796 if (musb->is_multipoint) {
797 musb_write_txfunaddr(musb, epnum, qh->addr_reg);
798 musb_write_txhubaddr(musb, epnum, qh->h_addr_reg);
799 musb_write_txhubport(musb, epnum, qh->h_port_reg);
800
801 } else
802 musb_writeb(mbase, MUSB_FADDR, qh->addr_reg);
803
804
805 if (epnum) {
806 musb_writeb(epio, MUSB_TXTYPE, qh->type_reg);
807 if (musb->double_buffer_not_ok) {
808 musb_writew(epio, MUSB_TXMAXP,
809 hw_ep->max_packet_sz_tx);
810 } else if (can_bulk_split(musb, qh->type)) {
811 qh->hb_mult = hw_ep->max_packet_sz_tx
812 / packet_sz;
813 musb_writew(epio, MUSB_TXMAXP, packet_sz
814 | ((qh->hb_mult) - 1) << 11);
815 } else {
816 musb_writew(epio, MUSB_TXMAXP,
817 qh->maxpacket |
818 ((qh->hb_mult - 1) << 11));
819 }
820 musb_writeb(epio, MUSB_TXINTERVAL, qh->intv_reg);
821 } else {
822 musb_writeb(epio, MUSB_NAKLIMIT0, qh->intv_reg);
823 if (musb->is_multipoint)
824 musb_writeb(epio, MUSB_TYPE0,
825 qh->type_reg);
826 }
827
828 if (can_bulk_split(musb, qh->type))
829 load_count = min((u32) hw_ep->max_packet_sz_tx,
830 len);
831 else
832 load_count = min((u32) packet_sz, len);
833
834 if (dma_channel && musb_tx_dma_program(dma_controller,
835 hw_ep, qh, urb, offset, len))
836 load_count = 0;
837
838 if (load_count) {
839
840 qh->segsize = load_count;
841 if (!buf) {
842 sg_miter_start(&qh->sg_miter, urb->sg, 1,
843 SG_MITER_ATOMIC
844 | SG_MITER_FROM_SG);
845 if (!sg_miter_next(&qh->sg_miter)) {
846 dev_err(musb->controller,
847 "error: sg"
848 "list empty\n");
849 sg_miter_stop(&qh->sg_miter);
850 goto finish;
851 }
852 buf = qh->sg_miter.addr + urb->sg->offset +
853 urb->actual_length;
854 load_count = min_t(u32, load_count,
855 qh->sg_miter.length);
856 musb_write_fifo(hw_ep, load_count, buf);
857 qh->sg_miter.consumed = load_count;
858 sg_miter_stop(&qh->sg_miter);
859 } else
860 musb_write_fifo(hw_ep, load_count, buf);
861 }
862finish:
863
864 musb_writew(mbase, MUSB_INTRTXE, int_txe);
865
866
867 } else {
868 u16 csr;
869
870 if (hw_ep->rx_reinit) {
871 musb_rx_reinit(musb, qh, epnum);
872
873
874 if (usb_gettoggle(urb->dev, qh->epnum, 0))
875 csr = MUSB_RXCSR_H_WR_DATATOGGLE
876 | MUSB_RXCSR_H_DATATOGGLE;
877 else
878 csr = 0;
879 if (qh->type == USB_ENDPOINT_XFER_INT)
880 csr |= MUSB_RXCSR_DISNYET;
881
882 } else {
883 csr = musb_readw(hw_ep->regs, MUSB_RXCSR);
884
885 if (csr & (MUSB_RXCSR_RXPKTRDY
886 | MUSB_RXCSR_DMAENAB
887 | MUSB_RXCSR_H_REQPKT))
888 ERR("broken !rx_reinit, ep%d csr %04x\n",
889 hw_ep->epnum, csr);
890
891
892 csr &= MUSB_RXCSR_DISNYET;
893 }
894
895
896
897 if ((is_cppi_enabled(musb) || tusb_dma_omap(musb)) && dma_channel) {
898
899 dma_channel->actual_len = 0L;
900 qh->segsize = len;
901
902
903 musb_writew(hw_ep->regs, MUSB_RXCSR, csr);
904 csr = musb_readw(hw_ep->regs, MUSB_RXCSR);
905
906
907
908
909
910 dma_ok = dma_controller->channel_program(dma_channel,
911 packet_sz, !(urb->transfer_flags &
912 URB_SHORT_NOT_OK),
913 urb->transfer_dma + offset,
914 qh->segsize);
915 if (!dma_ok) {
916 dma_controller->channel_release(dma_channel);
917 hw_ep->rx_channel = dma_channel = NULL;
918 } else
919 csr |= MUSB_RXCSR_DMAENAB;
920 }
921
922 csr |= MUSB_RXCSR_H_REQPKT;
923 musb_dbg(musb, "RXCSR%d := %04x", epnum, csr);
924 musb_writew(hw_ep->regs, MUSB_RXCSR, csr);
925 csr = musb_readw(hw_ep->regs, MUSB_RXCSR);
926 }
927}
928
929
930
931
932static void musb_bulk_nak_timeout(struct musb *musb, struct musb_hw_ep *ep,
933 int is_in)
934{
935 struct dma_channel *dma;
936 struct urb *urb;
937 void __iomem *mbase = musb->mregs;
938 void __iomem *epio = ep->regs;
939 struct musb_qh *cur_qh, *next_qh;
940 u16 rx_csr, tx_csr;
941
942 musb_ep_select(mbase, ep->epnum);
943 if (is_in) {
944 dma = is_dma_capable() ? ep->rx_channel : NULL;
945
946
947
948
949
950
951 rx_csr = musb_readw(epio, MUSB_RXCSR);
952 rx_csr |= MUSB_RXCSR_H_WZC_BITS;
953 rx_csr &= ~MUSB_RXCSR_H_REQPKT;
954 musb_writew(epio, MUSB_RXCSR, rx_csr);
955 rx_csr &= ~MUSB_RXCSR_DATAERROR;
956 musb_writew(epio, MUSB_RXCSR, rx_csr);
957
958 cur_qh = first_qh(&musb->in_bulk);
959 } else {
960 dma = is_dma_capable() ? ep->tx_channel : NULL;
961
962
963 tx_csr = musb_readw(epio, MUSB_TXCSR);
964 tx_csr |= MUSB_TXCSR_H_WZC_BITS;
965 tx_csr &= ~MUSB_TXCSR_H_NAKTIMEOUT;
966 musb_writew(epio, MUSB_TXCSR, tx_csr);
967
968 cur_qh = first_qh(&musb->out_bulk);
969 }
970 if (cur_qh) {
971 urb = next_urb(cur_qh);
972 if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) {
973 dma->status = MUSB_DMA_STATUS_CORE_ABORT;
974 musb->dma_controller->channel_abort(dma);
975 urb->actual_length += dma->actual_len;
976 dma->actual_len = 0L;
977 }
978 musb_save_toggle(cur_qh, is_in, urb);
979
980 if (is_in) {
981
982 list_move_tail(&cur_qh->ring, &musb->in_bulk);
983
984
985 next_qh = first_qh(&musb->in_bulk);
986
987
988 ep->rx_reinit = 1;
989 } else {
990
991 list_move_tail(&cur_qh->ring, &musb->out_bulk);
992
993
994 next_qh = first_qh(&musb->out_bulk);
995
996
997 ep->tx_reinit = 1;
998 }
999 musb_start_urb(musb, is_in, next_qh);
1000 }
1001}
1002
1003
1004
1005
1006
1007static bool musb_h_ep0_continue(struct musb *musb, u16 len, struct urb *urb)
1008{
1009 bool more = false;
1010 u8 *fifo_dest = NULL;
1011 u16 fifo_count = 0;
1012 struct musb_hw_ep *hw_ep = musb->control_ep;
1013 struct musb_qh *qh = hw_ep->in_qh;
1014 struct usb_ctrlrequest *request;
1015
1016 switch (musb->ep0_stage) {
1017 case MUSB_EP0_IN:
1018 fifo_dest = urb->transfer_buffer + urb->actual_length;
1019 fifo_count = min_t(size_t, len, urb->transfer_buffer_length -
1020 urb->actual_length);
1021 if (fifo_count < len)
1022 urb->status = -EOVERFLOW;
1023
1024 musb_read_fifo(hw_ep, fifo_count, fifo_dest);
1025
1026 urb->actual_length += fifo_count;
1027 if (len < qh->maxpacket) {
1028
1029
1030
1031 } else if (urb->actual_length <
1032 urb->transfer_buffer_length)
1033 more = true;
1034 break;
1035 case MUSB_EP0_START:
1036 request = (struct usb_ctrlrequest *) urb->setup_packet;
1037
1038 if (!request->wLength) {
1039 musb_dbg(musb, "start no-DATA");
1040 break;
1041 } else if (request->bRequestType & USB_DIR_IN) {
1042 musb_dbg(musb, "start IN-DATA");
1043 musb->ep0_stage = MUSB_EP0_IN;
1044 more = true;
1045 break;
1046 } else {
1047 musb_dbg(musb, "start OUT-DATA");
1048 musb->ep0_stage = MUSB_EP0_OUT;
1049 more = true;
1050 }
1051
1052 case MUSB_EP0_OUT:
1053 fifo_count = min_t(size_t, qh->maxpacket,
1054 urb->transfer_buffer_length -
1055 urb->actual_length);
1056 if (fifo_count) {
1057 fifo_dest = (u8 *) (urb->transfer_buffer
1058 + urb->actual_length);
1059 musb_dbg(musb, "Sending %d byte%s to ep0 fifo %p",
1060 fifo_count,
1061 (fifo_count == 1) ? "" : "s",
1062 fifo_dest);
1063 musb_write_fifo(hw_ep, fifo_count, fifo_dest);
1064
1065 urb->actual_length += fifo_count;
1066 more = true;
1067 }
1068 break;
1069 default:
1070 ERR("bogus ep0 stage %d\n", musb->ep0_stage);
1071 break;
1072 }
1073
1074 return more;
1075}
1076
1077
1078
1079
1080
1081
1082
1083irqreturn_t musb_h_ep0_irq(struct musb *musb)
1084{
1085 struct urb *urb;
1086 u16 csr, len;
1087 int status = 0;
1088 void __iomem *mbase = musb->mregs;
1089 struct musb_hw_ep *hw_ep = musb->control_ep;
1090 void __iomem *epio = hw_ep->regs;
1091 struct musb_qh *qh = hw_ep->in_qh;
1092 bool complete = false;
1093 irqreturn_t retval = IRQ_NONE;
1094
1095
1096 urb = next_urb(qh);
1097
1098 musb_ep_select(mbase, 0);
1099 csr = musb_readw(epio, MUSB_CSR0);
1100 len = (csr & MUSB_CSR0_RXPKTRDY)
1101 ? musb_readb(epio, MUSB_COUNT0)
1102 : 0;
1103
1104 musb_dbg(musb, "<== csr0 %04x, qh %p, count %d, urb %p, stage %d",
1105 csr, qh, len, urb, musb->ep0_stage);
1106
1107
1108 if (MUSB_EP0_STATUS == musb->ep0_stage) {
1109 retval = IRQ_HANDLED;
1110 complete = true;
1111 }
1112
1113
1114 if (csr & MUSB_CSR0_H_RXSTALL) {
1115 musb_dbg(musb, "STALLING ENDPOINT");
1116 status = -EPIPE;
1117
1118 } else if (csr & MUSB_CSR0_H_ERROR) {
1119 musb_dbg(musb, "no response, csr0 %04x", csr);
1120 status = -EPROTO;
1121
1122 } else if (csr & MUSB_CSR0_H_NAKTIMEOUT) {
1123 musb_dbg(musb, "control NAK timeout");
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133 musb_writew(epio, MUSB_CSR0, 0);
1134 retval = IRQ_HANDLED;
1135 }
1136
1137 if (status) {
1138 musb_dbg(musb, "aborting");
1139 retval = IRQ_HANDLED;
1140 if (urb)
1141 urb->status = status;
1142 complete = true;
1143
1144
1145 if (csr & MUSB_CSR0_H_REQPKT) {
1146 csr &= ~MUSB_CSR0_H_REQPKT;
1147 musb_writew(epio, MUSB_CSR0, csr);
1148 csr &= ~MUSB_CSR0_H_NAKTIMEOUT;
1149 musb_writew(epio, MUSB_CSR0, csr);
1150 } else {
1151 musb_h_ep0_flush_fifo(hw_ep);
1152 }
1153
1154 musb_writeb(epio, MUSB_NAKLIMIT0, 0);
1155
1156
1157 musb_writew(epio, MUSB_CSR0, 0);
1158 }
1159
1160 if (unlikely(!urb)) {
1161
1162
1163 ERR("no URB for end 0\n");
1164
1165 musb_h_ep0_flush_fifo(hw_ep);
1166 goto done;
1167 }
1168
1169 if (!complete) {
1170
1171 if (musb_h_ep0_continue(musb, len, urb)) {
1172
1173 csr = (MUSB_EP0_IN == musb->ep0_stage)
1174 ? MUSB_CSR0_H_REQPKT : MUSB_CSR0_TXPKTRDY;
1175 } else {
1176
1177 if (usb_pipeout(urb->pipe)
1178 || !urb->transfer_buffer_length)
1179 csr = MUSB_CSR0_H_STATUSPKT
1180 | MUSB_CSR0_H_REQPKT;
1181 else
1182 csr = MUSB_CSR0_H_STATUSPKT
1183 | MUSB_CSR0_TXPKTRDY;
1184
1185
1186 csr |= MUSB_CSR0_H_DIS_PING;
1187
1188
1189 musb->ep0_stage = MUSB_EP0_STATUS;
1190
1191 musb_dbg(musb, "ep0 STATUS, csr %04x", csr);
1192
1193 }
1194 musb_writew(epio, MUSB_CSR0, csr);
1195 retval = IRQ_HANDLED;
1196 } else
1197 musb->ep0_stage = MUSB_EP0_IDLE;
1198
1199
1200 if (complete)
1201 musb_advance_schedule(musb, urb, hw_ep, 1);
1202done:
1203 return retval;
1204}
1205
1206
1207#ifdef CONFIG_USB_INVENTRA_DMA
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221#endif
1222
1223
1224void musb_host_tx(struct musb *musb, u8 epnum)
1225{
1226 int pipe;
1227 bool done = false;
1228 u16 tx_csr;
1229 size_t length = 0;
1230 size_t offset = 0;
1231 struct musb_hw_ep *hw_ep = musb->endpoints + epnum;
1232 void __iomem *epio = hw_ep->regs;
1233 struct musb_qh *qh = hw_ep->out_qh;
1234 struct urb *urb = next_urb(qh);
1235 u32 status = 0;
1236 void __iomem *mbase = musb->mregs;
1237 struct dma_channel *dma;
1238 bool transfer_pending = false;
1239
1240 musb_ep_select(mbase, epnum);
1241 tx_csr = musb_readw(epio, MUSB_TXCSR);
1242
1243
1244 if (!urb) {
1245 musb_dbg(musb, "extra TX%d ready, csr %04x", epnum, tx_csr);
1246 return;
1247 }
1248
1249 pipe = urb->pipe;
1250 dma = is_dma_capable() ? hw_ep->tx_channel : NULL;
1251 trace_musb_urb_tx(musb, urb);
1252 musb_dbg(musb, "OUT/TX%d end, csr %04x%s", epnum, tx_csr,
1253 dma ? ", dma" : "");
1254
1255
1256 if (tx_csr & MUSB_TXCSR_H_RXSTALL) {
1257
1258 musb_dbg(musb, "TX end %d stall", epnum);
1259
1260
1261 status = -EPIPE;
1262
1263 } else if (tx_csr & MUSB_TXCSR_H_ERROR) {
1264
1265 musb_dbg(musb, "TX 3strikes on ep=%d", epnum);
1266
1267 status = -ETIMEDOUT;
1268
1269 } else if (tx_csr & MUSB_TXCSR_H_NAKTIMEOUT) {
1270 if (USB_ENDPOINT_XFER_BULK == qh->type && qh->mux == 1
1271 && !list_is_singular(&musb->out_bulk)) {
1272 musb_dbg(musb, "NAK timeout on TX%d ep", epnum);
1273 musb_bulk_nak_timeout(musb, hw_ep, 0);
1274 } else {
1275 musb_dbg(musb, "TX ep%d device not responding", epnum);
1276
1277
1278
1279
1280
1281
1282
1283
1284 musb_ep_select(mbase, epnum);
1285 musb_writew(epio, MUSB_TXCSR,
1286 MUSB_TXCSR_H_WZC_BITS
1287 | MUSB_TXCSR_TXPKTRDY);
1288 }
1289 return;
1290 }
1291
1292done:
1293 if (status) {
1294 if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) {
1295 dma->status = MUSB_DMA_STATUS_CORE_ABORT;
1296 musb->dma_controller->channel_abort(dma);
1297 }
1298
1299
1300
1301
1302 musb_h_tx_flush_fifo(hw_ep);
1303 tx_csr &= ~(MUSB_TXCSR_AUTOSET
1304 | MUSB_TXCSR_DMAENAB
1305 | MUSB_TXCSR_H_ERROR
1306 | MUSB_TXCSR_H_RXSTALL
1307 | MUSB_TXCSR_H_NAKTIMEOUT
1308 );
1309
1310 musb_ep_select(mbase, epnum);
1311 musb_writew(epio, MUSB_TXCSR, tx_csr);
1312
1313 musb_writew(epio, MUSB_TXCSR, tx_csr);
1314 musb_writeb(epio, MUSB_TXINTERVAL, 0);
1315
1316 done = true;
1317 }
1318
1319
1320 if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) {
1321 musb_dbg(musb, "extra TX%d ready, csr %04x", epnum, tx_csr);
1322 return;
1323 }
1324
1325 if (is_dma_capable() && dma && !status) {
1326
1327
1328
1329
1330
1331
1332
1333
1334 if (tx_csr & MUSB_TXCSR_DMAMODE) {
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351 tx_csr &= musb_readw(epio, MUSB_TXCSR);
1352 if (tx_csr & MUSB_TXCSR_TXPKTRDY) {
1353 tx_csr &= ~(MUSB_TXCSR_DMAENAB |
1354 MUSB_TXCSR_TXPKTRDY);
1355 musb_writew(epio, MUSB_TXCSR,
1356 tx_csr | MUSB_TXCSR_H_WZC_BITS);
1357 }
1358 tx_csr &= ~(MUSB_TXCSR_DMAMODE |
1359 MUSB_TXCSR_TXPKTRDY);
1360 musb_writew(epio, MUSB_TXCSR,
1361 tx_csr | MUSB_TXCSR_H_WZC_BITS);
1362
1363
1364
1365
1366
1367
1368
1369 tx_csr = musb_readw(epio, MUSB_TXCSR);
1370 }
1371
1372
1373
1374
1375
1376
1377
1378
1379 if (tx_csr & (MUSB_TXCSR_FIFONOTEMPTY | MUSB_TXCSR_TXPKTRDY)) {
1380 musb_dbg(musb,
1381 "DMA complete but FIFO not empty, CSR %04x",
1382 tx_csr);
1383 return;
1384 }
1385 }
1386
1387 if (!status || dma || usb_pipeisoc(pipe)) {
1388 if (dma)
1389 length = dma->actual_len;
1390 else
1391 length = qh->segsize;
1392 qh->offset += length;
1393
1394 if (usb_pipeisoc(pipe)) {
1395 struct usb_iso_packet_descriptor *d;
1396
1397 d = urb->iso_frame_desc + qh->iso_idx;
1398 d->actual_length = length;
1399 d->status = status;
1400 if (++qh->iso_idx >= urb->number_of_packets) {
1401 done = true;
1402 } else {
1403 d++;
1404 offset = d->offset;
1405 length = d->length;
1406 }
1407 } else if (dma && urb->transfer_buffer_length == qh->offset) {
1408 done = true;
1409 } else {
1410
1411 if (qh->segsize < qh->maxpacket)
1412 done = true;
1413 else if (qh->offset == urb->transfer_buffer_length
1414 && !(urb->transfer_flags
1415 & URB_ZERO_PACKET))
1416 done = true;
1417 if (!done) {
1418 offset = qh->offset;
1419 length = urb->transfer_buffer_length - offset;
1420 transfer_pending = true;
1421 }
1422 }
1423 }
1424
1425
1426
1427
1428 if (urb->status != -EINPROGRESS) {
1429 done = true;
1430 if (status == 0)
1431 status = urb->status;
1432 }
1433
1434 if (done) {
1435
1436 urb->status = status;
1437 urb->actual_length = qh->offset;
1438 musb_advance_schedule(musb, urb, hw_ep, USB_DIR_OUT);
1439 return;
1440 } else if ((usb_pipeisoc(pipe) || transfer_pending) && dma) {
1441 if (musb_tx_dma_program(musb->dma_controller, hw_ep, qh, urb,
1442 offset, length)) {
1443 if (is_cppi_enabled(musb) || tusb_dma_omap(musb))
1444 musb_h_tx_dma_start(hw_ep);
1445 return;
1446 }
1447 } else if (tx_csr & MUSB_TXCSR_DMAENAB) {
1448 musb_dbg(musb, "not complete, but DMA enabled?");
1449 return;
1450 }
1451
1452
1453
1454
1455
1456
1457
1458
1459 if (length > qh->maxpacket)
1460 length = qh->maxpacket;
1461
1462 usb_hcd_unmap_urb_for_dma(musb->hcd, urb);
1463
1464
1465
1466
1467
1468 if (!urb->transfer_buffer)
1469 qh->use_sg = true;
1470
1471 if (qh->use_sg) {
1472
1473 if (!sg_miter_next(&qh->sg_miter)) {
1474 dev_err(musb->controller, "error: sg list empty\n");
1475 sg_miter_stop(&qh->sg_miter);
1476 status = -EINVAL;
1477 goto done;
1478 }
1479 urb->transfer_buffer = qh->sg_miter.addr;
1480 length = min_t(u32, length, qh->sg_miter.length);
1481 musb_write_fifo(hw_ep, length, urb->transfer_buffer);
1482 qh->sg_miter.consumed = length;
1483 sg_miter_stop(&qh->sg_miter);
1484 } else {
1485 musb_write_fifo(hw_ep, length, urb->transfer_buffer + offset);
1486 }
1487
1488 qh->segsize = length;
1489
1490 if (qh->use_sg) {
1491 if (offset + length >= urb->transfer_buffer_length)
1492 qh->use_sg = false;
1493 }
1494
1495 musb_ep_select(mbase, epnum);
1496 musb_writew(epio, MUSB_TXCSR,
1497 MUSB_TXCSR_H_WZC_BITS | MUSB_TXCSR_TXPKTRDY);
1498}
1499
1500#ifdef CONFIG_USB_TI_CPPI41_DMA
1501
1502static int musb_rx_dma_iso_cppi41(struct dma_controller *dma,
1503 struct musb_hw_ep *hw_ep,
1504 struct musb_qh *qh,
1505 struct urb *urb,
1506 size_t len)
1507{
1508 struct dma_channel *channel = hw_ep->rx_channel;
1509 void __iomem *epio = hw_ep->regs;
1510 dma_addr_t *buf;
1511 u32 length;
1512 u16 val;
1513
1514 buf = (void *)urb->iso_frame_desc[qh->iso_idx].offset +
1515 (u32)urb->transfer_dma;
1516
1517 length = urb->iso_frame_desc[qh->iso_idx].length;
1518
1519 val = musb_readw(epio, MUSB_RXCSR);
1520 val |= MUSB_RXCSR_DMAENAB;
1521 musb_writew(hw_ep->regs, MUSB_RXCSR, val);
1522
1523 return dma->channel_program(channel, qh->maxpacket, 0,
1524 (u32)buf, length);
1525}
1526#else
1527static inline int musb_rx_dma_iso_cppi41(struct dma_controller *dma,
1528 struct musb_hw_ep *hw_ep,
1529 struct musb_qh *qh,
1530 struct urb *urb,
1531 size_t len)
1532{
1533 return false;
1534}
1535#endif
1536
1537#if defined(CONFIG_USB_INVENTRA_DMA) || defined(CONFIG_USB_UX500_DMA) || \
1538 defined(CONFIG_USB_TI_CPPI41_DMA)
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573static int musb_rx_dma_inventra_cppi41(struct dma_controller *dma,
1574 struct musb_hw_ep *hw_ep,
1575 struct musb_qh *qh,
1576 struct urb *urb,
1577 size_t len)
1578{
1579 struct dma_channel *channel = hw_ep->rx_channel;
1580 void __iomem *epio = hw_ep->regs;
1581 u16 val;
1582 int pipe;
1583 bool done;
1584
1585 pipe = urb->pipe;
1586
1587 if (usb_pipeisoc(pipe)) {
1588 struct usb_iso_packet_descriptor *d;
1589
1590 d = urb->iso_frame_desc + qh->iso_idx;
1591 d->actual_length = len;
1592
1593
1594
1595
1596 if (d->status != -EILSEQ && d->status != -EOVERFLOW)
1597 d->status = 0;
1598
1599 if (++qh->iso_idx >= urb->number_of_packets) {
1600 done = true;
1601 } else {
1602
1603 if (musb_dma_cppi41(hw_ep->musb))
1604 done = musb_rx_dma_iso_cppi41(dma, hw_ep, qh,
1605 urb, len);
1606 done = false;
1607 }
1608
1609 } else {
1610
1611 done = (urb->actual_length + len >=
1612 urb->transfer_buffer_length
1613 || channel->actual_len < qh->maxpacket
1614 || channel->rx_packet_done);
1615 }
1616
1617
1618 if (!done) {
1619 val = musb_readw(epio, MUSB_RXCSR);
1620 val |= MUSB_RXCSR_H_REQPKT;
1621 musb_writew(epio, MUSB_RXCSR, MUSB_RXCSR_H_WZC_BITS | val);
1622 }
1623
1624 return done;
1625}
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643static int musb_rx_dma_in_inventra_cppi41(struct dma_controller *dma,
1644 struct musb_hw_ep *hw_ep,
1645 struct musb_qh *qh,
1646 struct urb *urb,
1647 size_t len,
1648 u8 iso_err)
1649{
1650 struct musb *musb = hw_ep->musb;
1651 void __iomem *epio = hw_ep->regs;
1652 struct dma_channel *channel = hw_ep->rx_channel;
1653 u16 rx_count, val;
1654 int length, pipe, done;
1655 dma_addr_t buf;
1656
1657 rx_count = musb_readw(epio, MUSB_RXCOUNT);
1658 pipe = urb->pipe;
1659
1660 if (usb_pipeisoc(pipe)) {
1661 int d_status = 0;
1662 struct usb_iso_packet_descriptor *d;
1663
1664 d = urb->iso_frame_desc + qh->iso_idx;
1665
1666 if (iso_err) {
1667 d_status = -EILSEQ;
1668 urb->error_count++;
1669 }
1670 if (rx_count > d->length) {
1671 if (d_status == 0) {
1672 d_status = -EOVERFLOW;
1673 urb->error_count++;
1674 }
1675 musb_dbg(musb, "** OVERFLOW %d into %d",
1676 rx_count, d->length);
1677
1678 length = d->length;
1679 } else
1680 length = rx_count;
1681 d->status = d_status;
1682 buf = urb->transfer_dma + d->offset;
1683 } else {
1684 length = rx_count;
1685 buf = urb->transfer_dma + urb->actual_length;
1686 }
1687
1688 channel->desired_mode = 0;
1689#ifdef USE_MODE1
1690
1691
1692
1693 if ((urb->transfer_flags & URB_SHORT_NOT_OK)
1694 && (urb->transfer_buffer_length - urb->actual_length)
1695 > qh->maxpacket)
1696 channel->desired_mode = 1;
1697 if (rx_count < hw_ep->max_packet_sz_rx) {
1698 length = rx_count;
1699 channel->desired_mode = 0;
1700 } else {
1701 length = urb->transfer_buffer_length;
1702 }
1703#endif
1704
1705
1706 val = musb_readw(epio, MUSB_RXCSR);
1707 val &= ~MUSB_RXCSR_H_REQPKT;
1708
1709 if (channel->desired_mode == 0)
1710 val &= ~MUSB_RXCSR_H_AUTOREQ;
1711 else
1712 val |= MUSB_RXCSR_H_AUTOREQ;
1713 val |= MUSB_RXCSR_DMAENAB;
1714
1715
1716 if (qh->hb_mult == 1)
1717 val |= MUSB_RXCSR_AUTOCLEAR;
1718
1719 musb_writew(epio, MUSB_RXCSR, MUSB_RXCSR_H_WZC_BITS | val);
1720
1721
1722
1723
1724
1725 done = dma->channel_program(channel, qh->maxpacket,
1726 channel->desired_mode,
1727 buf, length);
1728
1729 if (!done) {
1730 dma->channel_release(channel);
1731 hw_ep->rx_channel = NULL;
1732 channel = NULL;
1733 val = musb_readw(epio, MUSB_RXCSR);
1734 val &= ~(MUSB_RXCSR_DMAENAB
1735 | MUSB_RXCSR_H_AUTOREQ
1736 | MUSB_RXCSR_AUTOCLEAR);
1737 musb_writew(epio, MUSB_RXCSR, val);
1738 }
1739
1740 return done;
1741}
1742#else
1743static inline int musb_rx_dma_inventra_cppi41(struct dma_controller *dma,
1744 struct musb_hw_ep *hw_ep,
1745 struct musb_qh *qh,
1746 struct urb *urb,
1747 size_t len)
1748{
1749 return false;
1750}
1751
1752static inline int musb_rx_dma_in_inventra_cppi41(struct dma_controller *dma,
1753 struct musb_hw_ep *hw_ep,
1754 struct musb_qh *qh,
1755 struct urb *urb,
1756 size_t len,
1757 u8 iso_err)
1758{
1759 return false;
1760}
1761#endif
1762
1763
1764
1765
1766
1767void musb_host_rx(struct musb *musb, u8 epnum)
1768{
1769 struct urb *urb;
1770 struct musb_hw_ep *hw_ep = musb->endpoints + epnum;
1771 struct dma_controller *c = musb->dma_controller;
1772 void __iomem *epio = hw_ep->regs;
1773 struct musb_qh *qh = hw_ep->in_qh;
1774 size_t xfer_len;
1775 void __iomem *mbase = musb->mregs;
1776 u16 rx_csr, val;
1777 bool iso_err = false;
1778 bool done = false;
1779 u32 status;
1780 struct dma_channel *dma;
1781 unsigned int sg_flags = SG_MITER_ATOMIC | SG_MITER_TO_SG;
1782
1783 musb_ep_select(mbase, epnum);
1784
1785 urb = next_urb(qh);
1786 dma = is_dma_capable() ? hw_ep->rx_channel : NULL;
1787 status = 0;
1788 xfer_len = 0;
1789
1790 rx_csr = musb_readw(epio, MUSB_RXCSR);
1791 val = rx_csr;
1792
1793 if (unlikely(!urb)) {
1794
1795
1796
1797
1798 musb_dbg(musb, "BOGUS RX%d ready, csr %04x, count %d",
1799 epnum, val, musb_readw(epio, MUSB_RXCOUNT));
1800 musb_h_flush_rxfifo(hw_ep, MUSB_RXCSR_CLRDATATOG);
1801 return;
1802 }
1803
1804 trace_musb_urb_rx(musb, urb);
1805
1806
1807
1808 if (rx_csr & MUSB_RXCSR_H_RXSTALL) {
1809 musb_dbg(musb, "RX end %d STALL", epnum);
1810
1811
1812 status = -EPIPE;
1813
1814 } else if (rx_csr & MUSB_RXCSR_H_ERROR) {
1815 musb_dbg(musb, "end %d RX proto error", epnum);
1816
1817 status = -EPROTO;
1818 musb_writeb(epio, MUSB_RXINTERVAL, 0);
1819
1820 rx_csr &= ~MUSB_RXCSR_H_ERROR;
1821 musb_writew(epio, MUSB_RXCSR, rx_csr);
1822
1823 } else if (rx_csr & MUSB_RXCSR_DATAERROR) {
1824
1825 if (USB_ENDPOINT_XFER_ISOC != qh->type) {
1826 musb_dbg(musb, "RX end %d NAK timeout", epnum);
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836 if (usb_pipebulk(urb->pipe)
1837 && qh->mux == 1
1838 && !list_is_singular(&musb->in_bulk)) {
1839 musb_bulk_nak_timeout(musb, hw_ep, 1);
1840 return;
1841 }
1842 musb_ep_select(mbase, epnum);
1843 rx_csr |= MUSB_RXCSR_H_WZC_BITS;
1844 rx_csr &= ~MUSB_RXCSR_DATAERROR;
1845 musb_writew(epio, MUSB_RXCSR, rx_csr);
1846
1847 goto finish;
1848 } else {
1849 musb_dbg(musb, "RX end %d ISO data error", epnum);
1850
1851 iso_err = true;
1852 }
1853 } else if (rx_csr & MUSB_RXCSR_INCOMPRX) {
1854 musb_dbg(musb, "end %d high bandwidth incomplete ISO packet RX",
1855 epnum);
1856 status = -EPROTO;
1857 }
1858
1859
1860 if (status) {
1861
1862 if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) {
1863 dma->status = MUSB_DMA_STATUS_CORE_ABORT;
1864 musb->dma_controller->channel_abort(dma);
1865 xfer_len = dma->actual_len;
1866 }
1867 musb_h_flush_rxfifo(hw_ep, MUSB_RXCSR_CLRDATATOG);
1868 musb_writeb(epio, MUSB_RXINTERVAL, 0);
1869 done = true;
1870 goto finish;
1871 }
1872
1873 if (unlikely(dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY)) {
1874
1875 ERR("RX%d dma busy, csr %04x\n", epnum, rx_csr);
1876 goto finish;
1877 }
1878
1879
1880
1881
1882
1883
1884
1885 if (!musb_dma_inventra(musb) && !musb_dma_ux500(musb) &&
1886 (rx_csr & MUSB_RXCSR_H_REQPKT)) {
1887
1888
1889
1890
1891
1892 if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) {
1893 dma->status = MUSB_DMA_STATUS_CORE_ABORT;
1894 musb->dma_controller->channel_abort(dma);
1895 xfer_len = dma->actual_len;
1896 done = true;
1897 }
1898
1899 musb_dbg(musb, "RXCSR%d %04x, reqpkt, len %zu%s", epnum, rx_csr,
1900 xfer_len, dma ? ", dma" : "");
1901 rx_csr &= ~MUSB_RXCSR_H_REQPKT;
1902
1903 musb_ep_select(mbase, epnum);
1904 musb_writew(epio, MUSB_RXCSR,
1905 MUSB_RXCSR_H_WZC_BITS | rx_csr);
1906 }
1907
1908 if (dma && (rx_csr & MUSB_RXCSR_DMAENAB)) {
1909 xfer_len = dma->actual_len;
1910
1911 val &= ~(MUSB_RXCSR_DMAENAB
1912 | MUSB_RXCSR_H_AUTOREQ
1913 | MUSB_RXCSR_AUTOCLEAR
1914 | MUSB_RXCSR_RXPKTRDY);
1915 musb_writew(hw_ep->regs, MUSB_RXCSR, val);
1916
1917 if (musb_dma_inventra(musb) || musb_dma_ux500(musb) ||
1918 musb_dma_cppi41(musb)) {
1919 done = musb_rx_dma_inventra_cppi41(c, hw_ep, qh, urb, xfer_len);
1920 musb_dbg(hw_ep->musb,
1921 "ep %d dma %s, rxcsr %04x, rxcount %d",
1922 epnum, done ? "off" : "reset",
1923 musb_readw(epio, MUSB_RXCSR),
1924 musb_readw(epio, MUSB_RXCOUNT));
1925 } else {
1926 done = true;
1927 }
1928
1929 } else if (urb->status == -EINPROGRESS) {
1930
1931 if (unlikely(!(rx_csr & MUSB_RXCSR_RXPKTRDY))) {
1932 status = -EPROTO;
1933 ERR("Rx interrupt with no errors or packet!\n");
1934
1935
1936
1937
1938
1939 musb_ep_select(mbase, epnum);
1940 val &= ~MUSB_RXCSR_H_REQPKT;
1941 musb_writew(epio, MUSB_RXCSR, val);
1942 goto finish;
1943 }
1944
1945
1946 if ((musb_dma_inventra(musb) || musb_dma_ux500(musb) ||
1947 musb_dma_cppi41(musb)) && dma) {
1948 musb_dbg(hw_ep->musb,
1949 "RX%d count %d, buffer 0x%llx len %d/%d",
1950 epnum, musb_readw(epio, MUSB_RXCOUNT),
1951 (unsigned long long) urb->transfer_dma
1952 + urb->actual_length,
1953 qh->offset,
1954 urb->transfer_buffer_length);
1955
1956 if (musb_rx_dma_in_inventra_cppi41(c, hw_ep, qh, urb,
1957 xfer_len, iso_err))
1958 goto finish;
1959 else
1960 dev_err(musb->controller, "error: rx_dma failed\n");
1961 }
1962
1963 if (!dma) {
1964 unsigned int received_len;
1965
1966
1967 usb_hcd_unmap_urb_for_dma(musb->hcd, urb);
1968
1969
1970
1971
1972
1973 if (!urb->transfer_buffer) {
1974 qh->use_sg = true;
1975 sg_miter_start(&qh->sg_miter, urb->sg, 1,
1976 sg_flags);
1977 }
1978
1979 if (qh->use_sg) {
1980 if (!sg_miter_next(&qh->sg_miter)) {
1981 dev_err(musb->controller, "error: sg list empty\n");
1982 sg_miter_stop(&qh->sg_miter);
1983 status = -EINVAL;
1984 done = true;
1985 goto finish;
1986 }
1987 urb->transfer_buffer = qh->sg_miter.addr;
1988 received_len = urb->actual_length;
1989 qh->offset = 0x0;
1990 done = musb_host_packet_rx(musb, urb, epnum,
1991 iso_err);
1992
1993 received_len = urb->actual_length -
1994 received_len;
1995 qh->sg_miter.consumed = received_len;
1996 sg_miter_stop(&qh->sg_miter);
1997 } else {
1998 done = musb_host_packet_rx(musb, urb,
1999 epnum, iso_err);
2000 }
2001 musb_dbg(musb, "read %spacket", done ? "last " : "");
2002 }
2003 }
2004
2005finish:
2006 urb->actual_length += xfer_len;
2007 qh->offset += xfer_len;
2008 if (done) {
2009 if (qh->use_sg)
2010 qh->use_sg = false;
2011
2012 if (urb->status == -EINPROGRESS)
2013 urb->status = status;
2014 musb_advance_schedule(musb, urb, hw_ep, USB_DIR_IN);
2015 }
2016}
2017
2018
2019
2020
2021
2022
2023static int musb_schedule(
2024 struct musb *musb,
2025 struct musb_qh *qh,
2026 int is_in)
2027{
2028 int idle = 0;
2029 int best_diff;
2030 int best_end, epnum;
2031 struct musb_hw_ep *hw_ep = NULL;
2032 struct list_head *head = NULL;
2033 u8 toggle;
2034 u8 txtype;
2035 struct urb *urb = next_urb(qh);
2036
2037
2038 if (qh->type == USB_ENDPOINT_XFER_CONTROL) {
2039 head = &musb->control;
2040 hw_ep = musb->control_ep;
2041 goto success;
2042 }
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053 best_diff = 4096;
2054 best_end = -1;
2055
2056 for (epnum = 1, hw_ep = musb->endpoints + 1;
2057 epnum < musb->nr_endpoints;
2058 epnum++, hw_ep++) {
2059 int diff;
2060
2061 if (musb_ep_get_qh(hw_ep, is_in) != NULL)
2062 continue;
2063
2064 if (hw_ep == musb->bulk_ep)
2065 continue;
2066
2067 if (is_in)
2068 diff = hw_ep->max_packet_sz_rx;
2069 else
2070 diff = hw_ep->max_packet_sz_tx;
2071 diff -= (qh->maxpacket * qh->hb_mult);
2072
2073 if (diff >= 0 && best_diff > diff) {
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087 hw_ep = musb->endpoints + epnum;
2088 toggle = usb_gettoggle(urb->dev, qh->epnum, !is_in);
2089 txtype = (musb_readb(hw_ep->regs, MUSB_TXTYPE)
2090 >> 4) & 0x3;
2091 if (!is_in && (qh->type == USB_ENDPOINT_XFER_BULK) &&
2092 toggle && (txtype == USB_ENDPOINT_XFER_ISOC))
2093 continue;
2094
2095 best_diff = diff;
2096 best_end = epnum;
2097 }
2098 }
2099
2100 if (best_end < 0 && qh->type == USB_ENDPOINT_XFER_BULK) {
2101 hw_ep = musb->bulk_ep;
2102 if (is_in)
2103 head = &musb->in_bulk;
2104 else
2105 head = &musb->out_bulk;
2106
2107
2108
2109
2110
2111
2112
2113
2114 if (qh->dev)
2115 qh->intv_reg =
2116 (USB_SPEED_HIGH == qh->dev->speed) ? 8 : 4;
2117 goto success;
2118 } else if (best_end < 0) {
2119 dev_err(musb->controller,
2120 "%s hwep alloc failed for %dx%d\n",
2121 musb_ep_xfertype_string(qh->type),
2122 qh->hb_mult, qh->maxpacket);
2123 return -ENOSPC;
2124 }
2125
2126 idle = 1;
2127 qh->mux = 0;
2128 hw_ep = musb->endpoints + best_end;
2129 musb_dbg(musb, "qh %p periodic slot %d", qh, best_end);
2130success:
2131 if (head) {
2132 idle = list_empty(head);
2133 list_add_tail(&qh->ring, head);
2134 qh->mux = 1;
2135 }
2136 qh->hw_ep = hw_ep;
2137 qh->hep->hcpriv = qh;
2138 if (idle)
2139 musb_start_urb(musb, is_in, qh);
2140 return 0;
2141}
2142
2143static int musb_urb_enqueue(
2144 struct usb_hcd *hcd,
2145 struct urb *urb,
2146 gfp_t mem_flags)
2147{
2148 unsigned long flags;
2149 struct musb *musb = hcd_to_musb(hcd);
2150 struct usb_host_endpoint *hep = urb->ep;
2151 struct musb_qh *qh;
2152 struct usb_endpoint_descriptor *epd = &hep->desc;
2153 int ret;
2154 unsigned type_reg;
2155 unsigned interval;
2156
2157
2158 if (!is_host_active(musb) || !musb->is_active)
2159 return -ENODEV;
2160
2161 trace_musb_urb_enq(musb, urb);
2162
2163 spin_lock_irqsave(&musb->lock, flags);
2164 ret = usb_hcd_link_urb_to_ep(hcd, urb);
2165 qh = ret ? NULL : hep->hcpriv;
2166 if (qh)
2167 urb->hcpriv = qh;
2168 spin_unlock_irqrestore(&musb->lock, flags);
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178 if (qh || ret)
2179 return ret;
2180
2181
2182
2183
2184
2185
2186
2187 qh = kzalloc(sizeof *qh, mem_flags);
2188 if (!qh) {
2189 spin_lock_irqsave(&musb->lock, flags);
2190 usb_hcd_unlink_urb_from_ep(hcd, urb);
2191 spin_unlock_irqrestore(&musb->lock, flags);
2192 return -ENOMEM;
2193 }
2194
2195 qh->hep = hep;
2196 qh->dev = urb->dev;
2197 INIT_LIST_HEAD(&qh->ring);
2198 qh->is_ready = 1;
2199
2200 qh->maxpacket = usb_endpoint_maxp(epd);
2201 qh->type = usb_endpoint_type(epd);
2202
2203
2204
2205
2206
2207 qh->hb_mult = usb_endpoint_maxp_mult(epd);
2208 if (qh->hb_mult > 1) {
2209 int ok = (qh->type == USB_ENDPOINT_XFER_ISOC);
2210
2211 if (ok)
2212 ok = (usb_pipein(urb->pipe) && musb->hb_iso_rx)
2213 || (usb_pipeout(urb->pipe) && musb->hb_iso_tx);
2214 if (!ok) {
2215 dev_err(musb->controller,
2216 "high bandwidth %s (%dx%d) not supported\n",
2217 musb_ep_xfertype_string(qh->type),
2218 qh->hb_mult, qh->maxpacket & 0x7ff);
2219 ret = -EMSGSIZE;
2220 goto done;
2221 }
2222 qh->maxpacket &= 0x7ff;
2223 }
2224
2225 qh->epnum = usb_endpoint_num(epd);
2226
2227
2228 qh->addr_reg = (u8) usb_pipedevice(urb->pipe);
2229
2230
2231 type_reg = (qh->type << 4) | qh->epnum;
2232 switch (urb->dev->speed) {
2233 case USB_SPEED_LOW:
2234 type_reg |= 0xc0;
2235 break;
2236 case USB_SPEED_FULL:
2237 type_reg |= 0x80;
2238 break;
2239 default:
2240 type_reg |= 0x40;
2241 }
2242 qh->type_reg = type_reg;
2243
2244
2245 switch (qh->type) {
2246 case USB_ENDPOINT_XFER_INT:
2247
2248
2249
2250
2251 if (urb->dev->speed <= USB_SPEED_FULL) {
2252 interval = max_t(u8, epd->bInterval, 1);
2253 break;
2254 }
2255
2256 case USB_ENDPOINT_XFER_ISOC:
2257
2258 interval = min_t(u8, epd->bInterval, 16);
2259 break;
2260 default:
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275 interval = 0;
2276 }
2277 qh->intv_reg = interval;
2278
2279
2280 if (musb->is_multipoint) {
2281 struct usb_device *parent = urb->dev->parent;
2282
2283 if (parent != hcd->self.root_hub) {
2284 qh->h_addr_reg = (u8) parent->devnum;
2285
2286
2287 if (urb->dev->tt) {
2288 qh->h_port_reg = (u8) urb->dev->ttport;
2289 if (urb->dev->tt->hub)
2290 qh->h_addr_reg =
2291 (u8) urb->dev->tt->hub->devnum;
2292 if (urb->dev->tt->multi)
2293 qh->h_addr_reg |= 0x80;
2294 }
2295 }
2296 }
2297
2298
2299
2300
2301
2302 spin_lock_irqsave(&musb->lock, flags);
2303 if (hep->hcpriv || !next_urb(qh)) {
2304
2305
2306
2307 kfree(qh);
2308 qh = NULL;
2309 ret = 0;
2310 } else
2311 ret = musb_schedule(musb, qh,
2312 epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK);
2313
2314 if (ret == 0) {
2315 urb->hcpriv = qh;
2316
2317
2318
2319 }
2320 spin_unlock_irqrestore(&musb->lock, flags);
2321
2322done:
2323 if (ret != 0) {
2324 spin_lock_irqsave(&musb->lock, flags);
2325 usb_hcd_unlink_urb_from_ep(hcd, urb);
2326 spin_unlock_irqrestore(&musb->lock, flags);
2327 kfree(qh);
2328 }
2329 return ret;
2330}
2331
2332
2333
2334
2335
2336
2337
2338static int musb_cleanup_urb(struct urb *urb, struct musb_qh *qh)
2339{
2340 struct musb_hw_ep *ep = qh->hw_ep;
2341 struct musb *musb = ep->musb;
2342 void __iomem *epio = ep->regs;
2343 unsigned hw_end = ep->epnum;
2344 void __iomem *regs = ep->musb->mregs;
2345 int is_in = usb_pipein(urb->pipe);
2346 int status = 0;
2347 u16 csr;
2348 struct dma_channel *dma = NULL;
2349
2350 musb_ep_select(regs, hw_end);
2351
2352 if (is_dma_capable()) {
2353 dma = is_in ? ep->rx_channel : ep->tx_channel;
2354 if (dma) {
2355 status = ep->musb->dma_controller->channel_abort(dma);
2356 musb_dbg(musb, "abort %cX%d DMA for urb %p --> %d",
2357 is_in ? 'R' : 'T', ep->epnum,
2358 urb, status);
2359 urb->actual_length += dma->actual_len;
2360 }
2361 }
2362
2363
2364 if (ep->epnum && is_in) {
2365
2366 csr = musb_h_flush_rxfifo(ep, 0);
2367
2368
2369 if (is_dma_capable() && dma)
2370 musb_platform_clear_ep_rxintr(musb, ep->epnum);
2371 } else if (ep->epnum) {
2372 musb_h_tx_flush_fifo(ep);
2373 csr = musb_readw(epio, MUSB_TXCSR);
2374 csr &= ~(MUSB_TXCSR_AUTOSET
2375 | MUSB_TXCSR_DMAENAB
2376 | MUSB_TXCSR_H_RXSTALL
2377 | MUSB_TXCSR_H_NAKTIMEOUT
2378 | MUSB_TXCSR_H_ERROR
2379 | MUSB_TXCSR_TXPKTRDY);
2380 musb_writew(epio, MUSB_TXCSR, csr);
2381
2382 musb_writew(epio, MUSB_TXCSR, csr);
2383
2384 csr = musb_readw(epio, MUSB_TXCSR);
2385 } else {
2386 musb_h_ep0_flush_fifo(ep);
2387 }
2388 if (status == 0)
2389 musb_advance_schedule(ep->musb, urb, ep, is_in);
2390 return status;
2391}
2392
2393static int musb_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
2394{
2395 struct musb *musb = hcd_to_musb(hcd);
2396 struct musb_qh *qh;
2397 unsigned long flags;
2398 int is_in = usb_pipein(urb->pipe);
2399 int ret;
2400
2401 trace_musb_urb_deq(musb, urb);
2402
2403 spin_lock_irqsave(&musb->lock, flags);
2404 ret = usb_hcd_check_unlink_urb(hcd, urb, status);
2405 if (ret)
2406 goto done;
2407
2408 qh = urb->hcpriv;
2409 if (!qh)
2410 goto done;
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424 if (!qh->is_ready
2425 || urb->urb_list.prev != &qh->hep->urb_list
2426 || musb_ep_get_qh(qh->hw_ep, is_in) != qh) {
2427 int ready = qh->is_ready;
2428
2429 qh->is_ready = 0;
2430 musb_giveback(musb, urb, 0);
2431 qh->is_ready = ready;
2432
2433
2434
2435
2436 if (ready && list_empty(&qh->hep->urb_list)) {
2437 qh->hep->hcpriv = NULL;
2438 list_del(&qh->ring);
2439 kfree(qh);
2440 }
2441 } else
2442 ret = musb_cleanup_urb(urb, qh);
2443done:
2444 spin_unlock_irqrestore(&musb->lock, flags);
2445 return ret;
2446}
2447
2448
2449static void
2450musb_h_disable(struct usb_hcd *hcd, struct usb_host_endpoint *hep)
2451{
2452 u8 is_in = hep->desc.bEndpointAddress & USB_DIR_IN;
2453 unsigned long flags;
2454 struct musb *musb = hcd_to_musb(hcd);
2455 struct musb_qh *qh;
2456 struct urb *urb;
2457
2458 spin_lock_irqsave(&musb->lock, flags);
2459
2460 qh = hep->hcpriv;
2461 if (qh == NULL)
2462 goto exit;
2463
2464
2465
2466
2467 qh->is_ready = 0;
2468 if (musb_ep_get_qh(qh->hw_ep, is_in) == qh) {
2469 urb = next_urb(qh);
2470
2471
2472 if (!urb->unlinked)
2473 urb->status = -ESHUTDOWN;
2474
2475
2476 musb_cleanup_urb(urb, qh);
2477
2478
2479
2480
2481 while (!list_empty(&hep->urb_list)) {
2482 urb = next_urb(qh);
2483 urb->status = -ESHUTDOWN;
2484 musb_advance_schedule(musb, urb, qh->hw_ep, is_in);
2485 }
2486 } else {
2487
2488
2489
2490
2491 while (!list_empty(&hep->urb_list))
2492 musb_giveback(musb, next_urb(qh), -ESHUTDOWN);
2493
2494 hep->hcpriv = NULL;
2495 list_del(&qh->ring);
2496 kfree(qh);
2497 }
2498exit:
2499 spin_unlock_irqrestore(&musb->lock, flags);
2500}
2501
2502static int musb_h_get_frame_number(struct usb_hcd *hcd)
2503{
2504 struct musb *musb = hcd_to_musb(hcd);
2505
2506 return musb_readw(musb->mregs, MUSB_FRAME);
2507}
2508
2509static int musb_h_start(struct usb_hcd *hcd)
2510{
2511 struct musb *musb = hcd_to_musb(hcd);
2512
2513
2514
2515
2516 hcd->state = HC_STATE_RUNNING;
2517 musb->port1_status = 0;
2518 return 0;
2519}
2520
2521static void musb_h_stop(struct usb_hcd *hcd)
2522{
2523 musb_stop(hcd_to_musb(hcd));
2524 hcd->state = HC_STATE_HALT;
2525}
2526
2527static int musb_bus_suspend(struct usb_hcd *hcd)
2528{
2529 struct musb *musb = hcd_to_musb(hcd);
2530 u8 devctl;
2531
2532 musb_port_suspend(musb, true);
2533
2534 if (!is_host_active(musb))
2535 return 0;
2536
2537 switch (musb->xceiv->otg->state) {
2538 case OTG_STATE_A_SUSPEND:
2539 return 0;
2540 case OTG_STATE_A_WAIT_VRISE:
2541
2542
2543
2544
2545 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
2546 if ((devctl & MUSB_DEVCTL_VBUS) == MUSB_DEVCTL_VBUS)
2547 musb->xceiv->otg->state = OTG_STATE_A_WAIT_BCON;
2548 break;
2549 default:
2550 break;
2551 }
2552
2553 if (musb->is_active) {
2554 WARNING("trying to suspend as %s while active\n",
2555 usb_otg_state_string(musb->xceiv->otg->state));
2556 return -EBUSY;
2557 } else
2558 return 0;
2559}
2560
2561static int musb_bus_resume(struct usb_hcd *hcd)
2562{
2563 struct musb *musb = hcd_to_musb(hcd);
2564
2565 if (musb->config &&
2566 musb->config->host_port_deassert_reset_at_resume)
2567 musb_port_reset(musb, false);
2568
2569 return 0;
2570}
2571
2572#ifndef CONFIG_MUSB_PIO_ONLY
2573
2574#define MUSB_USB_DMA_ALIGN 4
2575
2576struct musb_temp_buffer {
2577 void *kmalloc_ptr;
2578 void *old_xfer_buffer;
2579 u8 data[0];
2580};
2581
2582static void musb_free_temp_buffer(struct urb *urb)
2583{
2584 enum dma_data_direction dir;
2585 struct musb_temp_buffer *temp;
2586 size_t length;
2587
2588 if (!(urb->transfer_flags & URB_ALIGNED_TEMP_BUFFER))
2589 return;
2590
2591 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
2592
2593 temp = container_of(urb->transfer_buffer, struct musb_temp_buffer,
2594 data);
2595
2596 if (dir == DMA_FROM_DEVICE) {
2597 if (usb_pipeisoc(urb->pipe))
2598 length = urb->transfer_buffer_length;
2599 else
2600 length = urb->actual_length;
2601
2602 memcpy(temp->old_xfer_buffer, temp->data, length);
2603 }
2604 urb->transfer_buffer = temp->old_xfer_buffer;
2605 kfree(temp->kmalloc_ptr);
2606
2607 urb->transfer_flags &= ~URB_ALIGNED_TEMP_BUFFER;
2608}
2609
2610static int musb_alloc_temp_buffer(struct urb *urb, gfp_t mem_flags)
2611{
2612 enum dma_data_direction dir;
2613 struct musb_temp_buffer *temp;
2614 void *kmalloc_ptr;
2615 size_t kmalloc_size;
2616
2617 if (urb->num_sgs || urb->sg ||
2618 urb->transfer_buffer_length == 0 ||
2619 !((uintptr_t)urb->transfer_buffer & (MUSB_USB_DMA_ALIGN - 1)))
2620 return 0;
2621
2622 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
2623
2624
2625 kmalloc_size = urb->transfer_buffer_length +
2626 sizeof(struct musb_temp_buffer) + MUSB_USB_DMA_ALIGN - 1;
2627
2628 kmalloc_ptr = kmalloc(kmalloc_size, mem_flags);
2629 if (!kmalloc_ptr)
2630 return -ENOMEM;
2631
2632
2633 temp = PTR_ALIGN(kmalloc_ptr, MUSB_USB_DMA_ALIGN);
2634
2635
2636 temp->kmalloc_ptr = kmalloc_ptr;
2637 temp->old_xfer_buffer = urb->transfer_buffer;
2638 if (dir == DMA_TO_DEVICE)
2639 memcpy(temp->data, urb->transfer_buffer,
2640 urb->transfer_buffer_length);
2641 urb->transfer_buffer = temp->data;
2642
2643 urb->transfer_flags |= URB_ALIGNED_TEMP_BUFFER;
2644
2645 return 0;
2646}
2647
2648static int musb_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
2649 gfp_t mem_flags)
2650{
2651 struct musb *musb = hcd_to_musb(hcd);
2652 int ret;
2653
2654
2655
2656
2657
2658
2659
2660 if (musb->hwvers < MUSB_HWVERS_1800)
2661 return usb_hcd_map_urb_for_dma(hcd, urb, mem_flags);
2662
2663 ret = musb_alloc_temp_buffer(urb, mem_flags);
2664 if (ret)
2665 return ret;
2666
2667 ret = usb_hcd_map_urb_for_dma(hcd, urb, mem_flags);
2668 if (ret)
2669 musb_free_temp_buffer(urb);
2670
2671 return ret;
2672}
2673
2674static void musb_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
2675{
2676 struct musb *musb = hcd_to_musb(hcd);
2677
2678 usb_hcd_unmap_urb_for_dma(hcd, urb);
2679
2680
2681 if (musb->hwvers < MUSB_HWVERS_1800)
2682 return;
2683
2684 musb_free_temp_buffer(urb);
2685}
2686#endif
2687
2688static const struct hc_driver musb_hc_driver = {
2689 .description = "musb-hcd",
2690 .product_desc = "MUSB HDRC host driver",
2691 .hcd_priv_size = sizeof(struct musb *),
2692 .flags = HCD_USB2 | HCD_MEMORY,
2693
2694
2695
2696
2697
2698 .start = musb_h_start,
2699 .stop = musb_h_stop,
2700
2701 .get_frame_number = musb_h_get_frame_number,
2702
2703 .urb_enqueue = musb_urb_enqueue,
2704 .urb_dequeue = musb_urb_dequeue,
2705 .endpoint_disable = musb_h_disable,
2706
2707#ifndef CONFIG_MUSB_PIO_ONLY
2708 .map_urb_for_dma = musb_map_urb_for_dma,
2709 .unmap_urb_for_dma = musb_unmap_urb_for_dma,
2710#endif
2711
2712 .hub_status_data = musb_hub_status_data,
2713 .hub_control = musb_hub_control,
2714 .bus_suspend = musb_bus_suspend,
2715 .bus_resume = musb_bus_resume,
2716
2717
2718};
2719
2720int musb_host_alloc(struct musb *musb)
2721{
2722 struct device *dev = musb->controller;
2723
2724
2725 musb->hcd = usb_create_hcd(&musb_hc_driver, dev, dev_name(dev));
2726 if (!musb->hcd)
2727 return -EINVAL;
2728
2729 *musb->hcd->hcd_priv = (unsigned long) musb;
2730 musb->hcd->self.uses_pio_for_control = 1;
2731 musb->hcd->uses_new_polling = 1;
2732 musb->hcd->has_tt = 1;
2733
2734 return 0;
2735}
2736
2737void musb_host_cleanup(struct musb *musb)
2738{
2739 if (musb->port_mode == MUSB_PORT_MODE_GADGET)
2740 return;
2741 usb_remove_hcd(musb->hcd);
2742}
2743
2744void musb_host_free(struct musb *musb)
2745{
2746 usb_put_hcd(musb->hcd);
2747}
2748
2749int musb_host_setup(struct musb *musb, int power_budget)
2750{
2751 int ret;
2752 struct usb_hcd *hcd = musb->hcd;
2753
2754 if (musb->port_mode == MUSB_PORT_MODE_HOST) {
2755 MUSB_HST_MODE(musb);
2756 musb->xceiv->otg->default_a = 1;
2757 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
2758 }
2759 otg_set_host(musb->xceiv->otg, &hcd->self);
2760 hcd->self.otg_port = 1;
2761 musb->xceiv->otg->host = &hcd->self;
2762 hcd->power_budget = 2 * (power_budget ? : 250);
2763
2764 ret = usb_add_hcd(hcd, 0, 0);
2765 if (ret < 0)
2766 return ret;
2767
2768 device_wakeup_enable(hcd->self.controller);
2769 return 0;
2770}
2771
2772void musb_host_resume_root_hub(struct musb *musb)
2773{
2774 usb_hcd_resume_root_hub(musb->hcd);
2775}
2776
2777void musb_host_poke_root_hub(struct musb *musb)
2778{
2779 MUSB_HST_MODE(musb);
2780 if (musb->hcd->status_urb)
2781 usb_hcd_poll_rh_status(musb->hcd);
2782 else
2783 usb_hcd_resume_root_hub(musb->hcd);
2784}
2785