1 // SPDX-License-Identifier: GPL-2.0+
3 * Driver for PLX NET2272 USB device controller
5 * Copyright (C) 2005-2006 PLX Technology, Inc.
6 * Copyright (C) 2006-2011 Analog Devices, Inc.
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>
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>
30 #include <asm/byteorder.h>
31 #include <asm/unaligned.h>
35 #define DRIVER_DESC "PLX NET2272 USB Peripheral Controller"
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;
41 static const char ep0name[] = "ep0";
42 static const char * const ep_name[] = {
44 "ep-a", "ep-b", "ep-c",
47 #ifdef CONFIG_USB_NET2272_DMA
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.
54 * If use_dma is disabled, pio will be used instead.
56 static bool use_dma = false;
57 module_param(use_dma, bool, 0644);
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.
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)
70 static ushort dma_ep = 1;
71 module_param(dma_ep, ushort, 0644);
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
79 static ushort dma_mode = 2;
80 module_param(dma_mode, ushort, 0644);
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
94 static ushort fifo_mode = 0;
95 module_param(fifo_mode, ushort, 0644);
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.
103 static ushort enable_suspend = 0;
104 module_param(enable_suspend, ushort, 0644);
106 static void assert_out_naking(struct net2272_ep *ep, const char *where)
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);
121 #define ASSERT_OUT_NAKING(ep) assert_out_naking(ep, __func__)
123 static void stop_out_naking(struct net2272_ep *ep)
125 u8 tmp = net2272_ep_read(ep, EP_STAT0);
127 if ((tmp & (1 << NAK_OUT_PACKETS)) != 0)
128 net2272_ep_write(ep, EP_RSPCLR, 1 << ALT_NAK_OUT_PACKETS);
131 #define PIPEDIR(bAddress) (usb_pipein(bAddress) ? "in" : "out")
133 static char *type_string(u8 bmAttributes)
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";
143 static char *buf_state_string(unsigned 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";
154 static char *dma_mode_string(void)
159 case 0: return "SLOW DREQ";
160 case 1: return "FAST DREQ";
161 case 2: return "BURST";
162 default: return "invalid";
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 *);
170 static const struct usb_ep_ops net2272_ep_ops;
172 /*---------------------------------------------------------------------------*/
175 net2272_enable(struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
178 struct net2272_ep *ep;
183 ep = container_of(_ep, struct net2272_ep, ep);
184 if (!_ep || !desc || ep->desc || _ep->name == ep0name
185 || desc->bDescriptorType != USB_DT_ENDPOINT)
188 if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)
191 max = usb_endpoint_maxp(desc);
193 spin_lock_irqsave(&dev->lock, flags);
194 _ep->maxpacket = max;
197 /* net2272_ep_reset() has already been called */
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);
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);
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);
222 /* for OUT transfers, block the rx fifo until a read is posted */
223 ep->is_in = usb_endpoint_dir_in(desc);
225 net2272_ep_write(ep, EP_RSPSET, 1 << ALT_NAK_OUT_PACKETS);
227 net2272_ep_write(ep, EP_CFG, tmp);
230 tmp = (1 << ep->num) | net2272_read(dev, IRQENB0);
231 net2272_write(dev, IRQENB0, tmp);
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);
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));
244 spin_unlock_irqrestore(&dev->lock, flags);
248 static void net2272_ep_reset(struct net2272_ep *ep)
253 INIT_LIST_HEAD(&ep->queue);
255 usb_ep_set_maxpacket_limit(&ep->ep, ~0);
256 ep->ep.ops = &net2272_ep_ops;
258 /* disable irqs, endpoint */
259 net2272_ep_write(ep, EP_IRQENB, 0);
261 /* init to our chosen defaults, notably so that we NAK OUT
262 * packets until the driver queues a read.
264 tmp = (1 << NAK_OUT_PACKETS_MODE) | (1 << ALT_NAK_OUT_PACKETS);
265 net2272_ep_write(ep, EP_RSPSET, tmp);
267 tmp = (1 << INTERRUPT_MODE) | (1 << HIDE_STATUS_PHASE);
269 tmp |= (1 << ENDPOINT_TOGGLE) | (1 << ENDPOINT_HALT);
271 net2272_ep_write(ep, EP_RSPCLR, tmp);
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));
281 net2272_ep_write(ep, EP_STAT1,
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));
291 /* fifo size is handled seperately */
294 static int net2272_disable(struct usb_ep *_ep)
296 struct net2272_ep *ep;
299 ep = container_of(_ep, struct net2272_ep, ep);
300 if (!_ep || !ep->desc || _ep->name == ep0name)
303 spin_lock_irqsave(&ep->dev->lock, flags);
304 net2272_dequeue_all(ep);
305 net2272_ep_reset(ep);
307 dev_vdbg(ep->dev->dev, "disabled %s\n", _ep->name);
309 spin_unlock_irqrestore(&ep->dev->lock, flags);
313 /*---------------------------------------------------------------------------*/
315 static struct usb_request *
316 net2272_alloc_request(struct usb_ep *_ep, gfp_t gfp_flags)
318 struct net2272_request *req;
323 req = kzalloc(sizeof(*req), gfp_flags);
327 INIT_LIST_HEAD(&req->queue);
333 net2272_free_request(struct usb_ep *_ep, struct usb_request *_req)
335 struct net2272_request *req;
340 req = container_of(_req, struct net2272_request, req);
341 WARN_ON(!list_empty(&req->queue));
346 net2272_done(struct net2272_ep *ep, struct net2272_request *req, int status)
349 unsigned stopped = ep->stopped;
352 if (ep->dev->protocol_stall) {
359 list_del_init(&req->queue);
361 if (req->req.status == -EINPROGRESS)
362 req->req.status = status;
364 status = req->req.status;
367 if (use_dma && ep->dma)
368 usb_gadget_unmap_request(&dev->gadget, &req->req,
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);
376 /* don't modify queue heads during completion callback */
378 spin_unlock(&dev->lock);
379 usb_gadget_giveback_request(&ep->ep, &req->req);
380 spin_lock(&dev->lock);
381 ep->stopped = stopped;
385 net2272_write_packet(struct net2272_ep *ep, u8 *buf,
386 struct net2272_request *req, unsigned max)
388 u16 __iomem *ep_data = net2272_reg_addr(ep->dev, EP_DATA);
390 unsigned length, count;
393 length = min(req->req.length - req->req.actual, max);
394 req->req.actual += length;
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));
403 while (likely(count >= 2)) {
404 /* no byte-swap required; chip endian set during init */
405 writew(*bufp++, ep_data);
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);
420 /* returns: 0: still running, 1: completed, negative: errno */
422 net2272_write_fifo(struct net2272_ep *ep, struct net2272_request *req)
428 dev_vdbg(ep->dev->dev, "write_fifo %s actual %d len %d\n",
429 ep->ep.name, req->req.actual, req->req.length);
432 * Keep loading the endpoint until the final packet is loaded,
433 * or the endpoint buffer is full.
437 * Clear interrupt status
438 * - Packet Transmitted interrupt will become set again when the
439 * host successfully takes another packet
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;
447 net2272_ep_read(ep, EP_STAT0);
449 max = (net2272_ep_read(ep, EP_AVAIL1) << 8) |
450 (net2272_ep_read(ep, EP_AVAIL0));
452 if (max < ep->ep.maxpacket)
453 max = (net2272_ep_read(ep, EP_AVAIL1) << 8)
454 | (net2272_ep_read(ep, EP_AVAIL0));
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);
464 if (!list_empty(&ep->queue)) {
465 req = list_entry(ep->queue.next,
466 struct net2272_request,
468 status = net2272_kick_dma(ep, req);
471 if ((net2272_ep_read(ep, EP_STAT0)
472 & (1 << BUFFER_EMPTY)))
477 net2272_ep_write(ep, EP_STAT0, (1 << DATA_PACKET_TRANSMITTED_INTERRUPT));
483 net2272_out_flush(struct net2272_ep *ep)
485 ASSERT_OUT_NAKING(ep);
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);
493 net2272_read_packet(struct net2272_ep *ep, u8 *buf,
494 struct net2272_request *req, unsigned avail)
496 u16 __iomem *ep_data = net2272_reg_addr(ep->dev, EP_DATA);
500 req->req.actual += avail;
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));
506 is_short = (avail < ep->ep.maxpacket);
508 if (unlikely(avail == 0)) {
509 /* remove any zlp from the buffer */
510 (void)readw(ep_data);
514 /* Ensure we get the final byte */
515 if (unlikely(avail % 2))
520 *bufp++ = readw(ep_data);
525 * To avoid false endpoint available race condition must read
526 * ep stat0 twice in the case of a short transfer
528 if (net2272_ep_read(ep, EP_STAT0) & (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT))
529 net2272_ep_read(ep, EP_STAT0);
535 net2272_read_fifo(struct net2272_ep *ep, struct net2272_request *req)
544 dev_vdbg(ep->dev->dev, "read_fifo %s actual %d len %d\n",
545 ep->ep.name, req->req.actual, req->req.length);
549 buf = req->req.buf + req->req.actual;
552 count = (net2272_ep_read(ep, EP_AVAIL1) << 8)
553 | net2272_ep_read(ep, EP_AVAIL0);
555 net2272_ep_write(ep, EP_STAT0,
556 (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT) |
557 (1 << DATA_PACKET_RECEIVED_INTERRUPT));
559 tmp = req->req.length - req->req.actual;
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);
568 count = (tmp > 0) ? tmp : 0;
571 is_short = net2272_read_packet(ep, buf, req, count);
574 if (unlikely(cleanup || is_short ||
575 req->req.actual == req->req.length)) {
578 net2272_out_flush(ep);
579 net2272_done(ep, req, -EOVERFLOW);
581 net2272_done(ep, req, 0);
583 /* re-initialize endpoint transfer registers
584 * otherwise they may result in erroneous pre-validation
585 * for subsequent control reads
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);
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);
598 !(net2272_ep_read(ep, EP_STAT0) & (1 << BUFFER_EMPTY)))
603 } while (!(net2272_ep_read(ep, EP_STAT0) & (1 << BUFFER_EMPTY)));
609 net2272_pio_advance(struct net2272_ep *ep)
611 struct net2272_request *req;
613 if (unlikely(list_empty(&ep->queue)))
616 req = list_entry(ep->queue.next, struct net2272_request, queue);
617 (ep->is_in ? net2272_write_fifo : net2272_read_fifo)(ep, req);
620 /* returns 0 on success, else negative errno */
622 net2272_request_dma(struct net2272 *dev, unsigned ep, u32 buf,
623 unsigned len, unsigned dir)
625 dev_vdbg(dev->dev, "request_dma ep %d buf %08x len %d dir %d\n",
628 /* The NET2272 only supports a single dma channel */
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.
635 if ((dir == 1) && (len > 0x1000000))
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) |
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);
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);
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));
680 (void) net2272_read(dev, SCRATCH);
686 net2272_start_dma(struct net2272 *dev)
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);
699 /* returns 0 on success, else negative errno */
701 net2272_kick_dma(struct net2272_ep *ep, struct net2272_request *req)
706 if (!use_dma || (ep->num < 1) || (ep->num > 2) || !ep->dma)
709 /* don't use dma for odd-length transfers
710 * otherwise, we'd need to deal with the last byte with pio
712 if (req->req.length & 1)
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);
718 net2272_ep_write(ep, EP_RSPSET, 1 << ALT_NAK_OUT_PACKETS);
720 /* The NET2272 can only use DMA on one endpoint at a time */
721 if (ep->dev->dma_busy)
724 /* Make sure we only DMA an even number of bytes (we'll use
725 * pio to complete the transfer)
727 size = req->req.length;
730 /* device-to-host transfer */
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 */
736 req->req.actual += size;
738 /* host-to-device transfer */
740 tmp = net2272_ep_read(ep, EP_STAT0);
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 */
747 if (!(tmp & (1 << BUFFER_EMPTY)))
753 /* allow the endpoint's buffer to fill */
754 net2272_ep_write(ep, EP_RSPCLR, 1 << ALT_NAK_OUT_PACKETS);
756 /* this transfer completed and data's already in the fifo
757 * return error so pio gets used.
759 if (tmp & (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT)) {
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));
775 /* Don't use per-packet interrupts: use dma interrupts only */
776 net2272_ep_write(ep, EP_IRQENB, 0);
778 net2272_start_dma(ep->dev);
783 static void net2272_cancel_dma(struct net2272 *dev)
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 */
794 /* dma abort generates an interrupt */
795 writeb(1 << CHANNEL_CLEAR_INTERRUPT,
796 dev->rdk1.plx9054_base_addr + DMACSR0);
804 /*---------------------------------------------------------------------------*/
807 net2272_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
809 struct net2272_request *req;
810 struct net2272_ep *ep;
816 req = container_of(_req, struct net2272_request, req);
817 if (!_req || !_req->complete || !_req->buf
818 || !list_empty(&req->queue))
820 ep = container_of(_ep, struct net2272_ep, ep);
821 if (!_ep || (!ep->desc && ep->num != 0))
824 if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)
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,
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");
839 spin_lock_irqsave(&dev->lock, flags);
841 _req->status = -EINPROGRESS;
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);
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");
861 * Request is going to terminate with a short packet ...
862 * hope the client is ready for it!
864 status = net2272_read_fifo(ep, req);
865 /* clear short packet naking */
866 net2272_ep_write(ep, EP_STAT0, (1 << NAK_OUT_PACKETS));
872 status = net2272_kick_dma(ep, req);
875 /* dma failed (most likely in use by another endpoint)
881 status = net2272_write_fifo(ep, req);
883 s = net2272_ep_read(ep, EP_STAT0);
884 if ((s & (1 << BUFFER_EMPTY)) == 0)
885 status = net2272_read_fifo(ep, req);
888 if (unlikely(status != 0)) {
896 list_add_tail(&req->queue, &ep->queue);
898 if (likely(!list_empty(&ep->queue)))
899 net2272_ep_write(ep, EP_RSPCLR, 1 << ALT_NAK_OUT_PACKETS);
901 spin_unlock_irqrestore(&dev->lock, flags);
906 /* dequeue ALL requests */
908 net2272_dequeue_all(struct net2272_ep *ep)
910 struct net2272_request *req;
912 /* called with spinlock held */
915 while (!list_empty(&ep->queue)) {
916 req = list_entry(ep->queue.next,
917 struct net2272_request,
919 net2272_done(ep, req, -ESHUTDOWN);
923 /* dequeue JUST ONE request */
925 net2272_dequeue(struct usb_ep *_ep, struct usb_request *_req)
927 struct net2272_ep *ep;
928 struct net2272_request *req;
932 ep = container_of(_ep, struct net2272_ep, ep);
933 if (!_ep || (!ep->desc && ep->num != 0) || !_req)
936 spin_lock_irqsave(&ep->dev->lock, flags);
937 stopped = ep->stopped;
940 /* make sure it's still queued on this endpoint */
941 list_for_each_entry(req, &ep->queue, queue) {
942 if (&req->req == _req)
945 if (&req->req != _req) {
946 ep->stopped = stopped;
947 spin_unlock_irqrestore(&ep->dev->lock, flags);
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);
957 ep->stopped = stopped;
959 spin_unlock_irqrestore(&ep->dev->lock, flags);
963 /*---------------------------------------------------------------------------*/
966 net2272_set_halt_and_wedge(struct usb_ep *_ep, int value, int wedged)
968 struct net2272_ep *ep;
972 ep = container_of(_ep, struct net2272_ep, ep);
973 if (!_ep || (!ep->desc && ep->num != 0))
975 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN)
977 if (ep->desc /* not ep0 */ && usb_endpoint_xfer_isoc(ep->desc))
980 spin_lock_irqsave(&ep->dev->lock, flags);
981 if (!list_empty(&ep->queue))
983 else if (ep->is_in && value && net2272_fifo_status(_ep) != 0)
986 dev_vdbg(ep->dev->dev, "%s %s %s\n", _ep->name,
987 value ? "set" : "clear",
988 wedged ? "wedge" : "halt");
992 ep->dev->protocol_stall = 1;
1002 spin_unlock_irqrestore(&ep->dev->lock, flags);
1008 net2272_set_halt(struct usb_ep *_ep, int value)
1010 return net2272_set_halt_and_wedge(_ep, value, 0);
1014 net2272_set_wedge(struct usb_ep *_ep)
1016 if (!_ep || _ep->name == ep0name)
1018 return net2272_set_halt_and_wedge(_ep, 1, 1);
1022 net2272_fifo_status(struct usb_ep *_ep)
1024 struct net2272_ep *ep;
1027 ep = container_of(_ep, struct net2272_ep, ep);
1028 if (!_ep || (!ep->desc && ep->num != 0))
1030 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN)
1033 avail = net2272_ep_read(ep, EP_AVAIL1) << 8;
1034 avail |= net2272_ep_read(ep, EP_AVAIL0);
1035 if (avail > ep->fifo_size)
1038 avail = ep->fifo_size - avail;
1043 net2272_fifo_flush(struct usb_ep *_ep)
1045 struct net2272_ep *ep;
1047 ep = container_of(_ep, struct net2272_ep, ep);
1048 if (!_ep || (!ep->desc && ep->num != 0))
1050 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN)
1053 net2272_ep_write(ep, EP_STAT1, 1 << BUFFER_FLUSH);
1056 static const struct usb_ep_ops net2272_ep_ops = {
1057 .enable = net2272_enable,
1058 .disable = net2272_disable,
1060 .alloc_request = net2272_alloc_request,
1061 .free_request = net2272_free_request,
1063 .queue = net2272_queue,
1064 .dequeue = net2272_dequeue,
1066 .set_halt = net2272_set_halt,
1067 .set_wedge = net2272_set_wedge,
1068 .fifo_status = net2272_fifo_status,
1069 .fifo_flush = net2272_fifo_flush,
1072 /*---------------------------------------------------------------------------*/
1075 net2272_get_frame(struct usb_gadget *_gadget)
1077 struct net2272 *dev;
1078 unsigned long flags;
1083 dev = container_of(_gadget, struct net2272, gadget);
1084 spin_lock_irqsave(&dev->lock, flags);
1086 ret = net2272_read(dev, FRAME1) << 8;
1087 ret |= net2272_read(dev, FRAME0);
1089 spin_unlock_irqrestore(&dev->lock, flags);
1094 net2272_wakeup(struct usb_gadget *_gadget)
1096 struct net2272 *dev;
1098 unsigned long flags;
1102 dev = container_of(_gadget, struct net2272, gadget);
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));
1109 spin_unlock_irqrestore(&dev->lock, flags);
1115 net2272_set_selfpowered(struct usb_gadget *_gadget, int value)
1120 _gadget->is_selfpowered = (value != 0);
1126 net2272_pullup(struct usb_gadget *_gadget, int is_on)
1128 struct net2272 *dev;
1130 unsigned long flags;
1134 dev = container_of(_gadget, struct net2272, gadget);
1136 spin_lock_irqsave(&dev->lock, flags);
1137 tmp = net2272_read(dev, USBCTL0);
1138 dev->softconnect = (is_on != 0);
1140 tmp |= (1 << USB_DETECT_ENABLE);
1142 tmp &= ~(1 << USB_DETECT_ENABLE);
1143 net2272_write(dev, USBCTL0, tmp);
1144 spin_unlock_irqrestore(&dev->lock, flags);
1149 static int net2272_start(struct usb_gadget *_gadget,
1150 struct usb_gadget_driver *driver);
1151 static int net2272_stop(struct usb_gadget *_gadget);
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,
1162 /*---------------------------------------------------------------------------*/
1165 registers_show(struct device *_dev, struct device_attribute *attr, char *buf)
1167 struct net2272 *dev;
1170 unsigned long flags;
1175 dev = dev_get_drvdata(_dev);
1178 spin_lock_irqsave(&dev->lock, flags);
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));
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 " : "");
1205 /* USB Control Registers */
1206 t1 = net2272_read(dev, USBCTL1);
1207 if (t1 & (1 << VBUS_PIN)) {
1208 if (t1 & (1 << USB_HIGH_SPEED))
1210 else if (dev->gadget.speed == USB_SPEED_UNKNOWN)
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);
1223 /* Endpoint Registers */
1224 for (i = 0; i < 4; ++i) {
1225 struct net2272_ep *ep;
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"
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));
1249 t = scnprintf(next, size,
1250 "\tstat0 %02x stat1 %02x avail %04x "
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),
1256 ep->is_in ? "in" : "out",
1257 type_string(t1 >> 5),
1258 ep->stopped ? "*" : "");
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)));
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));
1280 spin_unlock_irqrestore(&dev->lock, flags);
1282 return PAGE_SIZE - size;
1284 static DEVICE_ATTR_RO(registers);
1286 /*---------------------------------------------------------------------------*/
1289 net2272_set_fifo_mode(struct net2272 *dev, int mode)
1293 tmp = net2272_read(dev, LOCCTL) & 0x3f;
1295 net2272_write(dev, LOCCTL, tmp);
1297 INIT_LIST_HEAD(&dev->gadget.ep_list);
1299 /* always ep-a, ep-c ... maybe not ep-b */
1300 list_add_tail(&dev->ep[1].ep.ep_list, &dev->gadget.ep_list);
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;
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;
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;
1317 dev->ep[1].fifo_size = 1024;
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;
1326 /*---------------------------------------------------------------------------*/
1329 net2272_usb_reset(struct net2272 *dev)
1331 dev->gadget.speed = USB_SPEED_UNKNOWN;
1333 net2272_cancel_dma(dev);
1335 net2272_write(dev, IRQENB0, 0);
1336 net2272_write(dev, IRQENB1, 0);
1338 /* clear irq state */
1339 net2272_write(dev, IRQSTAT0, 0xff);
1340 net2272_write(dev, IRQSTAT1, ~(1 << SUSPEND_REQUEST_INTERRUPT));
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));
1351 net2272_cancel_dma(dev);
1352 net2272_set_fifo_mode(dev, (fifo_mode <= 3) ? fifo_mode : 0);
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
1358 net2272_write(dev, LOCCTL, net2272_read(dev, LOCCTL) | (1 << DATA_WIDTH));
1359 net2272_write(dev, LOCCTL1, (dma_mode << DMA_MODE));
1363 net2272_usb_reinit(struct net2272 *dev)
1367 /* basic endpoint init */
1368 for (i = 0; i < 4; ++i) {
1369 struct net2272_ep *ep = &dev->ep[i];
1371 ep->ep.name = ep_name[i];
1376 if (use_dma && ep->num == dma_ep)
1379 if (i > 0 && i <= 3)
1380 ep->fifo_size = 512;
1383 net2272_ep_reset(ep);
1386 ep->ep.caps.type_control = true;
1388 ep->ep.caps.type_iso = true;
1389 ep->ep.caps.type_bulk = true;
1390 ep->ep.caps.type_int = true;
1393 ep->ep.caps.dir_in = true;
1394 ep->ep.caps.dir_out = true;
1396 usb_ep_set_maxpacket_limit(&dev->ep[0].ep, 64);
1398 dev->gadget.ep0 = &dev->ep[0].ep;
1399 dev->ep[0].stopped = 0;
1400 INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
1404 net2272_ep0_start(struct net2272 *dev)
1406 struct net2272_ep *ep0 = &dev->ep[0];
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));
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.
1434 static int net2272_start(struct usb_gadget *_gadget,
1435 struct usb_gadget_driver *driver)
1437 struct net2272 *dev;
1440 if (!driver || !driver->setup ||
1441 driver->max_speed != USB_SPEED_HIGH)
1444 dev = container_of(_gadget, struct net2272, gadget);
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;
1453 /* ... then enable host detection and ep0; and we're ready
1454 * for set_configuration as well as eventual disconnect.
1456 net2272_ep0_start(dev);
1462 stop_activity(struct net2272 *dev, struct usb_gadget_driver *driver)
1466 /* don't disconnect if it's not connected */
1467 if (dev->gadget.speed == USB_SPEED_UNKNOWN)
1470 /* stop hardware; prevent new request submissions;
1471 * and kill any outstanding requests.
1473 net2272_usb_reset(dev);
1474 for (i = 0; i < 4; ++i)
1475 net2272_dequeue_all(&dev->ep[i]);
1477 /* report disconnect; the driver is already quiesced */
1479 spin_unlock(&dev->lock);
1480 driver->disconnect(&dev->gadget);
1481 spin_lock(&dev->lock);
1484 net2272_usb_reinit(dev);
1487 static int net2272_stop(struct usb_gadget *_gadget)
1489 struct net2272 *dev;
1490 unsigned long flags;
1492 dev = container_of(_gadget, struct net2272, gadget);
1494 spin_lock_irqsave(&dev->lock, flags);
1495 stop_activity(dev, NULL);
1496 spin_unlock_irqrestore(&dev->lock, flags);
1503 /*---------------------------------------------------------------------------*/
1504 /* handle ep-a/ep-b dma completions */
1506 net2272_handle_dma(struct net2272_ep *ep)
1508 struct net2272_request *req;
1512 if (!list_empty(&ep->queue))
1513 req = list_entry(ep->queue.next,
1514 struct net2272_request, queue);
1518 dev_vdbg(ep->dev->dev, "handle_dma %s req %p\n", ep->ep.name, req);
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));
1530 ep->dev->dma_busy = 0;
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));
1537 /* device-to-host transfer completed */
1539 /* validate a short packet or zlp if necessary */
1540 if ((req->req.length % ep->ep.maxpacket != 0) ||
1542 set_fifo_bytecount(ep, 0);
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);
1550 net2272_pio_advance(ep);
1553 /* host-to-device transfer completed */
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);
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!
1567 len = (net2272_ep_read(ep, EP_TRANSFER2) << 16)
1568 | (net2272_ep_read(ep, EP_TRANSFER1) << 8)
1569 | (net2272_ep_read(ep, EP_TRANSFER0));
1574 req->req.actual += len;
1576 /* get any remaining data */
1577 net2272_pio_advance(ep);
1581 /*---------------------------------------------------------------------------*/
1584 net2272_handle_ep(struct net2272_ep *ep)
1586 struct net2272_request *req;
1589 if (!list_empty(&ep->queue))
1590 req = list_entry(ep->queue.next,
1591 struct net2272_request, queue);
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);
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);
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);
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
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);
1619 static struct net2272_ep *
1620 net2272_get_ep_by_addr(struct net2272 *dev, u16 wIndex)
1622 struct net2272_ep *ep;
1624 if ((wIndex & USB_ENDPOINT_NUMBER_MASK) == 0)
1627 list_for_each_entry(ep, &dev->gadget.ep_list, ep.ep_list) {
1628 u8 bEndpointAddress;
1632 bEndpointAddress = ep->desc->bEndpointAddress;
1633 if ((wIndex ^ bEndpointAddress) & USB_DIR_IN)
1635 if ((wIndex & 0x0f) == (bEndpointAddress & 0x0f))
1646 * JJJJJJJKKKKKKK * 8
1648 * {JKKKKKKK * 10}, JK
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
1660 net2272_set_test_mode(struct net2272 *dev, int mode)
1664 /* Disable all net2272 interrupts:
1665 * Nothing but a power cycle should stop the test.
1667 net2272_write(dev, IRQENB0, 0x00);
1668 net2272_write(dev, IRQENB1, 0x00);
1670 /* Force tranceiver to high-speed */
1671 net2272_write(dev, XCVRDIAG, 1 << FORCE_HIGH_SPEED);
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);
1681 /* wait for status phase to complete */
1682 while (!(net2272_read(dev, EP_STAT0) &
1683 (1 << DATA_PACKET_TRANSMITTED_INTERRUPT)))
1686 /* Enable test mode */
1687 net2272_write(dev, USBTEST, mode);
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));
1695 for (i = 0; i < sizeof(net2272_test_packet); ++i)
1696 net2272_write(dev, EP_DATA, net2272_test_packet[i]);
1698 /* Validate test packet */
1699 net2272_write(dev, EP_TRANSFER0, 0);
1704 net2272_handle_stat0_irqs(struct net2272 *dev, u8 stat)
1706 struct net2272_ep *ep;
1709 /* starting a control request? */
1710 if (unlikely(stat & (1 << SETUP_PACKET_INTERRUPT))) {
1713 struct usb_ctrlrequest r;
1716 struct net2272_request *req;
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;
1722 dev->gadget.speed = USB_SPEED_FULL;
1723 dev_dbg(dev->dev, "%s\n",
1724 usb_speed_string(dev->gadget.speed));
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);
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,
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));
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
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);
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);
1778 * If you have a big endian cpu make sure le16_to_cpus
1779 * performs the proper byte swapping here...
1781 le16_to_cpus(&u.r.wValue);
1782 le16_to_cpus(&u.r.wIndex);
1783 le16_to_cpus(&u.r.wLength);
1786 net2272_write(dev, IRQSTAT0, 1 << SETUP_PACKET_INTERRUPT);
1787 stat ^= (1 << SETUP_PACKET_INTERRUPT);
1789 /* watch control traffic at the token level, and force
1790 * synchronization before letting the status phase happen.
1792 ep->is_in = (u.r.bRequestType & USB_DIR_IN) != 0;
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);
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);
1804 if ((u.r.bRequestType & USB_TYPE_MASK) != USB_TYPE_STANDARD)
1806 switch (u.r.bRequest) {
1807 case USB_REQ_GET_STATUS: {
1808 struct net2272_ep *e;
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)
1816 if (net2272_ep_read(e, EP_RSPSET) & (1 << ENDPOINT_HALT))
1817 status = cpu_to_le16(1);
1819 status = cpu_to_le16(0);
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);
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)
1832 if (dev->gadget.is_selfpowered)
1833 status = (1 << USB_DEVICE_SELF_POWERED);
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);
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)
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);
1851 dev_vdbg(dev->dev, "interface status %02x\n", status);
1852 goto next_endpoints;
1857 case USB_REQ_CLEAR_FEATURE: {
1858 struct net2272_ep *e;
1860 if (u.r.bRequestType != USB_RECIP_ENDPOINT)
1862 if (u.r.wValue != USB_ENDPOINT_HALT ||
1865 e = net2272_get_ep_by_addr(dev, u.r.wIndex);
1869 dev_vdbg(dev->dev, "%s wedged, halt not cleared\n",
1872 dev_vdbg(dev->dev, "%s clear halt\n", ep->ep.name);
1876 goto next_endpoints;
1878 case USB_REQ_SET_FEATURE: {
1879 struct net2272_ep *e;
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));
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)
1889 if (u.r.wValue != USB_ENDPOINT_HALT ||
1892 e = net2272_get_ep_by_addr(dev, u.r.wIndex);
1897 dev_vdbg(dev->dev, "%s set halt\n", ep->ep.name);
1898 goto next_endpoints;
1900 case USB_REQ_SET_ADDRESS: {
1901 net2272_write(dev, OURADDR, u.r.wValue & 0xff);
1907 dev_vdbg(dev->dev, "setup %02x.%02x v%04x i%04x "
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);
1917 /* stall ep0 on error */
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;
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))
1933 net2272_handle_dma(ep);
1937 /* endpoint data irq? */
1938 scratch = stat & 0x0f;
1940 for (num = 0; scratch; num++) {
1943 /* does this endpoint's FIFO and queue need tending? */
1945 if ((scratch & t) == 0)
1950 net2272_handle_ep(ep);
1953 /* some interrupts we can just ignore */
1954 stat &= ~(1 << SOF_INTERRUPT);
1957 dev_dbg(dev->dev, "unhandled irqstat0 %02x\n", stat);
1961 net2272_handle_stat1_irqs(struct net2272 *dev, u8 stat)
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);
1971 bool disconnect = false;
1974 * Ignore disconnects and resets if the speed hasn't been set.
1975 * VBUS can bounce and there's always an initial reset.
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) {
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)
1989 dev_dbg(dev->dev, "reset %s\n",
1990 dev->driver->driver.name);
1993 if (disconnect || reset) {
1994 stop_activity(dev, dev->driver);
1995 net2272_ep0_start(dev);
1996 spin_unlock(&dev->lock);
1998 usb_gadget_udc_reset
1999 (&dev->gadget, dev->driver);
2001 (dev->driver->disconnect)
2003 spin_lock(&dev->lock);
2013 tmp = (1 << SUSPEND_REQUEST_CHANGE_INTERRUPT);
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");
2024 if (dev->driver->resume)
2025 dev->driver->resume(&dev->gadget);
2030 /* clear any other status/irqs */
2032 net2272_write(dev, IRQSTAT1, stat);
2034 /* some status we can just ignore */
2035 stat &= ~((1 << CONTROL_STATUS_INTERRUPT)
2036 | (1 << SUSPEND_REQUEST_INTERRUPT)
2037 | (1 << RESUME_INTERRUPT));
2041 dev_dbg(dev->dev, "unhandled irqstat1 %02x\n", stat);
2044 static irqreturn_t net2272_irq(int irq, void *_dev)
2046 struct net2272 *dev = _dev;
2047 #if defined(PLX_PCI_RDK) || defined(PLX_PCI_RDK2)
2050 #if defined(PLX_PCI_RDK)
2053 spin_lock(&dev->lock);
2054 #if defined(PLX_PCI_RDK)
2055 intcsr = readl(dev->rdk1.plx9054_base_addr + INTCSR);
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);
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);
2070 dmareq = net2272_read(dev, DMAREQ);
2072 net2272_handle_dma(&dev->ep[2]);
2074 net2272_handle_dma(&dev->ep[1]);
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);
2084 /* check dma interrupts */
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));
2091 spin_unlock(&dev->lock);
2096 static int net2272_present(struct net2272 *dev)
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.
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).
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);
2117 "%s: write/read SCRATCH register test failed: "
2118 "wrote:0x%2.2x, read:0x%2.2x\n",
2123 /* To be nice, we write the original SCRATCH value back: */
2124 net2272_write(dev, SCRATCH, refval);
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) {
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);
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.
2147 val = net2272_read(dev, CHIPREV_LEGACY);
2148 if (val != NET2270_LEGACY_REV) {
2150 * Unexpected legacy revision value
2151 * - Perhaps the chip is a NET2270?
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);
2161 * Verify NET2272 silicon revision
2162 * - This revision register is appropriate for the silicon version
2165 val = net2272_read(dev, CHIPREV_2272);
2167 case CHIPREV_NET2272_R1:
2169 * NET2272 Rev 1 has DMA related errata:
2170 * - Newer silicon (Rev 1A or better) required
2173 "%s: Rev 1 detected: newer silicon recommended for DMA support\n",
2176 case CHIPREV_NET2272_R1A:
2179 /* NET2272 silicon version *may* not work with this firmware */
2181 "%s: unexpected silicon revision register value: "
2182 " CHIPREV_2272: 0x%2.2x\n",
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
2191 /* Success: NET2272 checks out OK */
2196 net2272_gadget_release(struct device *_dev)
2198 struct net2272 *dev = container_of(_dev, struct net2272, gadget.dev);
2203 /*---------------------------------------------------------------------------*/
2206 net2272_remove(struct net2272 *dev)
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);
2214 dev_info(dev->dev, "unbind\n");
2217 static struct net2272 *net2272_probe_init(struct device *dev, unsigned int irq)
2219 struct net2272 *ret;
2222 dev_dbg(dev, "No IRQ!\n");
2223 return ERR_PTR(-ENODEV);
2226 /* alloc, and start init */
2227 ret = kzalloc(sizeof(*ret), GFP_KERNEL);
2229 return ERR_PTR(-ENOMEM);
2231 spin_lock_init(&ret->lock);
2234 ret->gadget.ops = &net2272_ops;
2235 ret->gadget.max_speed = USB_SPEED_HIGH;
2237 /* the "gadget" abstracts/virtualizes the controller */
2238 ret->gadget.name = driver_name;
2239 usb_initialize_gadget(dev, &ret->gadget, net2272_gadget_release);
2245 net2272_probe_fin(struct net2272 *dev, unsigned int irqflags)
2249 /* See if there... */
2250 if (net2272_present(dev)) {
2251 dev_warn(dev->dev, "2272 not found!\n");
2256 net2272_usb_reset(dev);
2257 net2272_usb_reinit(dev);
2259 ret = request_irq(dev->irq, net2272_irq, irqflags, driver_name, dev);
2261 dev_err(dev->dev, "request interrupt %i failed\n", dev->irq);
2265 dev->chiprev = net2272_read(dev, CHIPREV_2272);
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,
2272 dev_info(dev->dev, "version: %s\n", driver_vers);
2274 ret = device_create_file(dev->dev, &dev_attr_registers);
2278 ret = usb_add_gadget(&dev->gadget);
2286 device_remove_file(dev->dev, &dev_attr_registers);
2288 free_irq(dev->irq, dev);
2293 #ifdef CONFIG_USB_PCI
2296 * wrap this driver around the specified device, but
2297 * don't respond over USB until a gadget driver binds to us
2301 net2272_rdk1_probe(struct pci_dev *pdev, struct net2272 *dev)
2303 unsigned long resource, len, tmp;
2304 void __iomem *mem_mapped_addr[4];
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
2314 /* Find and map all address spaces */
2315 for (i = 0; i < 4; ++i) {
2317 continue; /* BAR1 unused */
2319 resource = pci_resource_start(pdev, i);
2320 len = pci_resource_len(pdev, i);
2322 if (!request_mem_region(resource, len, driver_name)) {
2323 dev_dbg(dev->dev, "controller already in use\n");
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");
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];
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);
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);
2352 writeb((1 << CHANNEL_CLEAR_INTERRUPT | (0 << CHANNEL_ENABLE)),
2353 dev->rdk1.plx9054_base_addr + DMACSR0);
2356 writeb((1 << EPLD_DMA_ENABLE) |
2357 (1 << DMA_CTL_DACK) |
2358 (1 << DMA_TIMEOUT_ENABLE) |
2362 (1 << NET2272_RESET),
2363 dev->base_addr + EPLD_IO_CONTROL_REGISTER);
2366 writeb(readb(dev->base_addr + EPLD_IO_CONTROL_REGISTER) &
2367 ~(1 << NET2272_RESET),
2368 dev->base_addr + EPLD_IO_CONTROL_REGISTER);
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));
2386 net2272_rdk2_probe(struct pci_dev *pdev, struct net2272 *dev)
2388 unsigned long resource, len;
2389 void __iomem *mem_mapped_addr[2];
2393 * BAR 0 holds FGPA config registers
2394 * BAR 1 holds NET2272 registers
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);
2402 if (!request_mem_region(resource, len, driver_name)) {
2403 dev_dbg(dev->dev, "controller already in use\n");
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");
2417 dev->rdk2.fpga_base_addr = mem_mapped_addr[0];
2418 dev->base_addr = mem_mapped_addr[1];
2421 /* Set 2272 bus width (16 bits) and reset */
2422 writel((1 << CHIP_RESET), dev->rdk2.fpga_base_addr + RDK2_LOCCTLRDK);
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);
2435 iounmap(mem_mapped_addr[i]);
2436 release_mem_region(pci_resource_start(pdev, i),
2437 pci_resource_len(pdev, i));
2444 net2272_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2446 struct net2272 *dev;
2449 dev = net2272_probe_init(&pdev->dev, pdev->irq);
2451 return PTR_ERR(dev);
2452 dev->dev_id = pdev->device;
2454 if (pci_enable_device(pdev) < 0) {
2459 pci_set_master(pdev);
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;
2469 ret = net2272_probe_fin(dev, 0);
2473 pci_set_drvdata(pdev, dev);
2478 pci_disable_device(pdev);
2480 usb_put_gadget(&dev->gadget);
2486 net2272_rdk1_remove(struct pci_dev *pdev, struct net2272 *dev)
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);
2495 /* clean up resources allocated during probe() */
2496 iounmap(dev->rdk1.plx9054_base_addr);
2497 iounmap(dev->rdk1.epld_base_addr);
2499 for (i = 0; i < 4; ++i) {
2501 continue; /* BAR1 unused */
2502 release_mem_region(pci_resource_start(pdev, i),
2503 pci_resource_len(pdev, i));
2508 net2272_rdk2_remove(struct pci_dev *pdev, struct net2272 *dev)
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);
2518 /* clean up resources allocated during probe() */
2519 iounmap(dev->rdk2.fpga_base_addr);
2521 for (i = 0; i < 2; ++i)
2522 release_mem_region(pci_resource_start(pdev, i),
2523 pci_resource_len(pdev, i));
2527 net2272_pci_remove(struct pci_dev *pdev)
2529 struct net2272 *dev = pci_get_drvdata(pdev);
2531 net2272_remove(dev);
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;
2539 pci_disable_device(pdev);
2541 usb_put_gadget(&dev->gadget);
2544 /* Table of matching PCI IDs */
2545 static struct pci_device_id pci_ids[] = {
2547 .class = ((PCI_CLASS_BRIDGE_OTHER << 8) | 0xfe),
2549 .vendor = PCI_VENDOR_ID_PLX,
2550 .device = PCI_DEVICE_ID_RDK1,
2551 .subvendor = PCI_ANY_ID,
2552 .subdevice = PCI_ANY_ID,
2555 .class = ((PCI_CLASS_BRIDGE_OTHER << 8) | 0xfe),
2557 .vendor = PCI_VENDOR_ID_PLX,
2558 .device = PCI_DEVICE_ID_RDK2,
2559 .subvendor = PCI_ANY_ID,
2560 .subdevice = PCI_ANY_ID,
2564 MODULE_DEVICE_TABLE(pci, pci_ids);
2566 static struct pci_driver net2272_pci_driver = {
2567 .name = driver_name,
2568 .id_table = pci_ids,
2570 .probe = net2272_pci_probe,
2571 .remove = net2272_pci_remove,
2574 static int net2272_pci_register(void)
2576 return pci_register_driver(&net2272_pci_driver);
2579 static void net2272_pci_unregister(void)
2581 pci_unregister_driver(&net2272_pci_driver);
2585 static inline int net2272_pci_register(void) { return 0; }
2586 static inline void net2272_pci_unregister(void) { }
2589 /*---------------------------------------------------------------------------*/
2592 net2272_plat_probe(struct platform_device *pdev)
2594 struct net2272 *dev;
2596 unsigned int irqflags;
2597 resource_size_t base, len;
2598 struct resource *iomem, *iomem_bus, *irq_res;
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");
2608 dev = net2272_probe_init(&pdev->dev, irq_res->start);
2610 return PTR_ERR(dev);
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;
2622 base = iomem->start;
2623 len = resource_size(iomem);
2625 dev->base_shift = iomem_bus->start;
2627 if (!request_mem_region(base, len, driver_name)) {
2628 dev_dbg(dev->dev, "get request memory region!\n");
2632 dev->base_addr = ioremap(base, len);
2633 if (!dev->base_addr) {
2634 dev_dbg(dev->dev, "can't map memory\n");
2639 ret = net2272_probe_fin(dev, IRQF_TRIGGER_LOW);
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 ");
2650 iounmap(dev->base_addr);
2652 release_mem_region(base, len);
2654 usb_put_gadget(&dev->gadget);
2660 net2272_plat_remove(struct platform_device *pdev)
2662 struct net2272 *dev = platform_get_drvdata(pdev);
2664 net2272_remove(dev);
2666 release_mem_region(pdev->resource[0].start,
2667 resource_size(&pdev->resource[0]));
2669 usb_put_gadget(&dev->gadget);
2674 static struct platform_driver net2272_plat_driver = {
2675 .probe = net2272_plat_probe,
2676 .remove = net2272_plat_remove,
2678 .name = driver_name,
2680 /* FIXME .suspend, .resume */
2682 MODULE_ALIAS("platform:net2272");
2684 static int __init net2272_init(void)
2688 ret = net2272_pci_register();
2691 ret = platform_driver_register(&net2272_plat_driver);
2697 net2272_pci_unregister();
2700 module_init(net2272_init);
2702 static void __exit net2272_cleanup(void)
2704 net2272_pci_unregister();
2705 platform_driver_unregister(&net2272_plat_driver);
2707 module_exit(net2272_cleanup);
2709 MODULE_DESCRIPTION(DRIVER_DESC);
2710 MODULE_AUTHOR("PLX Technology, Inc.");
2711 MODULE_LICENSE("GPL");