]> Git Repo - linux.git/blob - drivers/usb/gadget/udc/net2272.c
KVM: x86: fix CPUID entries returned by KVM_GET_CPUID2 ioctl
[linux.git] / drivers / usb / gadget / udc / net2272.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Driver for PLX NET2272 USB device controller
4  *
5  * Copyright (C) 2005-2006 PLX Technology, Inc.
6  * Copyright (C) 2006-2011 Analog Devices, Inc.
7  */
8
9 #include <linux/delay.h>
10 #include <linux/device.h>
11 #include <linux/errno.h>
12 #include <linux/init.h>
13 #include <linux/interrupt.h>
14 #include <linux/io.h>
15 #include <linux/ioport.h>
16 #include <linux/kernel.h>
17 #include <linux/list.h>
18 #include <linux/module.h>
19 #include <linux/moduleparam.h>
20 #include <linux/pci.h>
21 #include <linux/platform_device.h>
22 #include <linux/prefetch.h>
23 #include <linux/sched.h>
24 #include <linux/slab.h>
25 #include <linux/timer.h>
26 #include <linux/usb.h>
27 #include <linux/usb/ch9.h>
28 #include <linux/usb/gadget.h>
29
30 #include <asm/byteorder.h>
31 #include <asm/unaligned.h>
32
33 #include "net2272.h"
34
35 #define DRIVER_DESC "PLX NET2272 USB Peripheral Controller"
36
37 static const char driver_name[] = "net2272";
38 static const char driver_vers[] = "2006 October 17/mainline";
39 static const char driver_desc[] = DRIVER_DESC;
40
41 static const char ep0name[] = "ep0";
42 static const char * const ep_name[] = {
43         ep0name,
44         "ep-a", "ep-b", "ep-c",
45 };
46
47 #ifdef CONFIG_USB_NET2272_DMA
48 /*
49  * use_dma: the NET2272 can use an external DMA controller.
50  * Note that since there is no generic DMA api, some functions,
51  * notably request_dma, start_dma, and cancel_dma will need to be
52  * modified for your platform's particular dma controller.
53  *
54  * If use_dma is disabled, pio will be used instead.
55  */
56 static bool use_dma = false;
57 module_param(use_dma, bool, 0644);
58
59 /*
60  * dma_ep: selects the endpoint for use with dma (1=ep-a, 2=ep-b)
61  * The NET2272 can only use dma for a single endpoint at a time.
62  * At some point this could be modified to allow either endpoint
63  * to take control of dma as it becomes available.
64  *
65  * Note that DMA should not be used on OUT endpoints unless it can
66  * be guaranteed that no short packets will arrive on an IN endpoint
67  * while the DMA operation is pending.  Otherwise the OUT DMA will
68  * terminate prematurely (See NET2272 Errata 630-0213-0101)
69  */
70 static ushort dma_ep = 1;
71 module_param(dma_ep, ushort, 0644);
72
73 /*
74  * dma_mode: net2272 dma mode setting (see LOCCTL1 definiton):
75  *      mode 0 == Slow DREQ mode
76  *      mode 1 == Fast DREQ mode
77  *      mode 2 == Burst mode
78  */
79 static ushort dma_mode = 2;
80 module_param(dma_mode, ushort, 0644);
81 #else
82 #define use_dma 0
83 #define dma_ep 1
84 #define dma_mode 2
85 #endif
86
87 /*
88  * fifo_mode: net2272 buffer configuration:
89  *      mode 0 == ep-{a,b,c} 512db each
90  *      mode 1 == ep-a 1k, ep-{b,c} 512db
91  *      mode 2 == ep-a 1k, ep-b 1k, ep-c 512db
92  *      mode 3 == ep-a 1k, ep-b disabled, ep-c 512db
93  */
94 static ushort fifo_mode = 0;
95 module_param(fifo_mode, ushort, 0644);
96
97 /*
98  * enable_suspend: When enabled, the driver will respond to
99  * USB suspend requests by powering down the NET2272.  Otherwise,
100  * USB suspend requests will be ignored.  This is acceptible for
101  * self-powered devices.  For bus powered devices set this to 1.
102  */
103 static ushort enable_suspend = 0;
104 module_param(enable_suspend, ushort, 0644);
105
106 static void assert_out_naking(struct net2272_ep *ep, const char *where)
107 {
108         u8 tmp;
109
110 #ifndef DEBUG
111         return;
112 #endif
113
114         tmp = net2272_ep_read(ep, EP_STAT0);
115         if ((tmp & (1 << NAK_OUT_PACKETS)) == 0) {
116                 dev_dbg(ep->dev->dev, "%s %s %02x !NAK\n",
117                         ep->ep.name, where, tmp);
118                 net2272_ep_write(ep, EP_RSPSET, 1 << ALT_NAK_OUT_PACKETS);
119         }
120 }
121 #define ASSERT_OUT_NAKING(ep) assert_out_naking(ep, __func__)
122
123 static void stop_out_naking(struct net2272_ep *ep)
124 {
125         u8 tmp = net2272_ep_read(ep, EP_STAT0);
126
127         if ((tmp & (1 << NAK_OUT_PACKETS)) != 0)
128                 net2272_ep_write(ep, EP_RSPCLR, 1 << ALT_NAK_OUT_PACKETS);
129 }
130
131 #define PIPEDIR(bAddress) (usb_pipein(bAddress) ? "in" : "out")
132
133 static char *type_string(u8 bmAttributes)
134 {
135         switch ((bmAttributes) & USB_ENDPOINT_XFERTYPE_MASK) {
136         case USB_ENDPOINT_XFER_BULK: return "bulk";
137         case USB_ENDPOINT_XFER_ISOC: return "iso";
138         case USB_ENDPOINT_XFER_INT:  return "intr";
139         default:                     return "control";
140         }
141 }
142
143 static char *buf_state_string(unsigned state)
144 {
145         switch (state) {
146         case BUFF_FREE:  return "free";
147         case BUFF_VALID: return "valid";
148         case BUFF_LCL:   return "local";
149         case BUFF_USB:   return "usb";
150         default:         return "unknown";
151         }
152 }
153
154 static char *dma_mode_string(void)
155 {
156         if (!use_dma)
157                 return "PIO";
158         switch (dma_mode) {
159         case 0:  return "SLOW DREQ";
160         case 1:  return "FAST DREQ";
161         case 2:  return "BURST";
162         default: return "invalid";
163         }
164 }
165
166 static void net2272_dequeue_all(struct net2272_ep *);
167 static int net2272_kick_dma(struct net2272_ep *, struct net2272_request *);
168 static int net2272_fifo_status(struct usb_ep *);
169
170 static const struct usb_ep_ops net2272_ep_ops;
171
172 /*---------------------------------------------------------------------------*/
173
174 static int
175 net2272_enable(struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
176 {
177         struct net2272 *dev;
178         struct net2272_ep *ep;
179         u32 max;
180         u8 tmp;
181         unsigned long flags;
182
183         ep = container_of(_ep, struct net2272_ep, ep);
184         if (!_ep || !desc || ep->desc || _ep->name == ep0name
185                         || desc->bDescriptorType != USB_DT_ENDPOINT)
186                 return -EINVAL;
187         dev = ep->dev;
188         if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)
189                 return -ESHUTDOWN;
190
191         max = usb_endpoint_maxp(desc);
192
193         spin_lock_irqsave(&dev->lock, flags);
194         _ep->maxpacket = max;
195         ep->desc = desc;
196
197         /* net2272_ep_reset() has already been called */
198         ep->stopped = 0;
199         ep->wedged = 0;
200
201         /* set speed-dependent max packet */
202         net2272_ep_write(ep, EP_MAXPKT0, max & 0xff);
203         net2272_ep_write(ep, EP_MAXPKT1, (max & 0xff00) >> 8);
204
205         /* set type, direction, address; reset fifo counters */
206         net2272_ep_write(ep, EP_STAT1, 1 << BUFFER_FLUSH);
207         tmp = usb_endpoint_type(desc);
208         if (usb_endpoint_xfer_bulk(desc)) {
209                 /* catch some particularly blatant driver bugs */
210                 if ((dev->gadget.speed == USB_SPEED_HIGH && max != 512) ||
211                     (dev->gadget.speed == USB_SPEED_FULL && max > 64)) {
212                         spin_unlock_irqrestore(&dev->lock, flags);
213                         return -ERANGE;
214                 }
215         }
216         ep->is_iso = usb_endpoint_xfer_isoc(desc) ? 1 : 0;
217         tmp <<= ENDPOINT_TYPE;
218         tmp |= ((desc->bEndpointAddress & 0x0f) << ENDPOINT_NUMBER);
219         tmp |= usb_endpoint_dir_in(desc) << ENDPOINT_DIRECTION;
220         tmp |= (1 << ENDPOINT_ENABLE);
221
222         /* for OUT transfers, block the rx fifo until a read is posted */
223         ep->is_in = usb_endpoint_dir_in(desc);
224         if (!ep->is_in)
225                 net2272_ep_write(ep, EP_RSPSET, 1 << ALT_NAK_OUT_PACKETS);
226
227         net2272_ep_write(ep, EP_CFG, tmp);
228
229         /* enable irqs */
230         tmp = (1 << ep->num) | net2272_read(dev, IRQENB0);
231         net2272_write(dev, IRQENB0, tmp);
232
233         tmp = (1 << DATA_PACKET_RECEIVED_INTERRUPT_ENABLE)
234                 | (1 << DATA_PACKET_TRANSMITTED_INTERRUPT_ENABLE)
235                 | net2272_ep_read(ep, EP_IRQENB);
236         net2272_ep_write(ep, EP_IRQENB, tmp);
237
238         tmp = desc->bEndpointAddress;
239         dev_dbg(dev->dev, "enabled %s (ep%d%s-%s) max %04x cfg %02x\n",
240                 _ep->name, tmp & 0x0f, PIPEDIR(tmp),
241                 type_string(desc->bmAttributes), max,
242                 net2272_ep_read(ep, EP_CFG));
243
244         spin_unlock_irqrestore(&dev->lock, flags);
245         return 0;
246 }
247
248 static void net2272_ep_reset(struct net2272_ep *ep)
249 {
250         u8 tmp;
251
252         ep->desc = NULL;
253         INIT_LIST_HEAD(&ep->queue);
254
255         usb_ep_set_maxpacket_limit(&ep->ep, ~0);
256         ep->ep.ops = &net2272_ep_ops;
257
258         /* disable irqs, endpoint */
259         net2272_ep_write(ep, EP_IRQENB, 0);
260
261         /* init to our chosen defaults, notably so that we NAK OUT
262          * packets until the driver queues a read.
263          */
264         tmp = (1 << NAK_OUT_PACKETS_MODE) | (1 << ALT_NAK_OUT_PACKETS);
265         net2272_ep_write(ep, EP_RSPSET, tmp);
266
267         tmp = (1 << INTERRUPT_MODE) | (1 << HIDE_STATUS_PHASE);
268         if (ep->num != 0)
269                 tmp |= (1 << ENDPOINT_TOGGLE) | (1 << ENDPOINT_HALT);
270
271         net2272_ep_write(ep, EP_RSPCLR, tmp);
272
273         /* scrub most status bits, and flush any fifo state */
274         net2272_ep_write(ep, EP_STAT0,
275                           (1 << DATA_IN_TOKEN_INTERRUPT)
276                         | (1 << DATA_OUT_TOKEN_INTERRUPT)
277                         | (1 << DATA_PACKET_TRANSMITTED_INTERRUPT)
278                         | (1 << DATA_PACKET_RECEIVED_INTERRUPT)
279                         | (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT));
280
281         net2272_ep_write(ep, EP_STAT1,
282                             (1 << TIMEOUT)
283                           | (1 << USB_OUT_ACK_SENT)
284                           | (1 << USB_OUT_NAK_SENT)
285                           | (1 << USB_IN_ACK_RCVD)
286                           | (1 << USB_IN_NAK_SENT)
287                           | (1 << USB_STALL_SENT)
288                           | (1 << LOCAL_OUT_ZLP)
289                           | (1 << BUFFER_FLUSH));
290
291         /* fifo size is handled seperately */
292 }
293
294 static int net2272_disable(struct usb_ep *_ep)
295 {
296         struct net2272_ep *ep;
297         unsigned long flags;
298
299         ep = container_of(_ep, struct net2272_ep, ep);
300         if (!_ep || !ep->desc || _ep->name == ep0name)
301                 return -EINVAL;
302
303         spin_lock_irqsave(&ep->dev->lock, flags);
304         net2272_dequeue_all(ep);
305         net2272_ep_reset(ep);
306
307         dev_vdbg(ep->dev->dev, "disabled %s\n", _ep->name);
308
309         spin_unlock_irqrestore(&ep->dev->lock, flags);
310         return 0;
311 }
312
313 /*---------------------------------------------------------------------------*/
314
315 static struct usb_request *
316 net2272_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
317 {
318         struct net2272_request *req;
319
320         if (!_ep)
321                 return NULL;
322
323         req = kzalloc(sizeof(*req), gfp_flags);
324         if (!req)
325                 return NULL;
326
327         INIT_LIST_HEAD(&req->queue);
328
329         return &req->req;
330 }
331
332 static void
333 net2272_free_request(struct usb_ep *_ep, struct usb_request *_req)
334 {
335         struct net2272_request *req;
336
337         if (!_ep || !_req)
338                 return;
339
340         req = container_of(_req, struct net2272_request, req);
341         WARN_ON(!list_empty(&req->queue));
342         kfree(req);
343 }
344
345 static void
346 net2272_done(struct net2272_ep *ep, struct net2272_request *req, int status)
347 {
348         struct net2272 *dev;
349         unsigned stopped = ep->stopped;
350
351         if (ep->num == 0) {
352                 if (ep->dev->protocol_stall) {
353                         ep->stopped = 1;
354                         set_halt(ep);
355                 }
356                 allow_status(ep);
357         }
358
359         list_del_init(&req->queue);
360
361         if (req->req.status == -EINPROGRESS)
362                 req->req.status = status;
363         else
364                 status = req->req.status;
365
366         dev = ep->dev;
367         if (use_dma && ep->dma)
368                 usb_gadget_unmap_request(&dev->gadget, &req->req,
369                                 ep->is_in);
370
371         if (status && status != -ESHUTDOWN)
372                 dev_vdbg(dev->dev, "complete %s req %p stat %d len %u/%u buf %p\n",
373                         ep->ep.name, &req->req, status,
374                         req->req.actual, req->req.length, req->req.buf);
375
376         /* don't modify queue heads during completion callback */
377         ep->stopped = 1;
378         spin_unlock(&dev->lock);
379         usb_gadget_giveback_request(&ep->ep, &req->req);
380         spin_lock(&dev->lock);
381         ep->stopped = stopped;
382 }
383
384 static int
385 net2272_write_packet(struct net2272_ep *ep, u8 *buf,
386         struct net2272_request *req, unsigned max)
387 {
388         u16 __iomem *ep_data = net2272_reg_addr(ep->dev, EP_DATA);
389         u16 *bufp;
390         unsigned length, count;
391         u8 tmp;
392
393         length = min(req->req.length - req->req.actual, max);
394         req->req.actual += length;
395
396         dev_vdbg(ep->dev->dev, "write packet %s req %p max %u len %u avail %u\n",
397                 ep->ep.name, req, max, length,
398                 (net2272_ep_read(ep, EP_AVAIL1) << 8) | net2272_ep_read(ep, EP_AVAIL0));
399
400         count = length;
401         bufp = (u16 *)buf;
402
403         while (likely(count >= 2)) {
404                 /* no byte-swap required; chip endian set during init */
405                 writew(*bufp++, ep_data);
406                 count -= 2;
407         }
408         buf = (u8 *)bufp;
409
410         /* write final byte by placing the NET2272 into 8-bit mode */
411         if (unlikely(count)) {
412                 tmp = net2272_read(ep->dev, LOCCTL);
413                 net2272_write(ep->dev, LOCCTL, tmp & ~(1 << DATA_WIDTH));
414                 writeb(*buf, ep_data);
415                 net2272_write(ep->dev, LOCCTL, tmp);
416         }
417         return length;
418 }
419
420 /* returns: 0: still running, 1: completed, negative: errno */
421 static int
422 net2272_write_fifo(struct net2272_ep *ep, struct net2272_request *req)
423 {
424         u8 *buf;
425         unsigned count, max;
426         int status;
427
428         dev_vdbg(ep->dev->dev, "write_fifo %s actual %d len %d\n",
429                 ep->ep.name, req->req.actual, req->req.length);
430
431         /*
432          * Keep loading the endpoint until the final packet is loaded,
433          * or the endpoint buffer is full.
434          */
435  top:
436         /*
437          * Clear interrupt status
438          *  - Packet Transmitted interrupt will become set again when the
439          *    host successfully takes another packet
440          */
441         net2272_ep_write(ep, EP_STAT0, (1 << DATA_PACKET_TRANSMITTED_INTERRUPT));
442         while (!(net2272_ep_read(ep, EP_STAT0) & (1 << BUFFER_FULL))) {
443                 buf = req->req.buf + req->req.actual;
444                 prefetch(buf);
445
446                 /* force pagesel */
447                 net2272_ep_read(ep, EP_STAT0);
448
449                 max = (net2272_ep_read(ep, EP_AVAIL1) << 8) |
450                         (net2272_ep_read(ep, EP_AVAIL0));
451
452                 if (max < ep->ep.maxpacket)
453                         max = (net2272_ep_read(ep, EP_AVAIL1) << 8)
454                                 | (net2272_ep_read(ep, EP_AVAIL0));
455
456                 count = net2272_write_packet(ep, buf, req, max);
457                 /* see if we are done */
458                 if (req->req.length == req->req.actual) {
459                         /* validate short or zlp packet */
460                         if (count < ep->ep.maxpacket)
461                                 set_fifo_bytecount(ep, 0);
462                         net2272_done(ep, req, 0);
463
464                         if (!list_empty(&ep->queue)) {
465                                 req = list_entry(ep->queue.next,
466                                                 struct net2272_request,
467                                                 queue);
468                                 status = net2272_kick_dma(ep, req);
469
470                                 if (status < 0)
471                                         if ((net2272_ep_read(ep, EP_STAT0)
472                                                         & (1 << BUFFER_EMPTY)))
473                                                 goto top;
474                         }
475                         return 1;
476                 }
477                 net2272_ep_write(ep, EP_STAT0, (1 << DATA_PACKET_TRANSMITTED_INTERRUPT));
478         }
479         return 0;
480 }
481
482 static void
483 net2272_out_flush(struct net2272_ep *ep)
484 {
485         ASSERT_OUT_NAKING(ep);
486
487         net2272_ep_write(ep, EP_STAT0, (1 << DATA_OUT_TOKEN_INTERRUPT)
488                         | (1 << DATA_PACKET_RECEIVED_INTERRUPT));
489         net2272_ep_write(ep, EP_STAT1, 1 << BUFFER_FLUSH);
490 }
491
492 static int
493 net2272_read_packet(struct net2272_ep *ep, u8 *buf,
494         struct net2272_request *req, unsigned avail)
495 {
496         u16 __iomem *ep_data = net2272_reg_addr(ep->dev, EP_DATA);
497         unsigned is_short;
498         u16 *bufp;
499
500         req->req.actual += avail;
501
502         dev_vdbg(ep->dev->dev, "read packet %s req %p len %u avail %u\n",
503                 ep->ep.name, req, avail,
504                 (net2272_ep_read(ep, EP_AVAIL1) << 8) | net2272_ep_read(ep, EP_AVAIL0));
505
506         is_short = (avail < ep->ep.maxpacket);
507
508         if (unlikely(avail == 0)) {
509                 /* remove any zlp from the buffer */
510                 (void)readw(ep_data);
511                 return is_short;
512         }
513
514         /* Ensure we get the final byte */
515         if (unlikely(avail % 2))
516                 avail++;
517         bufp = (u16 *)buf;
518
519         do {
520                 *bufp++ = readw(ep_data);
521                 avail -= 2;
522         } while (avail);
523
524         /*
525          * To avoid false endpoint available race condition must read
526          * ep stat0 twice in the case of a short transfer
527          */
528         if (net2272_ep_read(ep, EP_STAT0) & (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT))
529                 net2272_ep_read(ep, EP_STAT0);
530
531         return is_short;
532 }
533
534 static int
535 net2272_read_fifo(struct net2272_ep *ep, struct net2272_request *req)
536 {
537         u8 *buf;
538         unsigned is_short;
539         int count;
540         int tmp;
541         int cleanup = 0;
542         int status = -1;
543
544         dev_vdbg(ep->dev->dev, "read_fifo %s actual %d len %d\n",
545                 ep->ep.name, req->req.actual, req->req.length);
546
547  top:
548         do {
549                 buf = req->req.buf + req->req.actual;
550                 prefetchw(buf);
551
552                 count = (net2272_ep_read(ep, EP_AVAIL1) << 8)
553                         | net2272_ep_read(ep, EP_AVAIL0);
554
555                 net2272_ep_write(ep, EP_STAT0,
556                         (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT) |
557                         (1 << DATA_PACKET_RECEIVED_INTERRUPT));
558
559                 tmp = req->req.length - req->req.actual;
560
561                 if (count > tmp) {
562                         if ((tmp % ep->ep.maxpacket) != 0) {
563                                 dev_err(ep->dev->dev,
564                                         "%s out fifo %d bytes, expected %d\n",
565                                         ep->ep.name, count, tmp);
566                                 cleanup = 1;
567                         }
568                         count = (tmp > 0) ? tmp : 0;
569                 }
570
571                 is_short = net2272_read_packet(ep, buf, req, count);
572
573                 /* completion */
574                 if (unlikely(cleanup || is_short ||
575                                 req->req.actual == req->req.length)) {
576
577                         if (cleanup) {
578                                 net2272_out_flush(ep);
579                                 net2272_done(ep, req, -EOVERFLOW);
580                         } else
581                                 net2272_done(ep, req, 0);
582
583                         /* re-initialize endpoint transfer registers
584                          * otherwise they may result in erroneous pre-validation
585                          * for subsequent control reads
586                          */
587                         if (unlikely(ep->num == 0)) {
588                                 net2272_ep_write(ep, EP_TRANSFER2, 0);
589                                 net2272_ep_write(ep, EP_TRANSFER1, 0);
590                                 net2272_ep_write(ep, EP_TRANSFER0, 0);
591                         }
592
593                         if (!list_empty(&ep->queue)) {
594                                 req = list_entry(ep->queue.next,
595                                         struct net2272_request, queue);
596                                 status = net2272_kick_dma(ep, req);
597                                 if ((status < 0) &&
598                                     !(net2272_ep_read(ep, EP_STAT0) & (1 << BUFFER_EMPTY)))
599                                         goto top;
600                         }
601                         return 1;
602                 }
603         } while (!(net2272_ep_read(ep, EP_STAT0) & (1 << BUFFER_EMPTY)));
604
605         return 0;
606 }
607
608 static void
609 net2272_pio_advance(struct net2272_ep *ep)
610 {
611         struct net2272_request *req;
612
613         if (unlikely(list_empty(&ep->queue)))
614                 return;
615
616         req = list_entry(ep->queue.next, struct net2272_request, queue);
617         (ep->is_in ? net2272_write_fifo : net2272_read_fifo)(ep, req);
618 }
619
620 /* returns 0 on success, else negative errno */
621 static int
622 net2272_request_dma(struct net2272 *dev, unsigned ep, u32 buf,
623         unsigned len, unsigned dir)
624 {
625         dev_vdbg(dev->dev, "request_dma ep %d buf %08x len %d dir %d\n",
626                 ep, buf, len, dir);
627
628         /* The NET2272 only supports a single dma channel */
629         if (dev->dma_busy)
630                 return -EBUSY;
631         /*
632          * EP_TRANSFER (used to determine the number of bytes received
633          * in an OUT transfer) is 24 bits wide; don't ask for more than that.
634          */
635         if ((dir == 1) && (len > 0x1000000))
636                 return -EINVAL;
637
638         dev->dma_busy = 1;
639
640         /* initialize platform's dma */
641 #ifdef CONFIG_USB_PCI
642         /* NET2272 addr, buffer addr, length, etc. */
643         switch (dev->dev_id) {
644         case PCI_DEVICE_ID_RDK1:
645                 /* Setup PLX 9054 DMA mode */
646                 writel((1 << LOCAL_BUS_WIDTH) |
647                         (1 << TA_READY_INPUT_ENABLE) |
648                         (0 << LOCAL_BURST_ENABLE) |
649                         (1 << DONE_INTERRUPT_ENABLE) |
650                         (1 << LOCAL_ADDRESSING_MODE) |
651                         (1 << DEMAND_MODE) |
652                         (1 << DMA_EOT_ENABLE) |
653                         (1 << FAST_SLOW_TERMINATE_MODE_SELECT) |
654                         (1 << DMA_CHANNEL_INTERRUPT_SELECT),
655                         dev->rdk1.plx9054_base_addr + DMAMODE0);
656
657                 writel(0x100000, dev->rdk1.plx9054_base_addr + DMALADR0);
658                 writel(buf, dev->rdk1.plx9054_base_addr + DMAPADR0);
659                 writel(len, dev->rdk1.plx9054_base_addr + DMASIZ0);
660                 writel((dir << DIRECTION_OF_TRANSFER) |
661                         (1 << INTERRUPT_AFTER_TERMINAL_COUNT),
662                         dev->rdk1.plx9054_base_addr + DMADPR0);
663                 writel((1 << LOCAL_DMA_CHANNEL_0_INTERRUPT_ENABLE) |
664                         readl(dev->rdk1.plx9054_base_addr + INTCSR),
665                         dev->rdk1.plx9054_base_addr + INTCSR);
666
667                 break;
668         }
669 #endif
670
671         net2272_write(dev, DMAREQ,
672                 (0 << DMA_BUFFER_VALID) |
673                 (1 << DMA_REQUEST_ENABLE) |
674                 (1 << DMA_CONTROL_DACK) |
675                 (dev->dma_eot_polarity << EOT_POLARITY) |
676                 (dev->dma_dack_polarity << DACK_POLARITY) |
677                 (dev->dma_dreq_polarity << DREQ_POLARITY) |
678                 ((ep >> 1) << DMA_ENDPOINT_SELECT));
679
680         (void) net2272_read(dev, SCRATCH);
681
682         return 0;
683 }
684
685 static void
686 net2272_start_dma(struct net2272 *dev)
687 {
688         /* start platform's dma controller */
689 #ifdef CONFIG_USB_PCI
690         switch (dev->dev_id) {
691         case PCI_DEVICE_ID_RDK1:
692                 writeb((1 << CHANNEL_ENABLE) | (1 << CHANNEL_START),
693                         dev->rdk1.plx9054_base_addr + DMACSR0);
694                 break;
695         }
696 #endif
697 }
698
699 /* returns 0 on success, else negative errno */
700 static int
701 net2272_kick_dma(struct net2272_ep *ep, struct net2272_request *req)
702 {
703         unsigned size;
704         u8 tmp;
705
706         if (!use_dma || (ep->num < 1) || (ep->num > 2) || !ep->dma)
707                 return -EINVAL;
708
709         /* don't use dma for odd-length transfers
710          * otherwise, we'd need to deal with the last byte with pio
711          */
712         if (req->req.length & 1)
713                 return -EINVAL;
714
715         dev_vdbg(ep->dev->dev, "kick_dma %s req %p dma %08llx\n",
716                 ep->ep.name, req, (unsigned long long) req->req.dma);
717
718         net2272_ep_write(ep, EP_RSPSET, 1 << ALT_NAK_OUT_PACKETS);
719
720         /* The NET2272 can only use DMA on one endpoint at a time */
721         if (ep->dev->dma_busy)
722                 return -EBUSY;
723
724         /* Make sure we only DMA an even number of bytes (we'll use
725          * pio to complete the transfer)
726          */
727         size = req->req.length;
728         size &= ~1;
729
730         /* device-to-host transfer */
731         if (ep->is_in) {
732                 /* initialize platform's dma controller */
733                 if (net2272_request_dma(ep->dev, ep->num, req->req.dma, size, 0))
734                         /* unable to obtain DMA channel; return error and use pio mode */
735                         return -EBUSY;
736                 req->req.actual += size;
737
738         /* host-to-device transfer */
739         } else {
740                 tmp = net2272_ep_read(ep, EP_STAT0);
741
742                 /* initialize platform's dma controller */
743                 if (net2272_request_dma(ep->dev, ep->num, req->req.dma, size, 1))
744                         /* unable to obtain DMA channel; return error and use pio mode */
745                         return -EBUSY;
746
747                 if (!(tmp & (1 << BUFFER_EMPTY)))
748                         ep->not_empty = 1;
749                 else
750                         ep->not_empty = 0;
751
752
753                 /* allow the endpoint's buffer to fill */
754                 net2272_ep_write(ep, EP_RSPCLR, 1 << ALT_NAK_OUT_PACKETS);
755
756                 /* this transfer completed and data's already in the fifo
757                  * return error so pio gets used.
758                  */
759                 if (tmp & (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT)) {
760
761                         /* deassert dreq */
762                         net2272_write(ep->dev, DMAREQ,
763                                 (0 << DMA_BUFFER_VALID) |
764                                 (0 << DMA_REQUEST_ENABLE) |
765                                 (1 << DMA_CONTROL_DACK) |
766                                 (ep->dev->dma_eot_polarity << EOT_POLARITY) |
767                                 (ep->dev->dma_dack_polarity << DACK_POLARITY) |
768                                 (ep->dev->dma_dreq_polarity << DREQ_POLARITY) |
769                                 ((ep->num >> 1) << DMA_ENDPOINT_SELECT));
770
771                         return -EBUSY;
772                 }
773         }
774
775         /* Don't use per-packet interrupts: use dma interrupts only */
776         net2272_ep_write(ep, EP_IRQENB, 0);
777
778         net2272_start_dma(ep->dev);
779
780         return 0;
781 }
782
783 static void net2272_cancel_dma(struct net2272 *dev)
784 {
785 #ifdef CONFIG_USB_PCI
786         switch (dev->dev_id) {
787         case PCI_DEVICE_ID_RDK1:
788                 writeb(0, dev->rdk1.plx9054_base_addr + DMACSR0);
789                 writeb(1 << CHANNEL_ABORT, dev->rdk1.plx9054_base_addr + DMACSR0);
790                 while (!(readb(dev->rdk1.plx9054_base_addr + DMACSR0) &
791                          (1 << CHANNEL_DONE)))
792                         continue;       /* wait for dma to stabalize */
793
794                 /* dma abort generates an interrupt */
795                 writeb(1 << CHANNEL_CLEAR_INTERRUPT,
796                         dev->rdk1.plx9054_base_addr + DMACSR0);
797                 break;
798         }
799 #endif
800
801         dev->dma_busy = 0;
802 }
803
804 /*---------------------------------------------------------------------------*/
805
806 static int
807 net2272_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
808 {
809         struct net2272_request *req;
810         struct net2272_ep *ep;
811         struct net2272 *dev;
812         unsigned long flags;
813         int status = -1;
814         u8 s;
815
816         req = container_of(_req, struct net2272_request, req);
817         if (!_req || !_req->complete || !_req->buf
818                         || !list_empty(&req->queue))
819                 return -EINVAL;
820         ep = container_of(_ep, struct net2272_ep, ep);
821         if (!_ep || (!ep->desc && ep->num != 0))
822                 return -EINVAL;
823         dev = ep->dev;
824         if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)
825                 return -ESHUTDOWN;
826
827         /* set up dma mapping in case the caller didn't */
828         if (use_dma && ep->dma) {
829                 status = usb_gadget_map_request(&dev->gadget, _req,
830                                 ep->is_in);
831                 if (status)
832                         return status;
833         }
834
835         dev_vdbg(dev->dev, "%s queue req %p, len %d buf %p dma %08llx %s\n",
836                 _ep->name, _req, _req->length, _req->buf,
837                 (unsigned long long) _req->dma, _req->zero ? "zero" : "!zero");
838
839         spin_lock_irqsave(&dev->lock, flags);
840
841         _req->status = -EINPROGRESS;
842         _req->actual = 0;
843
844         /* kickstart this i/o queue? */
845         if (list_empty(&ep->queue) && !ep->stopped) {
846                 /* maybe there's no control data, just status ack */
847                 if (ep->num == 0 && _req->length == 0) {
848                         net2272_done(ep, req, 0);
849                         dev_vdbg(dev->dev, "%s status ack\n", ep->ep.name);
850                         goto done;
851                 }
852
853                 /* Return zlp, don't let it block subsequent packets */
854                 s = net2272_ep_read(ep, EP_STAT0);
855                 if (s & (1 << BUFFER_EMPTY)) {
856                         /* Buffer is empty check for a blocking zlp, handle it */
857                         if ((s & (1 << NAK_OUT_PACKETS)) &&
858                             net2272_ep_read(ep, EP_STAT1) & (1 << LOCAL_OUT_ZLP)) {
859                                 dev_dbg(dev->dev, "WARNING: returning ZLP short packet termination!\n");
860                                 /*
861                                  * Request is going to terminate with a short packet ...
862                                  * hope the client is ready for it!
863                                  */
864                                 status = net2272_read_fifo(ep, req);
865                                 /* clear short packet naking */
866                                 net2272_ep_write(ep, EP_STAT0, (1 << NAK_OUT_PACKETS));
867                                 goto done;
868                         }
869                 }
870
871                 /* try dma first */
872                 status = net2272_kick_dma(ep, req);
873
874                 if (status < 0) {
875                         /* dma failed (most likely in use by another endpoint)
876                          * fallback to pio
877                          */
878                         status = 0;
879
880                         if (ep->is_in)
881                                 status = net2272_write_fifo(ep, req);
882                         else {
883                                 s = net2272_ep_read(ep, EP_STAT0);
884                                 if ((s & (1 << BUFFER_EMPTY)) == 0)
885                                         status = net2272_read_fifo(ep, req);
886                         }
887
888                         if (unlikely(status != 0)) {
889                                 if (status > 0)
890                                         status = 0;
891                                 req = NULL;
892                         }
893                 }
894         }
895         if (likely(req))
896                 list_add_tail(&req->queue, &ep->queue);
897
898         if (likely(!list_empty(&ep->queue)))
899                 net2272_ep_write(ep, EP_RSPCLR, 1 << ALT_NAK_OUT_PACKETS);
900  done:
901         spin_unlock_irqrestore(&dev->lock, flags);
902
903         return 0;
904 }
905
906 /* dequeue ALL requests */
907 static void
908 net2272_dequeue_all(struct net2272_ep *ep)
909 {
910         struct net2272_request *req;
911
912         /* called with spinlock held */
913         ep->stopped = 1;
914
915         while (!list_empty(&ep->queue)) {
916                 req = list_entry(ep->queue.next,
917                                 struct net2272_request,
918                                 queue);
919                 net2272_done(ep, req, -ESHUTDOWN);
920         }
921 }
922
923 /* dequeue JUST ONE request */
924 static int
925 net2272_dequeue(struct usb_ep *_ep, struct usb_request *_req)
926 {
927         struct net2272_ep *ep;
928         struct net2272_request *req;
929         unsigned long flags;
930         int stopped;
931
932         ep = container_of(_ep, struct net2272_ep, ep);
933         if (!_ep || (!ep->desc && ep->num != 0) || !_req)
934                 return -EINVAL;
935
936         spin_lock_irqsave(&ep->dev->lock, flags);
937         stopped = ep->stopped;
938         ep->stopped = 1;
939
940         /* make sure it's still queued on this endpoint */
941         list_for_each_entry(req, &ep->queue, queue) {
942                 if (&req->req == _req)
943                         break;
944         }
945         if (&req->req != _req) {
946                 ep->stopped = stopped;
947                 spin_unlock_irqrestore(&ep->dev->lock, flags);
948                 return -EINVAL;
949         }
950
951         /* queue head may be partially complete */
952         if (ep->queue.next == &req->queue) {
953                 dev_dbg(ep->dev->dev, "unlink (%s) pio\n", _ep->name);
954                 net2272_done(ep, req, -ECONNRESET);
955         }
956         req = NULL;
957         ep->stopped = stopped;
958
959         spin_unlock_irqrestore(&ep->dev->lock, flags);
960         return 0;
961 }
962
963 /*---------------------------------------------------------------------------*/
964
965 static int
966 net2272_set_halt_and_wedge(struct usb_ep *_ep, int value, int wedged)
967 {
968         struct net2272_ep *ep;
969         unsigned long flags;
970         int ret = 0;
971
972         ep = container_of(_ep, struct net2272_ep, ep);
973         if (!_ep || (!ep->desc && ep->num != 0))
974                 return -EINVAL;
975         if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN)
976                 return -ESHUTDOWN;
977         if (ep->desc /* not ep0 */ && usb_endpoint_xfer_isoc(ep->desc))
978                 return -EINVAL;
979
980         spin_lock_irqsave(&ep->dev->lock, flags);
981         if (!list_empty(&ep->queue))
982                 ret = -EAGAIN;
983         else if (ep->is_in && value && net2272_fifo_status(_ep) != 0)
984                 ret = -EAGAIN;
985         else {
986                 dev_vdbg(ep->dev->dev, "%s %s %s\n", _ep->name,
987                         value ? "set" : "clear",
988                         wedged ? "wedge" : "halt");
989                 /* set/clear */
990                 if (value) {
991                         if (ep->num == 0)
992                                 ep->dev->protocol_stall = 1;
993                         else
994                                 set_halt(ep);
995                         if (wedged)
996                                 ep->wedged = 1;
997                 } else {
998                         clear_halt(ep);
999                         ep->wedged = 0;
1000                 }
1001         }
1002         spin_unlock_irqrestore(&ep->dev->lock, flags);
1003
1004         return ret;
1005 }
1006
1007 static int
1008 net2272_set_halt(struct usb_ep *_ep, int value)
1009 {
1010         return net2272_set_halt_and_wedge(_ep, value, 0);
1011 }
1012
1013 static int
1014 net2272_set_wedge(struct usb_ep *_ep)
1015 {
1016         if (!_ep || _ep->name == ep0name)
1017                 return -EINVAL;
1018         return net2272_set_halt_and_wedge(_ep, 1, 1);
1019 }
1020
1021 static int
1022 net2272_fifo_status(struct usb_ep *_ep)
1023 {
1024         struct net2272_ep *ep;
1025         u16 avail;
1026
1027         ep = container_of(_ep, struct net2272_ep, ep);
1028         if (!_ep || (!ep->desc && ep->num != 0))
1029                 return -ENODEV;
1030         if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN)
1031                 return -ESHUTDOWN;
1032
1033         avail = net2272_ep_read(ep, EP_AVAIL1) << 8;
1034         avail |= net2272_ep_read(ep, EP_AVAIL0);
1035         if (avail > ep->fifo_size)
1036                 return -EOVERFLOW;
1037         if (ep->is_in)
1038                 avail = ep->fifo_size - avail;
1039         return avail;
1040 }
1041
1042 static void
1043 net2272_fifo_flush(struct usb_ep *_ep)
1044 {
1045         struct net2272_ep *ep;
1046
1047         ep = container_of(_ep, struct net2272_ep, ep);
1048         if (!_ep || (!ep->desc && ep->num != 0))
1049                 return;
1050         if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN)
1051                 return;
1052
1053         net2272_ep_write(ep, EP_STAT1, 1 << BUFFER_FLUSH);
1054 }
1055
1056 static const struct usb_ep_ops net2272_ep_ops = {
1057         .enable        = net2272_enable,
1058         .disable       = net2272_disable,
1059
1060         .alloc_request = net2272_alloc_request,
1061         .free_request  = net2272_free_request,
1062
1063         .queue         = net2272_queue,
1064         .dequeue       = net2272_dequeue,
1065
1066         .set_halt      = net2272_set_halt,
1067         .set_wedge     = net2272_set_wedge,
1068         .fifo_status   = net2272_fifo_status,
1069         .fifo_flush    = net2272_fifo_flush,
1070 };
1071
1072 /*---------------------------------------------------------------------------*/
1073
1074 static int
1075 net2272_get_frame(struct usb_gadget *_gadget)
1076 {
1077         struct net2272 *dev;
1078         unsigned long flags;
1079         u16 ret;
1080
1081         if (!_gadget)
1082                 return -ENODEV;
1083         dev = container_of(_gadget, struct net2272, gadget);
1084         spin_lock_irqsave(&dev->lock, flags);
1085
1086         ret = net2272_read(dev, FRAME1) << 8;
1087         ret |= net2272_read(dev, FRAME0);
1088
1089         spin_unlock_irqrestore(&dev->lock, flags);
1090         return ret;
1091 }
1092
1093 static int
1094 net2272_wakeup(struct usb_gadget *_gadget)
1095 {
1096         struct net2272 *dev;
1097         u8 tmp;
1098         unsigned long flags;
1099
1100         if (!_gadget)
1101                 return 0;
1102         dev = container_of(_gadget, struct net2272, gadget);
1103
1104         spin_lock_irqsave(&dev->lock, flags);
1105         tmp = net2272_read(dev, USBCTL0);
1106         if (tmp & (1 << IO_WAKEUP_ENABLE))
1107                 net2272_write(dev, USBCTL1, (1 << GENERATE_RESUME));
1108
1109         spin_unlock_irqrestore(&dev->lock, flags);
1110
1111         return 0;
1112 }
1113
1114 static int
1115 net2272_set_selfpowered(struct usb_gadget *_gadget, int value)
1116 {
1117         if (!_gadget)
1118                 return -ENODEV;
1119
1120         _gadget->is_selfpowered = (value != 0);
1121
1122         return 0;
1123 }
1124
1125 static int
1126 net2272_pullup(struct usb_gadget *_gadget, int is_on)
1127 {
1128         struct net2272 *dev;
1129         u8 tmp;
1130         unsigned long flags;
1131
1132         if (!_gadget)
1133                 return -ENODEV;
1134         dev = container_of(_gadget, struct net2272, gadget);
1135
1136         spin_lock_irqsave(&dev->lock, flags);
1137         tmp = net2272_read(dev, USBCTL0);
1138         dev->softconnect = (is_on != 0);
1139         if (is_on)
1140                 tmp |= (1 << USB_DETECT_ENABLE);
1141         else
1142                 tmp &= ~(1 << USB_DETECT_ENABLE);
1143         net2272_write(dev, USBCTL0, tmp);
1144         spin_unlock_irqrestore(&dev->lock, flags);
1145
1146         return 0;
1147 }
1148
1149 static int net2272_start(struct usb_gadget *_gadget,
1150                 struct usb_gadget_driver *driver);
1151 static int net2272_stop(struct usb_gadget *_gadget);
1152
1153 static const struct usb_gadget_ops net2272_ops = {
1154         .get_frame      = net2272_get_frame,
1155         .wakeup         = net2272_wakeup,
1156         .set_selfpowered = net2272_set_selfpowered,
1157         .pullup         = net2272_pullup,
1158         .udc_start      = net2272_start,
1159         .udc_stop       = net2272_stop,
1160 };
1161
1162 /*---------------------------------------------------------------------------*/
1163
1164 static ssize_t
1165 registers_show(struct device *_dev, struct device_attribute *attr, char *buf)
1166 {
1167         struct net2272 *dev;
1168         char *next;
1169         unsigned size, t;
1170         unsigned long flags;
1171         u8 t1, t2;
1172         int i;
1173         const char *s;
1174
1175         dev = dev_get_drvdata(_dev);
1176         next = buf;
1177         size = PAGE_SIZE;
1178         spin_lock_irqsave(&dev->lock, flags);
1179
1180         /* Main Control Registers */
1181         t = scnprintf(next, size, "%s version %s,"
1182                 "chiprev %02x, locctl %02x\n"
1183                 "irqenb0 %02x irqenb1 %02x "
1184                 "irqstat0 %02x irqstat1 %02x\n",
1185                 driver_name, driver_vers, dev->chiprev,
1186                 net2272_read(dev, LOCCTL),
1187                 net2272_read(dev, IRQENB0),
1188                 net2272_read(dev, IRQENB1),
1189                 net2272_read(dev, IRQSTAT0),
1190                 net2272_read(dev, IRQSTAT1));
1191         size -= t;
1192         next += t;
1193
1194         /* DMA */
1195         t1 = net2272_read(dev, DMAREQ);
1196         t = scnprintf(next, size, "\ndmareq %02x: %s %s%s%s%s\n",
1197                 t1, ep_name[(t1 & 0x01) + 1],
1198                 t1 & (1 << DMA_CONTROL_DACK) ? "dack " : "",
1199                 t1 & (1 << DMA_REQUEST_ENABLE) ? "reqenb " : "",
1200                 t1 & (1 << DMA_REQUEST) ? "req " : "",
1201                 t1 & (1 << DMA_BUFFER_VALID) ? "valid " : "");
1202         size -= t;
1203         next += t;
1204
1205         /* USB Control Registers */
1206         t1 = net2272_read(dev, USBCTL1);
1207         if (t1 & (1 << VBUS_PIN)) {
1208                 if (t1 & (1 << USB_HIGH_SPEED))
1209                         s = "high speed";
1210                 else if (dev->gadget.speed == USB_SPEED_UNKNOWN)
1211                         s = "powered";
1212                 else
1213                         s = "full speed";
1214         } else
1215                 s = "not attached";
1216         t = scnprintf(next, size,
1217                 "usbctl0 %02x usbctl1 %02x addr 0x%02x (%s)\n",
1218                 net2272_read(dev, USBCTL0), t1,
1219                 net2272_read(dev, OURADDR), s);
1220         size -= t;
1221         next += t;
1222
1223         /* Endpoint Registers */
1224         for (i = 0; i < 4; ++i) {
1225                 struct net2272_ep *ep;
1226
1227                 ep = &dev->ep[i];
1228                 if (i && !ep->desc)
1229                         continue;
1230
1231                 t1 = net2272_ep_read(ep, EP_CFG);
1232                 t2 = net2272_ep_read(ep, EP_RSPSET);
1233                 t = scnprintf(next, size,
1234                         "\n%s\tcfg %02x rsp (%02x) %s%s%s%s%s%s%s%s"
1235                         "irqenb %02x\n",
1236                         ep->ep.name, t1, t2,
1237                         (t2 & (1 << ALT_NAK_OUT_PACKETS)) ? "NAK " : "",
1238                         (t2 & (1 << HIDE_STATUS_PHASE)) ? "hide " : "",
1239                         (t2 & (1 << AUTOVALIDATE)) ? "auto " : "",
1240                         (t2 & (1 << INTERRUPT_MODE)) ? "interrupt " : "",
1241                         (t2 & (1 << CONTROL_STATUS_PHASE_HANDSHAKE)) ? "status " : "",
1242                         (t2 & (1 << NAK_OUT_PACKETS_MODE)) ? "NAKmode " : "",
1243                         (t2 & (1 << ENDPOINT_TOGGLE)) ? "DATA1 " : "DATA0 ",
1244                         (t2 & (1 << ENDPOINT_HALT)) ? "HALT " : "",
1245                         net2272_ep_read(ep, EP_IRQENB));
1246                 size -= t;
1247                 next += t;
1248
1249                 t = scnprintf(next, size,
1250                         "\tstat0 %02x stat1 %02x avail %04x "
1251                         "(ep%d%s-%s)%s\n",
1252                         net2272_ep_read(ep, EP_STAT0),
1253                         net2272_ep_read(ep, EP_STAT1),
1254                         (net2272_ep_read(ep, EP_AVAIL1) << 8) | net2272_ep_read(ep, EP_AVAIL0),
1255                         t1 & 0x0f,
1256                         ep->is_in ? "in" : "out",
1257                         type_string(t1 >> 5),
1258                         ep->stopped ? "*" : "");
1259                 size -= t;
1260                 next += t;
1261
1262                 t = scnprintf(next, size,
1263                         "\tep_transfer %06x\n",
1264                         ((net2272_ep_read(ep, EP_TRANSFER2) & 0xff) << 16) |
1265                         ((net2272_ep_read(ep, EP_TRANSFER1) & 0xff) << 8) |
1266                         ((net2272_ep_read(ep, EP_TRANSFER0) & 0xff)));
1267                 size -= t;
1268                 next += t;
1269
1270                 t1 = net2272_ep_read(ep, EP_BUFF_STATES) & 0x03;
1271                 t2 = (net2272_ep_read(ep, EP_BUFF_STATES) >> 2) & 0x03;
1272                 t = scnprintf(next, size,
1273                         "\tbuf-a %s buf-b %s\n",
1274                         buf_state_string(t1),
1275                         buf_state_string(t2));
1276                 size -= t;
1277                 next += t;
1278         }
1279
1280         spin_unlock_irqrestore(&dev->lock, flags);
1281
1282         return PAGE_SIZE - size;
1283 }
1284 static DEVICE_ATTR_RO(registers);
1285
1286 /*---------------------------------------------------------------------------*/
1287
1288 static void
1289 net2272_set_fifo_mode(struct net2272 *dev, int mode)
1290 {
1291         u8 tmp;
1292
1293         tmp = net2272_read(dev, LOCCTL) & 0x3f;
1294         tmp |= (mode << 6);
1295         net2272_write(dev, LOCCTL, tmp);
1296
1297         INIT_LIST_HEAD(&dev->gadget.ep_list);
1298
1299         /* always ep-a, ep-c ... maybe not ep-b */
1300         list_add_tail(&dev->ep[1].ep.ep_list, &dev->gadget.ep_list);
1301
1302         switch (mode) {
1303         case 0:
1304                 list_add_tail(&dev->ep[2].ep.ep_list, &dev->gadget.ep_list);
1305                 dev->ep[1].fifo_size = dev->ep[2].fifo_size = 512;
1306                 break;
1307         case 1:
1308                 list_add_tail(&dev->ep[2].ep.ep_list, &dev->gadget.ep_list);
1309                 dev->ep[1].fifo_size = 1024;
1310                 dev->ep[2].fifo_size = 512;
1311                 break;
1312         case 2:
1313                 list_add_tail(&dev->ep[2].ep.ep_list, &dev->gadget.ep_list);
1314                 dev->ep[1].fifo_size = dev->ep[2].fifo_size = 1024;
1315                 break;
1316         case 3:
1317                 dev->ep[1].fifo_size = 1024;
1318                 break;
1319         }
1320
1321         /* ep-c is always 2 512 byte buffers */
1322         list_add_tail(&dev->ep[3].ep.ep_list, &dev->gadget.ep_list);
1323         dev->ep[3].fifo_size = 512;
1324 }
1325
1326 /*---------------------------------------------------------------------------*/
1327
1328 static void
1329 net2272_usb_reset(struct net2272 *dev)
1330 {
1331         dev->gadget.speed = USB_SPEED_UNKNOWN;
1332
1333         net2272_cancel_dma(dev);
1334
1335         net2272_write(dev, IRQENB0, 0);
1336         net2272_write(dev, IRQENB1, 0);
1337
1338         /* clear irq state */
1339         net2272_write(dev, IRQSTAT0, 0xff);
1340         net2272_write(dev, IRQSTAT1, ~(1 << SUSPEND_REQUEST_INTERRUPT));
1341
1342         net2272_write(dev, DMAREQ,
1343                 (0 << DMA_BUFFER_VALID) |
1344                 (0 << DMA_REQUEST_ENABLE) |
1345                 (1 << DMA_CONTROL_DACK) |
1346                 (dev->dma_eot_polarity << EOT_POLARITY) |
1347                 (dev->dma_dack_polarity << DACK_POLARITY) |
1348                 (dev->dma_dreq_polarity << DREQ_POLARITY) |
1349                 ((dma_ep >> 1) << DMA_ENDPOINT_SELECT));
1350
1351         net2272_cancel_dma(dev);
1352         net2272_set_fifo_mode(dev, (fifo_mode <= 3) ? fifo_mode : 0);
1353
1354         /* Set the NET2272 ep fifo data width to 16-bit mode and for correct byte swapping
1355          * note that the higher level gadget drivers are expected to convert data to little endian.
1356          * Enable byte swap for your local bus/cpu if needed by setting BYTE_SWAP in LOCCTL here
1357          */
1358         net2272_write(dev, LOCCTL, net2272_read(dev, LOCCTL) | (1 << DATA_WIDTH));
1359         net2272_write(dev, LOCCTL1, (dma_mode << DMA_MODE));
1360 }
1361
1362 static void
1363 net2272_usb_reinit(struct net2272 *dev)
1364 {
1365         int i;
1366
1367         /* basic endpoint init */
1368         for (i = 0; i < 4; ++i) {
1369                 struct net2272_ep *ep = &dev->ep[i];
1370
1371                 ep->ep.name = ep_name[i];
1372                 ep->dev = dev;
1373                 ep->num = i;
1374                 ep->not_empty = 0;
1375
1376                 if (use_dma && ep->num == dma_ep)
1377                         ep->dma = 1;
1378
1379                 if (i > 0 && i <= 3)
1380                         ep->fifo_size = 512;
1381                 else
1382                         ep->fifo_size = 64;
1383                 net2272_ep_reset(ep);
1384
1385                 if (i == 0) {
1386                         ep->ep.caps.type_control = true;
1387                 } else {
1388                         ep->ep.caps.type_iso = true;
1389                         ep->ep.caps.type_bulk = true;
1390                         ep->ep.caps.type_int = true;
1391                 }
1392
1393                 ep->ep.caps.dir_in = true;
1394                 ep->ep.caps.dir_out = true;
1395         }
1396         usb_ep_set_maxpacket_limit(&dev->ep[0].ep, 64);
1397
1398         dev->gadget.ep0 = &dev->ep[0].ep;
1399         dev->ep[0].stopped = 0;
1400         INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
1401 }
1402
1403 static void
1404 net2272_ep0_start(struct net2272 *dev)
1405 {
1406         struct net2272_ep *ep0 = &dev->ep[0];
1407
1408         net2272_ep_write(ep0, EP_RSPSET,
1409                 (1 << NAK_OUT_PACKETS_MODE) |
1410                 (1 << ALT_NAK_OUT_PACKETS));
1411         net2272_ep_write(ep0, EP_RSPCLR,
1412                 (1 << HIDE_STATUS_PHASE) |
1413                 (1 << CONTROL_STATUS_PHASE_HANDSHAKE));
1414         net2272_write(dev, USBCTL0,
1415                 (dev->softconnect << USB_DETECT_ENABLE) |
1416                 (1 << USB_ROOT_PORT_WAKEUP_ENABLE) |
1417                 (1 << IO_WAKEUP_ENABLE));
1418         net2272_write(dev, IRQENB0,
1419                 (1 << SETUP_PACKET_INTERRUPT_ENABLE) |
1420                 (1 << ENDPOINT_0_INTERRUPT_ENABLE) |
1421                 (1 << DMA_DONE_INTERRUPT_ENABLE));
1422         net2272_write(dev, IRQENB1,
1423                 (1 << VBUS_INTERRUPT_ENABLE) |
1424                 (1 << ROOT_PORT_RESET_INTERRUPT_ENABLE) |
1425                 (1 << SUSPEND_REQUEST_CHANGE_INTERRUPT_ENABLE));
1426 }
1427
1428 /* when a driver is successfully registered, it will receive
1429  * control requests including set_configuration(), which enables
1430  * non-control requests.  then usb traffic follows until a
1431  * disconnect is reported.  then a host may connect again, or
1432  * the driver might get unbound.
1433  */
1434 static int net2272_start(struct usb_gadget *_gadget,
1435                 struct usb_gadget_driver *driver)
1436 {
1437         struct net2272 *dev;
1438         unsigned i;
1439
1440         if (!driver || !driver->setup ||
1441             driver->max_speed != USB_SPEED_HIGH)
1442                 return -EINVAL;
1443
1444         dev = container_of(_gadget, struct net2272, gadget);
1445
1446         for (i = 0; i < 4; ++i)
1447                 dev->ep[i].irqs = 0;
1448         /* hook up the driver ... */
1449         dev->softconnect = 1;
1450         driver->driver.bus = NULL;
1451         dev->driver = driver;
1452
1453         /* ... then enable host detection and ep0; and we're ready
1454          * for set_configuration as well as eventual disconnect.
1455          */
1456         net2272_ep0_start(dev);
1457
1458         return 0;
1459 }
1460
1461 static void
1462 stop_activity(struct net2272 *dev, struct usb_gadget_driver *driver)
1463 {
1464         int i;
1465
1466         /* don't disconnect if it's not connected */
1467         if (dev->gadget.speed == USB_SPEED_UNKNOWN)
1468                 driver = NULL;
1469
1470         /* stop hardware; prevent new request submissions;
1471          * and kill any outstanding requests.
1472          */
1473         net2272_usb_reset(dev);
1474         for (i = 0; i < 4; ++i)
1475                 net2272_dequeue_all(&dev->ep[i]);
1476
1477         /* report disconnect; the driver is already quiesced */
1478         if (driver) {
1479                 spin_unlock(&dev->lock);
1480                 driver->disconnect(&dev->gadget);
1481                 spin_lock(&dev->lock);
1482         }
1483
1484         net2272_usb_reinit(dev);
1485 }
1486
1487 static int net2272_stop(struct usb_gadget *_gadget)
1488 {
1489         struct net2272 *dev;
1490         unsigned long flags;
1491
1492         dev = container_of(_gadget, struct net2272, gadget);
1493
1494         spin_lock_irqsave(&dev->lock, flags);
1495         stop_activity(dev, NULL);
1496         spin_unlock_irqrestore(&dev->lock, flags);
1497
1498         dev->driver = NULL;
1499
1500         return 0;
1501 }
1502
1503 /*---------------------------------------------------------------------------*/
1504 /* handle ep-a/ep-b dma completions */
1505 static void
1506 net2272_handle_dma(struct net2272_ep *ep)
1507 {
1508         struct net2272_request *req;
1509         unsigned len;
1510         int status;
1511
1512         if (!list_empty(&ep->queue))
1513                 req = list_entry(ep->queue.next,
1514                                 struct net2272_request, queue);
1515         else
1516                 req = NULL;
1517
1518         dev_vdbg(ep->dev->dev, "handle_dma %s req %p\n", ep->ep.name, req);
1519
1520         /* Ensure DREQ is de-asserted */
1521         net2272_write(ep->dev, DMAREQ,
1522                 (0 << DMA_BUFFER_VALID)
1523               | (0 << DMA_REQUEST_ENABLE)
1524               | (1 << DMA_CONTROL_DACK)
1525               | (ep->dev->dma_eot_polarity << EOT_POLARITY)
1526               | (ep->dev->dma_dack_polarity << DACK_POLARITY)
1527               | (ep->dev->dma_dreq_polarity << DREQ_POLARITY)
1528               | (ep->dma << DMA_ENDPOINT_SELECT));
1529
1530         ep->dev->dma_busy = 0;
1531
1532         net2272_ep_write(ep, EP_IRQENB,
1533                   (1 << DATA_PACKET_RECEIVED_INTERRUPT_ENABLE)
1534                 | (1 << DATA_PACKET_TRANSMITTED_INTERRUPT_ENABLE)
1535                 | net2272_ep_read(ep, EP_IRQENB));
1536
1537         /* device-to-host transfer completed */
1538         if (ep->is_in) {
1539                 /* validate a short packet or zlp if necessary */
1540                 if ((req->req.length % ep->ep.maxpacket != 0) ||
1541                                 req->req.zero)
1542                         set_fifo_bytecount(ep, 0);
1543
1544                 net2272_done(ep, req, 0);
1545                 if (!list_empty(&ep->queue)) {
1546                         req = list_entry(ep->queue.next,
1547                                         struct net2272_request, queue);
1548                         status = net2272_kick_dma(ep, req);
1549                         if (status < 0)
1550                                 net2272_pio_advance(ep);
1551                 }
1552
1553         /* host-to-device transfer completed */
1554         } else {
1555                 /* terminated with a short packet? */
1556                 if (net2272_read(ep->dev, IRQSTAT0) &
1557                                 (1 << DMA_DONE_INTERRUPT)) {
1558                         /* abort system dma */
1559                         net2272_cancel_dma(ep->dev);
1560                 }
1561
1562                 /* EP_TRANSFER will contain the number of bytes
1563                  * actually received.
1564                  * NOTE: There is no overflow detection on EP_TRANSFER:
1565                  * We can't deal with transfers larger than 2^24 bytes!
1566                  */
1567                 len = (net2272_ep_read(ep, EP_TRANSFER2) << 16)
1568                         | (net2272_ep_read(ep, EP_TRANSFER1) << 8)
1569                         | (net2272_ep_read(ep, EP_TRANSFER0));
1570
1571                 if (ep->not_empty)
1572                         len += 4;
1573
1574                 req->req.actual += len;
1575
1576                 /* get any remaining data */
1577                 net2272_pio_advance(ep);
1578         }
1579 }
1580
1581 /*---------------------------------------------------------------------------*/
1582
1583 static void
1584 net2272_handle_ep(struct net2272_ep *ep)
1585 {
1586         struct net2272_request *req;
1587         u8 stat0, stat1;
1588
1589         if (!list_empty(&ep->queue))
1590                 req = list_entry(ep->queue.next,
1591                         struct net2272_request, queue);
1592         else
1593                 req = NULL;
1594
1595         /* ack all, and handle what we care about */
1596         stat0 = net2272_ep_read(ep, EP_STAT0);
1597         stat1 = net2272_ep_read(ep, EP_STAT1);
1598         ep->irqs++;
1599
1600         dev_vdbg(ep->dev->dev, "%s ack ep_stat0 %02x, ep_stat1 %02x, req %p\n",
1601                 ep->ep.name, stat0, stat1, req ? &req->req : NULL);
1602
1603         net2272_ep_write(ep, EP_STAT0, stat0 &
1604                 ~((1 << NAK_OUT_PACKETS)
1605                 | (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT)));
1606         net2272_ep_write(ep, EP_STAT1, stat1);
1607
1608         /* data packet(s) received (in the fifo, OUT)
1609          * direction must be validated, otherwise control read status phase
1610          * could be interpreted as a valid packet
1611          */
1612         if (!ep->is_in && (stat0 & (1 << DATA_PACKET_RECEIVED_INTERRUPT)))
1613                 net2272_pio_advance(ep);
1614         /* data packet(s) transmitted (IN) */
1615         else if (stat0 & (1 << DATA_PACKET_TRANSMITTED_INTERRUPT))
1616                 net2272_pio_advance(ep);
1617 }
1618
1619 static struct net2272_ep *
1620 net2272_get_ep_by_addr(struct net2272 *dev, u16 wIndex)
1621 {
1622         struct net2272_ep *ep;
1623
1624         if ((wIndex & USB_ENDPOINT_NUMBER_MASK) == 0)
1625                 return &dev->ep[0];
1626
1627         list_for_each_entry(ep, &dev->gadget.ep_list, ep.ep_list) {
1628                 u8 bEndpointAddress;
1629
1630                 if (!ep->desc)
1631                         continue;
1632                 bEndpointAddress = ep->desc->bEndpointAddress;
1633                 if ((wIndex ^ bEndpointAddress) & USB_DIR_IN)
1634                         continue;
1635                 if ((wIndex & 0x0f) == (bEndpointAddress & 0x0f))
1636                         return ep;
1637         }
1638         return NULL;
1639 }
1640
1641 /*
1642  * USB Test Packet:
1643  * JKJKJKJK * 9
1644  * JJKKJJKK * 8
1645  * JJJJKKKK * 8
1646  * JJJJJJJKKKKKKK * 8
1647  * JJJJJJJK * 8
1648  * {JKKKKKKK * 10}, JK
1649  */
1650 static const u8 net2272_test_packet[] = {
1651         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1652         0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
1653         0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
1654         0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1655         0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD,
1656         0xFC, 0x7E, 0xBF, 0xDF, 0xEF, 0xF7, 0xFD, 0x7E
1657 };
1658
1659 static void
1660 net2272_set_test_mode(struct net2272 *dev, int mode)
1661 {
1662         int i;
1663
1664         /* Disable all net2272 interrupts:
1665          * Nothing but a power cycle should stop the test.
1666          */
1667         net2272_write(dev, IRQENB0, 0x00);
1668         net2272_write(dev, IRQENB1, 0x00);
1669
1670         /* Force tranceiver to high-speed */
1671         net2272_write(dev, XCVRDIAG, 1 << FORCE_HIGH_SPEED);
1672
1673         net2272_write(dev, PAGESEL, 0);
1674         net2272_write(dev, EP_STAT0, 1 << DATA_PACKET_TRANSMITTED_INTERRUPT);
1675         net2272_write(dev, EP_RSPCLR,
1676                           (1 << CONTROL_STATUS_PHASE_HANDSHAKE)
1677                         | (1 << HIDE_STATUS_PHASE));
1678         net2272_write(dev, EP_CFG, 1 << ENDPOINT_DIRECTION);
1679         net2272_write(dev, EP_STAT1, 1 << BUFFER_FLUSH);
1680
1681         /* wait for status phase to complete */
1682         while (!(net2272_read(dev, EP_STAT0) &
1683                                 (1 << DATA_PACKET_TRANSMITTED_INTERRUPT)))
1684                 ;
1685
1686         /* Enable test mode */
1687         net2272_write(dev, USBTEST, mode);
1688
1689         /* load test packet */
1690         if (mode == USB_TEST_PACKET) {
1691                 /* switch to 8 bit mode */
1692                 net2272_write(dev, LOCCTL, net2272_read(dev, LOCCTL) &
1693                                 ~(1 << DATA_WIDTH));
1694
1695                 for (i = 0; i < sizeof(net2272_test_packet); ++i)
1696                         net2272_write(dev, EP_DATA, net2272_test_packet[i]);
1697
1698                 /* Validate test packet */
1699                 net2272_write(dev, EP_TRANSFER0, 0);
1700         }
1701 }
1702
1703 static void
1704 net2272_handle_stat0_irqs(struct net2272 *dev, u8 stat)
1705 {
1706         struct net2272_ep *ep;
1707         u8 num, scratch;
1708
1709         /* starting a control request? */
1710         if (unlikely(stat & (1 << SETUP_PACKET_INTERRUPT))) {
1711                 union {
1712                         u8 raw[8];
1713                         struct usb_ctrlrequest  r;
1714                 } u;
1715                 int tmp = 0;
1716                 struct net2272_request *req;
1717
1718                 if (dev->gadget.speed == USB_SPEED_UNKNOWN) {
1719                         if (net2272_read(dev, USBCTL1) & (1 << USB_HIGH_SPEED))
1720                                 dev->gadget.speed = USB_SPEED_HIGH;
1721                         else
1722                                 dev->gadget.speed = USB_SPEED_FULL;
1723                         dev_dbg(dev->dev, "%s\n",
1724                                 usb_speed_string(dev->gadget.speed));
1725                 }
1726
1727                 ep = &dev->ep[0];
1728                 ep->irqs++;
1729
1730                 /* make sure any leftover interrupt state is cleared */
1731                 stat &= ~(1 << ENDPOINT_0_INTERRUPT);
1732                 while (!list_empty(&ep->queue)) {
1733                         req = list_entry(ep->queue.next,
1734                                 struct net2272_request, queue);
1735                         net2272_done(ep, req,
1736                                 (req->req.actual == req->req.length) ? 0 : -EPROTO);
1737                 }
1738                 ep->stopped = 0;
1739                 dev->protocol_stall = 0;
1740                 net2272_ep_write(ep, EP_STAT0,
1741                             (1 << DATA_IN_TOKEN_INTERRUPT)
1742                           | (1 << DATA_OUT_TOKEN_INTERRUPT)
1743                           | (1 << DATA_PACKET_TRANSMITTED_INTERRUPT)
1744                           | (1 << DATA_PACKET_RECEIVED_INTERRUPT)
1745                           | (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT));
1746                 net2272_ep_write(ep, EP_STAT1,
1747                             (1 << TIMEOUT)
1748                           | (1 << USB_OUT_ACK_SENT)
1749                           | (1 << USB_OUT_NAK_SENT)
1750                           | (1 << USB_IN_ACK_RCVD)
1751                           | (1 << USB_IN_NAK_SENT)
1752                           | (1 << USB_STALL_SENT)
1753                           | (1 << LOCAL_OUT_ZLP));
1754
1755                 /*
1756                  * Ensure Control Read pre-validation setting is beyond maximum size
1757                  *  - Control Writes can leave non-zero values in EP_TRANSFER. If
1758                  *    an EP0 transfer following the Control Write is a Control Read,
1759                  *    the NET2272 sees the non-zero EP_TRANSFER as an unexpected
1760                  *    pre-validation count.
1761                  *  - Setting EP_TRANSFER beyond the maximum EP0 transfer size ensures
1762                  *    the pre-validation count cannot cause an unexpected validatation
1763                  */
1764                 net2272_write(dev, PAGESEL, 0);
1765                 net2272_write(dev, EP_TRANSFER2, 0xff);
1766                 net2272_write(dev, EP_TRANSFER1, 0xff);
1767                 net2272_write(dev, EP_TRANSFER0, 0xff);
1768
1769                 u.raw[0] = net2272_read(dev, SETUP0);
1770                 u.raw[1] = net2272_read(dev, SETUP1);
1771                 u.raw[2] = net2272_read(dev, SETUP2);
1772                 u.raw[3] = net2272_read(dev, SETUP3);
1773                 u.raw[4] = net2272_read(dev, SETUP4);
1774                 u.raw[5] = net2272_read(dev, SETUP5);
1775                 u.raw[6] = net2272_read(dev, SETUP6);
1776                 u.raw[7] = net2272_read(dev, SETUP7);
1777                 /*
1778                  * If you have a big endian cpu make sure le16_to_cpus
1779                  * performs the proper byte swapping here...
1780                  */
1781                 le16_to_cpus(&u.r.wValue);
1782                 le16_to_cpus(&u.r.wIndex);
1783                 le16_to_cpus(&u.r.wLength);
1784
1785                 /* ack the irq */
1786                 net2272_write(dev, IRQSTAT0, 1 << SETUP_PACKET_INTERRUPT);
1787                 stat ^= (1 << SETUP_PACKET_INTERRUPT);
1788
1789                 /* watch control traffic at the token level, and force
1790                  * synchronization before letting the status phase happen.
1791                  */
1792                 ep->is_in = (u.r.bRequestType & USB_DIR_IN) != 0;
1793                 if (ep->is_in) {
1794                         scratch = (1 << DATA_PACKET_TRANSMITTED_INTERRUPT_ENABLE)
1795                                 | (1 << DATA_OUT_TOKEN_INTERRUPT_ENABLE)
1796                                 | (1 << DATA_IN_TOKEN_INTERRUPT_ENABLE);
1797                         stop_out_naking(ep);
1798                 } else
1799                         scratch = (1 << DATA_PACKET_RECEIVED_INTERRUPT_ENABLE)
1800                                 | (1 << DATA_OUT_TOKEN_INTERRUPT_ENABLE)
1801                                 | (1 << DATA_IN_TOKEN_INTERRUPT_ENABLE);
1802                 net2272_ep_write(ep, EP_IRQENB, scratch);
1803
1804                 if ((u.r.bRequestType & USB_TYPE_MASK) != USB_TYPE_STANDARD)
1805                         goto delegate;
1806                 switch (u.r.bRequest) {
1807                 case USB_REQ_GET_STATUS: {
1808                         struct net2272_ep *e;
1809                         u16 status = 0;
1810
1811                         switch (u.r.bRequestType & USB_RECIP_MASK) {
1812                         case USB_RECIP_ENDPOINT:
1813                                 e = net2272_get_ep_by_addr(dev, u.r.wIndex);
1814                                 if (!e || u.r.wLength > 2)
1815                                         goto do_stall;
1816                                 if (net2272_ep_read(e, EP_RSPSET) & (1 << ENDPOINT_HALT))
1817                                         status = cpu_to_le16(1);
1818                                 else
1819                                         status = cpu_to_le16(0);
1820
1821                                 /* don't bother with a request object! */
1822                                 net2272_ep_write(&dev->ep[0], EP_IRQENB, 0);
1823                                 writew(status, net2272_reg_addr(dev, EP_DATA));
1824                                 set_fifo_bytecount(&dev->ep[0], 0);
1825                                 allow_status(ep);
1826                                 dev_vdbg(dev->dev, "%s stat %02x\n",
1827                                         ep->ep.name, status);
1828                                 goto next_endpoints;
1829                         case USB_RECIP_DEVICE:
1830                                 if (u.r.wLength > 2)
1831                                         goto do_stall;
1832                                 if (dev->gadget.is_selfpowered)
1833                                         status = (1 << USB_DEVICE_SELF_POWERED);
1834
1835                                 /* don't bother with a request object! */
1836                                 net2272_ep_write(&dev->ep[0], EP_IRQENB, 0);
1837                                 writew(status, net2272_reg_addr(dev, EP_DATA));
1838                                 set_fifo_bytecount(&dev->ep[0], 0);
1839                                 allow_status(ep);
1840                                 dev_vdbg(dev->dev, "device stat %02x\n", status);
1841                                 goto next_endpoints;
1842                         case USB_RECIP_INTERFACE:
1843                                 if (u.r.wLength > 2)
1844                                         goto do_stall;
1845
1846                                 /* don't bother with a request object! */
1847                                 net2272_ep_write(&dev->ep[0], EP_IRQENB, 0);
1848                                 writew(status, net2272_reg_addr(dev, EP_DATA));
1849                                 set_fifo_bytecount(&dev->ep[0], 0);
1850                                 allow_status(ep);
1851                                 dev_vdbg(dev->dev, "interface status %02x\n", status);
1852                                 goto next_endpoints;
1853                         }
1854
1855                         break;
1856                 }
1857                 case USB_REQ_CLEAR_FEATURE: {
1858                         struct net2272_ep *e;
1859
1860                         if (u.r.bRequestType != USB_RECIP_ENDPOINT)
1861                                 goto delegate;
1862                         if (u.r.wValue != USB_ENDPOINT_HALT ||
1863                             u.r.wLength != 0)
1864                                 goto do_stall;
1865                         e = net2272_get_ep_by_addr(dev, u.r.wIndex);
1866                         if (!e)
1867                                 goto do_stall;
1868                         if (e->wedged) {
1869                                 dev_vdbg(dev->dev, "%s wedged, halt not cleared\n",
1870                                         ep->ep.name);
1871                         } else {
1872                                 dev_vdbg(dev->dev, "%s clear halt\n", ep->ep.name);
1873                                 clear_halt(e);
1874                         }
1875                         allow_status(ep);
1876                         goto next_endpoints;
1877                 }
1878                 case USB_REQ_SET_FEATURE: {
1879                         struct net2272_ep *e;
1880
1881                         if (u.r.bRequestType == USB_RECIP_DEVICE) {
1882                                 if (u.r.wIndex != NORMAL_OPERATION)
1883                                         net2272_set_test_mode(dev, (u.r.wIndex >> 8));
1884                                 allow_status(ep);
1885                                 dev_vdbg(dev->dev, "test mode: %d\n", u.r.wIndex);
1886                                 goto next_endpoints;
1887                         } else if (u.r.bRequestType != USB_RECIP_ENDPOINT)
1888                                 goto delegate;
1889                         if (u.r.wValue != USB_ENDPOINT_HALT ||
1890                             u.r.wLength != 0)
1891                                 goto do_stall;
1892                         e = net2272_get_ep_by_addr(dev, u.r.wIndex);
1893                         if (!e)
1894                                 goto do_stall;
1895                         set_halt(e);
1896                         allow_status(ep);
1897                         dev_vdbg(dev->dev, "%s set halt\n", ep->ep.name);
1898                         goto next_endpoints;
1899                 }
1900                 case USB_REQ_SET_ADDRESS: {
1901                         net2272_write(dev, OURADDR, u.r.wValue & 0xff);
1902                         allow_status(ep);
1903                         break;
1904                 }
1905                 default:
1906  delegate:
1907                         dev_vdbg(dev->dev, "setup %02x.%02x v%04x i%04x "
1908                                 "ep_cfg %08x\n",
1909                                 u.r.bRequestType, u.r.bRequest,
1910                                 u.r.wValue, u.r.wIndex,
1911                                 net2272_ep_read(ep, EP_CFG));
1912                         spin_unlock(&dev->lock);
1913                         tmp = dev->driver->setup(&dev->gadget, &u.r);
1914                         spin_lock(&dev->lock);
1915                 }
1916
1917                 /* stall ep0 on error */
1918                 if (tmp < 0) {
1919  do_stall:
1920                         dev_vdbg(dev->dev, "req %02x.%02x protocol STALL; stat %d\n",
1921                                 u.r.bRequestType, u.r.bRequest, tmp);
1922                         dev->protocol_stall = 1;
1923                 }
1924         /* endpoint dma irq? */
1925         } else if (stat & (1 << DMA_DONE_INTERRUPT)) {
1926                 net2272_cancel_dma(dev);
1927                 net2272_write(dev, IRQSTAT0, 1 << DMA_DONE_INTERRUPT);
1928                 stat &= ~(1 << DMA_DONE_INTERRUPT);
1929                 num = (net2272_read(dev, DMAREQ) & (1 << DMA_ENDPOINT_SELECT))
1930                         ? 2 : 1;
1931
1932                 ep = &dev->ep[num];
1933                 net2272_handle_dma(ep);
1934         }
1935
1936  next_endpoints:
1937         /* endpoint data irq? */
1938         scratch = stat & 0x0f;
1939         stat &= ~0x0f;
1940         for (num = 0; scratch; num++) {
1941                 u8 t;
1942
1943                 /* does this endpoint's FIFO and queue need tending? */
1944                 t = 1 << num;
1945                 if ((scratch & t) == 0)
1946                         continue;
1947                 scratch ^= t;
1948
1949                 ep = &dev->ep[num];
1950                 net2272_handle_ep(ep);
1951         }
1952
1953         /* some interrupts we can just ignore */
1954         stat &= ~(1 << SOF_INTERRUPT);
1955
1956         if (stat)
1957                 dev_dbg(dev->dev, "unhandled irqstat0 %02x\n", stat);
1958 }
1959
1960 static void
1961 net2272_handle_stat1_irqs(struct net2272 *dev, u8 stat)
1962 {
1963         u8 tmp, mask;
1964
1965         /* after disconnect there's nothing else to do! */
1966         tmp = (1 << VBUS_INTERRUPT) | (1 << ROOT_PORT_RESET_INTERRUPT);
1967         mask = (1 << USB_HIGH_SPEED) | (1 << USB_FULL_SPEED);
1968
1969         if (stat & tmp) {
1970                 bool    reset = false;
1971                 bool    disconnect = false;
1972
1973                 /*
1974                  * Ignore disconnects and resets if the speed hasn't been set.
1975                  * VBUS can bounce and there's always an initial reset.
1976                  */
1977                 net2272_write(dev, IRQSTAT1, tmp);
1978                 if (dev->gadget.speed != USB_SPEED_UNKNOWN) {
1979                         if ((stat & (1 << VBUS_INTERRUPT)) &&
1980                                         (net2272_read(dev, USBCTL1) &
1981                                                 (1 << VBUS_PIN)) == 0) {
1982                                 disconnect = true;
1983                                 dev_dbg(dev->dev, "disconnect %s\n",
1984                                         dev->driver->driver.name);
1985                         } else if ((stat & (1 << ROOT_PORT_RESET_INTERRUPT)) &&
1986                                         (net2272_read(dev, USBCTL1) & mask)
1987                                                 == 0) {
1988                                 reset = true;
1989                                 dev_dbg(dev->dev, "reset %s\n",
1990                                         dev->driver->driver.name);
1991                         }
1992
1993                         if (disconnect || reset) {
1994                                 stop_activity(dev, dev->driver);
1995                                 net2272_ep0_start(dev);
1996                                 spin_unlock(&dev->lock);
1997                                 if (reset)
1998                                         usb_gadget_udc_reset
1999                                                 (&dev->gadget, dev->driver);
2000                                 else
2001                                         (dev->driver->disconnect)
2002                                                 (&dev->gadget);
2003                                 spin_lock(&dev->lock);
2004                                 return;
2005                         }
2006                 }
2007                 stat &= ~tmp;
2008
2009                 if (!stat)
2010                         return;
2011         }
2012
2013         tmp = (1 << SUSPEND_REQUEST_CHANGE_INTERRUPT);
2014         if (stat & tmp) {
2015                 net2272_write(dev, IRQSTAT1, tmp);
2016                 if (stat & (1 << SUSPEND_REQUEST_INTERRUPT)) {
2017                         if (dev->driver->suspend)
2018                                 dev->driver->suspend(&dev->gadget);
2019                         if (!enable_suspend) {
2020                                 stat &= ~(1 << SUSPEND_REQUEST_INTERRUPT);
2021                                 dev_dbg(dev->dev, "Suspend disabled, ignoring\n");
2022                         }
2023                 } else {
2024                         if (dev->driver->resume)
2025                                 dev->driver->resume(&dev->gadget);
2026                 }
2027                 stat &= ~tmp;
2028         }
2029
2030         /* clear any other status/irqs */
2031         if (stat)
2032                 net2272_write(dev, IRQSTAT1, stat);
2033
2034         /* some status we can just ignore */
2035         stat &= ~((1 << CONTROL_STATUS_INTERRUPT)
2036                         | (1 << SUSPEND_REQUEST_INTERRUPT)
2037                         | (1 << RESUME_INTERRUPT));
2038         if (!stat)
2039                 return;
2040         else
2041                 dev_dbg(dev->dev, "unhandled irqstat1 %02x\n", stat);
2042 }
2043
2044 static irqreturn_t net2272_irq(int irq, void *_dev)
2045 {
2046         struct net2272 *dev = _dev;
2047 #if defined(PLX_PCI_RDK) || defined(PLX_PCI_RDK2)
2048         u32 intcsr;
2049 #endif
2050 #if defined(PLX_PCI_RDK)
2051         u8 dmareq;
2052 #endif
2053         spin_lock(&dev->lock);
2054 #if defined(PLX_PCI_RDK)
2055         intcsr = readl(dev->rdk1.plx9054_base_addr + INTCSR);
2056
2057         if ((intcsr & LOCAL_INTERRUPT_TEST) == LOCAL_INTERRUPT_TEST) {
2058                 writel(intcsr & ~(1 << PCI_INTERRUPT_ENABLE),
2059                                 dev->rdk1.plx9054_base_addr + INTCSR);
2060                 net2272_handle_stat1_irqs(dev, net2272_read(dev, IRQSTAT1));
2061                 net2272_handle_stat0_irqs(dev, net2272_read(dev, IRQSTAT0));
2062                 intcsr = readl(dev->rdk1.plx9054_base_addr + INTCSR);
2063                 writel(intcsr | (1 << PCI_INTERRUPT_ENABLE),
2064                         dev->rdk1.plx9054_base_addr + INTCSR);
2065         }
2066         if ((intcsr & DMA_CHANNEL_0_TEST) == DMA_CHANNEL_0_TEST) {
2067                 writeb((1 << CHANNEL_CLEAR_INTERRUPT | (0 << CHANNEL_ENABLE)),
2068                                 dev->rdk1.plx9054_base_addr + DMACSR0);
2069
2070                 dmareq = net2272_read(dev, DMAREQ);
2071                 if (dmareq & 0x01)
2072                         net2272_handle_dma(&dev->ep[2]);
2073                 else
2074                         net2272_handle_dma(&dev->ep[1]);
2075         }
2076 #endif
2077 #if defined(PLX_PCI_RDK2)
2078         /* see if PCI int for us by checking irqstat */
2079         intcsr = readl(dev->rdk2.fpga_base_addr + RDK2_IRQSTAT);
2080         if (!(intcsr & (1 << NET2272_PCI_IRQ))) {
2081                 spin_unlock(&dev->lock);
2082                 return IRQ_NONE;
2083         }
2084         /* check dma interrupts */
2085 #endif
2086         /* Platform/devcice interrupt handler */
2087 #if !defined(PLX_PCI_RDK)
2088         net2272_handle_stat1_irqs(dev, net2272_read(dev, IRQSTAT1));
2089         net2272_handle_stat0_irqs(dev, net2272_read(dev, IRQSTAT0));
2090 #endif
2091         spin_unlock(&dev->lock);
2092
2093         return IRQ_HANDLED;
2094 }
2095
2096 static int net2272_present(struct net2272 *dev)
2097 {
2098         /*
2099          * Quick test to see if CPU can communicate properly with the NET2272.
2100          * Verifies connection using writes and reads to write/read and
2101          * read-only registers.
2102          *
2103          * This routine is strongly recommended especially during early bring-up
2104          * of new hardware, however for designs that do not apply Power On System
2105          * Tests (POST) it may discarded (or perhaps minimized).
2106          */
2107         unsigned int ii;
2108         u8 val, refval;
2109
2110         /* Verify NET2272 write/read SCRATCH register can write and read */
2111         refval = net2272_read(dev, SCRATCH);
2112         for (ii = 0; ii < 0x100; ii += 7) {
2113                 net2272_write(dev, SCRATCH, ii);
2114                 val = net2272_read(dev, SCRATCH);
2115                 if (val != ii) {
2116                         dev_dbg(dev->dev,
2117                                 "%s: write/read SCRATCH register test failed: "
2118                                 "wrote:0x%2.2x, read:0x%2.2x\n",
2119                                 __func__, ii, val);
2120                         return -EINVAL;
2121                 }
2122         }
2123         /* To be nice, we write the original SCRATCH value back: */
2124         net2272_write(dev, SCRATCH, refval);
2125
2126         /* Verify NET2272 CHIPREV register is read-only: */
2127         refval = net2272_read(dev, CHIPREV_2272);
2128         for (ii = 0; ii < 0x100; ii += 7) {
2129                 net2272_write(dev, CHIPREV_2272, ii);
2130                 val = net2272_read(dev, CHIPREV_2272);
2131                 if (val != refval) {
2132                         dev_dbg(dev->dev,
2133                                 "%s: write/read CHIPREV register test failed: "
2134                                 "wrote 0x%2.2x, read:0x%2.2x expected:0x%2.2x\n",
2135                                 __func__, ii, val, refval);
2136                         return -EINVAL;
2137                 }
2138         }
2139
2140         /*
2141          * Verify NET2272's "NET2270 legacy revision" register
2142          *  - NET2272 has two revision registers. The NET2270 legacy revision
2143          *    register should read the same value, regardless of the NET2272
2144          *    silicon revision.  The legacy register applies to NET2270
2145          *    firmware being applied to the NET2272.
2146          */
2147         val = net2272_read(dev, CHIPREV_LEGACY);
2148         if (val != NET2270_LEGACY_REV) {
2149                 /*
2150                  * Unexpected legacy revision value
2151                  * - Perhaps the chip is a NET2270?
2152                  */
2153                 dev_dbg(dev->dev,
2154                         "%s: WARNING: UNEXPECTED NET2272 LEGACY REGISTER VALUE:\n"
2155                         " - CHIPREV_LEGACY: expected 0x%2.2x, got:0x%2.2x. (Not NET2272?)\n",
2156                         __func__, NET2270_LEGACY_REV, val);
2157                 return -EINVAL;
2158         }
2159
2160         /*
2161          * Verify NET2272 silicon revision
2162          *  - This revision register is appropriate for the silicon version
2163          *    of the NET2272
2164          */
2165         val = net2272_read(dev, CHIPREV_2272);
2166         switch (val) {
2167         case CHIPREV_NET2272_R1:
2168                 /*
2169                  * NET2272 Rev 1 has DMA related errata:
2170                  *  - Newer silicon (Rev 1A or better) required
2171                  */
2172                 dev_dbg(dev->dev,
2173                         "%s: Rev 1 detected: newer silicon recommended for DMA support\n",
2174                         __func__);
2175                 break;
2176         case CHIPREV_NET2272_R1A:
2177                 break;
2178         default:
2179                 /* NET2272 silicon version *may* not work with this firmware */
2180                 dev_dbg(dev->dev,
2181                         "%s: unexpected silicon revision register value: "
2182                         " CHIPREV_2272: 0x%2.2x\n",
2183                         __func__, val);
2184                 /*
2185                  * Return Success, even though the chip rev is not an expected value
2186                  *  - Older, pre-built firmware can attempt to operate on newer silicon
2187                  *  - Often, new silicon is perfectly compatible
2188                  */
2189         }
2190
2191         /* Success: NET2272 checks out OK */
2192         return 0;
2193 }
2194
2195 static void
2196 net2272_gadget_release(struct device *_dev)
2197 {
2198         struct net2272 *dev = container_of(_dev, struct net2272, gadget.dev);
2199
2200         kfree(dev);
2201 }
2202
2203 /*---------------------------------------------------------------------------*/
2204
2205 static void
2206 net2272_remove(struct net2272 *dev)
2207 {
2208         if (dev->added)
2209                 usb_del_gadget(&dev->gadget);
2210         free_irq(dev->irq, dev);
2211         iounmap(dev->base_addr);
2212         device_remove_file(dev->dev, &dev_attr_registers);
2213
2214         dev_info(dev->dev, "unbind\n");
2215 }
2216
2217 static struct net2272 *net2272_probe_init(struct device *dev, unsigned int irq)
2218 {
2219         struct net2272 *ret;
2220
2221         if (!irq) {
2222                 dev_dbg(dev, "No IRQ!\n");
2223                 return ERR_PTR(-ENODEV);
2224         }
2225
2226         /* alloc, and start init */
2227         ret = kzalloc(sizeof(*ret), GFP_KERNEL);
2228         if (!ret)
2229                 return ERR_PTR(-ENOMEM);
2230
2231         spin_lock_init(&ret->lock);
2232         ret->irq = irq;
2233         ret->dev = dev;
2234         ret->gadget.ops = &net2272_ops;
2235         ret->gadget.max_speed = USB_SPEED_HIGH;
2236
2237         /* the "gadget" abstracts/virtualizes the controller */
2238         ret->gadget.name = driver_name;
2239         usb_initialize_gadget(dev, &ret->gadget, net2272_gadget_release);
2240
2241         return ret;
2242 }
2243
2244 static int
2245 net2272_probe_fin(struct net2272 *dev, unsigned int irqflags)
2246 {
2247         int ret;
2248
2249         /* See if there... */
2250         if (net2272_present(dev)) {
2251                 dev_warn(dev->dev, "2272 not found!\n");
2252                 ret = -ENODEV;
2253                 goto err;
2254         }
2255
2256         net2272_usb_reset(dev);
2257         net2272_usb_reinit(dev);
2258
2259         ret = request_irq(dev->irq, net2272_irq, irqflags, driver_name, dev);
2260         if (ret) {
2261                 dev_err(dev->dev, "request interrupt %i failed\n", dev->irq);
2262                 goto err;
2263         }
2264
2265         dev->chiprev = net2272_read(dev, CHIPREV_2272);
2266
2267         /* done */
2268         dev_info(dev->dev, "%s\n", driver_desc);
2269         dev_info(dev->dev, "irq %i, mem %p, chip rev %04x, dma %s\n",
2270                 dev->irq, dev->base_addr, dev->chiprev,
2271                 dma_mode_string());
2272         dev_info(dev->dev, "version: %s\n", driver_vers);
2273
2274         ret = device_create_file(dev->dev, &dev_attr_registers);
2275         if (ret)
2276                 goto err_irq;
2277
2278         ret = usb_add_gadget(&dev->gadget);
2279         if (ret)
2280                 goto err_add_udc;
2281         dev->added = 1;
2282
2283         return 0;
2284
2285 err_add_udc:
2286         device_remove_file(dev->dev, &dev_attr_registers);
2287  err_irq:
2288         free_irq(dev->irq, dev);
2289  err:
2290         return ret;
2291 }
2292
2293 #ifdef CONFIG_USB_PCI
2294
2295 /*
2296  * wrap this driver around the specified device, but
2297  * don't respond over USB until a gadget driver binds to us
2298  */
2299
2300 static int
2301 net2272_rdk1_probe(struct pci_dev *pdev, struct net2272 *dev)
2302 {
2303         unsigned long resource, len, tmp;
2304         void __iomem *mem_mapped_addr[4];
2305         int ret, i;
2306
2307         /*
2308          * BAR 0 holds PLX 9054 config registers
2309          * BAR 1 is i/o memory; unused here
2310          * BAR 2 holds EPLD config registers
2311          * BAR 3 holds NET2272 registers
2312          */
2313
2314         /* Find and map all address spaces */
2315         for (i = 0; i < 4; ++i) {
2316                 if (i == 1)
2317                         continue;       /* BAR1 unused */
2318
2319                 resource = pci_resource_start(pdev, i);
2320                 len = pci_resource_len(pdev, i);
2321
2322                 if (!request_mem_region(resource, len, driver_name)) {
2323                         dev_dbg(dev->dev, "controller already in use\n");
2324                         ret = -EBUSY;
2325                         goto err;
2326                 }
2327
2328                 mem_mapped_addr[i] = ioremap(resource, len);
2329                 if (mem_mapped_addr[i] == NULL) {
2330                         release_mem_region(resource, len);
2331                         dev_dbg(dev->dev, "can't map memory\n");
2332                         ret = -EFAULT;
2333                         goto err;
2334                 }
2335         }
2336
2337         dev->rdk1.plx9054_base_addr = mem_mapped_addr[0];
2338         dev->rdk1.epld_base_addr = mem_mapped_addr[2];
2339         dev->base_addr = mem_mapped_addr[3];
2340
2341         /* Set PLX 9054 bus width (16 bits) */
2342         tmp = readl(dev->rdk1.plx9054_base_addr + LBRD1);
2343         writel((tmp & ~(3 << MEMORY_SPACE_LOCAL_BUS_WIDTH)) | W16_BIT,
2344                         dev->rdk1.plx9054_base_addr + LBRD1);
2345
2346         /* Enable PLX 9054 Interrupts */
2347         writel(readl(dev->rdk1.plx9054_base_addr + INTCSR) |
2348                         (1 << PCI_INTERRUPT_ENABLE) |
2349                         (1 << LOCAL_INTERRUPT_INPUT_ENABLE),
2350                         dev->rdk1.plx9054_base_addr + INTCSR);
2351
2352         writeb((1 << CHANNEL_CLEAR_INTERRUPT | (0 << CHANNEL_ENABLE)),
2353                         dev->rdk1.plx9054_base_addr + DMACSR0);
2354
2355         /* reset */
2356         writeb((1 << EPLD_DMA_ENABLE) |
2357                 (1 << DMA_CTL_DACK) |
2358                 (1 << DMA_TIMEOUT_ENABLE) |
2359                 (1 << USER) |
2360                 (0 << MPX_MODE) |
2361                 (1 << BUSWIDTH) |
2362                 (1 << NET2272_RESET),
2363                 dev->base_addr + EPLD_IO_CONTROL_REGISTER);
2364
2365         mb();
2366         writeb(readb(dev->base_addr + EPLD_IO_CONTROL_REGISTER) &
2367                 ~(1 << NET2272_RESET),
2368                 dev->base_addr + EPLD_IO_CONTROL_REGISTER);
2369         udelay(200);
2370
2371         return 0;
2372
2373  err:
2374         while (--i >= 0) {
2375                 if (i == 1)
2376                         continue;       /* BAR1 unused */
2377                 iounmap(mem_mapped_addr[i]);
2378                 release_mem_region(pci_resource_start(pdev, i),
2379                         pci_resource_len(pdev, i));
2380         }
2381
2382         return ret;
2383 }
2384
2385 static int
2386 net2272_rdk2_probe(struct pci_dev *pdev, struct net2272 *dev)
2387 {
2388         unsigned long resource, len;
2389         void __iomem *mem_mapped_addr[2];
2390         int ret, i;
2391
2392         /*
2393          * BAR 0 holds FGPA config registers
2394          * BAR 1 holds NET2272 registers
2395          */
2396
2397         /* Find and map all address spaces, bar2-3 unused in rdk 2 */
2398         for (i = 0; i < 2; ++i) {
2399                 resource = pci_resource_start(pdev, i);
2400                 len = pci_resource_len(pdev, i);
2401
2402                 if (!request_mem_region(resource, len, driver_name)) {
2403                         dev_dbg(dev->dev, "controller already in use\n");
2404                         ret = -EBUSY;
2405                         goto err;
2406                 }
2407
2408                 mem_mapped_addr[i] = ioremap(resource, len);
2409                 if (mem_mapped_addr[i] == NULL) {
2410                         release_mem_region(resource, len);
2411                         dev_dbg(dev->dev, "can't map memory\n");
2412                         ret = -EFAULT;
2413                         goto err;
2414                 }
2415         }
2416
2417         dev->rdk2.fpga_base_addr = mem_mapped_addr[0];
2418         dev->base_addr = mem_mapped_addr[1];
2419
2420         mb();
2421         /* Set 2272 bus width (16 bits) and reset */
2422         writel((1 << CHIP_RESET), dev->rdk2.fpga_base_addr + RDK2_LOCCTLRDK);
2423         udelay(200);
2424         writel((1 << BUS_WIDTH), dev->rdk2.fpga_base_addr + RDK2_LOCCTLRDK);
2425         /* Print fpga version number */
2426         dev_info(dev->dev, "RDK2 FPGA version %08x\n",
2427                 readl(dev->rdk2.fpga_base_addr + RDK2_FPGAREV));
2428         /* Enable FPGA Interrupts */
2429         writel((1 << NET2272_PCI_IRQ), dev->rdk2.fpga_base_addr + RDK2_IRQENB);
2430
2431         return 0;
2432
2433  err:
2434         while (--i >= 0) {
2435                 iounmap(mem_mapped_addr[i]);
2436                 release_mem_region(pci_resource_start(pdev, i),
2437                         pci_resource_len(pdev, i));
2438         }
2439
2440         return ret;
2441 }
2442
2443 static int
2444 net2272_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2445 {
2446         struct net2272 *dev;
2447         int ret;
2448
2449         dev = net2272_probe_init(&pdev->dev, pdev->irq);
2450         if (IS_ERR(dev))
2451                 return PTR_ERR(dev);
2452         dev->dev_id = pdev->device;
2453
2454         if (pci_enable_device(pdev) < 0) {
2455                 ret = -ENODEV;
2456                 goto err_put;
2457         }
2458
2459         pci_set_master(pdev);
2460
2461         switch (pdev->device) {
2462         case PCI_DEVICE_ID_RDK1: ret = net2272_rdk1_probe(pdev, dev); break;
2463         case PCI_DEVICE_ID_RDK2: ret = net2272_rdk2_probe(pdev, dev); break;
2464         default: BUG();
2465         }
2466         if (ret)
2467                 goto err_pci;
2468
2469         ret = net2272_probe_fin(dev, 0);
2470         if (ret)
2471                 goto err_pci;
2472
2473         pci_set_drvdata(pdev, dev);
2474
2475         return 0;
2476
2477  err_pci:
2478         pci_disable_device(pdev);
2479  err_put:
2480         usb_put_gadget(&dev->gadget);
2481
2482         return ret;
2483 }
2484
2485 static void
2486 net2272_rdk1_remove(struct pci_dev *pdev, struct net2272 *dev)
2487 {
2488         int i;
2489
2490         /* disable PLX 9054 interrupts */
2491         writel(readl(dev->rdk1.plx9054_base_addr + INTCSR) &
2492                 ~(1 << PCI_INTERRUPT_ENABLE),
2493                 dev->rdk1.plx9054_base_addr + INTCSR);
2494
2495         /* clean up resources allocated during probe() */
2496         iounmap(dev->rdk1.plx9054_base_addr);
2497         iounmap(dev->rdk1.epld_base_addr);
2498
2499         for (i = 0; i < 4; ++i) {
2500                 if (i == 1)
2501                         continue;       /* BAR1 unused */
2502                 release_mem_region(pci_resource_start(pdev, i),
2503                         pci_resource_len(pdev, i));
2504         }
2505 }
2506
2507 static void
2508 net2272_rdk2_remove(struct pci_dev *pdev, struct net2272 *dev)
2509 {
2510         int i;
2511
2512         /* disable fpga interrupts
2513         writel(readl(dev->rdk1.plx9054_base_addr + INTCSR) &
2514                         ~(1 << PCI_INTERRUPT_ENABLE),
2515                         dev->rdk1.plx9054_base_addr + INTCSR);
2516         */
2517
2518         /* clean up resources allocated during probe() */
2519         iounmap(dev->rdk2.fpga_base_addr);
2520
2521         for (i = 0; i < 2; ++i)
2522                 release_mem_region(pci_resource_start(pdev, i),
2523                         pci_resource_len(pdev, i));
2524 }
2525
2526 static void
2527 net2272_pci_remove(struct pci_dev *pdev)
2528 {
2529         struct net2272 *dev = pci_get_drvdata(pdev);
2530
2531         net2272_remove(dev);
2532
2533         switch (pdev->device) {
2534         case PCI_DEVICE_ID_RDK1: net2272_rdk1_remove(pdev, dev); break;
2535         case PCI_DEVICE_ID_RDK2: net2272_rdk2_remove(pdev, dev); break;
2536         default: BUG();
2537         }
2538
2539         pci_disable_device(pdev);
2540
2541         usb_put_gadget(&dev->gadget);
2542 }
2543
2544 /* Table of matching PCI IDs */
2545 static struct pci_device_id pci_ids[] = {
2546         {       /* RDK 1 card */
2547                 .class       = ((PCI_CLASS_BRIDGE_OTHER << 8) | 0xfe),
2548                 .class_mask  = 0,
2549                 .vendor      = PCI_VENDOR_ID_PLX,
2550                 .device      = PCI_DEVICE_ID_RDK1,
2551                 .subvendor   = PCI_ANY_ID,
2552                 .subdevice   = PCI_ANY_ID,
2553         },
2554         {       /* RDK 2 card */
2555                 .class       = ((PCI_CLASS_BRIDGE_OTHER << 8) | 0xfe),
2556                 .class_mask  = 0,
2557                 .vendor      = PCI_VENDOR_ID_PLX,
2558                 .device      = PCI_DEVICE_ID_RDK2,
2559                 .subvendor   = PCI_ANY_ID,
2560                 .subdevice   = PCI_ANY_ID,
2561         },
2562         { }
2563 };
2564 MODULE_DEVICE_TABLE(pci, pci_ids);
2565
2566 static struct pci_driver net2272_pci_driver = {
2567         .name     = driver_name,
2568         .id_table = pci_ids,
2569
2570         .probe    = net2272_pci_probe,
2571         .remove   = net2272_pci_remove,
2572 };
2573
2574 static int net2272_pci_register(void)
2575 {
2576         return pci_register_driver(&net2272_pci_driver);
2577 }
2578
2579 static void net2272_pci_unregister(void)
2580 {
2581         pci_unregister_driver(&net2272_pci_driver);
2582 }
2583
2584 #else
2585 static inline int net2272_pci_register(void) { return 0; }
2586 static inline void net2272_pci_unregister(void) { }
2587 #endif
2588
2589 /*---------------------------------------------------------------------------*/
2590
2591 static int
2592 net2272_plat_probe(struct platform_device *pdev)
2593 {
2594         struct net2272 *dev;
2595         int ret;
2596         unsigned int irqflags;
2597         resource_size_t base, len;
2598         struct resource *iomem, *iomem_bus, *irq_res;
2599
2600         irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
2601         iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2602         iomem_bus = platform_get_resource(pdev, IORESOURCE_BUS, 0);
2603         if (!irq_res || !iomem) {
2604                 dev_err(&pdev->dev, "must provide irq/base addr");
2605                 return -EINVAL;
2606         }
2607
2608         dev = net2272_probe_init(&pdev->dev, irq_res->start);
2609         if (IS_ERR(dev))
2610                 return PTR_ERR(dev);
2611
2612         irqflags = 0;
2613         if (irq_res->flags & IORESOURCE_IRQ_HIGHEDGE)
2614                 irqflags |= IRQF_TRIGGER_RISING;
2615         if (irq_res->flags & IORESOURCE_IRQ_LOWEDGE)
2616                 irqflags |= IRQF_TRIGGER_FALLING;
2617         if (irq_res->flags & IORESOURCE_IRQ_HIGHLEVEL)
2618                 irqflags |= IRQF_TRIGGER_HIGH;
2619         if (irq_res->flags & IORESOURCE_IRQ_LOWLEVEL)
2620                 irqflags |= IRQF_TRIGGER_LOW;
2621
2622         base = iomem->start;
2623         len = resource_size(iomem);
2624         if (iomem_bus)
2625                 dev->base_shift = iomem_bus->start;
2626
2627         if (!request_mem_region(base, len, driver_name)) {
2628                 dev_dbg(dev->dev, "get request memory region!\n");
2629                 ret = -EBUSY;
2630                 goto err;
2631         }
2632         dev->base_addr = ioremap(base, len);
2633         if (!dev->base_addr) {
2634                 dev_dbg(dev->dev, "can't map memory\n");
2635                 ret = -EFAULT;
2636                 goto err_req;
2637         }
2638
2639         ret = net2272_probe_fin(dev, IRQF_TRIGGER_LOW);
2640         if (ret)
2641                 goto err_io;
2642
2643         platform_set_drvdata(pdev, dev);
2644         dev_info(&pdev->dev, "running in 16-bit, %sbyte swap local bus mode\n",
2645                 (net2272_read(dev, LOCCTL) & (1 << BYTE_SWAP)) ? "" : "no ");
2646
2647         return 0;
2648
2649  err_io:
2650         iounmap(dev->base_addr);
2651  err_req:
2652         release_mem_region(base, len);
2653  err:
2654         usb_put_gadget(&dev->gadget);
2655
2656         return ret;
2657 }
2658
2659 static int
2660 net2272_plat_remove(struct platform_device *pdev)
2661 {
2662         struct net2272 *dev = platform_get_drvdata(pdev);
2663
2664         net2272_remove(dev);
2665
2666         release_mem_region(pdev->resource[0].start,
2667                 resource_size(&pdev->resource[0]));
2668
2669         usb_put_gadget(&dev->gadget);
2670
2671         return 0;
2672 }
2673
2674 static struct platform_driver net2272_plat_driver = {
2675         .probe   = net2272_plat_probe,
2676         .remove  = net2272_plat_remove,
2677         .driver  = {
2678                 .name  = driver_name,
2679         },
2680         /* FIXME .suspend, .resume */
2681 };
2682 MODULE_ALIAS("platform:net2272");
2683
2684 static int __init net2272_init(void)
2685 {
2686         int ret;
2687
2688         ret = net2272_pci_register();
2689         if (ret)
2690                 return ret;
2691         ret = platform_driver_register(&net2272_plat_driver);
2692         if (ret)
2693                 goto err_pci;
2694         return ret;
2695
2696 err_pci:
2697         net2272_pci_unregister();
2698         return ret;
2699 }
2700 module_init(net2272_init);
2701
2702 static void __exit net2272_cleanup(void)
2703 {
2704         net2272_pci_unregister();
2705         platform_driver_unregister(&net2272_plat_driver);
2706 }
2707 module_exit(net2272_cleanup);
2708
2709 MODULE_DESCRIPTION(DRIVER_DESC);
2710 MODULE_AUTHOR("PLX Technology, Inc.");
2711 MODULE_LICENSE("GPL");
This page took 0.195034 seconds and 4 git commands to generate.