1
2
3
4
5
6
7
8
9
10
11
12#ifndef __UBOOT__
13#include <linux/kernel.h>
14#include <linux/list.h>
15#include <linux/timer.h>
16#include <linux/module.h>
17#include <linux/smp.h>
18#include <linux/spinlock.h>
19#include <linux/delay.h>
20#include <linux/dma-mapping.h>
21#include <linux/slab.h>
22#else
23#include <common.h>
24#include <linux/usb/ch9.h>
25#include "linux-compat.h"
26#endif
27
28#include "musb_core.h"
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
73
74
75#define is_buffer_mapped(req) (is_dma_capable() && \
76 (req->map_state != UN_MAPPED))
77
78#ifndef CONFIG_USB_MUSB_PIO_ONLY
79
80
81static inline void map_dma_buffer(struct musb_request *request,
82 struct musb *musb, struct musb_ep *musb_ep)
83{
84 int compatible = true;
85 struct dma_controller *dma = musb->dma_controller;
86
87 request->map_state = UN_MAPPED;
88
89 if (!is_dma_capable() || !musb_ep->dma)
90 return;
91
92
93
94
95
96 if (dma->is_compatible)
97 compatible = dma->is_compatible(musb_ep->dma,
98 musb_ep->packet_sz, request->request.buf,
99 request->request.length);
100 if (!compatible)
101 return;
102
103 if (request->request.dma == DMA_ADDR_INVALID) {
104 request->request.dma = dma_map_single(
105 musb->controller,
106 request->request.buf,
107 request->request.length,
108 request->tx
109 ? DMA_TO_DEVICE
110 : DMA_FROM_DEVICE);
111 request->map_state = MUSB_MAPPED;
112 } else {
113 dma_sync_single_for_device(musb->controller,
114 request->request.dma,
115 request->request.length,
116 request->tx
117 ? DMA_TO_DEVICE
118 : DMA_FROM_DEVICE);
119 request->map_state = PRE_MAPPED;
120 }
121}
122
123
124static inline void unmap_dma_buffer(struct musb_request *request,
125 struct musb *musb)
126{
127 if (!is_buffer_mapped(request))
128 return;
129
130 if (request->request.dma == DMA_ADDR_INVALID) {
131 dev_vdbg(musb->controller,
132 "not unmapping a never mapped buffer\n");
133 return;
134 }
135 if (request->map_state == MUSB_MAPPED) {
136 dma_unmap_single(musb->controller,
137 request->request.dma,
138 request->request.length,
139 request->tx
140 ? DMA_TO_DEVICE
141 : DMA_FROM_DEVICE);
142 request->request.dma = DMA_ADDR_INVALID;
143 } else {
144 dma_sync_single_for_cpu(musb->controller,
145 request->request.dma,
146 request->request.length,
147 request->tx
148 ? DMA_TO_DEVICE
149 : DMA_FROM_DEVICE);
150 }
151 request->map_state = UN_MAPPED;
152}
153#else
154static inline void map_dma_buffer(struct musb_request *request,
155 struct musb *musb, struct musb_ep *musb_ep)
156{
157}
158
159static inline void unmap_dma_buffer(struct musb_request *request,
160 struct musb *musb)
161{
162}
163#endif
164
165
166
167
168
169
170
171
172void musb_g_giveback(
173 struct musb_ep *ep,
174 struct usb_request *request,
175 int status)
176__releases(ep->musb->lock)
177__acquires(ep->musb->lock)
178{
179 struct musb_request *req;
180 struct musb *musb;
181 int busy = ep->busy;
182
183 req = to_musb_request(request);
184
185 list_del(&req->list);
186 if (req->request.status == -EINPROGRESS)
187 req->request.status = status;
188 musb = req->musb;
189
190 ep->busy = 1;
191 spin_unlock(&musb->lock);
192 unmap_dma_buffer(req, musb);
193 if (request->status == 0)
194 dev_dbg(musb->controller, "%s done request %p, %d/%d\n",
195 ep->end_point.name, request,
196 req->request.actual, req->request.length);
197 else
198 dev_dbg(musb->controller, "%s request %p, %d/%d fault %d\n",
199 ep->end_point.name, request,
200 req->request.actual, req->request.length,
201 request->status);
202 req->request.complete(&req->ep->end_point, &req->request);
203 spin_lock(&musb->lock);
204 ep->busy = busy;
205}
206
207
208
209
210
211
212
213static void nuke(struct musb_ep *ep, const int status)
214{
215 struct musb *musb = ep->musb;
216 struct musb_request *req = NULL;
217 void __iomem *epio = ep->musb->endpoints[ep->current_epnum].regs;
218
219 ep->busy = 1;
220
221 if (is_dma_capable() && ep->dma) {
222 struct dma_controller *c = ep->musb->dma_controller;
223 int value;
224
225 if (ep->is_in) {
226
227
228
229
230
231 musb_writew(epio, MUSB_TXCSR,
232 MUSB_TXCSR_DMAMODE | MUSB_TXCSR_FLUSHFIFO);
233 musb_writew(epio, MUSB_TXCSR,
234 0 | MUSB_TXCSR_FLUSHFIFO);
235 } else {
236 musb_writew(epio, MUSB_RXCSR,
237 0 | MUSB_RXCSR_FLUSHFIFO);
238 musb_writew(epio, MUSB_RXCSR,
239 0 | MUSB_RXCSR_FLUSHFIFO);
240 }
241
242 value = c->channel_abort(ep->dma);
243 dev_dbg(musb->controller, "%s: abort DMA --> %d\n",
244 ep->name, value);
245 c->channel_release(ep->dma);
246 ep->dma = NULL;
247 }
248
249 while (!list_empty(&ep->req_list)) {
250 req = list_first_entry(&ep->req_list, struct musb_request, list);
251 musb_g_giveback(ep, &req->request, status);
252 }
253}
254
255
256
257
258
259
260
261
262
263
264static inline int max_ep_writesize(struct musb *musb, struct musb_ep *ep)
265{
266 if (can_bulk_split(musb, ep->type))
267 return ep->hw_ep->max_packet_sz_tx;
268 else
269 return ep->packet_sz;
270}
271
272
273#ifdef CONFIG_USB_INVENTRA_DMA
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305#endif
306
307
308
309
310
311
312
313
314static void txstate(struct musb *musb, struct musb_request *req)
315{
316 u8 epnum = req->epnum;
317 struct musb_ep *musb_ep;
318 void __iomem *epio = musb->endpoints[epnum].regs;
319 struct usb_request *request;
320 u16 fifo_count = 0, csr;
321 int use_dma = 0;
322
323 musb_ep = req->ep;
324
325
326 if (!musb_ep->desc) {
327 dev_dbg(musb->controller, "ep:%s disabled - ignore request\n",
328 musb_ep->end_point.name);
329 return;
330 }
331
332
333 if (dma_channel_status(musb_ep->dma) == MUSB_DMA_STATUS_BUSY) {
334 dev_dbg(musb->controller, "dma pending...\n");
335 return;
336 }
337
338
339 csr = musb_readw(epio, MUSB_TXCSR);
340
341 request = &req->request;
342 fifo_count = min(max_ep_writesize(musb, musb_ep),
343 (int)(request->length - request->actual));
344
345 if (csr & MUSB_TXCSR_TXPKTRDY) {
346 dev_dbg(musb->controller, "%s old packet still ready , txcsr %03x\n",
347 musb_ep->end_point.name, csr);
348 return;
349 }
350
351 if (csr & MUSB_TXCSR_P_SENDSTALL) {
352 dev_dbg(musb->controller, "%s stalling, txcsr %03x\n",
353 musb_ep->end_point.name, csr);
354 return;
355 }
356
357 dev_dbg(musb->controller, "hw_ep%d, maxpacket %d, fifo count %d, txcsr %03x\n",
358 epnum, musb_ep->packet_sz, fifo_count,
359 csr);
360
361#ifndef CONFIG_USB_MUSB_PIO_ONLY
362 if (is_buffer_mapped(req)) {
363 struct dma_controller *c = musb->dma_controller;
364 size_t request_size;
365
366
367 request_size = min_t(size_t, request->length - request->actual,
368 musb_ep->dma->max_len);
369
370 use_dma = (request->dma != DMA_ADDR_INVALID);
371
372
373
374#if defined(CONFIG_USB_INVENTRA_DMA) || defined(CONFIG_USB_UX500_DMA)
375 {
376 if (request_size < musb_ep->packet_sz)
377 musb_ep->dma->desired_mode = 0;
378 else
379 musb_ep->dma->desired_mode = 1;
380
381 use_dma = use_dma && c->channel_program(
382 musb_ep->dma, musb_ep->packet_sz,
383 musb_ep->dma->desired_mode,
384 request->dma + request->actual, request_size);
385 if (use_dma) {
386 if (musb_ep->dma->desired_mode == 0) {
387
388
389
390
391
392
393 csr &= ~(MUSB_TXCSR_AUTOSET
394 | MUSB_TXCSR_DMAENAB);
395 musb_writew(epio, MUSB_TXCSR, csr
396 | MUSB_TXCSR_P_WZC_BITS);
397 csr &= ~MUSB_TXCSR_DMAMODE;
398 csr |= (MUSB_TXCSR_DMAENAB |
399 MUSB_TXCSR_MODE);
400
401 } else {
402 csr |= (MUSB_TXCSR_DMAENAB
403 | MUSB_TXCSR_DMAMODE
404 | MUSB_TXCSR_MODE);
405 if (!musb_ep->hb_mult)
406 csr |= MUSB_TXCSR_AUTOSET;
407 }
408 csr &= ~MUSB_TXCSR_P_UNDERRUN;
409
410 musb_writew(epio, MUSB_TXCSR, csr);
411 }
412 }
413
414#elif defined(CONFIG_USB_TI_CPPI_DMA)
415
416 csr &= ~(MUSB_TXCSR_P_UNDERRUN | MUSB_TXCSR_TXPKTRDY);
417 csr |= MUSB_TXCSR_DMAENAB | MUSB_TXCSR_DMAMODE |
418 MUSB_TXCSR_MODE;
419 musb_writew(epio, MUSB_TXCSR,
420 (MUSB_TXCSR_P_WZC_BITS & ~MUSB_TXCSR_P_UNDERRUN)
421 | csr);
422
423
424 csr = musb_readw(epio, MUSB_TXCSR);
425
426
427
428
429
430
431
432
433
434
435
436 use_dma = use_dma && c->channel_program(
437 musb_ep->dma, musb_ep->packet_sz,
438 0,
439 request->dma + request->actual,
440 request_size);
441 if (!use_dma) {
442 c->channel_release(musb_ep->dma);
443 musb_ep->dma = NULL;
444 csr &= ~MUSB_TXCSR_DMAENAB;
445 musb_writew(epio, MUSB_TXCSR, csr);
446
447 }
448#elif defined(CONFIG_USB_TUSB_OMAP_DMA)
449 use_dma = use_dma && c->channel_program(
450 musb_ep->dma, musb_ep->packet_sz,
451 request->zero,
452 request->dma + request->actual,
453 request_size);
454#endif
455 }
456#endif
457
458 if (!use_dma) {
459
460
461
462
463 unmap_dma_buffer(req, musb);
464
465 musb_write_fifo(musb_ep->hw_ep, fifo_count,
466 (u8 *) (request->buf + request->actual));
467 request->actual += fifo_count;
468 csr |= MUSB_TXCSR_TXPKTRDY;
469 csr &= ~MUSB_TXCSR_P_UNDERRUN;
470 musb_writew(epio, MUSB_TXCSR, csr);
471 }
472
473
474 dev_dbg(musb->controller, "%s TX/IN %s len %d/%d, txcsr %04x, fifo %d/%d\n",
475 musb_ep->end_point.name, use_dma ? "dma" : "pio",
476 request->actual, request->length,
477 musb_readw(epio, MUSB_TXCSR),
478 fifo_count,
479 musb_readw(epio, MUSB_TXMAXP));
480}
481
482
483
484
485
486void musb_g_tx(struct musb *musb, u8 epnum)
487{
488 u16 csr;
489 struct musb_request *req;
490 struct usb_request *request;
491 u8 __iomem *mbase = musb->mregs;
492 struct musb_ep *musb_ep = &musb->endpoints[epnum].ep_in;
493 void __iomem *epio = musb->endpoints[epnum].regs;
494 struct dma_channel *dma;
495
496 musb_ep_select(mbase, epnum);
497 req = next_request(musb_ep);
498 request = &req->request;
499
500 csr = musb_readw(epio, MUSB_TXCSR);
501 dev_dbg(musb->controller, "<== %s, txcsr %04x\n", musb_ep->end_point.name, csr);
502
503 dma = is_dma_capable() ? musb_ep->dma : NULL;
504
505
506
507
508
509 if (csr & MUSB_TXCSR_P_SENTSTALL) {
510 csr |= MUSB_TXCSR_P_WZC_BITS;
511 csr &= ~MUSB_TXCSR_P_SENTSTALL;
512 musb_writew(epio, MUSB_TXCSR, csr);
513 return;
514 }
515
516 if (csr & MUSB_TXCSR_P_UNDERRUN) {
517
518 csr |= MUSB_TXCSR_P_WZC_BITS;
519 csr &= ~(MUSB_TXCSR_P_UNDERRUN | MUSB_TXCSR_TXPKTRDY);
520 musb_writew(epio, MUSB_TXCSR, csr);
521 dev_vdbg(musb->controller, "underrun on ep%d, req %p\n",
522 epnum, request);
523 }
524
525 if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) {
526
527
528
529
530 dev_dbg(musb->controller, "%s dma still busy?\n", musb_ep->end_point.name);
531 return;
532 }
533
534 if (request) {
535 u8 is_dma = 0;
536
537 if (dma && (csr & MUSB_TXCSR_DMAENAB)) {
538 is_dma = 1;
539 csr |= MUSB_TXCSR_P_WZC_BITS;
540 csr &= ~(MUSB_TXCSR_DMAENAB | MUSB_TXCSR_P_UNDERRUN |
541 MUSB_TXCSR_TXPKTRDY | MUSB_TXCSR_AUTOSET);
542 musb_writew(epio, MUSB_TXCSR, csr);
543
544 csr = musb_readw(epio, MUSB_TXCSR);
545 request->actual += musb_ep->dma->actual_len;
546 dev_dbg(musb->controller, "TXCSR%d %04x, DMA off, len %zu, req %p\n",
547 epnum, csr, musb_ep->dma->actual_len, request);
548 }
549
550
551
552
553
554 if ((request->zero && request->length
555 && (request->length % musb_ep->packet_sz == 0)
556 && (request->actual == request->length))
557#if defined(CONFIG_USB_INVENTRA_DMA) || defined(CONFIG_USB_UX500_DMA)
558 || (is_dma && (!dma->desired_mode ||
559 (request->actual &
560 (musb_ep->packet_sz - 1))))
561#endif
562 ) {
563
564
565
566
567 if (csr & MUSB_TXCSR_TXPKTRDY)
568 return;
569
570 dev_dbg(musb->controller, "sending zero pkt\n");
571 musb_writew(epio, MUSB_TXCSR, MUSB_TXCSR_MODE
572 | MUSB_TXCSR_TXPKTRDY);
573 request->zero = 0;
574 }
575
576 if (request->actual == request->length) {
577 musb_g_giveback(musb_ep, request, 0);
578
579
580
581
582
583
584
585
586 musb_ep_select(mbase, epnum);
587 req = musb_ep->desc ? next_request(musb_ep) : NULL;
588 if (!req) {
589 dev_dbg(musb->controller, "%s idle now\n",
590 musb_ep->end_point.name);
591 return;
592 }
593 }
594
595 txstate(musb, req);
596 }
597}
598
599
600
601#ifdef CONFIG_USB_INVENTRA_DMA
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630#endif
631
632
633
634
635static void rxstate(struct musb *musb, struct musb_request *req)
636{
637 const u8 epnum = req->epnum;
638 struct usb_request *request = &req->request;
639 struct musb_ep *musb_ep;
640 void __iomem *epio = musb->endpoints[epnum].regs;
641 unsigned fifo_count = 0;
642 u16 len;
643 u16 csr = musb_readw(epio, MUSB_RXCSR);
644 struct musb_hw_ep *hw_ep = &musb->endpoints[epnum];
645 u8 use_mode_1;
646
647 if (hw_ep->is_shared_fifo)
648 musb_ep = &hw_ep->ep_in;
649 else
650 musb_ep = &hw_ep->ep_out;
651
652 len = musb_ep->packet_sz;
653
654
655 if (!musb_ep->desc) {
656 dev_dbg(musb->controller, "ep:%s disabled - ignore request\n",
657 musb_ep->end_point.name);
658 return;
659 }
660
661
662 if (dma_channel_status(musb_ep->dma) == MUSB_DMA_STATUS_BUSY) {
663 dev_dbg(musb->controller, "DMA pending...\n");
664 return;
665 }
666
667 if (csr & MUSB_RXCSR_P_SENDSTALL) {
668 dev_dbg(musb->controller, "%s stalling, RXCSR %04x\n",
669 musb_ep->end_point.name, csr);
670 return;
671 }
672
673 if (is_cppi_enabled() && is_buffer_mapped(req)) {
674 struct dma_controller *c = musb->dma_controller;
675 struct dma_channel *channel = musb_ep->dma;
676
677
678
679
680
681
682 if (c->channel_program(channel,
683 musb_ep->packet_sz,
684 !request->short_not_ok,
685 request->dma + request->actual,
686 request->length - request->actual)) {
687
688
689
690
691
692 csr &= ~(MUSB_RXCSR_AUTOCLEAR
693 | MUSB_RXCSR_DMAMODE);
694 csr |= MUSB_RXCSR_DMAENAB | MUSB_RXCSR_P_WZC_BITS;
695 musb_writew(epio, MUSB_RXCSR, csr);
696 return;
697 }
698 }
699
700 if (csr & MUSB_RXCSR_RXPKTRDY) {
701 len = musb_readw(epio, MUSB_RXCOUNT);
702
703
704
705
706
707
708
709 if (request->short_not_ok && len == musb_ep->packet_sz)
710 use_mode_1 = 1;
711 else
712 use_mode_1 = 0;
713
714 if (request->actual < request->length) {
715#ifdef CONFIG_USB_INVENTRA_DMA
716 if (is_buffer_mapped(req)) {
717 struct dma_controller *c;
718 struct dma_channel *channel;
719 int use_dma = 0;
720
721 c = musb->dma_controller;
722 channel = musb_ep->dma;
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746 if (use_mode_1) {
747 csr |= MUSB_RXCSR_AUTOCLEAR;
748 musb_writew(epio, MUSB_RXCSR, csr);
749 csr |= MUSB_RXCSR_DMAENAB;
750 musb_writew(epio, MUSB_RXCSR, csr);
751
752
753
754
755
756
757 musb_writew(epio, MUSB_RXCSR,
758 csr | MUSB_RXCSR_DMAMODE);
759 musb_writew(epio, MUSB_RXCSR, csr);
760
761 } else {
762 if (!musb_ep->hb_mult &&
763 musb_ep->hw_ep->rx_double_buffered)
764 csr |= MUSB_RXCSR_AUTOCLEAR;
765 csr |= MUSB_RXCSR_DMAENAB;
766 musb_writew(epio, MUSB_RXCSR, csr);
767 }
768
769 if (request->actual < request->length) {
770 int transfer_size = 0;
771 if (use_mode_1) {
772 transfer_size = min(request->length - request->actual,
773 channel->max_len);
774 musb_ep->dma->desired_mode = 1;
775 } else {
776 transfer_size = min(request->length - request->actual,
777 (unsigned)len);
778 musb_ep->dma->desired_mode = 0;
779 }
780
781 use_dma = c->channel_program(
782 channel,
783 musb_ep->packet_sz,
784 channel->desired_mode,
785 request->dma
786 + request->actual,
787 transfer_size);
788 }
789
790 if (use_dma)
791 return;
792 }
793#elif defined(CONFIG_USB_UX500_DMA)
794 if ((is_buffer_mapped(req)) &&
795 (request->actual < request->length)) {
796
797 struct dma_controller *c;
798 struct dma_channel *channel;
799 int transfer_size = 0;
800
801 c = musb->dma_controller;
802 channel = musb_ep->dma;
803
804
805 if (len < musb_ep->packet_sz)
806 transfer_size = len;
807 else if (request->short_not_ok)
808 transfer_size = min(request->length -
809 request->actual,
810 channel->max_len);
811 else
812 transfer_size = min(request->length -
813 request->actual,
814 (unsigned)len);
815
816 csr &= ~MUSB_RXCSR_DMAMODE;
817 csr |= (MUSB_RXCSR_DMAENAB |
818 MUSB_RXCSR_AUTOCLEAR);
819
820 musb_writew(epio, MUSB_RXCSR, csr);
821
822 if (transfer_size <= musb_ep->packet_sz) {
823 musb_ep->dma->desired_mode = 0;
824 } else {
825 musb_ep->dma->desired_mode = 1;
826
827 csr |= MUSB_RXCSR_DMAMODE;
828 musb_writew(epio, MUSB_RXCSR, csr);
829 }
830
831 if (c->channel_program(channel,
832 musb_ep->packet_sz,
833 channel->desired_mode,
834 request->dma
835 + request->actual,
836 transfer_size))
837
838 return;
839 }
840#endif
841
842 fifo_count = request->length - request->actual;
843 dev_dbg(musb->controller, "%s OUT/RX pio fifo %d/%d, maxpacket %d\n",
844 musb_ep->end_point.name,
845 len, fifo_count,
846 musb_ep->packet_sz);
847
848 fifo_count = min_t(unsigned, len, fifo_count);
849
850#ifdef CONFIG_USB_TUSB_OMAP_DMA
851 if (tusb_dma_omap() && is_buffer_mapped(req)) {
852 struct dma_controller *c = musb->dma_controller;
853 struct dma_channel *channel = musb_ep->dma;
854 u32 dma_addr = request->dma + request->actual;
855 int ret;
856
857 ret = c->channel_program(channel,
858 musb_ep->packet_sz,
859 channel->desired_mode,
860 dma_addr,
861 fifo_count);
862 if (ret)
863 return;
864 }
865#endif
866
867
868
869
870
871 if (is_buffer_mapped(req)) {
872 unmap_dma_buffer(req, musb);
873
874
875
876
877
878 csr &= ~(MUSB_RXCSR_DMAENAB | MUSB_RXCSR_AUTOCLEAR);
879 musb_writew(epio, MUSB_RXCSR, csr);
880 }
881
882 musb_read_fifo(musb_ep->hw_ep, fifo_count, (u8 *)
883 (request->buf + request->actual));
884 request->actual += fifo_count;
885
886
887
888
889
890
891 csr |= MUSB_RXCSR_P_WZC_BITS;
892 csr &= ~MUSB_RXCSR_RXPKTRDY;
893 musb_writew(epio, MUSB_RXCSR, csr);
894 }
895 }
896
897
898 if (request->actual == request->length || len < musb_ep->packet_sz)
899 musb_g_giveback(musb_ep, request, 0);
900}
901
902
903
904
905void musb_g_rx(struct musb *musb, u8 epnum)
906{
907 u16 csr;
908 struct musb_request *req;
909 struct usb_request *request;
910 void __iomem *mbase = musb->mregs;
911 struct musb_ep *musb_ep;
912 void __iomem *epio = musb->endpoints[epnum].regs;
913 struct dma_channel *dma;
914 struct musb_hw_ep *hw_ep = &musb->endpoints[epnum];
915
916 if (hw_ep->is_shared_fifo)
917 musb_ep = &hw_ep->ep_in;
918 else
919 musb_ep = &hw_ep->ep_out;
920
921 musb_ep_select(mbase, epnum);
922
923 req = next_request(musb_ep);
924 if (!req)
925 return;
926
927 request = &req->request;
928
929 csr = musb_readw(epio, MUSB_RXCSR);
930 dma = is_dma_capable() ? musb_ep->dma : NULL;
931
932 dev_dbg(musb->controller, "<== %s, rxcsr %04x%s %p\n", musb_ep->end_point.name,
933 csr, dma ? " (dma)" : "", request);
934
935 if (csr & MUSB_RXCSR_P_SENTSTALL) {
936 csr |= MUSB_RXCSR_P_WZC_BITS;
937 csr &= ~MUSB_RXCSR_P_SENTSTALL;
938 musb_writew(epio, MUSB_RXCSR, csr);
939 return;
940 }
941
942 if (csr & MUSB_RXCSR_P_OVERRUN) {
943
944 csr &= ~MUSB_RXCSR_P_OVERRUN;
945 musb_writew(epio, MUSB_RXCSR, csr);
946
947 dev_dbg(musb->controller, "%s iso overrun on %p\n", musb_ep->name, request);
948 if (request->status == -EINPROGRESS)
949 request->status = -EOVERFLOW;
950 }
951 if (csr & MUSB_RXCSR_INCOMPRX) {
952
953 dev_dbg(musb->controller, "%s, incomprx\n", musb_ep->end_point.name);
954 }
955
956 if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) {
957
958 dev_dbg(musb->controller, "%s busy, csr %04x\n",
959 musb_ep->end_point.name, csr);
960 return;
961 }
962
963 if (dma && (csr & MUSB_RXCSR_DMAENAB)) {
964 csr &= ~(MUSB_RXCSR_AUTOCLEAR
965 | MUSB_RXCSR_DMAENAB
966 | MUSB_RXCSR_DMAMODE);
967 musb_writew(epio, MUSB_RXCSR,
968 MUSB_RXCSR_P_WZC_BITS | csr);
969
970 request->actual += musb_ep->dma->actual_len;
971
972 dev_dbg(musb->controller, "RXCSR%d %04x, dma off, %04x, len %zu, req %p\n",
973 epnum, csr,
974 musb_readw(epio, MUSB_RXCSR),
975 musb_ep->dma->actual_len, request);
976
977#if defined(CONFIG_USB_INVENTRA_DMA) || defined(CONFIG_USB_TUSB_OMAP_DMA) || \
978 defined(CONFIG_USB_UX500_DMA)
979
980 if ((dma->desired_mode == 0 && !hw_ep->rx_double_buffered)
981 || (dma->actual_len
982 & (musb_ep->packet_sz - 1))) {
983
984 csr &= ~MUSB_RXCSR_RXPKTRDY;
985 musb_writew(epio, MUSB_RXCSR, csr);
986 }
987
988
989 if ((request->actual < request->length)
990 && (musb_ep->dma->actual_len
991 == musb_ep->packet_sz)) {
992
993
994
995 csr = musb_readw(epio, MUSB_RXCSR);
996 if ((csr & MUSB_RXCSR_RXPKTRDY) &&
997 hw_ep->rx_double_buffered)
998 goto exit;
999 return;
1000 }
1001#endif
1002 musb_g_giveback(musb_ep, request, 0);
1003
1004
1005
1006
1007
1008
1009
1010
1011 musb_ep_select(mbase, epnum);
1012
1013 req = next_request(musb_ep);
1014 if (!req)
1015 return;
1016 }
1017#if defined(CONFIG_USB_INVENTRA_DMA) || defined(CONFIG_USB_TUSB_OMAP_DMA) || \
1018 defined(CONFIG_USB_UX500_DMA)
1019exit:
1020#endif
1021
1022 rxstate(musb, req);
1023}
1024
1025
1026
1027static int musb_gadget_enable(struct usb_ep *ep,
1028 const struct usb_endpoint_descriptor *desc)
1029{
1030 unsigned long flags;
1031 struct musb_ep *musb_ep;
1032 struct musb_hw_ep *hw_ep;
1033 void __iomem *regs;
1034 struct musb *musb;
1035 void __iomem *mbase;
1036 u8 epnum;
1037 u16 csr;
1038 unsigned tmp;
1039 int status = -EINVAL;
1040
1041 if (!ep || !desc)
1042 return -EINVAL;
1043
1044 musb_ep = to_musb_ep(ep);
1045 hw_ep = musb_ep->hw_ep;
1046 regs = hw_ep->regs;
1047 musb = musb_ep->musb;
1048 mbase = musb->mregs;
1049 epnum = musb_ep->current_epnum;
1050
1051 spin_lock_irqsave(&musb->lock, flags);
1052
1053 if (musb_ep->desc) {
1054 status = -EBUSY;
1055 goto fail;
1056 }
1057 musb_ep->type = usb_endpoint_type(desc);
1058
1059
1060 if (usb_endpoint_num(desc) != epnum)
1061 goto fail;
1062
1063
1064 tmp = usb_endpoint_maxp(desc);
1065 if (tmp & ~0x07ff) {
1066 int ok;
1067
1068 if (usb_endpoint_dir_in(desc))
1069 ok = musb->hb_iso_tx;
1070 else
1071 ok = musb->hb_iso_rx;
1072
1073 if (!ok) {
1074 dev_dbg(musb->controller, "no support for high bandwidth ISO\n");
1075 goto fail;
1076 }
1077 musb_ep->hb_mult = (tmp >> 11) & 3;
1078 } else {
1079 musb_ep->hb_mult = 0;
1080 }
1081
1082 musb_ep->packet_sz = tmp & 0x7ff;
1083 tmp = musb_ep->packet_sz * (musb_ep->hb_mult + 1);
1084
1085
1086
1087
1088 musb_ep_select(mbase, epnum);
1089 if (usb_endpoint_dir_in(desc)) {
1090 u16 int_txe = musb_readw(mbase, MUSB_INTRTXE);
1091
1092 if (hw_ep->is_shared_fifo)
1093 musb_ep->is_in = 1;
1094 if (!musb_ep->is_in)
1095 goto fail;
1096
1097 if (tmp > hw_ep->max_packet_sz_tx) {
1098 dev_dbg(musb->controller, "packet size beyond hardware FIFO size\n");
1099 goto fail;
1100 }
1101
1102 int_txe |= (1 << epnum);
1103 musb_writew(mbase, MUSB_INTRTXE, int_txe);
1104
1105
1106
1107
1108
1109
1110
1111 if (musb->double_buffer_not_ok)
1112 musb_writew(regs, MUSB_TXMAXP, hw_ep->max_packet_sz_tx);
1113 else
1114 musb_writew(regs, MUSB_TXMAXP, musb_ep->packet_sz
1115 | (musb_ep->hb_mult << 11));
1116
1117 csr = MUSB_TXCSR_MODE | MUSB_TXCSR_CLRDATATOG;
1118 if (musb_readw(regs, MUSB_TXCSR)
1119 & MUSB_TXCSR_FIFONOTEMPTY)
1120 csr |= MUSB_TXCSR_FLUSHFIFO;
1121 if (musb_ep->type == USB_ENDPOINT_XFER_ISOC)
1122 csr |= MUSB_TXCSR_P_ISO;
1123
1124
1125 musb_writew(regs, MUSB_TXCSR, csr);
1126
1127 musb_writew(regs, MUSB_TXCSR, csr);
1128
1129 } else {
1130 u16 int_rxe = musb_readw(mbase, MUSB_INTRRXE);
1131
1132 if (hw_ep->is_shared_fifo)
1133 musb_ep->is_in = 0;
1134 if (musb_ep->is_in)
1135 goto fail;
1136
1137 if (tmp > hw_ep->max_packet_sz_rx) {
1138 dev_dbg(musb->controller, "packet size beyond hardware FIFO size\n");
1139 goto fail;
1140 }
1141
1142 int_rxe |= (1 << epnum);
1143 musb_writew(mbase, MUSB_INTRRXE, int_rxe);
1144
1145
1146
1147
1148
1149
1150
1151 if (musb->double_buffer_not_ok)
1152 musb_writew(regs, MUSB_RXMAXP, hw_ep->max_packet_sz_tx);
1153 else
1154 musb_writew(regs, MUSB_RXMAXP, musb_ep->packet_sz
1155 | (musb_ep->hb_mult << 11));
1156
1157
1158 if (hw_ep->is_shared_fifo) {
1159 csr = musb_readw(regs, MUSB_TXCSR);
1160 csr &= ~(MUSB_TXCSR_MODE | MUSB_TXCSR_TXPKTRDY);
1161 musb_writew(regs, MUSB_TXCSR, csr);
1162 }
1163
1164 csr = MUSB_RXCSR_FLUSHFIFO | MUSB_RXCSR_CLRDATATOG;
1165 if (musb_ep->type == USB_ENDPOINT_XFER_ISOC)
1166 csr |= MUSB_RXCSR_P_ISO;
1167 else if (musb_ep->type == USB_ENDPOINT_XFER_INT)
1168 csr |= MUSB_RXCSR_DISNYET;
1169
1170
1171 musb_writew(regs, MUSB_RXCSR, csr);
1172 musb_writew(regs, MUSB_RXCSR, csr);
1173 }
1174
1175
1176
1177
1178 if (is_dma_capable() && musb->dma_controller) {
1179 struct dma_controller *c = musb->dma_controller;
1180
1181 musb_ep->dma = c->channel_alloc(c, hw_ep,
1182 (desc->bEndpointAddress & USB_DIR_IN));
1183 } else
1184 musb_ep->dma = NULL;
1185
1186 musb_ep->desc = desc;
1187 musb_ep->busy = 0;
1188 musb_ep->wedged = 0;
1189 status = 0;
1190
1191 pr_debug("%s periph: enabled %s for %s %s, %smaxpacket %d\n",
1192 musb_driver_name, musb_ep->end_point.name,
1193 ({ char *s; switch (musb_ep->type) {
1194 case USB_ENDPOINT_XFER_BULK: s = "bulk"; break;
1195 case USB_ENDPOINT_XFER_INT: s = "int"; break;
1196 default: s = "iso"; break;
1197 }; s; }),
1198 musb_ep->is_in ? "IN" : "OUT",
1199 musb_ep->dma ? "dma, " : "",
1200 musb_ep->packet_sz);
1201
1202 schedule_work(&musb->irq_work);
1203
1204fail:
1205 spin_unlock_irqrestore(&musb->lock, flags);
1206 return status;
1207}
1208
1209
1210
1211
1212static int musb_gadget_disable(struct usb_ep *ep)
1213{
1214 unsigned long flags;
1215 struct musb *musb;
1216 u8 epnum;
1217 struct musb_ep *musb_ep;
1218 void __iomem *epio;
1219 int status = 0;
1220
1221 musb_ep = to_musb_ep(ep);
1222 musb = musb_ep->musb;
1223 epnum = musb_ep->current_epnum;
1224 epio = musb->endpoints[epnum].regs;
1225
1226 spin_lock_irqsave(&musb->lock, flags);
1227 musb_ep_select(musb->mregs, epnum);
1228
1229
1230 if (musb_ep->is_in) {
1231 u16 int_txe = musb_readw(musb->mregs, MUSB_INTRTXE);
1232 int_txe &= ~(1 << epnum);
1233 musb_writew(musb->mregs, MUSB_INTRTXE, int_txe);
1234 musb_writew(epio, MUSB_TXMAXP, 0);
1235 } else {
1236 u16 int_rxe = musb_readw(musb->mregs, MUSB_INTRRXE);
1237 int_rxe &= ~(1 << epnum);
1238 musb_writew(musb->mregs, MUSB_INTRRXE, int_rxe);
1239 musb_writew(epio, MUSB_RXMAXP, 0);
1240 }
1241
1242 musb_ep->desc = NULL;
1243#ifndef __UBOOT__
1244 musb_ep->end_point.desc = NULL;
1245#endif
1246
1247
1248 nuke(musb_ep, -ESHUTDOWN);
1249
1250 schedule_work(&musb->irq_work);
1251
1252 spin_unlock_irqrestore(&(musb->lock), flags);
1253
1254 dev_dbg(musb->controller, "%s\n", musb_ep->end_point.name);
1255
1256 return status;
1257}
1258
1259
1260
1261
1262
1263struct usb_request *musb_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
1264{
1265 struct musb_ep *musb_ep = to_musb_ep(ep);
1266 struct musb *musb = musb_ep->musb;
1267 struct musb_request *request = NULL;
1268
1269 request = kzalloc(sizeof *request, gfp_flags);
1270 if (!request) {
1271 dev_dbg(musb->controller, "not enough memory\n");
1272 return NULL;
1273 }
1274
1275 request->request.dma = DMA_ADDR_INVALID;
1276 request->epnum = musb_ep->current_epnum;
1277 request->ep = musb_ep;
1278
1279 return &request->request;
1280}
1281
1282
1283
1284
1285
1286void musb_free_request(struct usb_ep *ep, struct usb_request *req)
1287{
1288 kfree(to_musb_request(req));
1289}
1290
1291static LIST_HEAD(buffers);
1292
1293struct free_record {
1294 struct list_head list;
1295 struct device *dev;
1296 unsigned bytes;
1297 dma_addr_t dma;
1298};
1299
1300
1301
1302
1303void musb_ep_restart(struct musb *musb, struct musb_request *req)
1304{
1305 dev_dbg(musb->controller, "<== %s request %p len %u on hw_ep%d\n",
1306 req->tx ? "TX/IN" : "RX/OUT",
1307 &req->request, req->request.length, req->epnum);
1308
1309 musb_ep_select(musb->mregs, req->epnum);
1310 if (req->tx)
1311 txstate(musb, req);
1312 else
1313 rxstate(musb, req);
1314}
1315
1316static int musb_gadget_queue(struct usb_ep *ep, struct usb_request *req,
1317 gfp_t gfp_flags)
1318{
1319 struct musb_ep *musb_ep;
1320 struct musb_request *request;
1321 struct musb *musb;
1322 int status = 0;
1323 unsigned long lockflags;
1324
1325 if (!ep || !req)
1326 return -EINVAL;
1327 if (!req->buf)
1328 return -ENODATA;
1329
1330 musb_ep = to_musb_ep(ep);
1331 musb = musb_ep->musb;
1332
1333 request = to_musb_request(req);
1334 request->musb = musb;
1335
1336 if (request->ep != musb_ep)
1337 return -EINVAL;
1338
1339 dev_dbg(musb->controller, "<== to %s request=%p\n", ep->name, req);
1340
1341
1342 request->request.actual = 0;
1343 request->request.status = -EINPROGRESS;
1344 request->epnum = musb_ep->current_epnum;
1345 request->tx = musb_ep->is_in;
1346
1347 map_dma_buffer(request, musb, musb_ep);
1348
1349 spin_lock_irqsave(&musb->lock, lockflags);
1350
1351
1352 if (!musb_ep->desc) {
1353 dev_dbg(musb->controller, "req %p queued to %s while ep %s\n",
1354 req, ep->name, "disabled");
1355 status = -ESHUTDOWN;
1356 goto cleanup;
1357 }
1358
1359
1360 list_add_tail(&request->list, &musb_ep->req_list);
1361
1362
1363 if (!musb_ep->busy && &request->list == musb_ep->req_list.next)
1364 musb_ep_restart(musb, request);
1365
1366cleanup:
1367 spin_unlock_irqrestore(&musb->lock, lockflags);
1368 return status;
1369}
1370
1371static int musb_gadget_dequeue(struct usb_ep *ep, struct usb_request *request)
1372{
1373 struct musb_ep *musb_ep = to_musb_ep(ep);
1374 struct musb_request *req = to_musb_request(request);
1375 struct musb_request *r;
1376 unsigned long flags;
1377 int status = 0;
1378 struct musb *musb = musb_ep->musb;
1379
1380 if (!ep || !request || to_musb_request(request)->ep != musb_ep)
1381 return -EINVAL;
1382
1383 spin_lock_irqsave(&musb->lock, flags);
1384
1385 list_for_each_entry(r, &musb_ep->req_list, list) {
1386 if (r == req)
1387 break;
1388 }
1389 if (r != req) {
1390 dev_dbg(musb->controller, "request %p not queued to %s\n", request, ep->name);
1391 status = -EINVAL;
1392 goto done;
1393 }
1394
1395
1396 if (musb_ep->req_list.next != &req->list || musb_ep->busy)
1397 musb_g_giveback(musb_ep, request, -ECONNRESET);
1398
1399
1400 else if (is_dma_capable() && musb_ep->dma) {
1401 struct dma_controller *c = musb->dma_controller;
1402
1403 musb_ep_select(musb->mregs, musb_ep->current_epnum);
1404 if (c->channel_abort)
1405 status = c->channel_abort(musb_ep->dma);
1406 else
1407 status = -EBUSY;
1408 if (status == 0)
1409 musb_g_giveback(musb_ep, request, -ECONNRESET);
1410 } else {
1411
1412
1413
1414 musb_g_giveback(musb_ep, request, -ECONNRESET);
1415 }
1416
1417done:
1418 spin_unlock_irqrestore(&musb->lock, flags);
1419 return status;
1420}
1421
1422
1423
1424
1425
1426
1427
1428static int musb_gadget_set_halt(struct usb_ep *ep, int value)
1429{
1430 struct musb_ep *musb_ep = to_musb_ep(ep);
1431 u8 epnum = musb_ep->current_epnum;
1432 struct musb *musb = musb_ep->musb;
1433 void __iomem *epio = musb->endpoints[epnum].regs;
1434 void __iomem *mbase;
1435 unsigned long flags;
1436 u16 csr;
1437 struct musb_request *request;
1438 int status = 0;
1439
1440 if (!ep)
1441 return -EINVAL;
1442 mbase = musb->mregs;
1443
1444 spin_lock_irqsave(&musb->lock, flags);
1445
1446 if ((USB_ENDPOINT_XFER_ISOC == musb_ep->type)) {
1447 status = -EINVAL;
1448 goto done;
1449 }
1450
1451 musb_ep_select(mbase, epnum);
1452
1453 request = next_request(musb_ep);
1454 if (value) {
1455 if (request) {
1456 dev_dbg(musb->controller, "request in progress, cannot halt %s\n",
1457 ep->name);
1458 status = -EAGAIN;
1459 goto done;
1460 }
1461
1462 if (musb_ep->is_in) {
1463 csr = musb_readw(epio, MUSB_TXCSR);
1464 if (csr & MUSB_TXCSR_FIFONOTEMPTY) {
1465 dev_dbg(musb->controller, "FIFO busy, cannot halt %s\n", ep->name);
1466 status = -EAGAIN;
1467 goto done;
1468 }
1469 }
1470 } else
1471 musb_ep->wedged = 0;
1472
1473
1474 dev_dbg(musb->controller, "%s: %s stall\n", ep->name, value ? "set" : "clear");
1475 if (musb_ep->is_in) {
1476 csr = musb_readw(epio, MUSB_TXCSR);
1477 csr |= MUSB_TXCSR_P_WZC_BITS
1478 | MUSB_TXCSR_CLRDATATOG;
1479 if (value)
1480 csr |= MUSB_TXCSR_P_SENDSTALL;
1481 else
1482 csr &= ~(MUSB_TXCSR_P_SENDSTALL
1483 | MUSB_TXCSR_P_SENTSTALL);
1484 csr &= ~MUSB_TXCSR_TXPKTRDY;
1485 musb_writew(epio, MUSB_TXCSR, csr);
1486 } else {
1487 csr = musb_readw(epio, MUSB_RXCSR);
1488 csr |= MUSB_RXCSR_P_WZC_BITS
1489 | MUSB_RXCSR_FLUSHFIFO
1490 | MUSB_RXCSR_CLRDATATOG;
1491 if (value)
1492 csr |= MUSB_RXCSR_P_SENDSTALL;
1493 else
1494 csr &= ~(MUSB_RXCSR_P_SENDSTALL
1495 | MUSB_RXCSR_P_SENTSTALL);
1496 musb_writew(epio, MUSB_RXCSR, csr);
1497 }
1498
1499
1500 if (!musb_ep->busy && !value && request) {
1501 dev_dbg(musb->controller, "restarting the request\n");
1502 musb_ep_restart(musb, request);
1503 }
1504
1505done:
1506 spin_unlock_irqrestore(&musb->lock, flags);
1507 return status;
1508}
1509
1510#ifndef __UBOOT__
1511
1512
1513
1514static int musb_gadget_set_wedge(struct usb_ep *ep)
1515{
1516 struct musb_ep *musb_ep = to_musb_ep(ep);
1517
1518 if (!ep)
1519 return -EINVAL;
1520
1521 musb_ep->wedged = 1;
1522
1523 return usb_ep_set_halt(ep);
1524}
1525#endif
1526
1527static int musb_gadget_fifo_status(struct usb_ep *ep)
1528{
1529 struct musb_ep *musb_ep = to_musb_ep(ep);
1530 void __iomem *epio = musb_ep->hw_ep->regs;
1531 int retval = -EINVAL;
1532
1533 if (musb_ep->desc && !musb_ep->is_in) {
1534 struct musb *musb = musb_ep->musb;
1535 int epnum = musb_ep->current_epnum;
1536 void __iomem *mbase = musb->mregs;
1537 unsigned long flags;
1538
1539 spin_lock_irqsave(&musb->lock, flags);
1540
1541 musb_ep_select(mbase, epnum);
1542
1543 retval = musb_readw(epio, MUSB_RXCOUNT);
1544
1545 spin_unlock_irqrestore(&musb->lock, flags);
1546 }
1547 return retval;
1548}
1549
1550static void musb_gadget_fifo_flush(struct usb_ep *ep)
1551{
1552 struct musb_ep *musb_ep = to_musb_ep(ep);
1553 struct musb *musb = musb_ep->musb;
1554 u8 epnum = musb_ep->current_epnum;
1555 void __iomem *epio = musb->endpoints[epnum].regs;
1556 void __iomem *mbase;
1557 unsigned long flags;
1558 u16 csr, int_txe;
1559
1560 mbase = musb->mregs;
1561
1562 spin_lock_irqsave(&musb->lock, flags);
1563 musb_ep_select(mbase, (u8) epnum);
1564
1565
1566 int_txe = musb_readw(mbase, MUSB_INTRTXE);
1567 musb_writew(mbase, MUSB_INTRTXE, int_txe & ~(1 << epnum));
1568
1569 if (musb_ep->is_in) {
1570 csr = musb_readw(epio, MUSB_TXCSR);
1571 if (csr & MUSB_TXCSR_FIFONOTEMPTY) {
1572 csr |= MUSB_TXCSR_FLUSHFIFO | MUSB_TXCSR_P_WZC_BITS;
1573
1574
1575
1576
1577
1578 csr &= ~MUSB_TXCSR_TXPKTRDY;
1579 musb_writew(epio, MUSB_TXCSR, csr);
1580
1581 musb_writew(epio, MUSB_TXCSR, csr);
1582 }
1583 } else {
1584 csr = musb_readw(epio, MUSB_RXCSR);
1585 csr |= MUSB_RXCSR_FLUSHFIFO | MUSB_RXCSR_P_WZC_BITS;
1586 musb_writew(epio, MUSB_RXCSR, csr);
1587 musb_writew(epio, MUSB_RXCSR, csr);
1588 }
1589
1590
1591 musb_writew(mbase, MUSB_INTRTXE, int_txe);
1592 spin_unlock_irqrestore(&musb->lock, flags);
1593}
1594
1595static const struct usb_ep_ops musb_ep_ops = {
1596 .enable = musb_gadget_enable,
1597 .disable = musb_gadget_disable,
1598 .alloc_request = musb_alloc_request,
1599 .free_request = musb_free_request,
1600 .queue = musb_gadget_queue,
1601 .dequeue = musb_gadget_dequeue,
1602 .set_halt = musb_gadget_set_halt,
1603#ifndef __UBOOT__
1604 .set_wedge = musb_gadget_set_wedge,
1605#endif
1606 .fifo_status = musb_gadget_fifo_status,
1607 .fifo_flush = musb_gadget_fifo_flush
1608};
1609
1610
1611
1612static int musb_gadget_get_frame(struct usb_gadget *gadget)
1613{
1614 struct musb *musb = gadget_to_musb(gadget);
1615
1616 return (int)musb_readw(musb->mregs, MUSB_FRAME);
1617}
1618
1619static int musb_gadget_wakeup(struct usb_gadget *gadget)
1620{
1621#ifndef __UBOOT__
1622 struct musb *musb = gadget_to_musb(gadget);
1623 void __iomem *mregs = musb->mregs;
1624 unsigned long flags;
1625 int status = -EINVAL;
1626 u8 power, devctl;
1627 int retries;
1628
1629 spin_lock_irqsave(&musb->lock, flags);
1630
1631 switch (musb->xceiv->state) {
1632 case OTG_STATE_B_PERIPHERAL:
1633
1634
1635
1636
1637 if (musb->may_wakeup && musb->is_suspended)
1638 break;
1639 goto done;
1640 case OTG_STATE_B_IDLE:
1641
1642 devctl = musb_readb(mregs, MUSB_DEVCTL);
1643 dev_dbg(musb->controller, "Sending SRP: devctl: %02x\n", devctl);
1644 devctl |= MUSB_DEVCTL_SESSION;
1645 musb_writeb(mregs, MUSB_DEVCTL, devctl);
1646 devctl = musb_readb(mregs, MUSB_DEVCTL);
1647 retries = 100;
1648 while (!(devctl & MUSB_DEVCTL_SESSION)) {
1649 devctl = musb_readb(mregs, MUSB_DEVCTL);
1650 if (retries-- < 1)
1651 break;
1652 }
1653 retries = 10000;
1654 while (devctl & MUSB_DEVCTL_SESSION) {
1655 devctl = musb_readb(mregs, MUSB_DEVCTL);
1656 if (retries-- < 1)
1657 break;
1658 }
1659
1660 spin_unlock_irqrestore(&musb->lock, flags);
1661 otg_start_srp(musb->xceiv->otg);
1662 spin_lock_irqsave(&musb->lock, flags);
1663
1664
1665 musb_platform_try_idle(musb,
1666 jiffies + msecs_to_jiffies(1 * HZ));
1667
1668 status = 0;
1669 goto done;
1670 default:
1671 dev_dbg(musb->controller, "Unhandled wake: %s\n",
1672 otg_state_string(musb->xceiv->state));
1673 goto done;
1674 }
1675
1676 status = 0;
1677
1678 power = musb_readb(mregs, MUSB_POWER);
1679 power |= MUSB_POWER_RESUME;
1680 musb_writeb(mregs, MUSB_POWER, power);
1681 dev_dbg(musb->controller, "issue wakeup\n");
1682
1683
1684 mdelay(2);
1685
1686 power = musb_readb(mregs, MUSB_POWER);
1687 power &= ~MUSB_POWER_RESUME;
1688 musb_writeb(mregs, MUSB_POWER, power);
1689done:
1690 spin_unlock_irqrestore(&musb->lock, flags);
1691 return status;
1692#else
1693 return 0;
1694#endif
1695}
1696
1697static int
1698musb_gadget_set_self_powered(struct usb_gadget *gadget, int is_selfpowered)
1699{
1700 struct musb *musb = gadget_to_musb(gadget);
1701
1702 musb->is_self_powered = !!is_selfpowered;
1703 return 0;
1704}
1705
1706static void musb_pullup(struct musb *musb, int is_on)
1707{
1708 u8 power;
1709
1710 power = musb_readb(musb->mregs, MUSB_POWER);
1711 if (is_on)
1712 power |= MUSB_POWER_SOFTCONN;
1713 else
1714 power &= ~MUSB_POWER_SOFTCONN;
1715
1716
1717
1718 dev_dbg(musb->controller, "gadget D+ pullup %s\n",
1719 is_on ? "on" : "off");
1720 musb_writeb(musb->mregs, MUSB_POWER, power);
1721}
1722
1723#if 0
1724static int musb_gadget_vbus_session(struct usb_gadget *gadget, int is_active)
1725{
1726 dev_dbg(musb->controller, "<= %s =>\n", __func__);
1727
1728
1729
1730
1731
1732
1733 return -EINVAL;
1734}
1735#endif
1736
1737static int musb_gadget_vbus_draw(struct usb_gadget *gadget, unsigned mA)
1738{
1739#ifndef __UBOOT__
1740 struct musb *musb = gadget_to_musb(gadget);
1741
1742 if (!musb->xceiv->set_power)
1743 return -EOPNOTSUPP;
1744 return usb_phy_set_power(musb->xceiv, mA);
1745#else
1746 return 0;
1747#endif
1748}
1749
1750static int musb_gadget_pullup(struct usb_gadget *gadget, int is_on)
1751{
1752 struct musb *musb = gadget_to_musb(gadget);
1753 unsigned long flags;
1754
1755 is_on = !!is_on;
1756
1757 pm_runtime_get_sync(musb->controller);
1758
1759
1760
1761
1762 spin_lock_irqsave(&musb->lock, flags);
1763 if (is_on != musb->softconnect) {
1764 musb->softconnect = is_on;
1765 musb_pullup(musb, is_on);
1766 }
1767 spin_unlock_irqrestore(&musb->lock, flags);
1768
1769 pm_runtime_put(musb->controller);
1770
1771 return 0;
1772}
1773
1774#ifndef __UBOOT__
1775static int musb_gadget_start(struct usb_gadget *g,
1776 struct usb_gadget_driver *driver);
1777static int musb_gadget_stop(struct usb_gadget *g,
1778 struct usb_gadget_driver *driver);
1779#endif
1780
1781static const struct usb_gadget_ops musb_gadget_operations = {
1782 .get_frame = musb_gadget_get_frame,
1783 .wakeup = musb_gadget_wakeup,
1784 .set_selfpowered = musb_gadget_set_self_powered,
1785
1786 .vbus_draw = musb_gadget_vbus_draw,
1787 .pullup = musb_gadget_pullup,
1788#ifndef __UBOOT__
1789 .udc_start = musb_gadget_start,
1790 .udc_stop = musb_gadget_stop,
1791#endif
1792};
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803#ifndef __UBOOT__
1804static void musb_gadget_release(struct device *dev)
1805{
1806
1807 dev_dbg(dev, "%s\n", __func__);
1808}
1809#endif
1810
1811
1812static void __devinit
1813init_peripheral_ep(struct musb *musb, struct musb_ep *ep, u8 epnum, int is_in)
1814{
1815 struct musb_hw_ep *hw_ep = musb->endpoints + epnum;
1816
1817 memset(ep, 0, sizeof *ep);
1818
1819 ep->current_epnum = epnum;
1820 ep->musb = musb;
1821 ep->hw_ep = hw_ep;
1822 ep->is_in = is_in;
1823
1824 INIT_LIST_HEAD(&ep->req_list);
1825
1826 sprintf(ep->name, "ep%d%s", epnum,
1827 (!epnum || hw_ep->is_shared_fifo) ? "" : (
1828 is_in ? "in" : "out"));
1829 ep->end_point.name = ep->name;
1830 INIT_LIST_HEAD(&ep->end_point.ep_list);
1831 if (!epnum) {
1832 ep->end_point.maxpacket = 64;
1833 ep->end_point.ops = &musb_g_ep0_ops;
1834 musb->g.ep0 = &ep->end_point;
1835 } else {
1836 if (is_in)
1837 ep->end_point.maxpacket = hw_ep->max_packet_sz_tx;
1838 else
1839 ep->end_point.maxpacket = hw_ep->max_packet_sz_rx;
1840 ep->end_point.ops = &musb_ep_ops;
1841 list_add_tail(&ep->end_point.ep_list, &musb->g.ep_list);
1842 }
1843}
1844
1845
1846
1847
1848
1849static inline void __devinit musb_g_init_endpoints(struct musb *musb)
1850{
1851 u8 epnum;
1852 struct musb_hw_ep *hw_ep;
1853 unsigned count = 0;
1854
1855
1856 INIT_LIST_HEAD(&(musb->g.ep_list));
1857
1858 for (epnum = 0, hw_ep = musb->endpoints;
1859 epnum < musb->nr_endpoints;
1860 epnum++, hw_ep++) {
1861 if (hw_ep->is_shared_fifo ) {
1862 init_peripheral_ep(musb, &hw_ep->ep_in, epnum, 0);
1863 count++;
1864 } else {
1865 if (hw_ep->max_packet_sz_tx) {
1866 init_peripheral_ep(musb, &hw_ep->ep_in,
1867 epnum, 1);
1868 count++;
1869 }
1870 if (hw_ep->max_packet_sz_rx) {
1871 init_peripheral_ep(musb, &hw_ep->ep_out,
1872 epnum, 0);
1873 count++;
1874 }
1875 }
1876 }
1877}
1878
1879
1880
1881
1882int __devinit musb_gadget_setup(struct musb *musb)
1883{
1884 int status;
1885
1886
1887
1888
1889
1890
1891 musb->g.ops = &musb_gadget_operations;
1892#ifndef __UBOOT__
1893 musb->g.max_speed = USB_SPEED_HIGH;
1894#endif
1895 musb->g.speed = USB_SPEED_UNKNOWN;
1896
1897#ifndef __UBOOT__
1898
1899 dev_set_name(&musb->g.dev, "gadget");
1900 musb->g.dev.parent = musb->controller;
1901 musb->g.dev.dma_mask = musb->controller->dma_mask;
1902 musb->g.dev.release = musb_gadget_release;
1903#endif
1904 musb->g.name = musb_driver_name;
1905
1906#ifndef __UBOOT__
1907 if (is_otg_enabled(musb))
1908 musb->g.is_otg = 1;
1909#endif
1910
1911 musb_g_init_endpoints(musb);
1912
1913 musb->is_active = 0;
1914 musb_platform_try_idle(musb, 0);
1915
1916#ifndef __UBOOT__
1917 status = device_register(&musb->g.dev);
1918 if (status != 0) {
1919 put_device(&musb->g.dev);
1920 return status;
1921 }
1922 status = usb_add_gadget_udc(musb->controller, &musb->g);
1923 if (status)
1924 goto err;
1925#endif
1926
1927 return 0;
1928#ifndef __UBOOT__
1929err:
1930 musb->g.dev.parent = NULL;
1931 device_unregister(&musb->g.dev);
1932 return status;
1933#endif
1934}
1935
1936void musb_gadget_cleanup(struct musb *musb)
1937{
1938#ifndef __UBOOT__
1939 usb_del_gadget_udc(&musb->g);
1940 if (musb->g.dev.parent)
1941 device_unregister(&musb->g.dev);
1942#endif
1943}
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956#ifndef __UBOOT__
1957static int musb_gadget_start(struct usb_gadget *g,
1958 struct usb_gadget_driver *driver)
1959#else
1960int musb_gadget_start(struct usb_gadget *g,
1961 struct usb_gadget_driver *driver)
1962#endif
1963{
1964 struct musb *musb = gadget_to_musb(g);
1965#ifndef __UBOOT__
1966 struct usb_otg *otg = musb->xceiv->otg;
1967#endif
1968 unsigned long flags;
1969 int retval = -EINVAL;
1970
1971#ifndef __UBOOT__
1972 if (driver->max_speed < USB_SPEED_HIGH)
1973 goto err0;
1974#endif
1975
1976 pm_runtime_get_sync(musb->controller);
1977
1978#ifndef __UBOOT__
1979 dev_dbg(musb->controller, "registering driver %s\n", driver->function);
1980#endif
1981
1982 musb->softconnect = 0;
1983 musb->gadget_driver = driver;
1984
1985 spin_lock_irqsave(&musb->lock, flags);
1986 musb->is_active = 1;
1987
1988#ifndef __UBOOT__
1989 otg_set_peripheral(otg, &musb->g);
1990 musb->xceiv->state = OTG_STATE_B_IDLE;
1991
1992
1993
1994
1995
1996
1997
1998
1999 if (!is_otg_enabled(musb))
2000#endif
2001 musb_start(musb);
2002
2003 spin_unlock_irqrestore(&musb->lock, flags);
2004
2005#ifndef __UBOOT__
2006 if (is_otg_enabled(musb)) {
2007 struct usb_hcd *hcd = musb_to_hcd(musb);
2008
2009 dev_dbg(musb->controller, "OTG startup...\n");
2010
2011
2012
2013
2014
2015 retval = usb_add_hcd(musb_to_hcd(musb), 0, 0);
2016 if (retval < 0) {
2017 dev_dbg(musb->controller, "add_hcd failed, %d\n", retval);
2018 goto err2;
2019 }
2020
2021 if ((musb->xceiv->last_event == USB_EVENT_ID)
2022 && otg->set_vbus)
2023 otg_set_vbus(otg, 1);
2024
2025 hcd->self.uses_pio_for_control = 1;
2026 }
2027 if (musb->xceiv->last_event == USB_EVENT_NONE)
2028 pm_runtime_put(musb->controller);
2029#endif
2030
2031 return 0;
2032
2033#ifndef __UBOOT__
2034err2:
2035 if (!is_otg_enabled(musb))
2036 musb_stop(musb);
2037err0:
2038 return retval;
2039#endif
2040}
2041
2042#ifndef __UBOOT__
2043static void stop_activity(struct musb *musb, struct usb_gadget_driver *driver)
2044{
2045 int i;
2046 struct musb_hw_ep *hw_ep;
2047
2048
2049 if (musb->g.speed == USB_SPEED_UNKNOWN)
2050 driver = NULL;
2051 else
2052 musb->g.speed = USB_SPEED_UNKNOWN;
2053
2054
2055 if (musb->softconnect) {
2056 musb->softconnect = 0;
2057 musb_pullup(musb, 0);
2058 }
2059 musb_stop(musb);
2060
2061
2062
2063
2064 if (driver) {
2065 for (i = 0, hw_ep = musb->endpoints;
2066 i < musb->nr_endpoints;
2067 i++, hw_ep++) {
2068 musb_ep_select(musb->mregs, i);
2069 if (hw_ep->is_shared_fifo ) {
2070 nuke(&hw_ep->ep_in, -ESHUTDOWN);
2071 } else {
2072 if (hw_ep->max_packet_sz_tx)
2073 nuke(&hw_ep->ep_in, -ESHUTDOWN);
2074 if (hw_ep->max_packet_sz_rx)
2075 nuke(&hw_ep->ep_out, -ESHUTDOWN);
2076 }
2077 }
2078 }
2079}
2080
2081
2082
2083
2084
2085
2086
2087static int musb_gadget_stop(struct usb_gadget *g,
2088 struct usb_gadget_driver *driver)
2089{
2090 struct musb *musb = gadget_to_musb(g);
2091 unsigned long flags;
2092
2093 if (musb->xceiv->last_event == USB_EVENT_NONE)
2094 pm_runtime_get_sync(musb->controller);
2095
2096
2097
2098
2099
2100
2101 spin_lock_irqsave(&musb->lock, flags);
2102
2103 musb_hnp_stop(musb);
2104
2105 (void) musb_gadget_vbus_draw(&musb->g, 0);
2106
2107 musb->xceiv->state = OTG_STATE_UNDEFINED;
2108 stop_activity(musb, driver);
2109 otg_set_peripheral(musb->xceiv->otg, NULL);
2110
2111 dev_dbg(musb->controller, "unregistering driver %s\n", driver->function);
2112
2113 musb->is_active = 0;
2114 musb_platform_try_idle(musb, 0);
2115 spin_unlock_irqrestore(&musb->lock, flags);
2116
2117 if (is_otg_enabled(musb)) {
2118 usb_remove_hcd(musb_to_hcd(musb));
2119
2120
2121
2122
2123 }
2124
2125 if (!is_otg_enabled(musb))
2126 musb_stop(musb);
2127
2128 pm_runtime_put(musb->controller);
2129
2130 return 0;
2131}
2132#endif
2133
2134
2135
2136
2137
2138void musb_g_resume(struct musb *musb)
2139{
2140#ifndef __UBOOT__
2141 musb->is_suspended = 0;
2142 switch (musb->xceiv->state) {
2143 case OTG_STATE_B_IDLE:
2144 break;
2145 case OTG_STATE_B_WAIT_ACON:
2146 case OTG_STATE_B_PERIPHERAL:
2147 musb->is_active = 1;
2148 if (musb->gadget_driver && musb->gadget_driver->resume) {
2149 spin_unlock(&musb->lock);
2150 musb->gadget_driver->resume(&musb->g);
2151 spin_lock(&musb->lock);
2152 }
2153 break;
2154 default:
2155 WARNING("unhandled RESUME transition (%s)\n",
2156 otg_state_string(musb->xceiv->state));
2157 }
2158#endif
2159}
2160
2161
2162void musb_g_suspend(struct musb *musb)
2163{
2164#ifndef __UBOOT__
2165 u8 devctl;
2166
2167 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
2168 dev_dbg(musb->controller, "devctl %02x\n", devctl);
2169
2170 switch (musb->xceiv->state) {
2171 case OTG_STATE_B_IDLE:
2172 if ((devctl & MUSB_DEVCTL_VBUS) == MUSB_DEVCTL_VBUS)
2173 musb->xceiv->state = OTG_STATE_B_PERIPHERAL;
2174 break;
2175 case OTG_STATE_B_PERIPHERAL:
2176 musb->is_suspended = 1;
2177 if (musb->gadget_driver && musb->gadget_driver->suspend) {
2178 spin_unlock(&musb->lock);
2179 musb->gadget_driver->suspend(&musb->g);
2180 spin_lock(&musb->lock);
2181 }
2182 break;
2183 default:
2184
2185
2186
2187 WARNING("unhandled SUSPEND transition (%s)\n",
2188 otg_state_string(musb->xceiv->state));
2189 }
2190#endif
2191}
2192
2193
2194void musb_g_wakeup(struct musb *musb)
2195{
2196 musb_gadget_wakeup(&musb->g);
2197}
2198
2199
2200void musb_g_disconnect(struct musb *musb)
2201{
2202 void __iomem *mregs = musb->mregs;
2203 u8 devctl = musb_readb(mregs, MUSB_DEVCTL);
2204
2205 dev_dbg(musb->controller, "devctl %02x\n", devctl);
2206
2207
2208 musb_writeb(mregs, MUSB_DEVCTL, devctl & MUSB_DEVCTL_SESSION);
2209
2210
2211 (void) musb_gadget_vbus_draw(&musb->g, 0);
2212
2213 musb->g.speed = USB_SPEED_UNKNOWN;
2214 if (musb->gadget_driver && musb->gadget_driver->disconnect) {
2215 spin_unlock(&musb->lock);
2216 musb->gadget_driver->disconnect(&musb->g);
2217 spin_lock(&musb->lock);
2218 }
2219
2220#ifndef __UBOOT__
2221 switch (musb->xceiv->state) {
2222 default:
2223 dev_dbg(musb->controller, "Unhandled disconnect %s, setting a_idle\n",
2224 otg_state_string(musb->xceiv->state));
2225 musb->xceiv->state = OTG_STATE_A_IDLE;
2226 MUSB_HST_MODE(musb);
2227 break;
2228 case OTG_STATE_A_PERIPHERAL:
2229 musb->xceiv->state = OTG_STATE_A_WAIT_BCON;
2230 MUSB_HST_MODE(musb);
2231 break;
2232 case OTG_STATE_B_WAIT_ACON:
2233 case OTG_STATE_B_HOST:
2234 case OTG_STATE_B_PERIPHERAL:
2235 case OTG_STATE_B_IDLE:
2236 musb->xceiv->state = OTG_STATE_B_IDLE;
2237 break;
2238 case OTG_STATE_B_SRP_INIT:
2239 break;
2240 }
2241#endif
2242
2243 musb->is_active = 0;
2244}
2245
2246void musb_g_reset(struct musb *musb)
2247__releases(musb->lock)
2248__acquires(musb->lock)
2249{
2250 void __iomem *mbase = musb->mregs;
2251 u8 devctl = musb_readb(mbase, MUSB_DEVCTL);
2252 u8 power;
2253
2254#ifndef __UBOOT__
2255 dev_dbg(musb->controller, "<== %s addr=%x driver '%s'\n",
2256 (devctl & MUSB_DEVCTL_BDEVICE)
2257 ? "B-Device" : "A-Device",
2258 musb_readb(mbase, MUSB_FADDR),
2259 musb->gadget_driver
2260 ? musb->gadget_driver->driver.name
2261 : NULL
2262 );
2263#endif
2264
2265
2266 if (musb->g.speed != USB_SPEED_UNKNOWN)
2267 musb_g_disconnect(musb);
2268
2269
2270 else if (devctl & MUSB_DEVCTL_HR)
2271 musb_writeb(mbase, MUSB_DEVCTL, MUSB_DEVCTL_SESSION);
2272
2273
2274
2275 power = musb_readb(mbase, MUSB_POWER);
2276 musb->g.speed = (power & MUSB_POWER_HSMODE)
2277 ? USB_SPEED_HIGH : USB_SPEED_FULL;
2278
2279
2280 musb->is_active = 1;
2281 musb->is_suspended = 0;
2282 MUSB_DEV_MODE(musb);
2283 musb->address = 0;
2284 musb->ep0_state = MUSB_EP0_STAGE_SETUP;
2285
2286 musb->may_wakeup = 0;
2287 musb->g.b_hnp_enable = 0;
2288 musb->g.a_alt_hnp_support = 0;
2289 musb->g.a_hnp_support = 0;
2290
2291#ifndef __UBOOT__
2292
2293
2294
2295 if (devctl & MUSB_DEVCTL_BDEVICE) {
2296 musb->xceiv->state = OTG_STATE_B_PERIPHERAL;
2297 musb->g.is_a_peripheral = 0;
2298 } else if (is_otg_enabled(musb)) {
2299 musb->xceiv->state = OTG_STATE_A_PERIPHERAL;
2300 musb->g.is_a_peripheral = 1;
2301 } else
2302 WARN_ON(1);
2303
2304
2305 (void) musb_gadget_vbus_draw(&musb->g,
2306 is_otg_enabled(musb) ? 8 : 100);
2307#endif
2308}
2309