1
2
3
4
5
6
7
8#include <linux/module.h>
9#include <linux/kernel.h>
10#include <linux/types.h>
11#include <linux/errno.h>
12#include <linux/err.h>
13#include <linux/platform_device.h>
14#include <linux/delay.h>
15#include <linux/list.h>
16#include <linux/interrupt.h>
17#include <linux/proc_fs.h>
18#include <linux/clk.h>
19#include <linux/irq.h>
20#include <linux/gpio.h>
21#include <linux/gpio/consumer.h>
22#include <linux/slab.h>
23#include <linux/prefetch.h>
24#include <linux/byteorder/generic.h>
25#include <linux/platform_data/pxa2xx_udc.h>
26#include <linux/of_device.h>
27#include <linux/of_gpio.h>
28
29#include <linux/usb.h>
30#include <linux/usb/ch9.h>
31#include <linux/usb/gadget.h>
32#include <linux/usb/phy.h>
33
34#include "pxa27x_udc.h"
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#define DRIVER_VERSION "2008-04-18"
74#define DRIVER_DESC "PXA 27x USB Device Controller driver"
75
76static const char driver_name[] = "pxa27x_udc";
77static struct pxa_udc *the_controller;
78
79static void handle_ep(struct pxa_ep *ep);
80
81
82
83
84#ifdef CONFIG_USB_GADGET_DEBUG_FS
85
86#include <linux/debugfs.h>
87#include <linux/uaccess.h>
88#include <linux/seq_file.h>
89
90static int state_dbg_show(struct seq_file *s, void *p)
91{
92 struct pxa_udc *udc = s->private;
93 u32 tmp;
94
95 if (!udc->driver)
96 return -ENODEV;
97
98
99 seq_printf(s, DRIVER_DESC "\n"
100 "%s version: %s\n"
101 "Gadget driver: %s\n",
102 driver_name, DRIVER_VERSION,
103 udc->driver ? udc->driver->driver.name : "(none)");
104
105 tmp = udc_readl(udc, UDCCR);
106 seq_printf(s,
107 "udccr=0x%0x(%s%s%s%s%s%s%s%s%s%s), con=%d,inter=%d,altinter=%d\n",
108 tmp,
109 (tmp & UDCCR_OEN) ? " oen":"",
110 (tmp & UDCCR_AALTHNP) ? " aalthnp":"",
111 (tmp & UDCCR_AHNP) ? " rem" : "",
112 (tmp & UDCCR_BHNP) ? " rstir" : "",
113 (tmp & UDCCR_DWRE) ? " dwre" : "",
114 (tmp & UDCCR_SMAC) ? " smac" : "",
115 (tmp & UDCCR_EMCE) ? " emce" : "",
116 (tmp & UDCCR_UDR) ? " udr" : "",
117 (tmp & UDCCR_UDA) ? " uda" : "",
118 (tmp & UDCCR_UDE) ? " ude" : "",
119 (tmp & UDCCR_ACN) >> UDCCR_ACN_S,
120 (tmp & UDCCR_AIN) >> UDCCR_AIN_S,
121 (tmp & UDCCR_AAISN) >> UDCCR_AAISN_S);
122
123 seq_printf(s, "udcicr0=0x%08x udcicr1=0x%08x\n",
124 udc_readl(udc, UDCICR0), udc_readl(udc, UDCICR1));
125 seq_printf(s, "udcisr0=0x%08x udcisr1=0x%08x\n",
126 udc_readl(udc, UDCISR0), udc_readl(udc, UDCISR1));
127 seq_printf(s, "udcfnr=%d\n", udc_readl(udc, UDCFNR));
128 seq_printf(s, "irqs: reset=%lu, suspend=%lu, resume=%lu, reconfig=%lu\n",
129 udc->stats.irqs_reset, udc->stats.irqs_suspend,
130 udc->stats.irqs_resume, udc->stats.irqs_reconfig);
131
132 return 0;
133}
134DEFINE_SHOW_ATTRIBUTE(state_dbg);
135
136static int queues_dbg_show(struct seq_file *s, void *p)
137{
138 struct pxa_udc *udc = s->private;
139 struct pxa_ep *ep;
140 struct pxa27x_request *req;
141 int i, maxpkt;
142
143 if (!udc->driver)
144 return -ENODEV;
145
146
147 for (i = 0; i < NR_PXA_ENDPOINTS; i++) {
148 ep = &udc->pxa_ep[i];
149 maxpkt = ep->fifo_size;
150 seq_printf(s, "%-12s max_pkt=%d %s\n",
151 EPNAME(ep), maxpkt, "pio");
152
153 if (list_empty(&ep->queue)) {
154 seq_puts(s, "\t(nothing queued)\n");
155 continue;
156 }
157
158 list_for_each_entry(req, &ep->queue, queue) {
159 seq_printf(s, "\treq %p len %d/%d buf %p\n",
160 &req->req, req->req.actual,
161 req->req.length, req->req.buf);
162 }
163 }
164
165 return 0;
166}
167DEFINE_SHOW_ATTRIBUTE(queues_dbg);
168
169static int eps_dbg_show(struct seq_file *s, void *p)
170{
171 struct pxa_udc *udc = s->private;
172 struct pxa_ep *ep;
173 int i;
174 u32 tmp;
175
176 if (!udc->driver)
177 return -ENODEV;
178
179 ep = &udc->pxa_ep[0];
180 tmp = udc_ep_readl(ep, UDCCSR);
181 seq_printf(s, "udccsr0=0x%03x(%s%s%s%s%s%s%s)\n",
182 tmp,
183 (tmp & UDCCSR0_SA) ? " sa" : "",
184 (tmp & UDCCSR0_RNE) ? " rne" : "",
185 (tmp & UDCCSR0_FST) ? " fst" : "",
186 (tmp & UDCCSR0_SST) ? " sst" : "",
187 (tmp & UDCCSR0_DME) ? " dme" : "",
188 (tmp & UDCCSR0_IPR) ? " ipr" : "",
189 (tmp & UDCCSR0_OPC) ? " opc" : "");
190 for (i = 0; i < NR_PXA_ENDPOINTS; i++) {
191 ep = &udc->pxa_ep[i];
192 tmp = i? udc_ep_readl(ep, UDCCR) : udc_readl(udc, UDCCR);
193 seq_printf(s, "%-12s: IN %lu(%lu reqs), OUT %lu(%lu reqs), irqs=%lu, udccr=0x%08x, udccsr=0x%03x, udcbcr=%d\n",
194 EPNAME(ep),
195 ep->stats.in_bytes, ep->stats.in_ops,
196 ep->stats.out_bytes, ep->stats.out_ops,
197 ep->stats.irqs,
198 tmp, udc_ep_readl(ep, UDCCSR),
199 udc_ep_readl(ep, UDCBCR));
200 }
201
202 return 0;
203}
204DEFINE_SHOW_ATTRIBUTE(eps_dbg);
205
206static void pxa_init_debugfs(struct pxa_udc *udc)
207{
208 struct dentry *root;
209
210 root = debugfs_create_dir(udc->gadget.name, usb_debug_root);
211 debugfs_create_file("udcstate", 0400, root, udc, &state_dbg_fops);
212 debugfs_create_file("queues", 0400, root, udc, &queues_dbg_fops);
213 debugfs_create_file("epstate", 0400, root, udc, &eps_dbg_fops);
214}
215
216static void pxa_cleanup_debugfs(struct pxa_udc *udc)
217{
218 debugfs_remove(debugfs_lookup(udc->gadget.name, usb_debug_root));
219}
220
221#else
222static inline void pxa_init_debugfs(struct pxa_udc *udc)
223{
224}
225
226static inline void pxa_cleanup_debugfs(struct pxa_udc *udc)
227{
228}
229#endif
230
231
232
233
234
235
236
237
238
239
240
241static int is_match_usb_pxa(struct udc_usb_ep *udc_usb_ep, struct pxa_ep *ep,
242 int config, int interface, int altsetting)
243{
244 if (usb_endpoint_num(&udc_usb_ep->desc) != ep->addr)
245 return 0;
246 if (usb_endpoint_dir_in(&udc_usb_ep->desc) != ep->dir_in)
247 return 0;
248 if (usb_endpoint_type(&udc_usb_ep->desc) != ep->type)
249 return 0;
250 if ((ep->config != config) || (ep->interface != interface)
251 || (ep->alternate != altsetting))
252 return 0;
253 return 1;
254}
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281static struct pxa_ep *find_pxa_ep(struct pxa_udc *udc,
282 struct udc_usb_ep *udc_usb_ep)
283{
284 int i;
285 struct pxa_ep *ep;
286 int cfg = udc->config;
287 int iface = udc->last_interface;
288 int alt = udc->last_alternate;
289
290 if (udc_usb_ep == &udc->udc_usb_ep[0])
291 return &udc->pxa_ep[0];
292
293 for (i = 1; i < NR_PXA_ENDPOINTS; i++) {
294 ep = &udc->pxa_ep[i];
295 if (is_match_usb_pxa(udc_usb_ep, ep, cfg, iface, alt))
296 return ep;
297 }
298 return NULL;
299}
300
301
302
303
304
305
306
307
308
309
310
311static void update_pxa_ep_matches(struct pxa_udc *udc)
312{
313 int i;
314 struct udc_usb_ep *udc_usb_ep;
315
316 for (i = 1; i < NR_USB_ENDPOINTS; i++) {
317 udc_usb_ep = &udc->udc_usb_ep[i];
318 if (udc_usb_ep->pxa_ep)
319 udc_usb_ep->pxa_ep = find_pxa_ep(udc, udc_usb_ep);
320 }
321}
322
323
324
325
326
327static void pio_irq_enable(struct pxa_ep *ep)
328{
329 struct pxa_udc *udc = ep->dev;
330 int index = EPIDX(ep);
331 u32 udcicr0 = udc_readl(udc, UDCICR0);
332 u32 udcicr1 = udc_readl(udc, UDCICR1);
333
334 if (index < 16)
335 udc_writel(udc, UDCICR0, udcicr0 | (3 << (index * 2)));
336 else
337 udc_writel(udc, UDCICR1, udcicr1 | (3 << ((index - 16) * 2)));
338}
339
340
341
342
343
344static void pio_irq_disable(struct pxa_ep *ep)
345{
346 struct pxa_udc *udc = ep->dev;
347 int index = EPIDX(ep);
348 u32 udcicr0 = udc_readl(udc, UDCICR0);
349 u32 udcicr1 = udc_readl(udc, UDCICR1);
350
351 if (index < 16)
352 udc_writel(udc, UDCICR0, udcicr0 & ~(3 << (index * 2)));
353 else
354 udc_writel(udc, UDCICR1, udcicr1 & ~(3 << ((index - 16) * 2)));
355}
356
357
358
359
360
361
362
363
364static inline void udc_set_mask_UDCCR(struct pxa_udc *udc, int mask)
365{
366 u32 udccr = udc_readl(udc, UDCCR);
367 udc_writel(udc, UDCCR,
368 (udccr & UDCCR_MASK_BITS) | (mask & UDCCR_MASK_BITS));
369}
370
371
372
373
374
375
376
377
378static inline void udc_clear_mask_UDCCR(struct pxa_udc *udc, int mask)
379{
380 u32 udccr = udc_readl(udc, UDCCR);
381 udc_writel(udc, UDCCR,
382 (udccr & UDCCR_MASK_BITS) & ~(mask & UDCCR_MASK_BITS));
383}
384
385
386
387
388
389
390
391
392
393
394
395static inline void ep_write_UDCCSR(struct pxa_ep *ep, int mask)
396{
397 if (is_ep0(ep))
398 mask |= UDCCSR0_ACM;
399 udc_ep_writel(ep, UDCCSR, mask);
400}
401
402
403
404
405
406
407
408static int ep_count_bytes_remain(struct pxa_ep *ep)
409{
410 if (ep->dir_in)
411 return -EOPNOTSUPP;
412 return udc_ep_readl(ep, UDCBCR) & 0x3ff;
413}
414
415
416
417
418
419
420
421
422
423
424
425static int ep_is_empty(struct pxa_ep *ep)
426{
427 int ret;
428
429 if (!is_ep0(ep) && ep->dir_in)
430 return -EOPNOTSUPP;
431 if (is_ep0(ep))
432 ret = !(udc_ep_readl(ep, UDCCSR) & UDCCSR0_RNE);
433 else
434 ret = !(udc_ep_readl(ep, UDCCSR) & UDCCSR_BNE);
435 return ret;
436}
437
438
439
440
441
442
443
444
445
446
447static int ep_is_full(struct pxa_ep *ep)
448{
449 if (is_ep0(ep))
450 return (udc_ep_readl(ep, UDCCSR) & UDCCSR0_IPR);
451 if (!ep->dir_in)
452 return -EOPNOTSUPP;
453 return (!(udc_ep_readl(ep, UDCCSR) & UDCCSR_BNF));
454}
455
456
457
458
459
460
461
462static int epout_has_pkt(struct pxa_ep *ep)
463{
464 if (!is_ep0(ep) && ep->dir_in)
465 return -EOPNOTSUPP;
466 if (is_ep0(ep))
467 return (udc_ep_readl(ep, UDCCSR) & UDCCSR0_OPC);
468 return (udc_ep_readl(ep, UDCCSR) & UDCCSR_PC);
469}
470
471
472
473
474
475
476static void set_ep0state(struct pxa_udc *udc, int state)
477{
478 struct pxa_ep *ep = &udc->pxa_ep[0];
479 char *old_stname = EP0_STNAME(udc);
480
481 udc->ep0state = state;
482 ep_dbg(ep, "state=%s->%s, udccsr0=0x%03x, udcbcr=%d\n", old_stname,
483 EP0_STNAME(udc), udc_ep_readl(ep, UDCCSR),
484 udc_ep_readl(ep, UDCBCR));
485}
486
487
488
489
490
491static void ep0_idle(struct pxa_udc *dev)
492{
493 set_ep0state(dev, WAIT_FOR_SETUP);
494}
495
496
497
498
499
500
501
502static void inc_ep_stats_reqs(struct pxa_ep *ep, int is_in)
503{
504 if (is_in)
505 ep->stats.in_ops++;
506 else
507 ep->stats.out_ops++;
508}
509
510
511
512
513
514
515
516static void inc_ep_stats_bytes(struct pxa_ep *ep, int count, int is_in)
517{
518 if (is_in)
519 ep->stats.in_bytes += count;
520 else
521 ep->stats.out_bytes += count;
522}
523
524
525
526
527
528
529
530static void pxa_ep_setup(struct pxa_ep *ep)
531{
532 u32 new_udccr;
533
534 new_udccr = ((ep->config << UDCCONR_CN_S) & UDCCONR_CN)
535 | ((ep->interface << UDCCONR_IN_S) & UDCCONR_IN)
536 | ((ep->alternate << UDCCONR_AISN_S) & UDCCONR_AISN)
537 | ((EPADDR(ep) << UDCCONR_EN_S) & UDCCONR_EN)
538 | ((EPXFERTYPE(ep) << UDCCONR_ET_S) & UDCCONR_ET)
539 | ((ep->dir_in) ? UDCCONR_ED : 0)
540 | ((ep->fifo_size << UDCCONR_MPS_S) & UDCCONR_MPS)
541 | UDCCONR_EE;
542
543 udc_ep_writel(ep, UDCCR, new_udccr);
544}
545
546
547
548
549
550
551
552static void pxa_eps_setup(struct pxa_udc *dev)
553{
554 unsigned int i;
555
556 dev_dbg(dev->dev, "%s: dev=%p\n", __func__, dev);
557
558 for (i = 1; i < NR_PXA_ENDPOINTS; i++)
559 pxa_ep_setup(&dev->pxa_ep[i]);
560}
561
562
563
564
565
566
567
568
569
570
571static struct usb_request *
572pxa_ep_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
573{
574 struct pxa27x_request *req;
575
576 req = kzalloc(sizeof *req, gfp_flags);
577 if (!req)
578 return NULL;
579
580 INIT_LIST_HEAD(&req->queue);
581 req->in_use = 0;
582 req->udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
583
584 return &req->req;
585}
586
587
588
589
590
591
592
593
594static void pxa_ep_free_request(struct usb_ep *_ep, struct usb_request *_req)
595{
596 struct pxa27x_request *req;
597
598 req = container_of(_req, struct pxa27x_request, req);
599 WARN_ON(!list_empty(&req->queue));
600 kfree(req);
601}
602
603
604
605
606
607
608
609
610
611
612
613static void ep_add_request(struct pxa_ep *ep, struct pxa27x_request *req)
614{
615 if (unlikely(!req))
616 return;
617 ep_vdbg(ep, "req:%p, lg=%d, udccsr=0x%03x\n", req,
618 req->req.length, udc_ep_readl(ep, UDCCSR));
619
620 req->in_use = 1;
621 list_add_tail(&req->queue, &ep->queue);
622 pio_irq_enable(ep);
623}
624
625
626
627
628
629
630
631
632
633
634
635
636static void ep_del_request(struct pxa_ep *ep, struct pxa27x_request *req)
637{
638 if (unlikely(!req))
639 return;
640 ep_vdbg(ep, "req:%p, lg=%d, udccsr=0x%03x\n", req,
641 req->req.length, udc_ep_readl(ep, UDCCSR));
642
643 list_del_init(&req->queue);
644 req->in_use = 0;
645 if (!is_ep0(ep) && list_empty(&ep->queue))
646 pio_irq_disable(ep);
647}
648
649
650
651
652
653
654
655
656
657
658
659
660static void req_done(struct pxa_ep *ep, struct pxa27x_request *req, int status,
661 unsigned long *pflags)
662{
663 unsigned long flags;
664
665 ep_del_request(ep, req);
666 if (likely(req->req.status == -EINPROGRESS))
667 req->req.status = status;
668 else
669 status = req->req.status;
670
671 if (status && status != -ESHUTDOWN)
672 ep_dbg(ep, "complete req %p stat %d len %u/%u\n",
673 &req->req, status,
674 req->req.actual, req->req.length);
675
676 if (pflags)
677 spin_unlock_irqrestore(&ep->lock, *pflags);
678 local_irq_save(flags);
679 usb_gadget_giveback_request(&req->udc_usb_ep->usb_ep, &req->req);
680 local_irq_restore(flags);
681 if (pflags)
682 spin_lock_irqsave(&ep->lock, *pflags);
683}
684
685
686
687
688
689
690
691
692
693
694
695static void ep_end_out_req(struct pxa_ep *ep, struct pxa27x_request *req,
696 unsigned long *pflags)
697{
698 inc_ep_stats_reqs(ep, !USB_DIR_IN);
699 req_done(ep, req, 0, pflags);
700}
701
702
703
704
705
706
707
708
709
710
711
712
713static void ep0_end_out_req(struct pxa_ep *ep, struct pxa27x_request *req,
714 unsigned long *pflags)
715{
716 set_ep0state(ep->dev, OUT_STATUS_STAGE);
717 ep_end_out_req(ep, req, pflags);
718 ep0_idle(ep->dev);
719}
720
721
722
723
724
725
726
727
728
729
730
731static void ep_end_in_req(struct pxa_ep *ep, struct pxa27x_request *req,
732 unsigned long *pflags)
733{
734 inc_ep_stats_reqs(ep, USB_DIR_IN);
735 req_done(ep, req, 0, pflags);
736}
737
738
739
740
741
742
743
744
745
746
747
748
749static void ep0_end_in_req(struct pxa_ep *ep, struct pxa27x_request *req,
750 unsigned long *pflags)
751{
752 set_ep0state(ep->dev, IN_STATUS_STAGE);
753 ep_end_in_req(ep, req, pflags);
754}
755
756
757
758
759
760
761
762
763
764
765
766static void nuke(struct pxa_ep *ep, int status)
767{
768 struct pxa27x_request *req;
769 unsigned long flags;
770
771 spin_lock_irqsave(&ep->lock, flags);
772 while (!list_empty(&ep->queue)) {
773 req = list_entry(ep->queue.next, struct pxa27x_request, queue);
774 req_done(ep, req, status, &flags);
775 }
776 spin_unlock_irqrestore(&ep->lock, flags);
777}
778
779
780
781
782
783
784
785
786
787
788
789
790static int read_packet(struct pxa_ep *ep, struct pxa27x_request *req)
791{
792 u32 *buf;
793 int bytes_ep, bufferspace, count, i;
794
795 bytes_ep = ep_count_bytes_remain(ep);
796 bufferspace = req->req.length - req->req.actual;
797
798 buf = (u32 *)(req->req.buf + req->req.actual);
799 prefetchw(buf);
800
801 if (likely(!ep_is_empty(ep)))
802 count = min(bytes_ep, bufferspace);
803 else
804 count = 0;
805
806 for (i = count; i > 0; i -= 4)
807 *buf++ = udc_ep_readl(ep, UDCDR);
808 req->req.actual += count;
809
810 ep_write_UDCCSR(ep, UDCCSR_PC);
811
812 return count;
813}
814
815
816
817
818
819
820
821
822
823
824
825
826
827static int write_packet(struct pxa_ep *ep, struct pxa27x_request *req,
828 unsigned int max)
829{
830 int length, count, remain, i;
831 u32 *buf;
832 u8 *buf_8;
833
834 buf = (u32 *)(req->req.buf + req->req.actual);
835 prefetch(buf);
836
837 length = min(req->req.length - req->req.actual, max);
838 req->req.actual += length;
839
840 remain = length & 0x3;
841 count = length & ~(0x3);
842 for (i = count; i > 0 ; i -= 4)
843 udc_ep_writel(ep, UDCDR, *buf++);
844
845 buf_8 = (u8 *)buf;
846 for (i = remain; i > 0; i--)
847 udc_ep_writeb(ep, UDCDR, *buf_8++);
848
849 ep_vdbg(ep, "length=%d+%d, udccsr=0x%03x\n", count, remain,
850 udc_ep_readl(ep, UDCCSR));
851
852 return length;
853}
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869static int read_fifo(struct pxa_ep *ep, struct pxa27x_request *req)
870{
871 int count, is_short, completed = 0;
872
873 while (epout_has_pkt(ep)) {
874 count = read_packet(ep, req);
875 inc_ep_stats_bytes(ep, count, !USB_DIR_IN);
876
877 is_short = (count < ep->fifo_size);
878 ep_dbg(ep, "read udccsr:%03x, count:%d bytes%s req %p %d/%d\n",
879 udc_ep_readl(ep, UDCCSR), count, is_short ? "/S" : "",
880 &req->req, req->req.actual, req->req.length);
881
882
883 if (is_short || req->req.actual == req->req.length) {
884 completed = 1;
885 break;
886 }
887
888 }
889 return completed;
890}
891
892
893
894
895
896
897
898
899
900
901
902
903
904static int write_fifo(struct pxa_ep *ep, struct pxa27x_request *req)
905{
906 unsigned max;
907 int count, is_short, is_last = 0, completed = 0, totcount = 0;
908 u32 udccsr;
909
910 max = ep->fifo_size;
911 do {
912 udccsr = udc_ep_readl(ep, UDCCSR);
913 if (udccsr & UDCCSR_PC) {
914 ep_vdbg(ep, "Clearing Transmit Complete, udccsr=%x\n",
915 udccsr);
916 ep_write_UDCCSR(ep, UDCCSR_PC);
917 }
918 if (udccsr & UDCCSR_TRN) {
919 ep_vdbg(ep, "Clearing Underrun on, udccsr=%x\n",
920 udccsr);
921 ep_write_UDCCSR(ep, UDCCSR_TRN);
922 }
923
924 count = write_packet(ep, req, max);
925 inc_ep_stats_bytes(ep, count, USB_DIR_IN);
926 totcount += count;
927
928
929 if (unlikely(count < max)) {
930 is_last = 1;
931 is_short = 1;
932 } else {
933 if (likely(req->req.length > req->req.actual)
934 || req->req.zero)
935 is_last = 0;
936 else
937 is_last = 1;
938
939 is_short = unlikely(max < ep->fifo_size);
940 }
941
942 if (is_short)
943 ep_write_UDCCSR(ep, UDCCSR_SP);
944
945
946 if (is_last) {
947 completed = 1;
948 break;
949 }
950 } while (!ep_is_full(ep));
951
952 ep_dbg(ep, "wrote count:%d bytes%s%s, left:%d req=%p\n",
953 totcount, is_last ? "/L" : "", is_short ? "/S" : "",
954 req->req.length - req->req.actual, &req->req);
955
956 return completed;
957}
958
959
960
961
962
963
964
965
966
967
968
969
970static int read_ep0_fifo(struct pxa_ep *ep, struct pxa27x_request *req)
971{
972 int count, is_short, completed = 0;
973
974 while (epout_has_pkt(ep)) {
975 count = read_packet(ep, req);
976 ep_write_UDCCSR(ep, UDCCSR0_OPC);
977 inc_ep_stats_bytes(ep, count, !USB_DIR_IN);
978
979 is_short = (count < ep->fifo_size);
980 ep_dbg(ep, "read udccsr:%03x, count:%d bytes%s req %p %d/%d\n",
981 udc_ep_readl(ep, UDCCSR), count, is_short ? "/S" : "",
982 &req->req, req->req.actual, req->req.length);
983
984 if (is_short || req->req.actual >= req->req.length) {
985 completed = 1;
986 break;
987 }
988 }
989
990 return completed;
991}
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008static int write_ep0_fifo(struct pxa_ep *ep, struct pxa27x_request *req)
1009{
1010 unsigned count;
1011 int is_last, is_short;
1012
1013 count = write_packet(ep, req, EP0_FIFO_SIZE);
1014 inc_ep_stats_bytes(ep, count, USB_DIR_IN);
1015
1016 is_short = (count < EP0_FIFO_SIZE);
1017 is_last = ((count == 0) || (count < EP0_FIFO_SIZE));
1018
1019
1020 if (unlikely(is_short))
1021 ep_write_UDCCSR(ep, UDCCSR0_IPR);
1022
1023 ep_dbg(ep, "in %d bytes%s%s, %d left, req=%p, udccsr0=0x%03x\n",
1024 count, is_short ? "/S" : "", is_last ? "/L" : "",
1025 req->req.length - req->req.actual,
1026 &req->req, udc_ep_readl(ep, UDCCSR));
1027
1028 return is_last;
1029}
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043static int pxa_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
1044 gfp_t gfp_flags)
1045{
1046 struct udc_usb_ep *udc_usb_ep;
1047 struct pxa_ep *ep;
1048 struct pxa27x_request *req;
1049 struct pxa_udc *dev;
1050 unsigned long flags;
1051 int rc = 0;
1052 int is_first_req;
1053 unsigned length;
1054 int recursion_detected;
1055
1056 req = container_of(_req, struct pxa27x_request, req);
1057 udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
1058
1059 if (unlikely(!_req || !_req->complete || !_req->buf))
1060 return -EINVAL;
1061
1062 if (unlikely(!_ep))
1063 return -EINVAL;
1064
1065 ep = udc_usb_ep->pxa_ep;
1066 if (unlikely(!ep))
1067 return -EINVAL;
1068
1069 dev = ep->dev;
1070 if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)) {
1071 ep_dbg(ep, "bogus device state\n");
1072 return -ESHUTDOWN;
1073 }
1074
1075
1076
1077
1078 if (unlikely(EPXFERTYPE_is_ISO(ep)
1079 && req->req.length > ep->fifo_size))
1080 return -EMSGSIZE;
1081
1082 spin_lock_irqsave(&ep->lock, flags);
1083 recursion_detected = ep->in_handle_ep;
1084
1085 is_first_req = list_empty(&ep->queue);
1086 ep_dbg(ep, "queue req %p(first=%s), len %d buf %p\n",
1087 _req, is_first_req ? "yes" : "no",
1088 _req->length, _req->buf);
1089
1090 if (!ep->enabled) {
1091 _req->status = -ESHUTDOWN;
1092 rc = -ESHUTDOWN;
1093 goto out_locked;
1094 }
1095
1096 if (req->in_use) {
1097 ep_err(ep, "refusing to queue req %p (already queued)\n", req);
1098 goto out_locked;
1099 }
1100
1101 length = _req->length;
1102 _req->status = -EINPROGRESS;
1103 _req->actual = 0;
1104
1105 ep_add_request(ep, req);
1106 spin_unlock_irqrestore(&ep->lock, flags);
1107
1108 if (is_ep0(ep)) {
1109 switch (dev->ep0state) {
1110 case WAIT_ACK_SET_CONF_INTERF:
1111 if (length == 0) {
1112 ep_end_in_req(ep, req, NULL);
1113 } else {
1114 ep_err(ep, "got a request of %d bytes while"
1115 "in state WAIT_ACK_SET_CONF_INTERF\n",
1116 length);
1117 ep_del_request(ep, req);
1118 rc = -EL2HLT;
1119 }
1120 ep0_idle(ep->dev);
1121 break;
1122 case IN_DATA_STAGE:
1123 if (!ep_is_full(ep))
1124 if (write_ep0_fifo(ep, req))
1125 ep0_end_in_req(ep, req, NULL);
1126 break;
1127 case OUT_DATA_STAGE:
1128 if ((length == 0) || !epout_has_pkt(ep))
1129 if (read_ep0_fifo(ep, req))
1130 ep0_end_out_req(ep, req, NULL);
1131 break;
1132 default:
1133 ep_err(ep, "odd state %s to send me a request\n",
1134 EP0_STNAME(ep->dev));
1135 ep_del_request(ep, req);
1136 rc = -EL2HLT;
1137 break;
1138 }
1139 } else {
1140 if (!recursion_detected)
1141 handle_ep(ep);
1142 }
1143
1144out:
1145 return rc;
1146out_locked:
1147 spin_unlock_irqrestore(&ep->lock, flags);
1148 goto out;
1149}
1150
1151
1152
1153
1154
1155
1156
1157
1158static int pxa_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
1159{
1160 struct pxa_ep *ep;
1161 struct udc_usb_ep *udc_usb_ep;
1162 struct pxa27x_request *req;
1163 unsigned long flags;
1164 int rc = -EINVAL;
1165
1166 if (!_ep)
1167 return rc;
1168 udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
1169 ep = udc_usb_ep->pxa_ep;
1170 if (!ep || is_ep0(ep))
1171 return rc;
1172
1173 spin_lock_irqsave(&ep->lock, flags);
1174
1175
1176 list_for_each_entry(req, &ep->queue, queue) {
1177 if (&req->req == _req) {
1178 rc = 0;
1179 break;
1180 }
1181 }
1182
1183 spin_unlock_irqrestore(&ep->lock, flags);
1184 if (!rc)
1185 req_done(ep, req, -ECONNRESET, NULL);
1186 return rc;
1187}
1188
1189
1190
1191
1192
1193
1194
1195
1196static int pxa_ep_set_halt(struct usb_ep *_ep, int value)
1197{
1198 struct pxa_ep *ep;
1199 struct udc_usb_ep *udc_usb_ep;
1200 unsigned long flags;
1201 int rc;
1202
1203
1204 if (!_ep)
1205 return -EINVAL;
1206 udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
1207 ep = udc_usb_ep->pxa_ep;
1208 if (!ep || is_ep0(ep))
1209 return -EINVAL;
1210
1211 if (value == 0) {
1212
1213
1214
1215
1216
1217
1218 ep_dbg(ep, "only host can clear halt\n");
1219 return -EROFS;
1220 }
1221
1222 spin_lock_irqsave(&ep->lock, flags);
1223
1224 rc = -EAGAIN;
1225 if (ep->dir_in && (ep_is_full(ep) || !list_empty(&ep->queue)))
1226 goto out;
1227
1228
1229 rc = 0;
1230 ep_write_UDCCSR(ep, UDCCSR_FST | UDCCSR_FEF);
1231 if (is_ep0(ep))
1232 set_ep0state(ep->dev, STALL);
1233
1234out:
1235 spin_unlock_irqrestore(&ep->lock, flags);
1236 return rc;
1237}
1238
1239
1240
1241
1242
1243
1244
1245static int pxa_ep_fifo_status(struct usb_ep *_ep)
1246{
1247 struct pxa_ep *ep;
1248 struct udc_usb_ep *udc_usb_ep;
1249
1250 if (!_ep)
1251 return -ENODEV;
1252 udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
1253 ep = udc_usb_ep->pxa_ep;
1254 if (!ep || is_ep0(ep))
1255 return -ENODEV;
1256
1257 if (ep->dir_in)
1258 return -EOPNOTSUPP;
1259 if (ep->dev->gadget.speed == USB_SPEED_UNKNOWN || ep_is_empty(ep))
1260 return 0;
1261 else
1262 return ep_count_bytes_remain(ep) + 1;
1263}
1264
1265
1266
1267
1268
1269
1270
1271static void pxa_ep_fifo_flush(struct usb_ep *_ep)
1272{
1273 struct pxa_ep *ep;
1274 struct udc_usb_ep *udc_usb_ep;
1275 unsigned long flags;
1276
1277 if (!_ep)
1278 return;
1279 udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
1280 ep = udc_usb_ep->pxa_ep;
1281 if (!ep || is_ep0(ep))
1282 return;
1283
1284 spin_lock_irqsave(&ep->lock, flags);
1285
1286 if (unlikely(!list_empty(&ep->queue)))
1287 ep_dbg(ep, "called while queue list not empty\n");
1288 ep_dbg(ep, "called\n");
1289
1290
1291 if (!ep->dir_in) {
1292 while (!ep_is_empty(ep))
1293 udc_ep_readl(ep, UDCDR);
1294 } else {
1295
1296 ep_write_UDCCSR(ep,
1297 UDCCSR_PC | UDCCSR_FEF | UDCCSR_TRN
1298 | (EPXFERTYPE_is_ISO(ep) ? 0 : UDCCSR_SST));
1299 }
1300
1301 spin_unlock_irqrestore(&ep->lock, flags);
1302}
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314static int pxa_ep_enable(struct usb_ep *_ep,
1315 const struct usb_endpoint_descriptor *desc)
1316{
1317 struct pxa_ep *ep;
1318 struct udc_usb_ep *udc_usb_ep;
1319 struct pxa_udc *udc;
1320
1321 if (!_ep || !desc)
1322 return -EINVAL;
1323
1324 udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
1325 if (udc_usb_ep->pxa_ep) {
1326 ep = udc_usb_ep->pxa_ep;
1327 ep_warn(ep, "usb_ep %s already enabled, doing nothing\n",
1328 _ep->name);
1329 } else {
1330 ep = find_pxa_ep(udc_usb_ep->dev, udc_usb_ep);
1331 }
1332
1333 if (!ep || is_ep0(ep)) {
1334 dev_err(udc_usb_ep->dev->dev,
1335 "unable to match pxa_ep for ep %s\n",
1336 _ep->name);
1337 return -EINVAL;
1338 }
1339
1340 if ((desc->bDescriptorType != USB_DT_ENDPOINT)
1341 || (ep->type != usb_endpoint_type(desc))) {
1342 ep_err(ep, "type mismatch\n");
1343 return -EINVAL;
1344 }
1345
1346 if (ep->fifo_size < usb_endpoint_maxp(desc)) {
1347 ep_err(ep, "bad maxpacket\n");
1348 return -ERANGE;
1349 }
1350
1351 udc_usb_ep->pxa_ep = ep;
1352 udc = ep->dev;
1353
1354 if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN) {
1355 ep_err(ep, "bogus device state\n");
1356 return -ESHUTDOWN;
1357 }
1358
1359 ep->enabled = 1;
1360
1361
1362 pxa_ep_fifo_flush(_ep);
1363
1364 ep_dbg(ep, "enabled\n");
1365 return 0;
1366}
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376static int pxa_ep_disable(struct usb_ep *_ep)
1377{
1378 struct pxa_ep *ep;
1379 struct udc_usb_ep *udc_usb_ep;
1380
1381 if (!_ep)
1382 return -EINVAL;
1383
1384 udc_usb_ep = container_of(_ep, struct udc_usb_ep, usb_ep);
1385 ep = udc_usb_ep->pxa_ep;
1386 if (!ep || is_ep0(ep) || !list_empty(&ep->queue))
1387 return -EINVAL;
1388
1389 ep->enabled = 0;
1390 nuke(ep, -ESHUTDOWN);
1391
1392 pxa_ep_fifo_flush(_ep);
1393 udc_usb_ep->pxa_ep = NULL;
1394
1395 ep_dbg(ep, "disabled\n");
1396 return 0;
1397}
1398
1399static const struct usb_ep_ops pxa_ep_ops = {
1400 .enable = pxa_ep_enable,
1401 .disable = pxa_ep_disable,
1402
1403 .alloc_request = pxa_ep_alloc_request,
1404 .free_request = pxa_ep_free_request,
1405
1406 .queue = pxa_ep_queue,
1407 .dequeue = pxa_ep_dequeue,
1408
1409 .set_halt = pxa_ep_set_halt,
1410 .fifo_status = pxa_ep_fifo_status,
1411 .fifo_flush = pxa_ep_fifo_flush,
1412};
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423static void dplus_pullup(struct pxa_udc *udc, int on)
1424{
1425 if (udc->gpiod) {
1426 gpiod_set_value(udc->gpiod, on);
1427 } else if (udc->udc_command) {
1428 if (on)
1429 udc->udc_command(PXA2XX_UDC_CMD_CONNECT);
1430 else
1431 udc->udc_command(PXA2XX_UDC_CMD_DISCONNECT);
1432 }
1433 udc->pullup_on = on;
1434}
1435
1436
1437
1438
1439
1440static int pxa_udc_get_frame(struct usb_gadget *_gadget)
1441{
1442 struct pxa_udc *udc = to_gadget_udc(_gadget);
1443
1444 return (udc_readl(udc, UDCFNR) & 0x7ff);
1445}
1446
1447
1448
1449
1450
1451
1452
1453static int pxa_udc_wakeup(struct usb_gadget *_gadget)
1454{
1455 struct pxa_udc *udc = to_gadget_udc(_gadget);
1456
1457
1458 if ((udc_readl(udc, UDCCR) & UDCCR_DWRE) == 0)
1459 return -EHOSTUNREACH;
1460 udc_set_mask_UDCCR(udc, UDCCR_UDR);
1461 return 0;
1462}
1463
1464static void udc_enable(struct pxa_udc *udc);
1465static void udc_disable(struct pxa_udc *udc);
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479static int should_enable_udc(struct pxa_udc *udc)
1480{
1481 int put_on;
1482
1483 put_on = ((udc->pullup_on) && (udc->driver));
1484 put_on &= ((udc->vbus_sensed) || (IS_ERR_OR_NULL(udc->transceiver)));
1485 return put_on;
1486}
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500static int should_disable_udc(struct pxa_udc *udc)
1501{
1502 int put_off;
1503
1504 put_off = ((!udc->pullup_on) || (!udc->driver));
1505 put_off |= ((!udc->vbus_sensed) && (!IS_ERR_OR_NULL(udc->transceiver)));
1506 return put_off;
1507}
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518static int pxa_udc_pullup(struct usb_gadget *_gadget, int is_active)
1519{
1520 struct pxa_udc *udc = to_gadget_udc(_gadget);
1521
1522 if (!udc->gpiod && !udc->udc_command)
1523 return -EOPNOTSUPP;
1524
1525 dplus_pullup(udc, is_active);
1526
1527 if (should_enable_udc(udc))
1528 udc_enable(udc);
1529 if (should_disable_udc(udc))
1530 udc_disable(udc);
1531 return 0;
1532}
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544static int pxa_udc_vbus_session(struct usb_gadget *_gadget, int is_active)
1545{
1546 struct pxa_udc *udc = to_gadget_udc(_gadget);
1547
1548 udc->vbus_sensed = is_active;
1549 if (should_enable_udc(udc))
1550 udc_enable(udc);
1551 if (should_disable_udc(udc))
1552 udc_disable(udc);
1553
1554 return 0;
1555}
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569static int pxa_udc_vbus_draw(struct usb_gadget *_gadget, unsigned mA)
1570{
1571 struct pxa_udc *udc;
1572
1573 udc = to_gadget_udc(_gadget);
1574 if (!IS_ERR_OR_NULL(udc->transceiver))
1575 return usb_phy_set_power(udc->transceiver, mA);
1576 return -EOPNOTSUPP;
1577}
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589static int pxa_udc_phy_event(struct notifier_block *nb, unsigned long action,
1590 void *data)
1591{
1592 struct usb_gadget *gadget = data;
1593
1594 switch (action) {
1595 case USB_EVENT_VBUS:
1596 usb_gadget_vbus_connect(gadget);
1597 return NOTIFY_OK;
1598 case USB_EVENT_NONE:
1599 usb_gadget_vbus_disconnect(gadget);
1600 return NOTIFY_OK;
1601 default:
1602 return NOTIFY_DONE;
1603 }
1604}
1605
1606static struct notifier_block pxa27x_udc_phy = {
1607 .notifier_call = pxa_udc_phy_event,
1608};
1609
1610static int pxa27x_udc_start(struct usb_gadget *g,
1611 struct usb_gadget_driver *driver);
1612static int pxa27x_udc_stop(struct usb_gadget *g);
1613
1614static const struct usb_gadget_ops pxa_udc_ops = {
1615 .get_frame = pxa_udc_get_frame,
1616 .wakeup = pxa_udc_wakeup,
1617 .pullup = pxa_udc_pullup,
1618 .vbus_session = pxa_udc_vbus_session,
1619 .vbus_draw = pxa_udc_vbus_draw,
1620 .udc_start = pxa27x_udc_start,
1621 .udc_stop = pxa27x_udc_stop,
1622};
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632static void udc_disable(struct pxa_udc *udc)
1633{
1634 if (!udc->enabled)
1635 return;
1636
1637 udc_writel(udc, UDCICR0, 0);
1638 udc_writel(udc, UDCICR1, 0);
1639
1640 udc_clear_mask_UDCCR(udc, UDCCR_UDE);
1641
1642 ep0_idle(udc);
1643 udc->gadget.speed = USB_SPEED_UNKNOWN;
1644 clk_disable(udc->clk);
1645
1646 udc->enabled = 0;
1647}
1648
1649
1650
1651
1652
1653
1654
1655
1656static void udc_init_data(struct pxa_udc *dev)
1657{
1658 int i;
1659 struct pxa_ep *ep;
1660
1661
1662 INIT_LIST_HEAD(&dev->gadget.ep_list);
1663 INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
1664 dev->udc_usb_ep[0].pxa_ep = &dev->pxa_ep[0];
1665 dev->gadget.quirk_altset_not_supp = 1;
1666 ep0_idle(dev);
1667
1668
1669 for (i = 0; i < NR_PXA_ENDPOINTS; i++) {
1670 ep = &dev->pxa_ep[i];
1671
1672 ep->enabled = is_ep0(ep);
1673 INIT_LIST_HEAD(&ep->queue);
1674 spin_lock_init(&ep->lock);
1675 }
1676
1677
1678 for (i = 1; i < NR_USB_ENDPOINTS; i++) {
1679 list_add_tail(&dev->udc_usb_ep[i].usb_ep.ep_list,
1680 &dev->gadget.ep_list);
1681 usb_ep_set_maxpacket_limit(&dev->udc_usb_ep[i].usb_ep,
1682 dev->udc_usb_ep[i].usb_ep.maxpacket);
1683 }
1684}
1685
1686
1687
1688
1689
1690
1691
1692
1693static void udc_enable(struct pxa_udc *udc)
1694{
1695 if (udc->enabled)
1696 return;
1697
1698 clk_enable(udc->clk);
1699 udc_writel(udc, UDCICR0, 0);
1700 udc_writel(udc, UDCICR1, 0);
1701 udc_clear_mask_UDCCR(udc, UDCCR_UDE);
1702
1703 ep0_idle(udc);
1704 udc->gadget.speed = USB_SPEED_FULL;
1705 memset(&udc->stats, 0, sizeof(udc->stats));
1706
1707 pxa_eps_setup(udc);
1708 udc_set_mask_UDCCR(udc, UDCCR_UDE);
1709 ep_write_UDCCSR(&udc->pxa_ep[0], UDCCSR0_ACM);
1710 udelay(2);
1711 if (udc_readl(udc, UDCCR) & UDCCR_EMCE)
1712 dev_err(udc->dev, "Configuration errors, udc disabled\n");
1713
1714
1715
1716
1717 msleep(100);
1718
1719
1720 udc_writel(udc, UDCICR1,
1721 UDCICR1_IECC | UDCICR1_IERU
1722 | UDCICR1_IESU | UDCICR1_IERS);
1723
1724
1725 pio_irq_enable(&udc->pxa_ep[0]);
1726
1727 udc->enabled = 1;
1728}
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745static int pxa27x_udc_start(struct usb_gadget *g,
1746 struct usb_gadget_driver *driver)
1747{
1748 struct pxa_udc *udc = to_pxa(g);
1749 int retval;
1750
1751
1752 udc->driver = driver;
1753
1754 if (!IS_ERR_OR_NULL(udc->transceiver)) {
1755 retval = otg_set_peripheral(udc->transceiver->otg,
1756 &udc->gadget);
1757 if (retval) {
1758 dev_err(udc->dev, "can't bind to transceiver\n");
1759 goto fail;
1760 }
1761 }
1762
1763 if (should_enable_udc(udc))
1764 udc_enable(udc);
1765 return 0;
1766
1767fail:
1768 udc->driver = NULL;
1769 return retval;
1770}
1771
1772
1773
1774
1775
1776
1777
1778
1779static void stop_activity(struct pxa_udc *udc)
1780{
1781 int i;
1782
1783 udc->gadget.speed = USB_SPEED_UNKNOWN;
1784
1785 for (i = 0; i < NR_USB_ENDPOINTS; i++)
1786 pxa_ep_disable(&udc->udc_usb_ep[i].usb_ep);
1787}
1788
1789
1790
1791
1792
1793
1794
1795static int pxa27x_udc_stop(struct usb_gadget *g)
1796{
1797 struct pxa_udc *udc = to_pxa(g);
1798
1799 stop_activity(udc);
1800 udc_disable(udc);
1801
1802 udc->driver = NULL;
1803
1804 if (!IS_ERR_OR_NULL(udc->transceiver))
1805 return otg_set_peripheral(udc->transceiver->otg, NULL);
1806 return 0;
1807}
1808
1809
1810
1811
1812
1813
1814static void handle_ep0_ctrl_req(struct pxa_udc *udc,
1815 struct pxa27x_request *req)
1816{
1817 struct pxa_ep *ep = &udc->pxa_ep[0];
1818 union {
1819 struct usb_ctrlrequest r;
1820 u32 word[2];
1821 } u;
1822 int i;
1823 int have_extrabytes = 0;
1824 unsigned long flags;
1825
1826 nuke(ep, -EPROTO);
1827 spin_lock_irqsave(&ep->lock, flags);
1828
1829
1830
1831
1832
1833
1834
1835 if (epout_has_pkt(ep) && (ep_count_bytes_remain(ep) == 0))
1836 ep_write_UDCCSR(ep, UDCCSR0_OPC);
1837
1838
1839 for (i = 0; i < 2; i++) {
1840 if (unlikely(ep_is_empty(ep)))
1841 goto stall;
1842 u.word[i] = udc_ep_readl(ep, UDCDR);
1843 }
1844
1845 have_extrabytes = !ep_is_empty(ep);
1846 while (!ep_is_empty(ep)) {
1847 i = udc_ep_readl(ep, UDCDR);
1848 ep_err(ep, "wrong to have extra bytes for setup : 0x%08x\n", i);
1849 }
1850
1851 ep_dbg(ep, "SETUP %02x.%02x v%04x i%04x l%04x\n",
1852 u.r.bRequestType, u.r.bRequest,
1853 le16_to_cpu(u.r.wValue), le16_to_cpu(u.r.wIndex),
1854 le16_to_cpu(u.r.wLength));
1855 if (unlikely(have_extrabytes))
1856 goto stall;
1857
1858 if (u.r.bRequestType & USB_DIR_IN)
1859 set_ep0state(udc, IN_DATA_STAGE);
1860 else
1861 set_ep0state(udc, OUT_DATA_STAGE);
1862
1863
1864 ep_write_UDCCSR(ep, UDCCSR0_SA | UDCCSR0_OPC);
1865
1866 spin_unlock_irqrestore(&ep->lock, flags);
1867 i = udc->driver->setup(&udc->gadget, &u.r);
1868 spin_lock_irqsave(&ep->lock, flags);
1869 if (i < 0)
1870 goto stall;
1871out:
1872 spin_unlock_irqrestore(&ep->lock, flags);
1873 return;
1874stall:
1875 ep_dbg(ep, "protocol STALL, udccsr0=%03x err %d\n",
1876 udc_ep_readl(ep, UDCCSR), i);
1877 ep_write_UDCCSR(ep, UDCCSR0_FST | UDCCSR0_FTF);
1878 set_ep0state(udc, STALL);
1879 goto out;
1880}
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930static void handle_ep0(struct pxa_udc *udc, int fifo_irq, int opc_irq)
1931{
1932 u32 udccsr0;
1933 struct pxa_ep *ep = &udc->pxa_ep[0];
1934 struct pxa27x_request *req = NULL;
1935 int completed = 0;
1936
1937 if (!list_empty(&ep->queue))
1938 req = list_entry(ep->queue.next, struct pxa27x_request, queue);
1939
1940 udccsr0 = udc_ep_readl(ep, UDCCSR);
1941 ep_dbg(ep, "state=%s, req=%p, udccsr0=0x%03x, udcbcr=%d, irq_msk=%x\n",
1942 EP0_STNAME(udc), req, udccsr0, udc_ep_readl(ep, UDCBCR),
1943 (fifo_irq << 1 | opc_irq));
1944
1945 if (udccsr0 & UDCCSR0_SST) {
1946 ep_dbg(ep, "clearing stall status\n");
1947 nuke(ep, -EPIPE);
1948 ep_write_UDCCSR(ep, UDCCSR0_SST);
1949 ep0_idle(udc);
1950 }
1951
1952 if (udccsr0 & UDCCSR0_SA) {
1953 nuke(ep, 0);
1954 set_ep0state(udc, SETUP_STAGE);
1955 }
1956
1957 switch (udc->ep0state) {
1958 case WAIT_FOR_SETUP:
1959
1960
1961
1962
1963
1964
1965 break;
1966 case SETUP_STAGE:
1967 udccsr0 &= UDCCSR0_CTRL_REQ_MASK;
1968 if (likely(udccsr0 == UDCCSR0_CTRL_REQ_MASK))
1969 handle_ep0_ctrl_req(udc, req);
1970 break;
1971 case IN_DATA_STAGE:
1972 if (epout_has_pkt(ep))
1973 ep_write_UDCCSR(ep, UDCCSR0_OPC);
1974 if (req && !ep_is_full(ep))
1975 completed = write_ep0_fifo(ep, req);
1976 if (completed)
1977 ep0_end_in_req(ep, req, NULL);
1978 break;
1979 case OUT_DATA_STAGE:
1980 if (epout_has_pkt(ep) && req)
1981 completed = read_ep0_fifo(ep, req);
1982 if (completed)
1983 ep0_end_out_req(ep, req, NULL);
1984 break;
1985 case STALL:
1986 ep_write_UDCCSR(ep, UDCCSR0_FST);
1987 break;
1988 case IN_STATUS_STAGE:
1989
1990
1991
1992
1993
1994 if (opc_irq)
1995 ep0_idle(udc);
1996 break;
1997 case OUT_STATUS_STAGE:
1998 case WAIT_ACK_SET_CONF_INTERF:
1999 ep_warn(ep, "should never get in %s state here!!!\n",
2000 EP0_STNAME(ep->dev));
2001 ep0_idle(udc);
2002 break;
2003 }
2004}
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015static void handle_ep(struct pxa_ep *ep)
2016{
2017 struct pxa27x_request *req;
2018 int completed;
2019 u32 udccsr;
2020 int is_in = ep->dir_in;
2021 int loop = 0;
2022 unsigned long flags;
2023
2024 spin_lock_irqsave(&ep->lock, flags);
2025 if (ep->in_handle_ep)
2026 goto recursion_detected;
2027 ep->in_handle_ep = 1;
2028
2029 do {
2030 completed = 0;
2031 udccsr = udc_ep_readl(ep, UDCCSR);
2032
2033 if (likely(!list_empty(&ep->queue)))
2034 req = list_entry(ep->queue.next,
2035 struct pxa27x_request, queue);
2036 else
2037 req = NULL;
2038
2039 ep_dbg(ep, "req:%p, udccsr 0x%03x loop=%d\n",
2040 req, udccsr, loop++);
2041
2042 if (unlikely(udccsr & (UDCCSR_SST | UDCCSR_TRN)))
2043 udc_ep_writel(ep, UDCCSR,
2044 udccsr & (UDCCSR_SST | UDCCSR_TRN));
2045 if (!req)
2046 break;
2047
2048 if (unlikely(is_in)) {
2049 if (likely(!ep_is_full(ep)))
2050 completed = write_fifo(ep, req);
2051 } else {
2052 if (likely(epout_has_pkt(ep)))
2053 completed = read_fifo(ep, req);
2054 }
2055
2056 if (completed) {
2057 if (is_in)
2058 ep_end_in_req(ep, req, &flags);
2059 else
2060 ep_end_out_req(ep, req, &flags);
2061 }
2062 } while (completed);
2063
2064 ep->in_handle_ep = 0;
2065recursion_detected:
2066 spin_unlock_irqrestore(&ep->lock, flags);
2067}
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077static void pxa27x_change_configuration(struct pxa_udc *udc, int config)
2078{
2079 struct usb_ctrlrequest req ;
2080
2081 dev_dbg(udc->dev, "config=%d\n", config);
2082
2083 udc->config = config;
2084 udc->last_interface = 0;
2085 udc->last_alternate = 0;
2086
2087 req.bRequestType = 0;
2088 req.bRequest = USB_REQ_SET_CONFIGURATION;
2089 req.wValue = config;
2090 req.wIndex = 0;
2091 req.wLength = 0;
2092
2093 set_ep0state(udc, WAIT_ACK_SET_CONF_INTERF);
2094 udc->driver->setup(&udc->gadget, &req);
2095 ep_write_UDCCSR(&udc->pxa_ep[0], UDCCSR0_AREN);
2096}
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107static void pxa27x_change_interface(struct pxa_udc *udc, int iface, int alt)
2108{
2109 struct usb_ctrlrequest req;
2110
2111 dev_dbg(udc->dev, "interface=%d, alternate setting=%d\n", iface, alt);
2112
2113 udc->last_interface = iface;
2114 udc->last_alternate = alt;
2115
2116 req.bRequestType = USB_RECIP_INTERFACE;
2117 req.bRequest = USB_REQ_SET_INTERFACE;
2118 req.wValue = alt;
2119 req.wIndex = iface;
2120 req.wLength = 0;
2121
2122 set_ep0state(udc, WAIT_ACK_SET_CONF_INTERF);
2123 udc->driver->setup(&udc->gadget, &req);
2124 ep_write_UDCCSR(&udc->pxa_ep[0], UDCCSR0_AREN);
2125}
2126
2127
2128
2129
2130
2131
2132
2133
2134static void irq_handle_data(int irq, struct pxa_udc *udc)
2135{
2136 int i;
2137 struct pxa_ep *ep;
2138 u32 udcisr0 = udc_readl(udc, UDCISR0) & UDCCISR0_EP_MASK;
2139 u32 udcisr1 = udc_readl(udc, UDCISR1) & UDCCISR1_EP_MASK;
2140
2141 if (udcisr0 & UDCISR_INT_MASK) {
2142 udc->pxa_ep[0].stats.irqs++;
2143 udc_writel(udc, UDCISR0, UDCISR_INT(0, UDCISR_INT_MASK));
2144 handle_ep0(udc, !!(udcisr0 & UDCICR_FIFOERR),
2145 !!(udcisr0 & UDCICR_PKTCOMPL));
2146 }
2147
2148 udcisr0 >>= 2;
2149 for (i = 1; udcisr0 != 0 && i < 16; udcisr0 >>= 2, i++) {
2150 if (!(udcisr0 & UDCISR_INT_MASK))
2151 continue;
2152
2153 udc_writel(udc, UDCISR0, UDCISR_INT(i, UDCISR_INT_MASK));
2154
2155 WARN_ON(i >= ARRAY_SIZE(udc->pxa_ep));
2156 if (i < ARRAY_SIZE(udc->pxa_ep)) {
2157 ep = &udc->pxa_ep[i];
2158 ep->stats.irqs++;
2159 handle_ep(ep);
2160 }
2161 }
2162
2163 for (i = 16; udcisr1 != 0 && i < 24; udcisr1 >>= 2, i++) {
2164 udc_writel(udc, UDCISR1, UDCISR_INT(i - 16, UDCISR_INT_MASK));
2165 if (!(udcisr1 & UDCISR_INT_MASK))
2166 continue;
2167
2168 WARN_ON(i >= ARRAY_SIZE(udc->pxa_ep));
2169 if (i < ARRAY_SIZE(udc->pxa_ep)) {
2170 ep = &udc->pxa_ep[i];
2171 ep->stats.irqs++;
2172 handle_ep(ep);
2173 }
2174 }
2175
2176}
2177
2178
2179
2180
2181
2182static void irq_udc_suspend(struct pxa_udc *udc)
2183{
2184 udc_writel(udc, UDCISR1, UDCISR1_IRSU);
2185 udc->stats.irqs_suspend++;
2186
2187 if (udc->gadget.speed != USB_SPEED_UNKNOWN
2188 && udc->driver && udc->driver->suspend)
2189 udc->driver->suspend(&udc->gadget);
2190 ep0_idle(udc);
2191}
2192
2193
2194
2195
2196
2197static void irq_udc_resume(struct pxa_udc *udc)
2198{
2199 udc_writel(udc, UDCISR1, UDCISR1_IRRU);
2200 udc->stats.irqs_resume++;
2201
2202 if (udc->gadget.speed != USB_SPEED_UNKNOWN
2203 && udc->driver && udc->driver->resume)
2204 udc->driver->resume(&udc->gadget);
2205}
2206
2207
2208
2209
2210
2211static void irq_udc_reconfig(struct pxa_udc *udc)
2212{
2213 unsigned config, interface, alternate, config_change;
2214 u32 udccr = udc_readl(udc, UDCCR);
2215
2216 udc_writel(udc, UDCISR1, UDCISR1_IRCC);
2217 udc->stats.irqs_reconfig++;
2218
2219 config = (udccr & UDCCR_ACN) >> UDCCR_ACN_S;
2220 config_change = (config != udc->config);
2221 pxa27x_change_configuration(udc, config);
2222
2223 interface = (udccr & UDCCR_AIN) >> UDCCR_AIN_S;
2224 alternate = (udccr & UDCCR_AAISN) >> UDCCR_AAISN_S;
2225 pxa27x_change_interface(udc, interface, alternate);
2226
2227 if (config_change)
2228 update_pxa_ep_matches(udc);
2229 udc_set_mask_UDCCR(udc, UDCCR_SMAC);
2230}
2231
2232
2233
2234
2235
2236static void irq_udc_reset(struct pxa_udc *udc)
2237{
2238 u32 udccr = udc_readl(udc, UDCCR);
2239 struct pxa_ep *ep = &udc->pxa_ep[0];
2240
2241 dev_info(udc->dev, "USB reset\n");
2242 udc_writel(udc, UDCISR1, UDCISR1_IRRS);
2243 udc->stats.irqs_reset++;
2244
2245 if ((udccr & UDCCR_UDA) == 0) {
2246 dev_dbg(udc->dev, "USB reset start\n");
2247 stop_activity(udc);
2248 }
2249 udc->gadget.speed = USB_SPEED_FULL;
2250 memset(&udc->stats, 0, sizeof udc->stats);
2251
2252 nuke(ep, -EPROTO);
2253 ep_write_UDCCSR(ep, UDCCSR0_FTF | UDCCSR0_OPC);
2254 ep0_idle(udc);
2255}
2256
2257
2258
2259
2260
2261
2262
2263
2264static irqreturn_t pxa_udc_irq(int irq, void *_dev)
2265{
2266 struct pxa_udc *udc = _dev;
2267 u32 udcisr0 = udc_readl(udc, UDCISR0);
2268 u32 udcisr1 = udc_readl(udc, UDCISR1);
2269 u32 udccr = udc_readl(udc, UDCCR);
2270 u32 udcisr1_spec;
2271
2272 dev_vdbg(udc->dev, "Interrupt, UDCISR0:0x%08x, UDCISR1:0x%08x, "
2273 "UDCCR:0x%08x\n", udcisr0, udcisr1, udccr);
2274
2275 udcisr1_spec = udcisr1 & 0xf8000000;
2276 if (unlikely(udcisr1_spec & UDCISR1_IRSU))
2277 irq_udc_suspend(udc);
2278 if (unlikely(udcisr1_spec & UDCISR1_IRRU))
2279 irq_udc_resume(udc);
2280 if (unlikely(udcisr1_spec & UDCISR1_IRCC))
2281 irq_udc_reconfig(udc);
2282 if (unlikely(udcisr1_spec & UDCISR1_IRRS))
2283 irq_udc_reset(udc);
2284
2285 if ((udcisr0 & UDCCISR0_EP_MASK) | (udcisr1 & UDCCISR1_EP_MASK))
2286 irq_handle_data(irq, udc);
2287
2288 return IRQ_HANDLED;
2289}
2290
2291static struct pxa_udc memory = {
2292 .gadget = {
2293 .ops = &pxa_udc_ops,
2294 .ep0 = &memory.udc_usb_ep[0].usb_ep,
2295 .name = driver_name,
2296 .dev = {
2297 .init_name = "gadget",
2298 },
2299 },
2300
2301 .udc_usb_ep = {
2302 USB_EP_CTRL,
2303 USB_EP_OUT_BULK(1),
2304 USB_EP_IN_BULK(2),
2305 USB_EP_IN_ISO(3),
2306 USB_EP_OUT_ISO(4),
2307 USB_EP_IN_INT(5),
2308 },
2309
2310 .pxa_ep = {
2311 PXA_EP_CTRL,
2312
2313 PXA_EP_OUT_BULK(1, 1, 3, 0, 0),
2314 PXA_EP_IN_BULK(2, 2, 3, 0, 0),
2315
2316 PXA_EP_OUT_BULK(3, 1, 1, 0, 0),
2317 PXA_EP_IN_BULK(4, 2, 1, 0, 0),
2318 PXA_EP_IN_ISO(5, 3, 1, 0, 0),
2319 PXA_EP_OUT_ISO(6, 4, 1, 0, 0),
2320 PXA_EP_IN_INT(7, 5, 1, 0, 0),
2321
2322 PXA_EP_OUT_BULK(8, 1, 2, 0, 0),
2323 PXA_EP_IN_BULK(9, 2, 2, 0, 0),
2324 PXA_EP_IN_INT(10, 5, 2, 0, 0),
2325
2326
2327
2328
2329
2330 PXA_EP_OUT_BULK(11, 1, 2, 1, 0),
2331 PXA_EP_IN_BULK(12, 2, 2, 1, 0),
2332
2333 PXA_EP_OUT_BULK(13, 1, 1, 1, 1),
2334 PXA_EP_IN_BULK(14, 2, 1, 1, 1),
2335 }
2336};
2337
2338#if defined(CONFIG_OF)
2339static const struct of_device_id udc_pxa_dt_ids[] = {
2340 { .compatible = "marvell,pxa270-udc" },
2341 {}
2342};
2343MODULE_DEVICE_TABLE(of, udc_pxa_dt_ids);
2344#endif
2345
2346
2347
2348
2349
2350
2351
2352
2353static int pxa_udc_probe(struct platform_device *pdev)
2354{
2355 struct pxa_udc *udc = &memory;
2356 int retval = 0, gpio;
2357 struct pxa2xx_udc_mach_info *mach = dev_get_platdata(&pdev->dev);
2358 unsigned long gpio_flags;
2359
2360 if (mach) {
2361 gpio_flags = mach->gpio_pullup_inverted ? GPIOF_ACTIVE_LOW : 0;
2362 gpio = mach->gpio_pullup;
2363 if (gpio_is_valid(gpio)) {
2364 retval = devm_gpio_request_one(&pdev->dev, gpio,
2365 gpio_flags,
2366 "USB D+ pullup");
2367 if (retval)
2368 return retval;
2369 udc->gpiod = gpio_to_desc(mach->gpio_pullup);
2370 }
2371 udc->udc_command = mach->udc_command;
2372 } else {
2373 udc->gpiod = devm_gpiod_get(&pdev->dev, NULL, GPIOD_ASIS);
2374 }
2375
2376 udc->regs = devm_platform_ioremap_resource(pdev, 0);
2377 if (IS_ERR(udc->regs))
2378 return PTR_ERR(udc->regs);
2379 udc->irq = platform_get_irq(pdev, 0);
2380 if (udc->irq < 0)
2381 return udc->irq;
2382
2383 udc->dev = &pdev->dev;
2384 if (of_have_populated_dt()) {
2385 udc->transceiver =
2386 devm_usb_get_phy_by_phandle(udc->dev, "phys", 0);
2387 if (IS_ERR(udc->transceiver))
2388 return PTR_ERR(udc->transceiver);
2389 } else {
2390 udc->transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
2391 }
2392
2393 if (IS_ERR(udc->gpiod)) {
2394 dev_err(&pdev->dev, "Couldn't find or request D+ gpio : %ld\n",
2395 PTR_ERR(udc->gpiod));
2396 return PTR_ERR(udc->gpiod);
2397 }
2398 if (udc->gpiod)
2399 gpiod_direction_output(udc->gpiod, 0);
2400
2401 udc->clk = devm_clk_get(&pdev->dev, NULL);
2402 if (IS_ERR(udc->clk))
2403 return PTR_ERR(udc->clk);
2404
2405 retval = clk_prepare(udc->clk);
2406 if (retval)
2407 return retval;
2408
2409 udc->vbus_sensed = 0;
2410
2411 the_controller = udc;
2412 platform_set_drvdata(pdev, udc);
2413 udc_init_data(udc);
2414
2415
2416 retval = devm_request_irq(&pdev->dev, udc->irq, pxa_udc_irq,
2417 IRQF_SHARED, driver_name, udc);
2418 if (retval != 0) {
2419 dev_err(udc->dev, "%s: can't get irq %i, err %d\n",
2420 driver_name, udc->irq, retval);
2421 goto err;
2422 }
2423
2424 if (!IS_ERR_OR_NULL(udc->transceiver))
2425 usb_register_notifier(udc->transceiver, &pxa27x_udc_phy);
2426 retval = usb_add_gadget_udc(&pdev->dev, &udc->gadget);
2427 if (retval)
2428 goto err_add_gadget;
2429
2430 pxa_init_debugfs(udc);
2431 if (should_enable_udc(udc))
2432 udc_enable(udc);
2433 return 0;
2434
2435err_add_gadget:
2436 if (!IS_ERR_OR_NULL(udc->transceiver))
2437 usb_unregister_notifier(udc->transceiver, &pxa27x_udc_phy);
2438err:
2439 clk_unprepare(udc->clk);
2440 return retval;
2441}
2442
2443
2444
2445
2446
2447static int pxa_udc_remove(struct platform_device *_dev)
2448{
2449 struct pxa_udc *udc = platform_get_drvdata(_dev);
2450
2451 usb_del_gadget_udc(&udc->gadget);
2452 pxa_cleanup_debugfs(udc);
2453
2454 if (!IS_ERR_OR_NULL(udc->transceiver)) {
2455 usb_unregister_notifier(udc->transceiver, &pxa27x_udc_phy);
2456 usb_put_phy(udc->transceiver);
2457 }
2458
2459 udc->transceiver = NULL;
2460 the_controller = NULL;
2461 clk_unprepare(udc->clk);
2462
2463 return 0;
2464}
2465
2466static void pxa_udc_shutdown(struct platform_device *_dev)
2467{
2468 struct pxa_udc *udc = platform_get_drvdata(_dev);
2469
2470 if (udc_readl(udc, UDCCR) & UDCCR_UDE)
2471 udc_disable(udc);
2472}
2473
2474#ifdef CONFIG_PXA27x
2475extern void pxa27x_clear_otgph(void);
2476#else
2477#define pxa27x_clear_otgph() do {} while (0)
2478#endif
2479
2480#ifdef CONFIG_PM
2481
2482
2483
2484
2485
2486
2487
2488
2489static int pxa_udc_suspend(struct platform_device *_dev, pm_message_t state)
2490{
2491 struct pxa_udc *udc = platform_get_drvdata(_dev);
2492 struct pxa_ep *ep;
2493
2494 ep = &udc->pxa_ep[0];
2495 udc->udccsr0 = udc_ep_readl(ep, UDCCSR);
2496
2497 udc_disable(udc);
2498 udc->pullup_resume = udc->pullup_on;
2499 dplus_pullup(udc, 0);
2500
2501 if (udc->driver)
2502 udc->driver->disconnect(&udc->gadget);
2503
2504 return 0;
2505}
2506
2507
2508
2509
2510
2511
2512
2513
2514static int pxa_udc_resume(struct platform_device *_dev)
2515{
2516 struct pxa_udc *udc = platform_get_drvdata(_dev);
2517 struct pxa_ep *ep;
2518
2519 ep = &udc->pxa_ep[0];
2520 udc_ep_writel(ep, UDCCSR, udc->udccsr0 & (UDCCSR0_FST | UDCCSR0_DME));
2521
2522 dplus_pullup(udc, udc->pullup_resume);
2523 if (should_enable_udc(udc))
2524 udc_enable(udc);
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534 pxa27x_clear_otgph();
2535
2536 return 0;
2537}
2538#endif
2539
2540
2541MODULE_ALIAS("platform:pxa27x-udc");
2542
2543static struct platform_driver udc_driver = {
2544 .driver = {
2545 .name = "pxa27x-udc",
2546 .of_match_table = of_match_ptr(udc_pxa_dt_ids),
2547 },
2548 .probe = pxa_udc_probe,
2549 .remove = pxa_udc_remove,
2550 .shutdown = pxa_udc_shutdown,
2551#ifdef CONFIG_PM
2552 .suspend = pxa_udc_suspend,
2553 .resume = pxa_udc_resume
2554#endif
2555};
2556
2557module_platform_driver(udc_driver);
2558
2559MODULE_DESCRIPTION(DRIVER_DESC);
2560MODULE_AUTHOR("Robert Jarzmik");
2561MODULE_LICENSE("GPL");
2562