1
2
3
4
5
6
7
8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
9#include <linux/kernel.h>
10#include <linux/module.h>
11#include <linux/pci.h>
12#include <linux/delay.h>
13#include <linux/errno.h>
14#include <linux/list.h>
15#include <linux/interrupt.h>
16#include <linux/usb/ch9.h>
17#include <linux/usb/gadget.h>
18
19
20#define UDC_EP_REG_SHIFT 0x20
21
22#define UDC_EPCTL_ADDR 0x00
23#define UDC_EPSTS_ADDR 0x04
24#define UDC_BUFIN_FRAMENUM_ADDR 0x08
25#define UDC_BUFOUT_MAXPKT_ADDR 0x0C
26#define UDC_SUBPTR_ADDR 0x10
27#define UDC_DESPTR_ADDR 0x14
28#define UDC_CONFIRM_ADDR 0x18
29
30#define UDC_DEVCFG_ADDR 0x400
31#define UDC_DEVCTL_ADDR 0x404
32#define UDC_DEVSTS_ADDR 0x408
33#define UDC_DEVIRQSTS_ADDR 0x40C
34#define UDC_DEVIRQMSK_ADDR 0x410
35#define UDC_EPIRQSTS_ADDR 0x414
36#define UDC_EPIRQMSK_ADDR 0x418
37#define UDC_DEVLPM_ADDR 0x41C
38#define UDC_CSR_BUSY_ADDR 0x4f0
39#define UDC_SRST_ADDR 0x4fc
40#define UDC_CSR_ADDR 0x500
41
42
43
44#define UDC_EPCTL_MRXFLUSH (1 << 12)
45#define UDC_EPCTL_RRDY (1 << 9)
46#define UDC_EPCTL_CNAK (1 << 8)
47#define UDC_EPCTL_SNAK (1 << 7)
48#define UDC_EPCTL_NAK (1 << 6)
49#define UDC_EPCTL_P (1 << 3)
50#define UDC_EPCTL_F (1 << 1)
51#define UDC_EPCTL_S (1 << 0)
52#define UDC_EPCTL_ET_SHIFT 4
53
54#define UDC_EPCTL_ET_MASK 0x00000030
55
56#define UDC_EPCTL_ET_CONTROL 0
57#define UDC_EPCTL_ET_ISO 1
58#define UDC_EPCTL_ET_BULK 2
59#define UDC_EPCTL_ET_INTERRUPT 3
60
61
62
63#define UDC_EPSTS_XFERDONE (1 << 27)
64#define UDC_EPSTS_RSS (1 << 26)
65#define UDC_EPSTS_RCS (1 << 25)
66#define UDC_EPSTS_TXEMPTY (1 << 24)
67#define UDC_EPSTS_TDC (1 << 10)
68#define UDC_EPSTS_HE (1 << 9)
69#define UDC_EPSTS_MRXFIFO_EMP (1 << 8)
70#define UDC_EPSTS_BNA (1 << 7)
71#define UDC_EPSTS_IN (1 << 6)
72#define UDC_EPSTS_OUT_SHIFT 4
73
74#define UDC_EPSTS_OUT_MASK 0x00000030
75#define UDC_EPSTS_ALL_CLR_MASK 0x1F0006F0
76
77#define UDC_EPSTS_OUT_SETUP 2
78#define UDC_EPSTS_OUT_DATA 1
79
80
81
82#define UDC_DEVCFG_CSR_PRG (1 << 17)
83#define UDC_DEVCFG_SP (1 << 3)
84
85#define UDC_DEVCFG_SPD_HS 0x0
86#define UDC_DEVCFG_SPD_FS 0x1
87#define UDC_DEVCFG_SPD_LS 0x2
88
89
90
91#define UDC_DEVCTL_THLEN_SHIFT 24
92#define UDC_DEVCTL_BRLEN_SHIFT 16
93#define UDC_DEVCTL_CSR_DONE (1 << 13)
94#define UDC_DEVCTL_SD (1 << 10)
95#define UDC_DEVCTL_MODE (1 << 9)
96#define UDC_DEVCTL_BREN (1 << 8)
97#define UDC_DEVCTL_THE (1 << 7)
98#define UDC_DEVCTL_DU (1 << 4)
99#define UDC_DEVCTL_TDE (1 << 3)
100#define UDC_DEVCTL_RDE (1 << 2)
101#define UDC_DEVCTL_RES (1 << 0)
102
103
104
105#define UDC_DEVSTS_TS_SHIFT 18
106#define UDC_DEVSTS_ENUM_SPEED_SHIFT 13
107#define UDC_DEVSTS_ALT_SHIFT 8
108#define UDC_DEVSTS_INTF_SHIFT 4
109#define UDC_DEVSTS_CFG_SHIFT 0
110
111#define UDC_DEVSTS_TS_MASK 0xfffc0000
112#define UDC_DEVSTS_ENUM_SPEED_MASK 0x00006000
113#define UDC_DEVSTS_ALT_MASK 0x00000f00
114#define UDC_DEVSTS_INTF_MASK 0x000000f0
115#define UDC_DEVSTS_CFG_MASK 0x0000000f
116
117#define UDC_DEVSTS_ENUM_SPEED_FULL 1
118#define UDC_DEVSTS_ENUM_SPEED_HIGH 0
119#define UDC_DEVSTS_ENUM_SPEED_LOW 2
120#define UDC_DEVSTS_ENUM_SPEED_FULLX 3
121
122
123
124#define UDC_DEVINT_RWKP (1 << 7)
125#define UDC_DEVINT_ENUM (1 << 6)
126#define UDC_DEVINT_SOF (1 << 5)
127#define UDC_DEVINT_US (1 << 4)
128#define UDC_DEVINT_UR (1 << 3)
129#define UDC_DEVINT_ES (1 << 2)
130#define UDC_DEVINT_SI (1 << 1)
131#define UDC_DEVINT_SC (1 << 0)
132
133#define UDC_DEVINT_MSK 0x7f
134
135
136
137#define UDC_EPINT_IN_SHIFT 0
138#define UDC_EPINT_OUT_SHIFT 16
139#define UDC_EPINT_IN_EP0 (1 << 0)
140#define UDC_EPINT_OUT_EP0 (1 << 16)
141
142#define UDC_EPINT_MSK_DISABLE_ALL 0xffffffff
143
144
145
146#define UDC_CSR_BUSY (1 << 0)
147
148
149
150#define UDC_PSRST (1 << 1)
151#define UDC_SRST (1 << 0)
152
153
154
155#define UDC_CSR_NE_NUM_SHIFT 0
156#define UDC_CSR_NE_DIR_SHIFT 4
157#define UDC_CSR_NE_TYPE_SHIFT 5
158#define UDC_CSR_NE_CFG_SHIFT 7
159#define UDC_CSR_NE_INTF_SHIFT 11
160#define UDC_CSR_NE_ALT_SHIFT 15
161#define UDC_CSR_NE_MAX_PKT_SHIFT 19
162
163#define UDC_CSR_NE_NUM_MASK 0x0000000f
164#define UDC_CSR_NE_DIR_MASK 0x00000010
165#define UDC_CSR_NE_TYPE_MASK 0x00000060
166#define UDC_CSR_NE_CFG_MASK 0x00000780
167#define UDC_CSR_NE_INTF_MASK 0x00007800
168#define UDC_CSR_NE_ALT_MASK 0x00078000
169#define UDC_CSR_NE_MAX_PKT_MASK 0x3ff80000
170
171#define PCH_UDC_CSR(ep) (UDC_CSR_ADDR + ep*4)
172#define PCH_UDC_EPINT(in, num)\
173 (1 << (num + (in ? UDC_EPINT_IN_SHIFT : UDC_EPINT_OUT_SHIFT)))
174
175
176#define UDC_EP0IN_IDX 0
177#define UDC_EP0OUT_IDX 1
178#define UDC_EPIN_IDX(ep) (ep * 2)
179#define UDC_EPOUT_IDX(ep) (ep * 2 + 1)
180#define PCH_UDC_EP0 0
181#define PCH_UDC_EP1 1
182#define PCH_UDC_EP2 2
183#define PCH_UDC_EP3 3
184
185
186#define PCH_UDC_EP_NUM 32
187#define PCH_UDC_USED_EP_NUM 4
188
189#define PCH_UDC_BRLEN 0x0F
190#define PCH_UDC_THLEN 0x1F
191
192#define UDC_EP0IN_BUFF_SIZE 16
193#define UDC_EPIN_BUFF_SIZE 256
194#define UDC_EP0OUT_BUFF_SIZE 16
195#define UDC_EPOUT_BUFF_SIZE 256
196
197#define UDC_EP0IN_MAX_PKT_SIZE 64
198#define UDC_EP0OUT_MAX_PKT_SIZE 64
199#define UDC_BULK_MAX_PKT_SIZE 512
200
201
202#define DMA_DIR_RX 1
203#define DMA_DIR_TX 2
204#define DMA_ADDR_INVALID (~(dma_addr_t)0)
205#define UDC_DMA_MAXPACKET 65536
206
207
208
209
210
211
212
213
214
215struct pch_udc_data_dma_desc {
216 u32 status;
217 u32 reserved;
218 u32 dataptr;
219 u32 next;
220};
221
222
223
224
225
226
227
228
229
230struct pch_udc_stp_dma_desc {
231 u32 status;
232 u32 reserved;
233 struct usb_ctrlrequest request;
234} __attribute((packed));
235
236
237
238#define PCH_UDC_BUFF_STS 0xC0000000
239#define PCH_UDC_BS_HST_RDY 0x00000000
240#define PCH_UDC_BS_DMA_BSY 0x40000000
241#define PCH_UDC_BS_DMA_DONE 0x80000000
242#define PCH_UDC_BS_HST_BSY 0xC0000000
243
244#define PCH_UDC_RXTX_STS 0x30000000
245#define PCH_UDC_RTS_SUCC 0x00000000
246#define PCH_UDC_RTS_DESERR 0x10000000
247#define PCH_UDC_RTS_BUFERR 0x30000000
248
249#define PCH_UDC_DMA_LAST 0x08000000
250
251#define PCH_UDC_RXTX_BYTES 0x0000ffff
252
253
254
255
256
257
258
259
260struct pch_udc_cfg_data {
261 u16 cur_cfg;
262 u16 cur_intf;
263 u16 cur_alt;
264};
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282struct pch_udc_ep {
283 struct usb_ep ep;
284 dma_addr_t td_stp_phys;
285 dma_addr_t td_data_phys;
286 struct pch_udc_stp_dma_desc *td_stp;
287 struct pch_udc_data_dma_desc *td_data;
288 struct pch_udc_dev *dev;
289 unsigned long offset_addr;
290 const struct usb_endpoint_descriptor *desc;
291 struct list_head queue;
292 unsigned num:5,
293 in:1,
294 halted:1;
295 unsigned long epsts;
296};
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327struct pch_udc_dev {
328 struct usb_gadget gadget;
329 struct usb_gadget_driver *driver;
330 struct pci_dev *pdev;
331 struct pch_udc_ep ep[PCH_UDC_EP_NUM];
332 spinlock_t lock;
333 unsigned active:1,
334 stall:1,
335 prot_stall:1,
336 irq_registered:1,
337 mem_region:1,
338 registered:1,
339 suspended:1,
340 connected:1,
341 vbus_session:1,
342 set_cfg_not_acked:1,
343 waiting_zlp_ack:1;
344 struct pci_pool *data_requests;
345 struct pci_pool *stp_requests;
346 dma_addr_t dma_addr;
347 void *ep0out_buf;
348 struct usb_ctrlrequest setup_data;
349 unsigned long phys_addr;
350 void __iomem *base_addr;
351 unsigned irq;
352 struct pch_udc_cfg_data cfg_data;
353};
354
355#define PCH_UDC_PCI_BAR 1
356#define PCI_DEVICE_ID_INTEL_EG20T_UDC 0x8808
357#define PCI_VENDOR_ID_ROHM 0x10DB
358#define PCI_DEVICE_ID_ML7213_IOH_UDC 0x801D
359#define PCI_DEVICE_ID_ML7831_IOH_UDC 0x8808
360
361static const char ep0_string[] = "ep0in";
362static DEFINE_SPINLOCK(udc_stall_spinlock);
363struct pch_udc_dev *pch_udc;
364static bool speed_fs;
365module_param_named(speed_fs, speed_fs, bool, S_IRUGO);
366MODULE_PARM_DESC(speed_fs, "true for Full speed operation");
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382struct pch_udc_request {
383 struct usb_request req;
384 dma_addr_t td_data_phys;
385 struct pch_udc_data_dma_desc *td_data;
386 struct pch_udc_data_dma_desc *td_data_last;
387 struct list_head queue;
388 unsigned dma_going:1,
389 dma_mapped:1,
390 dma_done:1;
391 unsigned chain_len;
392 void *buf;
393 dma_addr_t dma;
394};
395
396static inline u32 pch_udc_readl(struct pch_udc_dev *dev, unsigned long reg)
397{
398 return ioread32(dev->base_addr + reg);
399}
400
401static inline void pch_udc_writel(struct pch_udc_dev *dev,
402 unsigned long val, unsigned long reg)
403{
404 iowrite32(val, dev->base_addr + reg);
405}
406
407static inline void pch_udc_bit_set(struct pch_udc_dev *dev,
408 unsigned long reg,
409 unsigned long bitmask)
410{
411 pch_udc_writel(dev, pch_udc_readl(dev, reg) | bitmask, reg);
412}
413
414static inline void pch_udc_bit_clr(struct pch_udc_dev *dev,
415 unsigned long reg,
416 unsigned long bitmask)
417{
418 pch_udc_writel(dev, pch_udc_readl(dev, reg) & ~(bitmask), reg);
419}
420
421static inline u32 pch_udc_ep_readl(struct pch_udc_ep *ep, unsigned long reg)
422{
423 return ioread32(ep->dev->base_addr + ep->offset_addr + reg);
424}
425
426static inline void pch_udc_ep_writel(struct pch_udc_ep *ep,
427 unsigned long val, unsigned long reg)
428{
429 iowrite32(val, ep->dev->base_addr + ep->offset_addr + reg);
430}
431
432static inline void pch_udc_ep_bit_set(struct pch_udc_ep *ep,
433 unsigned long reg,
434 unsigned long bitmask)
435{
436 pch_udc_ep_writel(ep, pch_udc_ep_readl(ep, reg) | bitmask, reg);
437}
438
439static inline void pch_udc_ep_bit_clr(struct pch_udc_ep *ep,
440 unsigned long reg,
441 unsigned long bitmask)
442{
443 pch_udc_ep_writel(ep, pch_udc_ep_readl(ep, reg) & ~(bitmask), reg);
444}
445
446
447
448
449
450static void pch_udc_csr_busy(struct pch_udc_dev *dev)
451{
452 unsigned int count = 200;
453
454
455 while ((pch_udc_readl(dev, UDC_CSR_BUSY_ADDR) & UDC_CSR_BUSY)
456 && --count)
457 cpu_relax();
458 if (!count)
459 dev_err(&dev->pdev->dev, "%s: wait error\n", __func__);
460}
461
462
463
464
465
466
467
468static void pch_udc_write_csr(struct pch_udc_dev *dev, unsigned long val,
469 unsigned int ep)
470{
471 unsigned long reg = PCH_UDC_CSR(ep);
472
473 pch_udc_csr_busy(dev);
474 pch_udc_writel(dev, val, reg);
475 pch_udc_csr_busy(dev);
476}
477
478
479
480
481
482
483
484
485static u32 pch_udc_read_csr(struct pch_udc_dev *dev, unsigned int ep)
486{
487 unsigned long reg = PCH_UDC_CSR(ep);
488
489 pch_udc_csr_busy(dev);
490 pch_udc_readl(dev, reg);
491 pch_udc_csr_busy(dev);
492 return pch_udc_readl(dev, reg);
493}
494
495
496
497
498
499static inline void pch_udc_rmt_wakeup(struct pch_udc_dev *dev)
500{
501 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
502 mdelay(1);
503 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
504}
505
506
507
508
509
510
511static inline int pch_udc_get_frame(struct pch_udc_dev *dev)
512{
513 u32 frame = pch_udc_readl(dev, UDC_DEVSTS_ADDR);
514 return (frame & UDC_DEVSTS_TS_MASK) >> UDC_DEVSTS_TS_SHIFT;
515}
516
517
518
519
520
521static inline void pch_udc_clear_selfpowered(struct pch_udc_dev *dev)
522{
523 pch_udc_bit_clr(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_SP);
524}
525
526
527
528
529
530static inline void pch_udc_set_selfpowered(struct pch_udc_dev *dev)
531{
532 pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_SP);
533}
534
535
536
537
538
539static inline void pch_udc_set_disconnect(struct pch_udc_dev *dev)
540{
541 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
542}
543
544
545
546
547
548static void pch_udc_clear_disconnect(struct pch_udc_dev *dev)
549{
550
551 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
552 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
553 mdelay(1);
554
555 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
556}
557
558
559
560
561
562
563static void pch_udc_init(struct pch_udc_dev *dev);
564static void pch_udc_reconnect(struct pch_udc_dev *dev)
565{
566 pch_udc_init(dev);
567
568
569
570 pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR,
571 UDC_DEVINT_UR | UDC_DEVINT_ENUM);
572
573
574 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
575 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD);
576 mdelay(1);
577
578 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES);
579}
580
581
582
583
584
585
586
587
588static inline void pch_udc_vbus_session(struct pch_udc_dev *dev,
589 int is_active)
590{
591 if (is_active) {
592 pch_udc_reconnect(dev);
593 dev->vbus_session = 1;
594 } else {
595 if (dev->driver && dev->driver->disconnect) {
596 spin_unlock(&dev->lock);
597 dev->driver->disconnect(&dev->gadget);
598 spin_lock(&dev->lock);
599 }
600 pch_udc_set_disconnect(dev);
601 dev->vbus_session = 0;
602 }
603}
604
605
606
607
608
609static void pch_udc_ep_set_stall(struct pch_udc_ep *ep)
610{
611 if (ep->in) {
612 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_F);
613 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S);
614 } else {
615 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S);
616 }
617}
618
619
620
621
622
623static inline void pch_udc_ep_clear_stall(struct pch_udc_ep *ep)
624{
625
626 pch_udc_ep_bit_clr(ep, UDC_EPCTL_ADDR, UDC_EPCTL_S);
627
628 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_CNAK);
629}
630
631
632
633
634
635
636static inline void pch_udc_ep_set_trfr_type(struct pch_udc_ep *ep,
637 u8 type)
638{
639 pch_udc_ep_writel(ep, ((type << UDC_EPCTL_ET_SHIFT) &
640 UDC_EPCTL_ET_MASK), UDC_EPCTL_ADDR);
641}
642
643
644
645
646
647
648static void pch_udc_ep_set_bufsz(struct pch_udc_ep *ep,
649 u32 buf_size, u32 ep_in)
650{
651 u32 data;
652 if (ep_in) {
653 data = pch_udc_ep_readl(ep, UDC_BUFIN_FRAMENUM_ADDR);
654 data = (data & 0xffff0000) | (buf_size & 0xffff);
655 pch_udc_ep_writel(ep, data, UDC_BUFIN_FRAMENUM_ADDR);
656 } else {
657 data = pch_udc_ep_readl(ep, UDC_BUFOUT_MAXPKT_ADDR);
658 data = (buf_size << 16) | (data & 0xffff);
659 pch_udc_ep_writel(ep, data, UDC_BUFOUT_MAXPKT_ADDR);
660 }
661}
662
663
664
665
666
667
668static void pch_udc_ep_set_maxpkt(struct pch_udc_ep *ep, u32 pkt_size)
669{
670 u32 data = pch_udc_ep_readl(ep, UDC_BUFOUT_MAXPKT_ADDR);
671 data = (data & 0xffff0000) | (pkt_size & 0xffff);
672 pch_udc_ep_writel(ep, data, UDC_BUFOUT_MAXPKT_ADDR);
673}
674
675
676
677
678
679
680static inline void pch_udc_ep_set_subptr(struct pch_udc_ep *ep, u32 addr)
681{
682 pch_udc_ep_writel(ep, addr, UDC_SUBPTR_ADDR);
683}
684
685
686
687
688
689
690static inline void pch_udc_ep_set_ddptr(struct pch_udc_ep *ep, u32 addr)
691{
692 pch_udc_ep_writel(ep, addr, UDC_DESPTR_ADDR);
693}
694
695
696
697
698
699static inline void pch_udc_ep_set_pd(struct pch_udc_ep *ep)
700{
701 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_P);
702}
703
704
705
706
707
708static inline void pch_udc_ep_set_rrdy(struct pch_udc_ep *ep)
709{
710 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_RRDY);
711}
712
713
714
715
716
717static inline void pch_udc_ep_clear_rrdy(struct pch_udc_ep *ep)
718{
719 pch_udc_ep_bit_clr(ep, UDC_EPCTL_ADDR, UDC_EPCTL_RRDY);
720}
721
722
723
724
725
726
727
728
729
730static inline void pch_udc_set_dma(struct pch_udc_dev *dev, int dir)
731{
732 if (dir == DMA_DIR_RX)
733 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RDE);
734 else if (dir == DMA_DIR_TX)
735 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_TDE);
736}
737
738
739
740
741
742
743
744
745
746static inline void pch_udc_clear_dma(struct pch_udc_dev *dev, int dir)
747{
748 if (dir == DMA_DIR_RX)
749 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RDE);
750 else if (dir == DMA_DIR_TX)
751 pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_TDE);
752}
753
754
755
756
757
758
759static inline void pch_udc_set_csr_done(struct pch_udc_dev *dev)
760{
761 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_CSR_DONE);
762}
763
764
765
766
767
768
769static inline void pch_udc_disable_interrupts(struct pch_udc_dev *dev,
770 u32 mask)
771{
772 pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, mask);
773}
774
775
776
777
778
779
780static inline void pch_udc_enable_interrupts(struct pch_udc_dev *dev,
781 u32 mask)
782{
783 pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR, mask);
784}
785
786
787
788
789
790
791static inline void pch_udc_disable_ep_interrupts(struct pch_udc_dev *dev,
792 u32 mask)
793{
794 pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, mask);
795}
796
797
798
799
800
801
802static inline void pch_udc_enable_ep_interrupts(struct pch_udc_dev *dev,
803 u32 mask)
804{
805 pch_udc_bit_clr(dev, UDC_EPIRQMSK_ADDR, mask);
806}
807
808
809
810
811
812
813static inline u32 pch_udc_read_device_interrupts(struct pch_udc_dev *dev)
814{
815 return pch_udc_readl(dev, UDC_DEVIRQSTS_ADDR);
816}
817
818
819
820
821
822
823static inline void pch_udc_write_device_interrupts(struct pch_udc_dev *dev,
824 u32 val)
825{
826 pch_udc_writel(dev, val, UDC_DEVIRQSTS_ADDR);
827}
828
829
830
831
832
833
834static inline u32 pch_udc_read_ep_interrupts(struct pch_udc_dev *dev)
835{
836 return pch_udc_readl(dev, UDC_EPIRQSTS_ADDR);
837}
838
839
840
841
842
843
844static inline void pch_udc_write_ep_interrupts(struct pch_udc_dev *dev,
845 u32 val)
846{
847 pch_udc_writel(dev, val, UDC_EPIRQSTS_ADDR);
848}
849
850
851
852
853
854
855static inline u32 pch_udc_read_device_status(struct pch_udc_dev *dev)
856{
857 return pch_udc_readl(dev, UDC_DEVSTS_ADDR);
858}
859
860
861
862
863
864
865static inline u32 pch_udc_read_ep_control(struct pch_udc_ep *ep)
866{
867 return pch_udc_ep_readl(ep, UDC_EPCTL_ADDR);
868}
869
870
871
872
873
874
875static inline void pch_udc_clear_ep_control(struct pch_udc_ep *ep)
876{
877 return pch_udc_ep_writel(ep, 0, UDC_EPCTL_ADDR);
878}
879
880
881
882
883
884
885static inline u32 pch_udc_read_ep_status(struct pch_udc_ep *ep)
886{
887 return pch_udc_ep_readl(ep, UDC_EPSTS_ADDR);
888}
889
890
891
892
893
894
895static inline void pch_udc_clear_ep_status(struct pch_udc_ep *ep,
896 u32 stat)
897{
898 return pch_udc_ep_writel(ep, stat, UDC_EPSTS_ADDR);
899}
900
901
902
903
904
905
906static inline void pch_udc_ep_set_nak(struct pch_udc_ep *ep)
907{
908 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_SNAK);
909}
910
911
912
913
914
915
916static void pch_udc_ep_clear_nak(struct pch_udc_ep *ep)
917{
918 unsigned int loopcnt = 0;
919 struct pch_udc_dev *dev = ep->dev;
920
921 if (!(pch_udc_ep_readl(ep, UDC_EPCTL_ADDR) & UDC_EPCTL_NAK))
922 return;
923 if (!ep->in) {
924 loopcnt = 10000;
925 while (!(pch_udc_read_ep_status(ep) & UDC_EPSTS_MRXFIFO_EMP) &&
926 --loopcnt)
927 udelay(5);
928 if (!loopcnt)
929 dev_err(&dev->pdev->dev, "%s: RxFIFO not Empty\n",
930 __func__);
931 }
932 loopcnt = 10000;
933 while ((pch_udc_read_ep_control(ep) & UDC_EPCTL_NAK) && --loopcnt) {
934 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_CNAK);
935 udelay(5);
936 }
937 if (!loopcnt)
938 dev_err(&dev->pdev->dev, "%s: Clear NAK not set for ep%d%s\n",
939 __func__, ep->num, (ep->in ? "in" : "out"));
940}
941
942
943
944
945
946
947
948
949static void pch_udc_ep_fifo_flush(struct pch_udc_ep *ep, int dir)
950{
951 if (dir) {
952 pch_udc_ep_bit_set(ep, UDC_EPCTL_ADDR, UDC_EPCTL_F);
953 return;
954 }
955}
956
957
958
959
960
961
962static void pch_udc_ep_enable(struct pch_udc_ep *ep,
963 struct pch_udc_cfg_data *cfg,
964 const struct usb_endpoint_descriptor *desc)
965{
966 u32 val = 0;
967 u32 buff_size = 0;
968
969 pch_udc_ep_set_trfr_type(ep, desc->bmAttributes);
970 if (ep->in)
971 buff_size = UDC_EPIN_BUFF_SIZE;
972 else
973 buff_size = UDC_EPOUT_BUFF_SIZE;
974 pch_udc_ep_set_bufsz(ep, buff_size, ep->in);
975 pch_udc_ep_set_maxpkt(ep, usb_endpoint_maxp(desc));
976 pch_udc_ep_set_nak(ep);
977 pch_udc_ep_fifo_flush(ep, ep->in);
978
979 val = ep->num << UDC_CSR_NE_NUM_SHIFT | ep->in << UDC_CSR_NE_DIR_SHIFT |
980 ((desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) <<
981 UDC_CSR_NE_TYPE_SHIFT) |
982 (cfg->cur_cfg << UDC_CSR_NE_CFG_SHIFT) |
983 (cfg->cur_intf << UDC_CSR_NE_INTF_SHIFT) |
984 (cfg->cur_alt << UDC_CSR_NE_ALT_SHIFT) |
985 usb_endpoint_maxp(desc) << UDC_CSR_NE_MAX_PKT_SHIFT;
986
987 if (ep->in)
988 pch_udc_write_csr(ep->dev, val, UDC_EPIN_IDX(ep->num));
989 else
990 pch_udc_write_csr(ep->dev, val, UDC_EPOUT_IDX(ep->num));
991}
992
993
994
995
996
997static void pch_udc_ep_disable(struct pch_udc_ep *ep)
998{
999 if (ep->in) {
1000
1001 pch_udc_ep_writel(ep, UDC_EPCTL_F, UDC_EPCTL_ADDR);
1002
1003 pch_udc_ep_writel(ep, UDC_EPCTL_SNAK, UDC_EPCTL_ADDR);
1004 pch_udc_ep_bit_set(ep, UDC_EPSTS_ADDR, UDC_EPSTS_IN);
1005 } else {
1006
1007 pch_udc_ep_writel(ep, UDC_EPCTL_SNAK, UDC_EPCTL_ADDR);
1008 }
1009
1010 pch_udc_ep_writel(ep, 0, UDC_DESPTR_ADDR);
1011}
1012
1013
1014
1015
1016
1017static void pch_udc_wait_ep_stall(struct pch_udc_ep *ep)
1018{
1019 unsigned int count = 10000;
1020
1021
1022 while ((pch_udc_read_ep_control(ep) & UDC_EPCTL_S) && --count)
1023 udelay(5);
1024 if (!count)
1025 dev_err(&ep->dev->pdev->dev, "%s: wait error\n", __func__);
1026}
1027
1028
1029
1030
1031
1032static void pch_udc_init(struct pch_udc_dev *dev)
1033{
1034 if (NULL == dev) {
1035 pr_err("%s: Invalid address\n", __func__);
1036 return;
1037 }
1038
1039 pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
1040 pch_udc_writel(dev, UDC_SRST | UDC_PSRST, UDC_SRST_ADDR);
1041 mdelay(1);
1042 pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
1043 pch_udc_writel(dev, 0x00, UDC_SRST_ADDR);
1044 mdelay(1);
1045
1046 pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, UDC_DEVINT_MSK);
1047 pch_udc_bit_set(dev, UDC_DEVIRQSTS_ADDR, UDC_DEVINT_MSK);
1048
1049
1050 pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
1051 pch_udc_bit_set(dev, UDC_EPIRQSTS_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
1052
1053
1054 if (speed_fs)
1055 pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_CSR_PRG |
1056 UDC_DEVCFG_SP | UDC_DEVCFG_SPD_FS);
1057 else
1058 pch_udc_bit_set(dev, UDC_DEVCFG_ADDR, UDC_DEVCFG_CSR_PRG |
1059 UDC_DEVCFG_SP | UDC_DEVCFG_SPD_HS);
1060 pch_udc_bit_set(dev, UDC_DEVCTL_ADDR,
1061 (PCH_UDC_THLEN << UDC_DEVCTL_THLEN_SHIFT) |
1062 (PCH_UDC_BRLEN << UDC_DEVCTL_BRLEN_SHIFT) |
1063 UDC_DEVCTL_MODE | UDC_DEVCTL_BREN |
1064 UDC_DEVCTL_THE);
1065}
1066
1067
1068
1069
1070
1071static void pch_udc_exit(struct pch_udc_dev *dev)
1072{
1073
1074 pch_udc_bit_set(dev, UDC_DEVIRQMSK_ADDR, UDC_DEVINT_MSK);
1075
1076 pch_udc_bit_set(dev, UDC_EPIRQMSK_ADDR, UDC_EPINT_MSK_DISABLE_ALL);
1077
1078 pch_udc_set_disconnect(dev);
1079}
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089static int pch_udc_pcd_get_frame(struct usb_gadget *gadget)
1090{
1091 struct pch_udc_dev *dev;
1092
1093 if (!gadget)
1094 return -EINVAL;
1095 dev = container_of(gadget, struct pch_udc_dev, gadget);
1096 return pch_udc_get_frame(dev);
1097}
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107static int pch_udc_pcd_wakeup(struct usb_gadget *gadget)
1108{
1109 struct pch_udc_dev *dev;
1110 unsigned long flags;
1111
1112 if (!gadget)
1113 return -EINVAL;
1114 dev = container_of(gadget, struct pch_udc_dev, gadget);
1115 spin_lock_irqsave(&dev->lock, flags);
1116 pch_udc_rmt_wakeup(dev);
1117 spin_unlock_irqrestore(&dev->lock, flags);
1118 return 0;
1119}
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131static int pch_udc_pcd_selfpowered(struct usb_gadget *gadget, int value)
1132{
1133 struct pch_udc_dev *dev;
1134
1135 if (!gadget)
1136 return -EINVAL;
1137 dev = container_of(gadget, struct pch_udc_dev, gadget);
1138 if (value)
1139 pch_udc_set_selfpowered(dev);
1140 else
1141 pch_udc_clear_selfpowered(dev);
1142 return 0;
1143}
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155static int pch_udc_pcd_pullup(struct usb_gadget *gadget, int is_on)
1156{
1157 struct pch_udc_dev *dev;
1158
1159 if (!gadget)
1160 return -EINVAL;
1161 dev = container_of(gadget, struct pch_udc_dev, gadget);
1162 if (is_on) {
1163 pch_udc_reconnect(dev);
1164 } else {
1165 if (dev->driver && dev->driver->disconnect) {
1166 spin_unlock(&dev->lock);
1167 dev->driver->disconnect(&dev->gadget);
1168 spin_lock(&dev->lock);
1169 }
1170 pch_udc_set_disconnect(dev);
1171 }
1172
1173 return 0;
1174}
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187static int pch_udc_pcd_vbus_session(struct usb_gadget *gadget, int is_active)
1188{
1189 struct pch_udc_dev *dev;
1190
1191 if (!gadget)
1192 return -EINVAL;
1193 dev = container_of(gadget, struct pch_udc_dev, gadget);
1194 pch_udc_vbus_session(dev, is_active);
1195 return 0;
1196}
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209static int pch_udc_pcd_vbus_draw(struct usb_gadget *gadget, unsigned int mA)
1210{
1211 return -EOPNOTSUPP;
1212}
1213
1214static int pch_udc_start(struct usb_gadget_driver *driver,
1215 int (*bind)(struct usb_gadget *));
1216static int pch_udc_stop(struct usb_gadget_driver *driver);
1217static const struct usb_gadget_ops pch_udc_ops = {
1218 .get_frame = pch_udc_pcd_get_frame,
1219 .wakeup = pch_udc_pcd_wakeup,
1220 .set_selfpowered = pch_udc_pcd_selfpowered,
1221 .pullup = pch_udc_pcd_pullup,
1222 .vbus_session = pch_udc_pcd_vbus_session,
1223 .vbus_draw = pch_udc_pcd_vbus_draw,
1224 .start = pch_udc_start,
1225 .stop = pch_udc_stop,
1226};
1227
1228
1229
1230
1231
1232
1233
1234
1235static void complete_req(struct pch_udc_ep *ep, struct pch_udc_request *req,
1236 int status)
1237{
1238 struct pch_udc_dev *dev;
1239 unsigned halted = ep->halted;
1240
1241 list_del_init(&req->queue);
1242
1243
1244 if (req->req.status == -EINPROGRESS)
1245 req->req.status = status;
1246 else
1247 status = req->req.status;
1248
1249 dev = ep->dev;
1250 if (req->dma_mapped) {
1251 if (req->dma == DMA_ADDR_INVALID) {
1252 if (ep->in)
1253 dma_unmap_single(&dev->pdev->dev, req->req.dma,
1254 req->req.length,
1255 DMA_TO_DEVICE);
1256 else
1257 dma_unmap_single(&dev->pdev->dev, req->req.dma,
1258 req->req.length,
1259 DMA_FROM_DEVICE);
1260 req->req.dma = DMA_ADDR_INVALID;
1261 } else {
1262 if (ep->in)
1263 dma_unmap_single(&dev->pdev->dev, req->dma,
1264 req->req.length,
1265 DMA_TO_DEVICE);
1266 else {
1267 dma_unmap_single(&dev->pdev->dev, req->dma,
1268 req->req.length,
1269 DMA_FROM_DEVICE);
1270 memcpy(req->req.buf, req->buf, req->req.length);
1271 }
1272 kfree(req->buf);
1273 req->dma = DMA_ADDR_INVALID;
1274 }
1275 req->dma_mapped = 0;
1276 }
1277 ep->halted = 1;
1278 spin_unlock(&dev->lock);
1279 if (!ep->in)
1280 pch_udc_ep_clear_rrdy(ep);
1281 req->req.complete(&ep->ep, &req->req);
1282 spin_lock(&dev->lock);
1283 ep->halted = halted;
1284}
1285
1286
1287
1288
1289
1290static void empty_req_queue(struct pch_udc_ep *ep)
1291{
1292 struct pch_udc_request *req;
1293
1294 ep->halted = 1;
1295 while (!list_empty(&ep->queue)) {
1296 req = list_entry(ep->queue.next, struct pch_udc_request, queue);
1297 complete_req(ep, req, -ESHUTDOWN);
1298 }
1299}
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310static void pch_udc_free_dma_chain(struct pch_udc_dev *dev,
1311 struct pch_udc_request *req)
1312{
1313 struct pch_udc_data_dma_desc *td = req->td_data;
1314 unsigned i = req->chain_len;
1315
1316 dma_addr_t addr2;
1317 dma_addr_t addr = (dma_addr_t)td->next;
1318 td->next = 0x00;
1319 for (; i > 1; --i) {
1320
1321 td = phys_to_virt(addr);
1322 addr2 = (dma_addr_t)td->next;
1323 pci_pool_free(dev->data_requests, td, addr);
1324 td->next = 0x00;
1325 addr = addr2;
1326 }
1327 req->chain_len = 1;
1328}
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342static int pch_udc_create_dma_chain(struct pch_udc_ep *ep,
1343 struct pch_udc_request *req,
1344 unsigned long buf_len,
1345 gfp_t gfp_flags)
1346{
1347 struct pch_udc_data_dma_desc *td = req->td_data, *last;
1348 unsigned long bytes = req->req.length, i = 0;
1349 dma_addr_t dma_addr;
1350 unsigned len = 1;
1351
1352 if (req->chain_len > 1)
1353 pch_udc_free_dma_chain(ep->dev, req);
1354
1355 if (req->dma == DMA_ADDR_INVALID)
1356 td->dataptr = req->req.dma;
1357 else
1358 td->dataptr = req->dma;
1359
1360 td->status = PCH_UDC_BS_HST_BSY;
1361 for (; ; bytes -= buf_len, ++len) {
1362 td->status = PCH_UDC_BS_HST_BSY | min(buf_len, bytes);
1363 if (bytes <= buf_len)
1364 break;
1365 last = td;
1366 td = pci_pool_alloc(ep->dev->data_requests, gfp_flags,
1367 &dma_addr);
1368 if (!td)
1369 goto nomem;
1370 i += buf_len;
1371 td->dataptr = req->td_data->dataptr + i;
1372 last->next = dma_addr;
1373 }
1374
1375 req->td_data_last = td;
1376 td->status |= PCH_UDC_DMA_LAST;
1377 td->next = req->td_data_phys;
1378 req->chain_len = len;
1379 return 0;
1380
1381nomem:
1382 if (len > 1) {
1383 req->chain_len = len;
1384 pch_udc_free_dma_chain(ep->dev, req);
1385 }
1386 req->chain_len = 1;
1387 return -ENOMEM;
1388}
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401static int prepare_dma(struct pch_udc_ep *ep, struct pch_udc_request *req,
1402 gfp_t gfp)
1403{
1404 int retval;
1405
1406
1407 retval = pch_udc_create_dma_chain(ep, req, ep->ep.maxpacket, gfp);
1408 if (retval) {
1409 pr_err("%s: could not create DMA chain:%d\n", __func__, retval);
1410 return retval;
1411 }
1412 if (ep->in)
1413 req->td_data->status = (req->td_data->status &
1414 ~PCH_UDC_BUFF_STS) | PCH_UDC_BS_HST_RDY;
1415 return 0;
1416}
1417
1418
1419
1420
1421
1422
1423
1424static void process_zlp(struct pch_udc_ep *ep, struct pch_udc_request *req)
1425{
1426 struct pch_udc_dev *dev = ep->dev;
1427
1428
1429 complete_req(ep, req, 0);
1430
1431
1432
1433
1434 if (dev->set_cfg_not_acked) {
1435 pch_udc_set_csr_done(dev);
1436 dev->set_cfg_not_acked = 0;
1437 }
1438
1439 if (!dev->stall && dev->waiting_zlp_ack) {
1440 pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX]));
1441 dev->waiting_zlp_ack = 0;
1442 }
1443}
1444
1445
1446
1447
1448
1449
1450static void pch_udc_start_rxrequest(struct pch_udc_ep *ep,
1451 struct pch_udc_request *req)
1452{
1453 struct pch_udc_data_dma_desc *td_data;
1454
1455 pch_udc_clear_dma(ep->dev, DMA_DIR_RX);
1456 td_data = req->td_data;
1457
1458 while (1) {
1459 td_data->status = (td_data->status & ~PCH_UDC_BUFF_STS) |
1460 PCH_UDC_BS_HST_RDY;
1461 if ((td_data->status & PCH_UDC_DMA_LAST) == PCH_UDC_DMA_LAST)
1462 break;
1463 td_data = phys_to_virt(td_data->next);
1464 }
1465
1466 pch_udc_ep_set_ddptr(ep, req->td_data_phys);
1467 req->dma_going = 1;
1468 pch_udc_enable_ep_interrupts(ep->dev, UDC_EPINT_OUT_EP0 << ep->num);
1469 pch_udc_set_dma(ep->dev, DMA_DIR_RX);
1470 pch_udc_ep_clear_nak(ep);
1471 pch_udc_ep_set_rrdy(ep);
1472}
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485static int pch_udc_pcd_ep_enable(struct usb_ep *usbep,
1486 const struct usb_endpoint_descriptor *desc)
1487{
1488 struct pch_udc_ep *ep;
1489 struct pch_udc_dev *dev;
1490 unsigned long iflags;
1491
1492 if (!usbep || (usbep->name == ep0_string) || !desc ||
1493 (desc->bDescriptorType != USB_DT_ENDPOINT) || !desc->wMaxPacketSize)
1494 return -EINVAL;
1495
1496 ep = container_of(usbep, struct pch_udc_ep, ep);
1497 dev = ep->dev;
1498 if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN))
1499 return -ESHUTDOWN;
1500 spin_lock_irqsave(&dev->lock, iflags);
1501 ep->desc = desc;
1502 ep->halted = 0;
1503 pch_udc_ep_enable(ep, &ep->dev->cfg_data, desc);
1504 ep->ep.maxpacket = usb_endpoint_maxp(desc);
1505 pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1506 spin_unlock_irqrestore(&dev->lock, iflags);
1507 return 0;
1508}
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519static int pch_udc_pcd_ep_disable(struct usb_ep *usbep)
1520{
1521 struct pch_udc_ep *ep;
1522 struct pch_udc_dev *dev;
1523 unsigned long iflags;
1524
1525 if (!usbep)
1526 return -EINVAL;
1527
1528 ep = container_of(usbep, struct pch_udc_ep, ep);
1529 dev = ep->dev;
1530 if ((usbep->name == ep0_string) || !ep->desc)
1531 return -EINVAL;
1532
1533 spin_lock_irqsave(&ep->dev->lock, iflags);
1534 empty_req_queue(ep);
1535 ep->halted = 1;
1536 pch_udc_ep_disable(ep);
1537 pch_udc_disable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1538 ep->desc = NULL;
1539 ep->ep.desc = NULL;
1540 INIT_LIST_HEAD(&ep->queue);
1541 spin_unlock_irqrestore(&ep->dev->lock, iflags);
1542 return 0;
1543}
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555static struct usb_request *pch_udc_alloc_request(struct usb_ep *usbep,
1556 gfp_t gfp)
1557{
1558 struct pch_udc_request *req;
1559 struct pch_udc_ep *ep;
1560 struct pch_udc_data_dma_desc *dma_desc;
1561 struct pch_udc_dev *dev;
1562
1563 if (!usbep)
1564 return NULL;
1565 ep = container_of(usbep, struct pch_udc_ep, ep);
1566 dev = ep->dev;
1567 req = kzalloc(sizeof *req, gfp);
1568 if (!req)
1569 return NULL;
1570 req->req.dma = DMA_ADDR_INVALID;
1571 req->dma = DMA_ADDR_INVALID;
1572 INIT_LIST_HEAD(&req->queue);
1573 if (!ep->dev->dma_addr)
1574 return &req->req;
1575
1576 dma_desc = pci_pool_alloc(ep->dev->data_requests, gfp,
1577 &req->td_data_phys);
1578 if (NULL == dma_desc) {
1579 kfree(req);
1580 return NULL;
1581 }
1582
1583 dma_desc->status |= PCH_UDC_BS_HST_BSY;
1584 dma_desc->dataptr = __constant_cpu_to_le32(DMA_ADDR_INVALID);
1585 req->td_data = dma_desc;
1586 req->td_data_last = dma_desc;
1587 req->chain_len = 1;
1588 return &req->req;
1589}
1590
1591
1592
1593
1594
1595
1596
1597static void pch_udc_free_request(struct usb_ep *usbep,
1598 struct usb_request *usbreq)
1599{
1600 struct pch_udc_ep *ep;
1601 struct pch_udc_request *req;
1602 struct pch_udc_dev *dev;
1603
1604 if (!usbep || !usbreq)
1605 return;
1606 ep = container_of(usbep, struct pch_udc_ep, ep);
1607 req = container_of(usbreq, struct pch_udc_request, req);
1608 dev = ep->dev;
1609 if (!list_empty(&req->queue))
1610 dev_err(&dev->pdev->dev, "%s: %s req=0x%p queue not empty\n",
1611 __func__, usbep->name, req);
1612 if (req->td_data != NULL) {
1613 if (req->chain_len > 1)
1614 pch_udc_free_dma_chain(ep->dev, req);
1615 pci_pool_free(ep->dev->data_requests, req->td_data,
1616 req->td_data_phys);
1617 }
1618 kfree(req);
1619}
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632static int pch_udc_pcd_queue(struct usb_ep *usbep, struct usb_request *usbreq,
1633 gfp_t gfp)
1634{
1635 int retval = 0;
1636 struct pch_udc_ep *ep;
1637 struct pch_udc_dev *dev;
1638 struct pch_udc_request *req;
1639 unsigned long iflags;
1640
1641 if (!usbep || !usbreq || !usbreq->complete || !usbreq->buf)
1642 return -EINVAL;
1643 ep = container_of(usbep, struct pch_udc_ep, ep);
1644 dev = ep->dev;
1645 if (!ep->desc && ep->num)
1646 return -EINVAL;
1647 req = container_of(usbreq, struct pch_udc_request, req);
1648 if (!list_empty(&req->queue))
1649 return -EINVAL;
1650 if (!dev->driver || (dev->gadget.speed == USB_SPEED_UNKNOWN))
1651 return -ESHUTDOWN;
1652 spin_lock_irqsave(&dev->lock, iflags);
1653
1654 if (usbreq->length &&
1655 ((usbreq->dma == DMA_ADDR_INVALID) || !usbreq->dma)) {
1656 if (!((unsigned long)(usbreq->buf) & 0x03)) {
1657 if (ep->in)
1658 usbreq->dma = dma_map_single(&dev->pdev->dev,
1659 usbreq->buf,
1660 usbreq->length,
1661 DMA_TO_DEVICE);
1662 else
1663 usbreq->dma = dma_map_single(&dev->pdev->dev,
1664 usbreq->buf,
1665 usbreq->length,
1666 DMA_FROM_DEVICE);
1667 } else {
1668 req->buf = kzalloc(usbreq->length, GFP_ATOMIC);
1669 if (!req->buf) {
1670 retval = -ENOMEM;
1671 goto probe_end;
1672 }
1673 if (ep->in) {
1674 memcpy(req->buf, usbreq->buf, usbreq->length);
1675 req->dma = dma_map_single(&dev->pdev->dev,
1676 req->buf,
1677 usbreq->length,
1678 DMA_TO_DEVICE);
1679 } else
1680 req->dma = dma_map_single(&dev->pdev->dev,
1681 req->buf,
1682 usbreq->length,
1683 DMA_FROM_DEVICE);
1684 }
1685 req->dma_mapped = 1;
1686 }
1687 if (usbreq->length > 0) {
1688 retval = prepare_dma(ep, req, GFP_ATOMIC);
1689 if (retval)
1690 goto probe_end;
1691 }
1692 usbreq->actual = 0;
1693 usbreq->status = -EINPROGRESS;
1694 req->dma_done = 0;
1695 if (list_empty(&ep->queue) && !ep->halted) {
1696
1697 if (!usbreq->length) {
1698 process_zlp(ep, req);
1699 retval = 0;
1700 goto probe_end;
1701 }
1702 if (!ep->in) {
1703 pch_udc_start_rxrequest(ep, req);
1704 } else {
1705
1706
1707
1708
1709
1710 pch_udc_wait_ep_stall(ep);
1711 pch_udc_ep_clear_nak(ep);
1712 pch_udc_enable_ep_interrupts(ep->dev, (1 << ep->num));
1713 }
1714 }
1715
1716 if (req != NULL)
1717 list_add_tail(&req->queue, &ep->queue);
1718
1719probe_end:
1720 spin_unlock_irqrestore(&dev->lock, iflags);
1721 return retval;
1722}
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734static int pch_udc_pcd_dequeue(struct usb_ep *usbep,
1735 struct usb_request *usbreq)
1736{
1737 struct pch_udc_ep *ep;
1738 struct pch_udc_request *req;
1739 struct pch_udc_dev *dev;
1740 unsigned long flags;
1741 int ret = -EINVAL;
1742
1743 ep = container_of(usbep, struct pch_udc_ep, ep);
1744 dev = ep->dev;
1745 if (!usbep || !usbreq || (!ep->desc && ep->num))
1746 return ret;
1747 req = container_of(usbreq, struct pch_udc_request, req);
1748 spin_lock_irqsave(&ep->dev->lock, flags);
1749
1750 list_for_each_entry(req, &ep->queue, queue) {
1751 if (&req->req == usbreq) {
1752 pch_udc_ep_set_nak(ep);
1753 if (!list_empty(&req->queue))
1754 complete_req(ep, req, -ECONNRESET);
1755 ret = 0;
1756 break;
1757 }
1758 }
1759 spin_unlock_irqrestore(&ep->dev->lock, flags);
1760 return ret;
1761}
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773static int pch_udc_pcd_set_halt(struct usb_ep *usbep, int halt)
1774{
1775 struct pch_udc_ep *ep;
1776 struct pch_udc_dev *dev;
1777 unsigned long iflags;
1778 int ret;
1779
1780 if (!usbep)
1781 return -EINVAL;
1782 ep = container_of(usbep, struct pch_udc_ep, ep);
1783 dev = ep->dev;
1784 if (!ep->desc && !ep->num)
1785 return -EINVAL;
1786 if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN))
1787 return -ESHUTDOWN;
1788 spin_lock_irqsave(&udc_stall_spinlock, iflags);
1789 if (list_empty(&ep->queue)) {
1790 if (halt) {
1791 if (ep->num == PCH_UDC_EP0)
1792 ep->dev->stall = 1;
1793 pch_udc_ep_set_stall(ep);
1794 pch_udc_enable_ep_interrupts(ep->dev,
1795 PCH_UDC_EPINT(ep->in,
1796 ep->num));
1797 } else {
1798 pch_udc_ep_clear_stall(ep);
1799 }
1800 ret = 0;
1801 } else {
1802 ret = -EAGAIN;
1803 }
1804 spin_unlock_irqrestore(&udc_stall_spinlock, iflags);
1805 return ret;
1806}
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818static int pch_udc_pcd_set_wedge(struct usb_ep *usbep)
1819{
1820 struct pch_udc_ep *ep;
1821 struct pch_udc_dev *dev;
1822 unsigned long iflags;
1823 int ret;
1824
1825 if (!usbep)
1826 return -EINVAL;
1827 ep = container_of(usbep, struct pch_udc_ep, ep);
1828 dev = ep->dev;
1829 if (!ep->desc && !ep->num)
1830 return -EINVAL;
1831 if (!ep->dev->driver || (ep->dev->gadget.speed == USB_SPEED_UNKNOWN))
1832 return -ESHUTDOWN;
1833 spin_lock_irqsave(&udc_stall_spinlock, iflags);
1834 if (!list_empty(&ep->queue)) {
1835 ret = -EAGAIN;
1836 } else {
1837 if (ep->num == PCH_UDC_EP0)
1838 ep->dev->stall = 1;
1839 pch_udc_ep_set_stall(ep);
1840 pch_udc_enable_ep_interrupts(ep->dev,
1841 PCH_UDC_EPINT(ep->in, ep->num));
1842 ep->dev->prot_stall = 1;
1843 ret = 0;
1844 }
1845 spin_unlock_irqrestore(&udc_stall_spinlock, iflags);
1846 return ret;
1847}
1848
1849
1850
1851
1852
1853static void pch_udc_pcd_fifo_flush(struct usb_ep *usbep)
1854{
1855 struct pch_udc_ep *ep;
1856
1857 if (!usbep)
1858 return;
1859
1860 ep = container_of(usbep, struct pch_udc_ep, ep);
1861 if (ep->desc || !ep->num)
1862 pch_udc_ep_fifo_flush(ep, ep->in);
1863}
1864
1865static const struct usb_ep_ops pch_udc_ep_ops = {
1866 .enable = pch_udc_pcd_ep_enable,
1867 .disable = pch_udc_pcd_ep_disable,
1868 .alloc_request = pch_udc_alloc_request,
1869 .free_request = pch_udc_free_request,
1870 .queue = pch_udc_pcd_queue,
1871 .dequeue = pch_udc_pcd_dequeue,
1872 .set_halt = pch_udc_pcd_set_halt,
1873 .set_wedge = pch_udc_pcd_set_wedge,
1874 .fifo_status = NULL,
1875 .fifo_flush = pch_udc_pcd_fifo_flush,
1876};
1877
1878
1879
1880
1881
1882static void pch_udc_init_setup_buff(struct pch_udc_stp_dma_desc *td_stp)
1883{
1884 static u32 pky_marker;
1885
1886 if (!td_stp)
1887 return;
1888 td_stp->reserved = ++pky_marker;
1889 memset(&td_stp->request, 0xFF, sizeof td_stp->request);
1890 td_stp->status = PCH_UDC_BS_HST_RDY;
1891}
1892
1893
1894
1895
1896
1897
1898static void pch_udc_start_next_txrequest(struct pch_udc_ep *ep)
1899{
1900 struct pch_udc_request *req;
1901 struct pch_udc_data_dma_desc *td_data;
1902
1903 if (pch_udc_read_ep_control(ep) & UDC_EPCTL_P)
1904 return;
1905
1906 if (list_empty(&ep->queue))
1907 return;
1908
1909
1910 req = list_entry(ep->queue.next, struct pch_udc_request, queue);
1911 if (req->dma_going)
1912 return;
1913 if (!req->td_data)
1914 return;
1915 pch_udc_wait_ep_stall(ep);
1916 req->dma_going = 1;
1917 pch_udc_ep_set_ddptr(ep, 0);
1918 td_data = req->td_data;
1919 while (1) {
1920 td_data->status = (td_data->status & ~PCH_UDC_BUFF_STS) |
1921 PCH_UDC_BS_HST_RDY;
1922 if ((td_data->status & PCH_UDC_DMA_LAST) == PCH_UDC_DMA_LAST)
1923 break;
1924 td_data = phys_to_virt(td_data->next);
1925 }
1926 pch_udc_ep_set_ddptr(ep, req->td_data_phys);
1927 pch_udc_set_dma(ep->dev, DMA_DIR_TX);
1928 pch_udc_ep_set_pd(ep);
1929 pch_udc_enable_ep_interrupts(ep->dev, PCH_UDC_EPINT(ep->in, ep->num));
1930 pch_udc_ep_clear_nak(ep);
1931}
1932
1933
1934
1935
1936
1937static void pch_udc_complete_transfer(struct pch_udc_ep *ep)
1938{
1939 struct pch_udc_request *req;
1940 struct pch_udc_dev *dev = ep->dev;
1941
1942 if (list_empty(&ep->queue))
1943 return;
1944 req = list_entry(ep->queue.next, struct pch_udc_request, queue);
1945 if ((req->td_data_last->status & PCH_UDC_BUFF_STS) !=
1946 PCH_UDC_BS_DMA_DONE)
1947 return;
1948 if ((req->td_data_last->status & PCH_UDC_RXTX_STS) !=
1949 PCH_UDC_RTS_SUCC) {
1950 dev_err(&dev->pdev->dev, "Invalid RXTX status (0x%08x) "
1951 "epstatus=0x%08x\n",
1952 (req->td_data_last->status & PCH_UDC_RXTX_STS),
1953 (int)(ep->epsts));
1954 return;
1955 }
1956
1957 req->req.actual = req->req.length;
1958 req->td_data_last->status = PCH_UDC_BS_HST_BSY | PCH_UDC_DMA_LAST;
1959 req->td_data->status = PCH_UDC_BS_HST_BSY | PCH_UDC_DMA_LAST;
1960 complete_req(ep, req, 0);
1961 req->dma_going = 0;
1962 if (!list_empty(&ep->queue)) {
1963 pch_udc_wait_ep_stall(ep);
1964 pch_udc_ep_clear_nak(ep);
1965 pch_udc_enable_ep_interrupts(ep->dev,
1966 PCH_UDC_EPINT(ep->in, ep->num));
1967 } else {
1968 pch_udc_disable_ep_interrupts(ep->dev,
1969 PCH_UDC_EPINT(ep->in, ep->num));
1970 }
1971}
1972
1973
1974
1975
1976
1977static void pch_udc_complete_receiver(struct pch_udc_ep *ep)
1978{
1979 struct pch_udc_request *req;
1980 struct pch_udc_dev *dev = ep->dev;
1981 unsigned int count;
1982 struct pch_udc_data_dma_desc *td;
1983 dma_addr_t addr;
1984
1985 if (list_empty(&ep->queue))
1986 return;
1987
1988 req = list_entry(ep->queue.next, struct pch_udc_request, queue);
1989 pch_udc_clear_dma(ep->dev, DMA_DIR_RX);
1990 pch_udc_ep_set_ddptr(ep, 0);
1991 if ((req->td_data_last->status & PCH_UDC_BUFF_STS) ==
1992 PCH_UDC_BS_DMA_DONE)
1993 td = req->td_data_last;
1994 else
1995 td = req->td_data;
1996
1997 while (1) {
1998 if ((td->status & PCH_UDC_RXTX_STS) != PCH_UDC_RTS_SUCC) {
1999 dev_err(&dev->pdev->dev, "Invalid RXTX status=0x%08x "
2000 "epstatus=0x%08x\n",
2001 (req->td_data->status & PCH_UDC_RXTX_STS),
2002 (int)(ep->epsts));
2003 return;
2004 }
2005 if ((td->status & PCH_UDC_BUFF_STS) == PCH_UDC_BS_DMA_DONE)
2006 if (td->status | PCH_UDC_DMA_LAST) {
2007 count = td->status & PCH_UDC_RXTX_BYTES;
2008 break;
2009 }
2010 if (td == req->td_data_last) {
2011 dev_err(&dev->pdev->dev, "Not complete RX descriptor");
2012 return;
2013 }
2014 addr = (dma_addr_t)td->next;
2015 td = phys_to_virt(addr);
2016 }
2017
2018 if (!count && (req->req.length == UDC_DMA_MAXPACKET))
2019 count = UDC_DMA_MAXPACKET;
2020 req->td_data->status |= PCH_UDC_DMA_LAST;
2021 td->status |= PCH_UDC_BS_HST_BSY;
2022
2023 req->dma_going = 0;
2024 req->req.actual = count;
2025 complete_req(ep, req, 0);
2026
2027 if (!list_empty(&ep->queue)) {
2028 req = list_entry(ep->queue.next, struct pch_udc_request, queue);
2029 pch_udc_start_rxrequest(ep, req);
2030 }
2031}
2032
2033
2034
2035
2036
2037
2038
2039static void pch_udc_svc_data_in(struct pch_udc_dev *dev, int ep_num)
2040{
2041 u32 epsts;
2042 struct pch_udc_ep *ep;
2043
2044 ep = &dev->ep[UDC_EPIN_IDX(ep_num)];
2045 epsts = ep->epsts;
2046 ep->epsts = 0;
2047
2048 if (!(epsts & (UDC_EPSTS_IN | UDC_EPSTS_BNA | UDC_EPSTS_HE |
2049 UDC_EPSTS_TDC | UDC_EPSTS_RCS | UDC_EPSTS_TXEMPTY |
2050 UDC_EPSTS_RSS | UDC_EPSTS_XFERDONE)))
2051 return;
2052 if ((epsts & UDC_EPSTS_BNA))
2053 return;
2054 if (epsts & UDC_EPSTS_HE)
2055 return;
2056 if (epsts & UDC_EPSTS_RSS) {
2057 pch_udc_ep_set_stall(ep);
2058 pch_udc_enable_ep_interrupts(ep->dev,
2059 PCH_UDC_EPINT(ep->in, ep->num));
2060 }
2061 if (epsts & UDC_EPSTS_RCS) {
2062 if (!dev->prot_stall) {
2063 pch_udc_ep_clear_stall(ep);
2064 } else {
2065 pch_udc_ep_set_stall(ep);
2066 pch_udc_enable_ep_interrupts(ep->dev,
2067 PCH_UDC_EPINT(ep->in, ep->num));
2068 }
2069 }
2070 if (epsts & UDC_EPSTS_TDC)
2071 pch_udc_complete_transfer(ep);
2072
2073 if ((epsts & UDC_EPSTS_IN) && !(epsts & UDC_EPSTS_RSS) &&
2074 !(epsts & UDC_EPSTS_TDC) && !(epsts & UDC_EPSTS_TXEMPTY))
2075 pch_udc_start_next_txrequest(ep);
2076}
2077
2078
2079
2080
2081
2082
2083static void pch_udc_svc_data_out(struct pch_udc_dev *dev, int ep_num)
2084{
2085 u32 epsts;
2086 struct pch_udc_ep *ep;
2087 struct pch_udc_request *req = NULL;
2088
2089 ep = &dev->ep[UDC_EPOUT_IDX(ep_num)];
2090 epsts = ep->epsts;
2091 ep->epsts = 0;
2092
2093 if ((epsts & UDC_EPSTS_BNA) && (!list_empty(&ep->queue))) {
2094
2095 req = list_entry(ep->queue.next, struct pch_udc_request,
2096 queue);
2097 if ((req->td_data_last->status & PCH_UDC_BUFF_STS) !=
2098 PCH_UDC_BS_DMA_DONE) {
2099 if (!req->dma_going)
2100 pch_udc_start_rxrequest(ep, req);
2101 return;
2102 }
2103 }
2104 if (epsts & UDC_EPSTS_HE)
2105 return;
2106 if (epsts & UDC_EPSTS_RSS) {
2107 pch_udc_ep_set_stall(ep);
2108 pch_udc_enable_ep_interrupts(ep->dev,
2109 PCH_UDC_EPINT(ep->in, ep->num));
2110 }
2111 if (epsts & UDC_EPSTS_RCS) {
2112 if (!dev->prot_stall) {
2113 pch_udc_ep_clear_stall(ep);
2114 } else {
2115 pch_udc_ep_set_stall(ep);
2116 pch_udc_enable_ep_interrupts(ep->dev,
2117 PCH_UDC_EPINT(ep->in, ep->num));
2118 }
2119 }
2120 if (((epsts & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
2121 UDC_EPSTS_OUT_DATA) {
2122 if (ep->dev->prot_stall == 1) {
2123 pch_udc_ep_set_stall(ep);
2124 pch_udc_enable_ep_interrupts(ep->dev,
2125 PCH_UDC_EPINT(ep->in, ep->num));
2126 } else {
2127 pch_udc_complete_receiver(ep);
2128 }
2129 }
2130 if (list_empty(&ep->queue))
2131 pch_udc_set_dma(dev, DMA_DIR_RX);
2132}
2133
2134
2135
2136
2137
2138static void pch_udc_svc_control_in(struct pch_udc_dev *dev)
2139{
2140 u32 epsts;
2141 struct pch_udc_ep *ep;
2142 struct pch_udc_ep *ep_out;
2143
2144 ep = &dev->ep[UDC_EP0IN_IDX];
2145 ep_out = &dev->ep[UDC_EP0OUT_IDX];
2146 epsts = ep->epsts;
2147 ep->epsts = 0;
2148
2149 if (!(epsts & (UDC_EPSTS_IN | UDC_EPSTS_BNA | UDC_EPSTS_HE |
2150 UDC_EPSTS_TDC | UDC_EPSTS_RCS | UDC_EPSTS_TXEMPTY |
2151 UDC_EPSTS_XFERDONE)))
2152 return;
2153 if ((epsts & UDC_EPSTS_BNA))
2154 return;
2155 if (epsts & UDC_EPSTS_HE)
2156 return;
2157 if ((epsts & UDC_EPSTS_TDC) && (!dev->stall)) {
2158 pch_udc_complete_transfer(ep);
2159 pch_udc_clear_dma(dev, DMA_DIR_RX);
2160 ep_out->td_data->status = (ep_out->td_data->status &
2161 ~PCH_UDC_BUFF_STS) |
2162 PCH_UDC_BS_HST_RDY;
2163 pch_udc_ep_clear_nak(ep_out);
2164 pch_udc_set_dma(dev, DMA_DIR_RX);
2165 pch_udc_ep_set_rrdy(ep_out);
2166 }
2167
2168 if ((epsts & UDC_EPSTS_IN) && !(epsts & UDC_EPSTS_TDC) &&
2169 !(epsts & UDC_EPSTS_TXEMPTY))
2170 pch_udc_start_next_txrequest(ep);
2171}
2172
2173
2174
2175
2176
2177
2178static void pch_udc_svc_control_out(struct pch_udc_dev *dev)
2179{
2180 u32 stat;
2181 int setup_supported;
2182 struct pch_udc_ep *ep;
2183
2184 ep = &dev->ep[UDC_EP0OUT_IDX];
2185 stat = ep->epsts;
2186 ep->epsts = 0;
2187
2188
2189 if (((stat & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
2190 UDC_EPSTS_OUT_SETUP) {
2191 dev->stall = 0;
2192 dev->ep[UDC_EP0IN_IDX].halted = 0;
2193 dev->ep[UDC_EP0OUT_IDX].halted = 0;
2194 dev->setup_data = ep->td_stp->request;
2195 pch_udc_init_setup_buff(ep->td_stp);
2196 pch_udc_clear_dma(dev, DMA_DIR_RX);
2197 pch_udc_ep_fifo_flush(&(dev->ep[UDC_EP0IN_IDX]),
2198 dev->ep[UDC_EP0IN_IDX].in);
2199 if ((dev->setup_data.bRequestType & USB_DIR_IN))
2200 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep;
2201 else
2202 dev->gadget.ep0 = &ep->ep;
2203 spin_unlock(&dev->lock);
2204
2205 if ((dev->setup_data.bRequestType == 0x21) &&
2206 (dev->setup_data.bRequest == 0xFF))
2207 dev->prot_stall = 0;
2208
2209 setup_supported = dev->driver->setup(&dev->gadget,
2210 &dev->setup_data);
2211 spin_lock(&dev->lock);
2212
2213 if (dev->setup_data.bRequestType & USB_DIR_IN) {
2214 ep->td_data->status = (ep->td_data->status &
2215 ~PCH_UDC_BUFF_STS) |
2216 PCH_UDC_BS_HST_RDY;
2217 pch_udc_ep_set_ddptr(ep, ep->td_data_phys);
2218 }
2219
2220 if (setup_supported >= 0 && setup_supported <
2221 UDC_EP0IN_MAX_PKT_SIZE) {
2222 pch_udc_ep_clear_nak(&(dev->ep[UDC_EP0IN_IDX]));
2223
2224
2225 if (!(dev->setup_data.bRequestType & USB_DIR_IN)) {
2226 pch_udc_set_dma(dev, DMA_DIR_RX);
2227 pch_udc_ep_clear_nak(ep);
2228 }
2229 } else if (setup_supported < 0) {
2230
2231 pch_udc_ep_set_stall(&(dev->ep[UDC_EP0IN_IDX]));
2232 pch_udc_enable_ep_interrupts(ep->dev,
2233 PCH_UDC_EPINT(ep->in, ep->num));
2234 dev->stall = 0;
2235 pch_udc_set_dma(dev, DMA_DIR_RX);
2236 } else {
2237 dev->waiting_zlp_ack = 1;
2238 }
2239 } else if ((((stat & UDC_EPSTS_OUT_MASK) >> UDC_EPSTS_OUT_SHIFT) ==
2240 UDC_EPSTS_OUT_DATA) && !dev->stall) {
2241 pch_udc_clear_dma(dev, DMA_DIR_RX);
2242 pch_udc_ep_set_ddptr(ep, 0);
2243 if (!list_empty(&ep->queue)) {
2244 ep->epsts = stat;
2245 pch_udc_svc_data_out(dev, PCH_UDC_EP0);
2246 }
2247 pch_udc_set_dma(dev, DMA_DIR_RX);
2248 }
2249 pch_udc_ep_set_rrdy(ep);
2250}
2251
2252
2253
2254
2255
2256
2257
2258
2259static void pch_udc_postsvc_epinters(struct pch_udc_dev *dev, int ep_num)
2260{
2261 struct pch_udc_ep *ep;
2262 struct pch_udc_request *req;
2263
2264 ep = &dev->ep[UDC_EPIN_IDX(ep_num)];
2265 if (!list_empty(&ep->queue)) {
2266 req = list_entry(ep->queue.next, struct pch_udc_request, queue);
2267 pch_udc_enable_ep_interrupts(ep->dev,
2268 PCH_UDC_EPINT(ep->in, ep->num));
2269 pch_udc_ep_clear_nak(ep);
2270 }
2271}
2272
2273
2274
2275
2276
2277
2278static void pch_udc_read_all_epstatus(struct pch_udc_dev *dev, u32 ep_intr)
2279{
2280 int i;
2281 struct pch_udc_ep *ep;
2282
2283 for (i = 0; i < PCH_UDC_USED_EP_NUM; i++) {
2284
2285 if (ep_intr & (0x1 << i)) {
2286 ep = &dev->ep[UDC_EPIN_IDX(i)];
2287 ep->epsts = pch_udc_read_ep_status(ep);
2288 pch_udc_clear_ep_status(ep, ep->epsts);
2289 }
2290
2291 if (ep_intr & (0x10000 << i)) {
2292 ep = &dev->ep[UDC_EPOUT_IDX(i)];
2293 ep->epsts = pch_udc_read_ep_status(ep);
2294 pch_udc_clear_ep_status(ep, ep->epsts);
2295 }
2296 }
2297}
2298
2299
2300
2301
2302
2303
2304static void pch_udc_activate_control_ep(struct pch_udc_dev *dev)
2305{
2306 struct pch_udc_ep *ep;
2307 u32 val;
2308
2309
2310 ep = &dev->ep[UDC_EP0IN_IDX];
2311 pch_udc_clear_ep_control(ep);
2312 pch_udc_ep_fifo_flush(ep, ep->in);
2313 pch_udc_ep_set_bufsz(ep, UDC_EP0IN_BUFF_SIZE, ep->in);
2314 pch_udc_ep_set_maxpkt(ep, UDC_EP0IN_MAX_PKT_SIZE);
2315
2316 ep->td_data = NULL;
2317 ep->td_stp = NULL;
2318 ep->td_data_phys = 0;
2319 ep->td_stp_phys = 0;
2320
2321
2322 ep = &dev->ep[UDC_EP0OUT_IDX];
2323 pch_udc_clear_ep_control(ep);
2324 pch_udc_ep_fifo_flush(ep, ep->in);
2325 pch_udc_ep_set_bufsz(ep, UDC_EP0OUT_BUFF_SIZE, ep->in);
2326 pch_udc_ep_set_maxpkt(ep, UDC_EP0OUT_MAX_PKT_SIZE);
2327 val = UDC_EP0OUT_MAX_PKT_SIZE << UDC_CSR_NE_MAX_PKT_SHIFT;
2328 pch_udc_write_csr(ep->dev, val, UDC_EP0OUT_IDX);
2329
2330
2331 pch_udc_init_setup_buff(ep->td_stp);
2332
2333 pch_udc_ep_set_subptr(ep, ep->td_stp_phys);
2334
2335 pch_udc_ep_set_ddptr(ep, ep->td_data_phys);
2336
2337
2338 ep->td_data->status = PCH_UDC_DMA_LAST;
2339 ep->td_data->dataptr = dev->dma_addr;
2340 ep->td_data->next = ep->td_data_phys;
2341
2342 pch_udc_ep_clear_nak(ep);
2343}
2344
2345
2346
2347
2348
2349
2350static void pch_udc_svc_ur_interrupt(struct pch_udc_dev *dev)
2351{
2352 struct pch_udc_ep *ep;
2353 int i;
2354
2355 pch_udc_clear_dma(dev, DMA_DIR_TX);
2356 pch_udc_clear_dma(dev, DMA_DIR_RX);
2357
2358 pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2359
2360 pch_udc_write_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2361
2362 for (i = 0; i < PCH_UDC_EP_NUM; i++) {
2363 ep = &dev->ep[i];
2364 pch_udc_clear_ep_status(ep, UDC_EPSTS_ALL_CLR_MASK);
2365 pch_udc_clear_ep_control(ep);
2366 pch_udc_ep_set_ddptr(ep, 0);
2367 pch_udc_write_csr(ep->dev, 0x00, i);
2368 }
2369 dev->stall = 0;
2370 dev->prot_stall = 0;
2371 dev->waiting_zlp_ack = 0;
2372 dev->set_cfg_not_acked = 0;
2373
2374
2375 for (i = 0; i < (PCH_UDC_USED_EP_NUM*2); i++) {
2376 ep = &dev->ep[i];
2377 pch_udc_ep_set_nak(ep);
2378 pch_udc_ep_fifo_flush(ep, ep->in);
2379
2380 empty_req_queue(ep);
2381 }
2382 if (dev->driver && dev->driver->disconnect) {
2383 spin_unlock(&dev->lock);
2384 dev->driver->disconnect(&dev->gadget);
2385 spin_lock(&dev->lock);
2386 }
2387}
2388
2389
2390
2391
2392
2393
2394static void pch_udc_svc_enum_interrupt(struct pch_udc_dev *dev)
2395{
2396 u32 dev_stat, dev_speed;
2397 u32 speed = USB_SPEED_FULL;
2398
2399 dev_stat = pch_udc_read_device_status(dev);
2400 dev_speed = (dev_stat & UDC_DEVSTS_ENUM_SPEED_MASK) >>
2401 UDC_DEVSTS_ENUM_SPEED_SHIFT;
2402 switch (dev_speed) {
2403 case UDC_DEVSTS_ENUM_SPEED_HIGH:
2404 speed = USB_SPEED_HIGH;
2405 break;
2406 case UDC_DEVSTS_ENUM_SPEED_FULL:
2407 speed = USB_SPEED_FULL;
2408 break;
2409 case UDC_DEVSTS_ENUM_SPEED_LOW:
2410 speed = USB_SPEED_LOW;
2411 break;
2412 default:
2413 BUG();
2414 }
2415 dev->gadget.speed = speed;
2416 pch_udc_activate_control_ep(dev);
2417 pch_udc_enable_ep_interrupts(dev, UDC_EPINT_IN_EP0 | UDC_EPINT_OUT_EP0);
2418 pch_udc_set_dma(dev, DMA_DIR_TX);
2419 pch_udc_set_dma(dev, DMA_DIR_RX);
2420 pch_udc_ep_set_rrdy(&(dev->ep[UDC_EP0OUT_IDX]));
2421
2422
2423 pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US |
2424 UDC_DEVINT_ES | UDC_DEVINT_ENUM |
2425 UDC_DEVINT_SI | UDC_DEVINT_SC);
2426}
2427
2428
2429
2430
2431
2432
2433static void pch_udc_svc_intf_interrupt(struct pch_udc_dev *dev)
2434{
2435 u32 reg, dev_stat = 0;
2436 int i, ret;
2437
2438 dev_stat = pch_udc_read_device_status(dev);
2439 dev->cfg_data.cur_intf = (dev_stat & UDC_DEVSTS_INTF_MASK) >>
2440 UDC_DEVSTS_INTF_SHIFT;
2441 dev->cfg_data.cur_alt = (dev_stat & UDC_DEVSTS_ALT_MASK) >>
2442 UDC_DEVSTS_ALT_SHIFT;
2443 dev->set_cfg_not_acked = 1;
2444
2445 memset(&dev->setup_data, 0 , sizeof dev->setup_data);
2446 dev->setup_data.bRequest = USB_REQ_SET_INTERFACE;
2447 dev->setup_data.bRequestType = USB_RECIP_INTERFACE;
2448 dev->setup_data.wValue = cpu_to_le16(dev->cfg_data.cur_alt);
2449 dev->setup_data.wIndex = cpu_to_le16(dev->cfg_data.cur_intf);
2450
2451
2452 reg = pch_udc_read_csr(dev, UDC_EP0OUT_IDX);
2453 reg = (reg & ~UDC_CSR_NE_INTF_MASK) |
2454 (dev->cfg_data.cur_intf << UDC_CSR_NE_INTF_SHIFT);
2455 reg = (reg & ~UDC_CSR_NE_ALT_MASK) |
2456 (dev->cfg_data.cur_alt << UDC_CSR_NE_ALT_SHIFT);
2457 pch_udc_write_csr(dev, reg, UDC_EP0OUT_IDX);
2458 for (i = 0; i < PCH_UDC_USED_EP_NUM * 2; i++) {
2459
2460 pch_udc_ep_clear_stall(&(dev->ep[i]));
2461 dev->ep[i].halted = 0;
2462 }
2463 dev->stall = 0;
2464 spin_unlock(&dev->lock);
2465 ret = dev->driver->setup(&dev->gadget, &dev->setup_data);
2466 spin_lock(&dev->lock);
2467}
2468
2469
2470
2471
2472
2473
2474static void pch_udc_svc_cfg_interrupt(struct pch_udc_dev *dev)
2475{
2476 int i, ret;
2477 u32 reg, dev_stat = 0;
2478
2479 dev_stat = pch_udc_read_device_status(dev);
2480 dev->set_cfg_not_acked = 1;
2481 dev->cfg_data.cur_cfg = (dev_stat & UDC_DEVSTS_CFG_MASK) >>
2482 UDC_DEVSTS_CFG_SHIFT;
2483
2484 memset(&dev->setup_data, 0 , sizeof dev->setup_data);
2485 dev->setup_data.bRequest = USB_REQ_SET_CONFIGURATION;
2486 dev->setup_data.wValue = cpu_to_le16(dev->cfg_data.cur_cfg);
2487
2488
2489 reg = pch_udc_read_csr(dev, UDC_EP0OUT_IDX);
2490 reg = (reg & ~UDC_CSR_NE_CFG_MASK) |
2491 (dev->cfg_data.cur_cfg << UDC_CSR_NE_CFG_SHIFT);
2492 pch_udc_write_csr(dev, reg, UDC_EP0OUT_IDX);
2493 for (i = 0; i < PCH_UDC_USED_EP_NUM * 2; i++) {
2494
2495 pch_udc_ep_clear_stall(&(dev->ep[i]));
2496 dev->ep[i].halted = 0;
2497 }
2498 dev->stall = 0;
2499
2500
2501 spin_unlock(&dev->lock);
2502 ret = dev->driver->setup(&dev->gadget, &dev->setup_data);
2503 spin_lock(&dev->lock);
2504}
2505
2506
2507
2508
2509
2510
2511
2512static void pch_udc_dev_isr(struct pch_udc_dev *dev, u32 dev_intr)
2513{
2514
2515 if (dev_intr & UDC_DEVINT_UR)
2516 pch_udc_svc_ur_interrupt(dev);
2517
2518 if (dev_intr & UDC_DEVINT_ENUM)
2519 pch_udc_svc_enum_interrupt(dev);
2520
2521 if (dev_intr & UDC_DEVINT_SI)
2522 pch_udc_svc_intf_interrupt(dev);
2523
2524 if (dev_intr & UDC_DEVINT_SC)
2525 pch_udc_svc_cfg_interrupt(dev);
2526
2527 if (dev_intr & UDC_DEVINT_US) {
2528 if (dev->driver
2529 && dev->driver->suspend) {
2530 spin_unlock(&dev->lock);
2531 dev->driver->suspend(&dev->gadget);
2532 spin_lock(&dev->lock);
2533 }
2534
2535 if (dev->vbus_session == 0) {
2536 if (dev->driver && dev->driver->disconnect) {
2537 spin_unlock(&dev->lock);
2538 dev->driver->disconnect(&dev->gadget);
2539 spin_lock(&dev->lock);
2540 }
2541 pch_udc_reconnect(dev);
2542 }
2543 dev_dbg(&dev->pdev->dev, "USB_SUSPEND\n");
2544 }
2545
2546 if (dev_intr & UDC_DEVINT_SOF)
2547 dev_dbg(&dev->pdev->dev, "SOF\n");
2548
2549 if (dev_intr & UDC_DEVINT_ES)
2550 dev_dbg(&dev->pdev->dev, "ES\n");
2551
2552 if (dev_intr & UDC_DEVINT_RWKP)
2553 dev_dbg(&dev->pdev->dev, "RWKP\n");
2554}
2555
2556
2557
2558
2559
2560
2561static irqreturn_t pch_udc_isr(int irq, void *pdev)
2562{
2563 struct pch_udc_dev *dev = (struct pch_udc_dev *) pdev;
2564 u32 dev_intr, ep_intr;
2565 int i;
2566
2567 dev_intr = pch_udc_read_device_interrupts(dev);
2568 ep_intr = pch_udc_read_ep_interrupts(dev);
2569
2570
2571 if (dev_intr == ep_intr)
2572 if (dev_intr == pch_udc_readl(dev, UDC_DEVCFG_ADDR)) {
2573 dev_dbg(&dev->pdev->dev, "UDC: Hung up\n");
2574
2575 pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR);
2576 return IRQ_HANDLED;
2577 }
2578 if (dev_intr)
2579
2580 pch_udc_write_device_interrupts(dev, dev_intr);
2581 if (ep_intr)
2582
2583 pch_udc_write_ep_interrupts(dev, ep_intr);
2584 if (!dev_intr && !ep_intr)
2585 return IRQ_NONE;
2586 spin_lock(&dev->lock);
2587 if (dev_intr)
2588 pch_udc_dev_isr(dev, dev_intr);
2589 if (ep_intr) {
2590 pch_udc_read_all_epstatus(dev, ep_intr);
2591
2592 if (ep_intr & UDC_EPINT_IN_EP0) {
2593 pch_udc_svc_control_in(dev);
2594 pch_udc_postsvc_epinters(dev, 0);
2595 }
2596
2597 if (ep_intr & UDC_EPINT_OUT_EP0)
2598 pch_udc_svc_control_out(dev);
2599
2600 for (i = 1; i < PCH_UDC_USED_EP_NUM; i++) {
2601 if (ep_intr & (1 << i)) {
2602 pch_udc_svc_data_in(dev, i);
2603 pch_udc_postsvc_epinters(dev, i);
2604 }
2605 }
2606
2607 for (i = UDC_EPINT_OUT_SHIFT + 1; i < (UDC_EPINT_OUT_SHIFT +
2608 PCH_UDC_USED_EP_NUM); i++)
2609 if (ep_intr & (1 << i))
2610 pch_udc_svc_data_out(dev, i -
2611 UDC_EPINT_OUT_SHIFT);
2612 }
2613 spin_unlock(&dev->lock);
2614 return IRQ_HANDLED;
2615}
2616
2617
2618
2619
2620
2621static void pch_udc_setup_ep0(struct pch_udc_dev *dev)
2622{
2623
2624 pch_udc_enable_ep_interrupts(dev, UDC_EPINT_IN_EP0 |
2625 UDC_EPINT_OUT_EP0);
2626
2627 pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US |
2628 UDC_DEVINT_ES | UDC_DEVINT_ENUM |
2629 UDC_DEVINT_SI | UDC_DEVINT_SC);
2630}
2631
2632
2633
2634
2635
2636static void gadget_release(struct device *pdev)
2637{
2638 struct pch_udc_dev *dev = dev_get_drvdata(pdev);
2639
2640 kfree(dev);
2641}
2642
2643
2644
2645
2646
2647static void pch_udc_pcd_reinit(struct pch_udc_dev *dev)
2648{
2649 const char *const ep_string[] = {
2650 ep0_string, "ep0out", "ep1in", "ep1out", "ep2in", "ep2out",
2651 "ep3in", "ep3out", "ep4in", "ep4out", "ep5in", "ep5out",
2652 "ep6in", "ep6out", "ep7in", "ep7out", "ep8in", "ep8out",
2653 "ep9in", "ep9out", "ep10in", "ep10out", "ep11in", "ep11out",
2654 "ep12in", "ep12out", "ep13in", "ep13out", "ep14in", "ep14out",
2655 "ep15in", "ep15out",
2656 };
2657 int i;
2658
2659 dev->gadget.speed = USB_SPEED_UNKNOWN;
2660 INIT_LIST_HEAD(&dev->gadget.ep_list);
2661
2662
2663 memset(dev->ep, 0, sizeof dev->ep);
2664 for (i = 0; i < PCH_UDC_EP_NUM; i++) {
2665 struct pch_udc_ep *ep = &dev->ep[i];
2666 ep->dev = dev;
2667 ep->halted = 1;
2668 ep->num = i / 2;
2669 ep->in = ~i & 1;
2670 ep->ep.name = ep_string[i];
2671 ep->ep.ops = &pch_udc_ep_ops;
2672 if (ep->in)
2673 ep->offset_addr = ep->num * UDC_EP_REG_SHIFT;
2674 else
2675 ep->offset_addr = (UDC_EPINT_OUT_SHIFT + ep->num) *
2676 UDC_EP_REG_SHIFT;
2677
2678 ep->ep.maxpacket = UDC_BULK_MAX_PKT_SIZE;
2679 list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list);
2680 INIT_LIST_HEAD(&ep->queue);
2681 }
2682 dev->ep[UDC_EP0IN_IDX].ep.maxpacket = UDC_EP0IN_MAX_PKT_SIZE;
2683 dev->ep[UDC_EP0OUT_IDX].ep.maxpacket = UDC_EP0OUT_MAX_PKT_SIZE;
2684
2685
2686 list_del_init(&dev->ep[UDC_EP0IN_IDX].ep.ep_list);
2687 list_del_init(&dev->ep[UDC_EP0OUT_IDX].ep.ep_list);
2688
2689 dev->gadget.ep0 = &dev->ep[UDC_EP0IN_IDX].ep;
2690 INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
2691}
2692
2693
2694
2695
2696
2697
2698
2699
2700static int pch_udc_pcd_init(struct pch_udc_dev *dev)
2701{
2702 pch_udc_init(dev);
2703 pch_udc_pcd_reinit(dev);
2704 return 0;
2705}
2706
2707
2708
2709
2710
2711static int init_dma_pools(struct pch_udc_dev *dev)
2712{
2713 struct pch_udc_stp_dma_desc *td_stp;
2714 struct pch_udc_data_dma_desc *td_data;
2715
2716
2717 dev->data_requests = pci_pool_create("data_requests", dev->pdev,
2718 sizeof(struct pch_udc_data_dma_desc), 0, 0);
2719 if (!dev->data_requests) {
2720 dev_err(&dev->pdev->dev, "%s: can't get request data pool\n",
2721 __func__);
2722 return -ENOMEM;
2723 }
2724
2725
2726 dev->stp_requests = pci_pool_create("setup requests", dev->pdev,
2727 sizeof(struct pch_udc_stp_dma_desc), 0, 0);
2728 if (!dev->stp_requests) {
2729 dev_err(&dev->pdev->dev, "%s: can't get setup request pool\n",
2730 __func__);
2731 return -ENOMEM;
2732 }
2733
2734 td_stp = pci_pool_alloc(dev->stp_requests, GFP_KERNEL,
2735 &dev->ep[UDC_EP0OUT_IDX].td_stp_phys);
2736 if (!td_stp) {
2737 dev_err(&dev->pdev->dev,
2738 "%s: can't allocate setup dma descriptor\n", __func__);
2739 return -ENOMEM;
2740 }
2741 dev->ep[UDC_EP0OUT_IDX].td_stp = td_stp;
2742
2743
2744 td_data = pci_pool_alloc(dev->data_requests, GFP_KERNEL,
2745 &dev->ep[UDC_EP0OUT_IDX].td_data_phys);
2746 if (!td_data) {
2747 dev_err(&dev->pdev->dev,
2748 "%s: can't allocate data dma descriptor\n", __func__);
2749 return -ENOMEM;
2750 }
2751 dev->ep[UDC_EP0OUT_IDX].td_data = td_data;
2752 dev->ep[UDC_EP0IN_IDX].td_stp = NULL;
2753 dev->ep[UDC_EP0IN_IDX].td_stp_phys = 0;
2754 dev->ep[UDC_EP0IN_IDX].td_data = NULL;
2755 dev->ep[UDC_EP0IN_IDX].td_data_phys = 0;
2756
2757 dev->ep0out_buf = kzalloc(UDC_EP0OUT_BUFF_SIZE * 4, GFP_KERNEL);
2758 if (!dev->ep0out_buf)
2759 return -ENOMEM;
2760 dev->dma_addr = dma_map_single(&dev->pdev->dev, dev->ep0out_buf,
2761 UDC_EP0OUT_BUFF_SIZE * 4,
2762 DMA_FROM_DEVICE);
2763 return 0;
2764}
2765
2766static int pch_udc_start(struct usb_gadget_driver *driver,
2767 int (*bind)(struct usb_gadget *))
2768{
2769 struct pch_udc_dev *dev = pch_udc;
2770 int retval;
2771
2772 if (!driver || (driver->max_speed == USB_SPEED_UNKNOWN) || !bind ||
2773 !driver->setup || !driver->unbind || !driver->disconnect) {
2774 dev_err(&dev->pdev->dev,
2775 "%s: invalid driver parameter\n", __func__);
2776 return -EINVAL;
2777 }
2778
2779 if (!dev)
2780 return -ENODEV;
2781
2782 if (dev->driver) {
2783 dev_err(&dev->pdev->dev, "%s: already bound\n", __func__);
2784 return -EBUSY;
2785 }
2786 driver->driver.bus = NULL;
2787 dev->driver = driver;
2788 dev->gadget.dev.driver = &driver->driver;
2789
2790
2791 retval = bind(&dev->gadget);
2792
2793 if (retval) {
2794 dev_err(&dev->pdev->dev, "%s: binding to %s returning %d\n",
2795 __func__, driver->driver.name, retval);
2796 dev->driver = NULL;
2797 dev->gadget.dev.driver = NULL;
2798 return retval;
2799 }
2800
2801 pch_udc_setup_ep0(dev);
2802
2803
2804 pch_udc_clear_disconnect(dev);
2805
2806 dev->connected = 1;
2807 return 0;
2808}
2809
2810static int pch_udc_stop(struct usb_gadget_driver *driver)
2811{
2812 struct pch_udc_dev *dev = pch_udc;
2813
2814 if (!dev)
2815 return -ENODEV;
2816
2817 if (!driver || (driver != dev->driver)) {
2818 dev_err(&dev->pdev->dev,
2819 "%s: invalid driver parameter\n", __func__);
2820 return -EINVAL;
2821 }
2822
2823 pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
2824
2825
2826 driver->disconnect(&dev->gadget);
2827 driver->unbind(&dev->gadget);
2828 dev->gadget.dev.driver = NULL;
2829 dev->driver = NULL;
2830 dev->connected = 0;
2831
2832
2833 pch_udc_set_disconnect(dev);
2834 return 0;
2835}
2836
2837static void pch_udc_shutdown(struct pci_dev *pdev)
2838{
2839 struct pch_udc_dev *dev = pci_get_drvdata(pdev);
2840
2841 pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
2842 pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2843
2844
2845 pch_udc_set_disconnect(dev);
2846}
2847
2848static void pch_udc_remove(struct pci_dev *pdev)
2849{
2850 struct pch_udc_dev *dev = pci_get_drvdata(pdev);
2851
2852 usb_del_gadget_udc(&dev->gadget);
2853
2854
2855 if (dev->driver)
2856 dev_err(&pdev->dev,
2857 "%s: gadget driver still bound!!!\n", __func__);
2858
2859 if (dev->data_requests)
2860 pci_pool_destroy(dev->data_requests);
2861
2862 if (dev->stp_requests) {
2863
2864 if (dev->ep[UDC_EP0OUT_IDX].td_stp) {
2865 pci_pool_free(dev->stp_requests,
2866 dev->ep[UDC_EP0OUT_IDX].td_stp,
2867 dev->ep[UDC_EP0OUT_IDX].td_stp_phys);
2868 }
2869 if (dev->ep[UDC_EP0OUT_IDX].td_data) {
2870 pci_pool_free(dev->stp_requests,
2871 dev->ep[UDC_EP0OUT_IDX].td_data,
2872 dev->ep[UDC_EP0OUT_IDX].td_data_phys);
2873 }
2874 pci_pool_destroy(dev->stp_requests);
2875 }
2876
2877 if (dev->dma_addr)
2878 dma_unmap_single(&dev->pdev->dev, dev->dma_addr,
2879 UDC_EP0OUT_BUFF_SIZE * 4, DMA_FROM_DEVICE);
2880 kfree(dev->ep0out_buf);
2881
2882 pch_udc_exit(dev);
2883
2884 if (dev->irq_registered)
2885 free_irq(pdev->irq, dev);
2886 if (dev->base_addr)
2887 iounmap(dev->base_addr);
2888 if (dev->mem_region)
2889 release_mem_region(dev->phys_addr,
2890 pci_resource_len(pdev, PCH_UDC_PCI_BAR));
2891 if (dev->active)
2892 pci_disable_device(pdev);
2893 if (dev->registered)
2894 device_unregister(&dev->gadget.dev);
2895 kfree(dev);
2896 pci_set_drvdata(pdev, NULL);
2897}
2898
2899#ifdef CONFIG_PM
2900static int pch_udc_suspend(struct pci_dev *pdev, pm_message_t state)
2901{
2902 struct pch_udc_dev *dev = pci_get_drvdata(pdev);
2903
2904 pch_udc_disable_interrupts(dev, UDC_DEVINT_MSK);
2905 pch_udc_disable_ep_interrupts(dev, UDC_EPINT_MSK_DISABLE_ALL);
2906
2907 pci_disable_device(pdev);
2908 pci_enable_wake(pdev, PCI_D3hot, 0);
2909
2910 if (pci_save_state(pdev)) {
2911 dev_err(&pdev->dev,
2912 "%s: could not save PCI config state\n", __func__);
2913 return -ENOMEM;
2914 }
2915 pci_set_power_state(pdev, pci_choose_state(pdev, state));
2916 return 0;
2917}
2918
2919static int pch_udc_resume(struct pci_dev *pdev)
2920{
2921 int ret;
2922
2923 pci_set_power_state(pdev, PCI_D0);
2924 pci_restore_state(pdev);
2925 ret = pci_enable_device(pdev);
2926 if (ret) {
2927 dev_err(&pdev->dev, "%s: pci_enable_device failed\n", __func__);
2928 return ret;
2929 }
2930 pci_enable_wake(pdev, PCI_D3hot, 0);
2931 return 0;
2932}
2933#else
2934#define pch_udc_suspend NULL
2935#define pch_udc_resume NULL
2936#endif
2937
2938static int pch_udc_probe(struct pci_dev *pdev,
2939 const struct pci_device_id *id)
2940{
2941 unsigned long resource;
2942 unsigned long len;
2943 int retval;
2944 struct pch_udc_dev *dev;
2945
2946
2947 if (pch_udc) {
2948 pr_err("%s: already probed\n", __func__);
2949 return -EBUSY;
2950 }
2951
2952 dev = kzalloc(sizeof *dev, GFP_KERNEL);
2953 if (!dev) {
2954 pr_err("%s: no memory for device structure\n", __func__);
2955 return -ENOMEM;
2956 }
2957
2958 if (pci_enable_device(pdev) < 0) {
2959 kfree(dev);
2960 pr_err("%s: pci_enable_device failed\n", __func__);
2961 return -ENODEV;
2962 }
2963 dev->active = 1;
2964 pci_set_drvdata(pdev, dev);
2965
2966
2967 resource = pci_resource_start(pdev, 1);
2968 len = pci_resource_len(pdev, 1);
2969
2970 if (!request_mem_region(resource, len, KBUILD_MODNAME)) {
2971 dev_err(&pdev->dev, "%s: pci device used already\n", __func__);
2972 retval = -EBUSY;
2973 goto finished;
2974 }
2975 dev->phys_addr = resource;
2976 dev->mem_region = 1;
2977
2978 dev->base_addr = ioremap_nocache(resource, len);
2979 if (!dev->base_addr) {
2980 pr_err("%s: device memory cannot be mapped\n", __func__);
2981 retval = -ENOMEM;
2982 goto finished;
2983 }
2984 if (!pdev->irq) {
2985 dev_err(&pdev->dev, "%s: irq not set\n", __func__);
2986 retval = -ENODEV;
2987 goto finished;
2988 }
2989 pch_udc = dev;
2990
2991 if (pch_udc_pcd_init(dev)) {
2992 retval = -ENODEV;
2993 goto finished;
2994 }
2995 if (request_irq(pdev->irq, pch_udc_isr, IRQF_SHARED, KBUILD_MODNAME,
2996 dev)) {
2997 dev_err(&pdev->dev, "%s: request_irq(%d) fail\n", __func__,
2998 pdev->irq);
2999 retval = -ENODEV;
3000 goto finished;
3001 }
3002 dev->irq = pdev->irq;
3003 dev->irq_registered = 1;
3004
3005 pci_set_master(pdev);
3006 pci_try_set_mwi(pdev);
3007
3008
3009 spin_lock_init(&dev->lock);
3010 dev->pdev = pdev;
3011 dev->gadget.ops = &pch_udc_ops;
3012
3013 retval = init_dma_pools(dev);
3014 if (retval)
3015 goto finished;
3016
3017 dev_set_name(&dev->gadget.dev, "gadget");
3018 dev->gadget.dev.parent = &pdev->dev;
3019 dev->gadget.dev.dma_mask = pdev->dev.dma_mask;
3020 dev->gadget.dev.release = gadget_release;
3021 dev->gadget.name = KBUILD_MODNAME;
3022 dev->gadget.max_speed = USB_SPEED_HIGH;
3023
3024 retval = device_register(&dev->gadget.dev);
3025 if (retval)
3026 goto finished;
3027 dev->registered = 1;
3028
3029
3030 pch_udc_set_disconnect(dev);
3031 retval = usb_add_gadget_udc(&pdev->dev, &dev->gadget);
3032 if (retval)
3033 goto finished;
3034 return 0;
3035
3036finished:
3037 pch_udc_remove(pdev);
3038 return retval;
3039}
3040
3041static DEFINE_PCI_DEVICE_TABLE(pch_udc_pcidev_id) = {
3042 {
3043 PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EG20T_UDC),
3044 .class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe,
3045 .class_mask = 0xffffffff,
3046 },
3047 {
3048 PCI_DEVICE(PCI_VENDOR_ID_ROHM, PCI_DEVICE_ID_ML7213_IOH_UDC),
3049 .class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe,
3050 .class_mask = 0xffffffff,
3051 },
3052 {
3053 PCI_DEVICE(PCI_VENDOR_ID_ROHM, PCI_DEVICE_ID_ML7831_IOH_UDC),
3054 .class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe,
3055 .class_mask = 0xffffffff,
3056 },
3057 { 0 },
3058};
3059
3060MODULE_DEVICE_TABLE(pci, pch_udc_pcidev_id);
3061
3062
3063static struct pci_driver pch_udc_driver = {
3064 .name = KBUILD_MODNAME,
3065 .id_table = pch_udc_pcidev_id,
3066 .probe = pch_udc_probe,
3067 .remove = pch_udc_remove,
3068 .suspend = pch_udc_suspend,
3069 .resume = pch_udc_resume,
3070 .shutdown = pch_udc_shutdown,
3071};
3072
3073static int __init pch_udc_pci_init(void)
3074{
3075 return pci_register_driver(&pch_udc_driver);
3076}
3077module_init(pch_udc_pci_init);
3078
3079static void __exit pch_udc_pci_exit(void)
3080{
3081 pci_unregister_driver(&pch_udc_driver);
3082}
3083module_exit(pch_udc_pci_exit);
3084
3085MODULE_DESCRIPTION("Intel EG20T USB Device Controller");
3086MODULE_AUTHOR("LAPIS Semiconductor, <tomoya-linux@dsn.lapis-semi.com>");
3087MODULE_LICENSE("GPL");
3088