2 * Driver for PLX NET2272 USB device controller
4 * Copyright (C) 2005-2006 PLX Technology, Inc.
5 * Copyright (C) 2006-2011 Analog Devices, Inc.
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include <linux/delay.h>
23 #include <linux/device.h>
24 #include <linux/errno.h>
25 #include <linux/gpio.h>
26 #include <linux/init.h>
27 #include <linux/interrupt.h>
29 #include <linux/ioport.h>
30 #include <linux/kernel.h>
31 #include <linux/list.h>
32 #include <linux/module.h>
33 #include <linux/moduleparam.h>
34 #include <linux/pci.h>
35 #include <linux/platform_device.h>
36 #include <linux/prefetch.h>
37 #include <linux/sched.h>
38 #include <linux/slab.h>
39 #include <linux/timer.h>
40 #include <linux/usb.h>
41 #include <linux/usb/ch9.h>
42 #include <linux/usb/gadget.h>
44 #include <asm/byteorder.h>
45 #include <asm/unaligned.h>
49 #define DRIVER_DESC "PLX NET2272 USB Peripheral Controller"
51 static const char driver_name
[] = "net2272";
52 static const char driver_vers
[] = "2006 October 17/mainline";
53 static const char driver_desc
[] = DRIVER_DESC
;
55 static const char ep0name
[] = "ep0";
56 static const char * const ep_name
[] = {
58 "ep-a", "ep-b", "ep-c",
61 #ifdef CONFIG_USB_NET2272_DMA
63 * use_dma: the NET2272 can use an external DMA controller.
64 * Note that since there is no generic DMA api, some functions,
65 * notably request_dma, start_dma, and cancel_dma will need to be
66 * modified for your platform's particular dma controller.
68 * If use_dma is disabled, pio will be used instead.
70 static bool use_dma
= 0;
71 module_param(use_dma
, bool, 0644);
74 * dma_ep: selects the endpoint for use with dma (1=ep-a, 2=ep-b)
75 * The NET2272 can only use dma for a single endpoint at a time.
76 * At some point this could be modified to allow either endpoint
77 * to take control of dma as it becomes available.
79 * Note that DMA should not be used on OUT endpoints unless it can
80 * be guaranteed that no short packets will arrive on an IN endpoint
81 * while the DMA operation is pending. Otherwise the OUT DMA will
82 * terminate prematurely (See NET2272 Errata 630-0213-0101)
84 static ushort dma_ep
= 1;
85 module_param(dma_ep
, ushort
, 0644);
88 * dma_mode: net2272 dma mode setting (see LOCCTL1 definiton):
89 * mode 0 == Slow DREQ mode
90 * mode 1 == Fast DREQ mode
91 * mode 2 == Burst mode
93 static ushort dma_mode
= 2;
94 module_param(dma_mode
, ushort
, 0644);
102 * fifo_mode: net2272 buffer configuration:
103 * mode 0 == ep-{a,b,c} 512db each
104 * mode 1 == ep-a 1k, ep-{b,c} 512db
105 * mode 2 == ep-a 1k, ep-b 1k, ep-c 512db
106 * mode 3 == ep-a 1k, ep-b disabled, ep-c 512db
108 static ushort fifo_mode
= 0;
109 module_param(fifo_mode
, ushort
, 0644);
112 * enable_suspend: When enabled, the driver will respond to
113 * USB suspend requests by powering down the NET2272. Otherwise,
114 * USB suspend requests will be ignored. This is acceptible for
115 * self-powered devices. For bus powered devices set this to 1.
117 static ushort enable_suspend
= 0;
118 module_param(enable_suspend
, ushort
, 0644);
120 static void assert_out_naking(struct net2272_ep
*ep
, const char *where
)
128 tmp
= net2272_ep_read(ep
, EP_STAT0
);
129 if ((tmp
& (1 << NAK_OUT_PACKETS
)) == 0) {
130 dev_dbg(ep
->dev
->dev
, "%s %s %02x !NAK\n",
131 ep
->ep
.name
, where
, tmp
);
132 net2272_ep_write(ep
, EP_RSPSET
, 1 << ALT_NAK_OUT_PACKETS
);
135 #define ASSERT_OUT_NAKING(ep) assert_out_naking(ep, __func__)
137 static void stop_out_naking(struct net2272_ep
*ep
)
139 u8 tmp
= net2272_ep_read(ep
, EP_STAT0
);
141 if ((tmp
& (1 << NAK_OUT_PACKETS
)) != 0)
142 net2272_ep_write(ep
, EP_RSPCLR
, 1 << ALT_NAK_OUT_PACKETS
);
145 #define PIPEDIR(bAddress) (usb_pipein(bAddress) ? "in" : "out")
147 static char *type_string(u8 bmAttributes
)
149 switch ((bmAttributes
) & USB_ENDPOINT_XFERTYPE_MASK
) {
150 case USB_ENDPOINT_XFER_BULK
: return "bulk";
151 case USB_ENDPOINT_XFER_ISOC
: return "iso";
152 case USB_ENDPOINT_XFER_INT
: return "intr";
153 default: return "control";
157 static char *buf_state_string(unsigned state
)
160 case BUFF_FREE
: return "free";
161 case BUFF_VALID
: return "valid";
162 case BUFF_LCL
: return "local";
163 case BUFF_USB
: return "usb";
164 default: return "unknown";
168 static char *dma_mode_string(void)
173 case 0: return "SLOW DREQ";
174 case 1: return "FAST DREQ";
175 case 2: return "BURST";
176 default: return "invalid";
180 static void net2272_dequeue_all(struct net2272_ep
*);
181 static int net2272_kick_dma(struct net2272_ep
*, struct net2272_request
*);
182 static int net2272_fifo_status(struct usb_ep
*);
184 static struct usb_ep_ops net2272_ep_ops
;
186 /*---------------------------------------------------------------------------*/
189 net2272_enable(struct usb_ep
*_ep
, const struct usb_endpoint_descriptor
*desc
)
192 struct net2272_ep
*ep
;
197 ep
= container_of(_ep
, struct net2272_ep
, ep
);
198 if (!_ep
|| !desc
|| ep
->desc
|| _ep
->name
== ep0name
199 || desc
->bDescriptorType
!= USB_DT_ENDPOINT
)
202 if (!dev
->driver
|| dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
205 max
= usb_endpoint_maxp(desc
) & 0x1fff;
207 spin_lock_irqsave(&dev
->lock
, flags
);
208 _ep
->maxpacket
= max
& 0x7fff;
211 /* net2272_ep_reset() has already been called */
215 /* set speed-dependent max packet */
216 net2272_ep_write(ep
, EP_MAXPKT0
, max
& 0xff);
217 net2272_ep_write(ep
, EP_MAXPKT1
, (max
& 0xff00) >> 8);
219 /* set type, direction, address; reset fifo counters */
220 net2272_ep_write(ep
, EP_STAT1
, 1 << BUFFER_FLUSH
);
221 tmp
= usb_endpoint_type(desc
);
222 if (usb_endpoint_xfer_bulk(desc
)) {
223 /* catch some particularly blatant driver bugs */
224 if ((dev
->gadget
.speed
== USB_SPEED_HIGH
&& max
!= 512) ||
225 (dev
->gadget
.speed
== USB_SPEED_FULL
&& max
> 64)) {
226 spin_unlock_irqrestore(&dev
->lock
, flags
);
230 ep
->is_iso
= usb_endpoint_xfer_isoc(desc
) ? 1 : 0;
231 tmp
<<= ENDPOINT_TYPE
;
232 tmp
|= ((desc
->bEndpointAddress
& 0x0f) << ENDPOINT_NUMBER
);
233 tmp
|= usb_endpoint_dir_in(desc
) << ENDPOINT_DIRECTION
;
234 tmp
|= (1 << ENDPOINT_ENABLE
);
236 /* for OUT transfers, block the rx fifo until a read is posted */
237 ep
->is_in
= usb_endpoint_dir_in(desc
);
239 net2272_ep_write(ep
, EP_RSPSET
, 1 << ALT_NAK_OUT_PACKETS
);
241 net2272_ep_write(ep
, EP_CFG
, tmp
);
244 tmp
= (1 << ep
->num
) | net2272_read(dev
, IRQENB0
);
245 net2272_write(dev
, IRQENB0
, tmp
);
247 tmp
= (1 << DATA_PACKET_RECEIVED_INTERRUPT_ENABLE
)
248 | (1 << DATA_PACKET_TRANSMITTED_INTERRUPT_ENABLE
)
249 | net2272_ep_read(ep
, EP_IRQENB
);
250 net2272_ep_write(ep
, EP_IRQENB
, tmp
);
252 tmp
= desc
->bEndpointAddress
;
253 dev_dbg(dev
->dev
, "enabled %s (ep%d%s-%s) max %04x cfg %02x\n",
254 _ep
->name
, tmp
& 0x0f, PIPEDIR(tmp
),
255 type_string(desc
->bmAttributes
), max
,
256 net2272_ep_read(ep
, EP_CFG
));
258 spin_unlock_irqrestore(&dev
->lock
, flags
);
262 static void net2272_ep_reset(struct net2272_ep
*ep
)
267 INIT_LIST_HEAD(&ep
->queue
);
269 usb_ep_set_maxpacket_limit(&ep
->ep
, ~0);
270 ep
->ep
.ops
= &net2272_ep_ops
;
272 /* disable irqs, endpoint */
273 net2272_ep_write(ep
, EP_IRQENB
, 0);
275 /* init to our chosen defaults, notably so that we NAK OUT
276 * packets until the driver queues a read.
278 tmp
= (1 << NAK_OUT_PACKETS_MODE
) | (1 << ALT_NAK_OUT_PACKETS
);
279 net2272_ep_write(ep
, EP_RSPSET
, tmp
);
281 tmp
= (1 << INTERRUPT_MODE
) | (1 << HIDE_STATUS_PHASE
);
283 tmp
|= (1 << ENDPOINT_TOGGLE
) | (1 << ENDPOINT_HALT
);
285 net2272_ep_write(ep
, EP_RSPCLR
, tmp
);
287 /* scrub most status bits, and flush any fifo state */
288 net2272_ep_write(ep
, EP_STAT0
,
289 (1 << DATA_IN_TOKEN_INTERRUPT
)
290 | (1 << DATA_OUT_TOKEN_INTERRUPT
)
291 | (1 << DATA_PACKET_TRANSMITTED_INTERRUPT
)
292 | (1 << DATA_PACKET_RECEIVED_INTERRUPT
)
293 | (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT
));
295 net2272_ep_write(ep
, EP_STAT1
,
297 | (1 << USB_OUT_ACK_SENT
)
298 | (1 << USB_OUT_NAK_SENT
)
299 | (1 << USB_IN_ACK_RCVD
)
300 | (1 << USB_IN_NAK_SENT
)
301 | (1 << USB_STALL_SENT
)
302 | (1 << LOCAL_OUT_ZLP
)
303 | (1 << BUFFER_FLUSH
));
305 /* fifo size is handled seperately */
308 static int net2272_disable(struct usb_ep
*_ep
)
310 struct net2272_ep
*ep
;
313 ep
= container_of(_ep
, struct net2272_ep
, ep
);
314 if (!_ep
|| !ep
->desc
|| _ep
->name
== ep0name
)
317 spin_lock_irqsave(&ep
->dev
->lock
, flags
);
318 net2272_dequeue_all(ep
);
319 net2272_ep_reset(ep
);
321 dev_vdbg(ep
->dev
->dev
, "disabled %s\n", _ep
->name
);
323 spin_unlock_irqrestore(&ep
->dev
->lock
, flags
);
327 /*---------------------------------------------------------------------------*/
329 static struct usb_request
*
330 net2272_alloc_request(struct usb_ep
*_ep
, gfp_t gfp_flags
)
332 struct net2272_ep
*ep
;
333 struct net2272_request
*req
;
337 ep
= container_of(_ep
, struct net2272_ep
, ep
);
339 req
= kzalloc(sizeof(*req
), gfp_flags
);
343 INIT_LIST_HEAD(&req
->queue
);
349 net2272_free_request(struct usb_ep
*_ep
, struct usb_request
*_req
)
351 struct net2272_ep
*ep
;
352 struct net2272_request
*req
;
354 ep
= container_of(_ep
, struct net2272_ep
, ep
);
358 req
= container_of(_req
, struct net2272_request
, req
);
359 WARN_ON(!list_empty(&req
->queue
));
364 net2272_done(struct net2272_ep
*ep
, struct net2272_request
*req
, int status
)
367 unsigned stopped
= ep
->stopped
;
370 if (ep
->dev
->protocol_stall
) {
377 list_del_init(&req
->queue
);
379 if (req
->req
.status
== -EINPROGRESS
)
380 req
->req
.status
= status
;
382 status
= req
->req
.status
;
385 if (use_dma
&& ep
->dma
)
386 usb_gadget_unmap_request(&dev
->gadget
, &req
->req
,
389 if (status
&& status
!= -ESHUTDOWN
)
390 dev_vdbg(dev
->dev
, "complete %s req %p stat %d len %u/%u buf %p\n",
391 ep
->ep
.name
, &req
->req
, status
,
392 req
->req
.actual
, req
->req
.length
, req
->req
.buf
);
394 /* don't modify queue heads during completion callback */
396 spin_unlock(&dev
->lock
);
397 req
->req
.complete(&ep
->ep
, &req
->req
);
398 spin_lock(&dev
->lock
);
399 ep
->stopped
= stopped
;
403 net2272_write_packet(struct net2272_ep
*ep
, u8
*buf
,
404 struct net2272_request
*req
, unsigned max
)
406 u16 __iomem
*ep_data
= net2272_reg_addr(ep
->dev
, EP_DATA
);
408 unsigned length
, count
;
411 length
= min(req
->req
.length
- req
->req
.actual
, max
);
412 req
->req
.actual
+= length
;
414 dev_vdbg(ep
->dev
->dev
, "write packet %s req %p max %u len %u avail %u\n",
415 ep
->ep
.name
, req
, max
, length
,
416 (net2272_ep_read(ep
, EP_AVAIL1
) << 8) | net2272_ep_read(ep
, EP_AVAIL0
));
421 while (likely(count
>= 2)) {
422 /* no byte-swap required; chip endian set during init */
423 writew(*bufp
++, ep_data
);
428 /* write final byte by placing the NET2272 into 8-bit mode */
429 if (unlikely(count
)) {
430 tmp
= net2272_read(ep
->dev
, LOCCTL
);
431 net2272_write(ep
->dev
, LOCCTL
, tmp
& ~(1 << DATA_WIDTH
));
432 writeb(*buf
, ep_data
);
433 net2272_write(ep
->dev
, LOCCTL
, tmp
);
438 /* returns: 0: still running, 1: completed, negative: errno */
440 net2272_write_fifo(struct net2272_ep
*ep
, struct net2272_request
*req
)
446 dev_vdbg(ep
->dev
->dev
, "write_fifo %s actual %d len %d\n",
447 ep
->ep
.name
, req
->req
.actual
, req
->req
.length
);
450 * Keep loading the endpoint until the final packet is loaded,
451 * or the endpoint buffer is full.
455 * Clear interrupt status
456 * - Packet Transmitted interrupt will become set again when the
457 * host successfully takes another packet
459 net2272_ep_write(ep
, EP_STAT0
, (1 << DATA_PACKET_TRANSMITTED_INTERRUPT
));
460 while (!(net2272_ep_read(ep
, EP_STAT0
) & (1 << BUFFER_FULL
))) {
461 buf
= req
->req
.buf
+ req
->req
.actual
;
465 net2272_ep_read(ep
, EP_STAT0
);
467 max
= (net2272_ep_read(ep
, EP_AVAIL1
) << 8) |
468 (net2272_ep_read(ep
, EP_AVAIL0
));
470 if (max
< ep
->ep
.maxpacket
)
471 max
= (net2272_ep_read(ep
, EP_AVAIL1
) << 8)
472 | (net2272_ep_read(ep
, EP_AVAIL0
));
474 count
= net2272_write_packet(ep
, buf
, req
, max
);
475 /* see if we are done */
476 if (req
->req
.length
== req
->req
.actual
) {
477 /* validate short or zlp packet */
478 if (count
< ep
->ep
.maxpacket
)
479 set_fifo_bytecount(ep
, 0);
480 net2272_done(ep
, req
, 0);
482 if (!list_empty(&ep
->queue
)) {
483 req
= list_entry(ep
->queue
.next
,
484 struct net2272_request
,
486 status
= net2272_kick_dma(ep
, req
);
489 if ((net2272_ep_read(ep
, EP_STAT0
)
490 & (1 << BUFFER_EMPTY
)))
495 net2272_ep_write(ep
, EP_STAT0
, (1 << DATA_PACKET_TRANSMITTED_INTERRUPT
));
501 net2272_out_flush(struct net2272_ep
*ep
)
503 ASSERT_OUT_NAKING(ep
);
505 net2272_ep_write(ep
, EP_STAT0
, (1 << DATA_OUT_TOKEN_INTERRUPT
)
506 | (1 << DATA_PACKET_RECEIVED_INTERRUPT
));
507 net2272_ep_write(ep
, EP_STAT1
, 1 << BUFFER_FLUSH
);
511 net2272_read_packet(struct net2272_ep
*ep
, u8
*buf
,
512 struct net2272_request
*req
, unsigned avail
)
514 u16 __iomem
*ep_data
= net2272_reg_addr(ep
->dev
, EP_DATA
);
518 req
->req
.actual
+= avail
;
520 dev_vdbg(ep
->dev
->dev
, "read packet %s req %p len %u avail %u\n",
521 ep
->ep
.name
, req
, avail
,
522 (net2272_ep_read(ep
, EP_AVAIL1
) << 8) | net2272_ep_read(ep
, EP_AVAIL0
));
524 is_short
= (avail
< ep
->ep
.maxpacket
);
526 if (unlikely(avail
== 0)) {
527 /* remove any zlp from the buffer */
528 (void)readw(ep_data
);
532 /* Ensure we get the final byte */
533 if (unlikely(avail
% 2))
538 *bufp
++ = readw(ep_data
);
543 * To avoid false endpoint available race condition must read
544 * ep stat0 twice in the case of a short transfer
546 if (net2272_ep_read(ep
, EP_STAT0
) & (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT
))
547 net2272_ep_read(ep
, EP_STAT0
);
553 net2272_read_fifo(struct net2272_ep
*ep
, struct net2272_request
*req
)
562 dev_vdbg(ep
->dev
->dev
, "read_fifo %s actual %d len %d\n",
563 ep
->ep
.name
, req
->req
.actual
, req
->req
.length
);
567 buf
= req
->req
.buf
+ req
->req
.actual
;
570 count
= (net2272_ep_read(ep
, EP_AVAIL1
) << 8)
571 | net2272_ep_read(ep
, EP_AVAIL0
);
573 net2272_ep_write(ep
, EP_STAT0
,
574 (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT
) |
575 (1 << DATA_PACKET_RECEIVED_INTERRUPT
));
577 tmp
= req
->req
.length
- req
->req
.actual
;
580 if ((tmp
% ep
->ep
.maxpacket
) != 0) {
581 dev_err(ep
->dev
->dev
,
582 "%s out fifo %d bytes, expected %d\n",
583 ep
->ep
.name
, count
, tmp
);
586 count
= (tmp
> 0) ? tmp
: 0;
589 is_short
= net2272_read_packet(ep
, buf
, req
, count
);
592 if (unlikely(cleanup
|| is_short
||
593 ((req
->req
.actual
== req
->req
.length
)
594 && !req
->req
.zero
))) {
597 net2272_out_flush(ep
);
598 net2272_done(ep
, req
, -EOVERFLOW
);
600 net2272_done(ep
, req
, 0);
602 /* re-initialize endpoint transfer registers
603 * otherwise they may result in erroneous pre-validation
604 * for subsequent control reads
606 if (unlikely(ep
->num
== 0)) {
607 net2272_ep_write(ep
, EP_TRANSFER2
, 0);
608 net2272_ep_write(ep
, EP_TRANSFER1
, 0);
609 net2272_ep_write(ep
, EP_TRANSFER0
, 0);
612 if (!list_empty(&ep
->queue
)) {
613 req
= list_entry(ep
->queue
.next
,
614 struct net2272_request
, queue
);
615 status
= net2272_kick_dma(ep
, req
);
617 !(net2272_ep_read(ep
, EP_STAT0
) & (1 << BUFFER_EMPTY
)))
622 } while (!(net2272_ep_read(ep
, EP_STAT0
) & (1 << BUFFER_EMPTY
)));
628 net2272_pio_advance(struct net2272_ep
*ep
)
630 struct net2272_request
*req
;
632 if (unlikely(list_empty(&ep
->queue
)))
635 req
= list_entry(ep
->queue
.next
, struct net2272_request
, queue
);
636 (ep
->is_in
? net2272_write_fifo
: net2272_read_fifo
)(ep
, req
);
639 /* returns 0 on success, else negative errno */
641 net2272_request_dma(struct net2272
*dev
, unsigned ep
, u32 buf
,
642 unsigned len
, unsigned dir
)
644 dev_vdbg(dev
->dev
, "request_dma ep %d buf %08x len %d dir %d\n",
647 /* The NET2272 only supports a single dma channel */
651 * EP_TRANSFER (used to determine the number of bytes received
652 * in an OUT transfer) is 24 bits wide; don't ask for more than that.
654 if ((dir
== 1) && (len
> 0x1000000))
659 /* initialize platform's dma */
661 /* NET2272 addr, buffer addr, length, etc. */
662 switch (dev
->dev_id
) {
663 case PCI_DEVICE_ID_RDK1
:
664 /* Setup PLX 9054 DMA mode */
665 writel((1 << LOCAL_BUS_WIDTH
) |
666 (1 << TA_READY_INPUT_ENABLE
) |
667 (0 << LOCAL_BURST_ENABLE
) |
668 (1 << DONE_INTERRUPT_ENABLE
) |
669 (1 << LOCAL_ADDRESSING_MODE
) |
671 (1 << DMA_EOT_ENABLE
) |
672 (1 << FAST_SLOW_TERMINATE_MODE_SELECT
) |
673 (1 << DMA_CHANNEL_INTERRUPT_SELECT
),
674 dev
->rdk1
.plx9054_base_addr
+ DMAMODE0
);
676 writel(0x100000, dev
->rdk1
.plx9054_base_addr
+ DMALADR0
);
677 writel(buf
, dev
->rdk1
.plx9054_base_addr
+ DMAPADR0
);
678 writel(len
, dev
->rdk1
.plx9054_base_addr
+ DMASIZ0
);
679 writel((dir
<< DIRECTION_OF_TRANSFER
) |
680 (1 << INTERRUPT_AFTER_TERMINAL_COUNT
),
681 dev
->rdk1
.plx9054_base_addr
+ DMADPR0
);
682 writel((1 << LOCAL_DMA_CHANNEL_0_INTERRUPT_ENABLE
) |
683 readl(dev
->rdk1
.plx9054_base_addr
+ INTCSR
),
684 dev
->rdk1
.plx9054_base_addr
+ INTCSR
);
690 net2272_write(dev
, DMAREQ
,
691 (0 << DMA_BUFFER_VALID
) |
692 (1 << DMA_REQUEST_ENABLE
) |
693 (1 << DMA_CONTROL_DACK
) |
694 (dev
->dma_eot_polarity
<< EOT_POLARITY
) |
695 (dev
->dma_dack_polarity
<< DACK_POLARITY
) |
696 (dev
->dma_dreq_polarity
<< DREQ_POLARITY
) |
697 ((ep
>> 1) << DMA_ENDPOINT_SELECT
));
699 (void) net2272_read(dev
, SCRATCH
);
705 net2272_start_dma(struct net2272
*dev
)
707 /* start platform's dma controller */
709 switch (dev
->dev_id
) {
710 case PCI_DEVICE_ID_RDK1
:
711 writeb((1 << CHANNEL_ENABLE
) | (1 << CHANNEL_START
),
712 dev
->rdk1
.plx9054_base_addr
+ DMACSR0
);
718 /* returns 0 on success, else negative errno */
720 net2272_kick_dma(struct net2272_ep
*ep
, struct net2272_request
*req
)
725 if (!use_dma
|| (ep
->num
< 1) || (ep
->num
> 2) || !ep
->dma
)
728 /* don't use dma for odd-length transfers
729 * otherwise, we'd need to deal with the last byte with pio
731 if (req
->req
.length
& 1)
734 dev_vdbg(ep
->dev
->dev
, "kick_dma %s req %p dma %08llx\n",
735 ep
->ep
.name
, req
, (unsigned long long) req
->req
.dma
);
737 net2272_ep_write(ep
, EP_RSPSET
, 1 << ALT_NAK_OUT_PACKETS
);
739 /* The NET2272 can only use DMA on one endpoint at a time */
740 if (ep
->dev
->dma_busy
)
743 /* Make sure we only DMA an even number of bytes (we'll use
744 * pio to complete the transfer)
746 size
= req
->req
.length
;
749 /* device-to-host transfer */
751 /* initialize platform's dma controller */
752 if (net2272_request_dma(ep
->dev
, ep
->num
, req
->req
.dma
, size
, 0))
753 /* unable to obtain DMA channel; return error and use pio mode */
755 req
->req
.actual
+= size
;
757 /* host-to-device transfer */
759 tmp
= net2272_ep_read(ep
, EP_STAT0
);
761 /* initialize platform's dma controller */
762 if (net2272_request_dma(ep
->dev
, ep
->num
, req
->req
.dma
, size
, 1))
763 /* unable to obtain DMA channel; return error and use pio mode */
766 if (!(tmp
& (1 << BUFFER_EMPTY
)))
772 /* allow the endpoint's buffer to fill */
773 net2272_ep_write(ep
, EP_RSPCLR
, 1 << ALT_NAK_OUT_PACKETS
);
775 /* this transfer completed and data's already in the fifo
776 * return error so pio gets used.
778 if (tmp
& (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT
)) {
781 net2272_write(ep
->dev
, DMAREQ
,
782 (0 << DMA_BUFFER_VALID
) |
783 (0 << DMA_REQUEST_ENABLE
) |
784 (1 << DMA_CONTROL_DACK
) |
785 (ep
->dev
->dma_eot_polarity
<< EOT_POLARITY
) |
786 (ep
->dev
->dma_dack_polarity
<< DACK_POLARITY
) |
787 (ep
->dev
->dma_dreq_polarity
<< DREQ_POLARITY
) |
788 ((ep
->num
>> 1) << DMA_ENDPOINT_SELECT
));
794 /* Don't use per-packet interrupts: use dma interrupts only */
795 net2272_ep_write(ep
, EP_IRQENB
, 0);
797 net2272_start_dma(ep
->dev
);
802 static void net2272_cancel_dma(struct net2272
*dev
)
805 switch (dev
->dev_id
) {
806 case PCI_DEVICE_ID_RDK1
:
807 writeb(0, dev
->rdk1
.plx9054_base_addr
+ DMACSR0
);
808 writeb(1 << CHANNEL_ABORT
, dev
->rdk1
.plx9054_base_addr
+ DMACSR0
);
809 while (!(readb(dev
->rdk1
.plx9054_base_addr
+ DMACSR0
) &
810 (1 << CHANNEL_DONE
)))
811 continue; /* wait for dma to stabalize */
813 /* dma abort generates an interrupt */
814 writeb(1 << CHANNEL_CLEAR_INTERRUPT
,
815 dev
->rdk1
.plx9054_base_addr
+ DMACSR0
);
823 /*---------------------------------------------------------------------------*/
826 net2272_queue(struct usb_ep
*_ep
, struct usb_request
*_req
, gfp_t gfp_flags
)
828 struct net2272_request
*req
;
829 struct net2272_ep
*ep
;
835 req
= container_of(_req
, struct net2272_request
, req
);
836 if (!_req
|| !_req
->complete
|| !_req
->buf
837 || !list_empty(&req
->queue
))
839 ep
= container_of(_ep
, struct net2272_ep
, ep
);
840 if (!_ep
|| (!ep
->desc
&& ep
->num
!= 0))
843 if (!dev
->driver
|| dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
846 /* set up dma mapping in case the caller didn't */
847 if (use_dma
&& ep
->dma
) {
848 status
= usb_gadget_map_request(&dev
->gadget
, _req
,
854 dev_vdbg(dev
->dev
, "%s queue req %p, len %d buf %p dma %08llx %s\n",
855 _ep
->name
, _req
, _req
->length
, _req
->buf
,
856 (unsigned long long) _req
->dma
, _req
->zero
? "zero" : "!zero");
858 spin_lock_irqsave(&dev
->lock
, flags
);
860 _req
->status
= -EINPROGRESS
;
863 /* kickstart this i/o queue? */
864 if (list_empty(&ep
->queue
) && !ep
->stopped
) {
865 /* maybe there's no control data, just status ack */
866 if (ep
->num
== 0 && _req
->length
== 0) {
867 net2272_done(ep
, req
, 0);
868 dev_vdbg(dev
->dev
, "%s status ack\n", ep
->ep
.name
);
872 /* Return zlp, don't let it block subsequent packets */
873 s
= net2272_ep_read(ep
, EP_STAT0
);
874 if (s
& (1 << BUFFER_EMPTY
)) {
875 /* Buffer is empty check for a blocking zlp, handle it */
876 if ((s
& (1 << NAK_OUT_PACKETS
)) &&
877 net2272_ep_read(ep
, EP_STAT1
) & (1 << LOCAL_OUT_ZLP
)) {
878 dev_dbg(dev
->dev
, "WARNING: returning ZLP short packet termination!\n");
880 * Request is going to terminate with a short packet ...
881 * hope the client is ready for it!
883 status
= net2272_read_fifo(ep
, req
);
884 /* clear short packet naking */
885 net2272_ep_write(ep
, EP_STAT0
, (1 << NAK_OUT_PACKETS
));
891 status
= net2272_kick_dma(ep
, req
);
894 /* dma failed (most likely in use by another endpoint)
900 status
= net2272_write_fifo(ep
, req
);
902 s
= net2272_ep_read(ep
, EP_STAT0
);
903 if ((s
& (1 << BUFFER_EMPTY
)) == 0)
904 status
= net2272_read_fifo(ep
, req
);
907 if (unlikely(status
!= 0)) {
915 list_add_tail(&req
->queue
, &ep
->queue
);
917 if (likely(!list_empty(&ep
->queue
)))
918 net2272_ep_write(ep
, EP_RSPCLR
, 1 << ALT_NAK_OUT_PACKETS
);
920 spin_unlock_irqrestore(&dev
->lock
, flags
);
925 /* dequeue ALL requests */
927 net2272_dequeue_all(struct net2272_ep
*ep
)
929 struct net2272_request
*req
;
931 /* called with spinlock held */
934 while (!list_empty(&ep
->queue
)) {
935 req
= list_entry(ep
->queue
.next
,
936 struct net2272_request
,
938 net2272_done(ep
, req
, -ESHUTDOWN
);
942 /* dequeue JUST ONE request */
944 net2272_dequeue(struct usb_ep
*_ep
, struct usb_request
*_req
)
946 struct net2272_ep
*ep
;
947 struct net2272_request
*req
;
951 ep
= container_of(_ep
, struct net2272_ep
, ep
);
952 if (!_ep
|| (!ep
->desc
&& ep
->num
!= 0) || !_req
)
955 spin_lock_irqsave(&ep
->dev
->lock
, flags
);
956 stopped
= ep
->stopped
;
959 /* make sure it's still queued on this endpoint */
960 list_for_each_entry(req
, &ep
->queue
, queue
) {
961 if (&req
->req
== _req
)
964 if (&req
->req
!= _req
) {
965 spin_unlock_irqrestore(&ep
->dev
->lock
, flags
);
969 /* queue head may be partially complete */
970 if (ep
->queue
.next
== &req
->queue
) {
971 dev_dbg(ep
->dev
->dev
, "unlink (%s) pio\n", _ep
->name
);
972 net2272_done(ep
, req
, -ECONNRESET
);
975 ep
->stopped
= stopped
;
977 spin_unlock_irqrestore(&ep
->dev
->lock
, flags
);
981 /*---------------------------------------------------------------------------*/
984 net2272_set_halt_and_wedge(struct usb_ep
*_ep
, int value
, int wedged
)
986 struct net2272_ep
*ep
;
990 ep
= container_of(_ep
, struct net2272_ep
, ep
);
991 if (!_ep
|| (!ep
->desc
&& ep
->num
!= 0))
993 if (!ep
->dev
->driver
|| ep
->dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
995 if (ep
->desc
/* not ep0 */ && usb_endpoint_xfer_isoc(ep
->desc
))
998 spin_lock_irqsave(&ep
->dev
->lock
, flags
);
999 if (!list_empty(&ep
->queue
))
1001 else if (ep
->is_in
&& value
&& net2272_fifo_status(_ep
) != 0)
1004 dev_vdbg(ep
->dev
->dev
, "%s %s %s\n", _ep
->name
,
1005 value
? "set" : "clear",
1006 wedged
? "wedge" : "halt");
1010 ep
->dev
->protocol_stall
= 1;
1020 spin_unlock_irqrestore(&ep
->dev
->lock
, flags
);
1026 net2272_set_halt(struct usb_ep
*_ep
, int value
)
1028 return net2272_set_halt_and_wedge(_ep
, value
, 0);
1032 net2272_set_wedge(struct usb_ep
*_ep
)
1034 if (!_ep
|| _ep
->name
== ep0name
)
1036 return net2272_set_halt_and_wedge(_ep
, 1, 1);
1040 net2272_fifo_status(struct usb_ep
*_ep
)
1042 struct net2272_ep
*ep
;
1045 ep
= container_of(_ep
, struct net2272_ep
, ep
);
1046 if (!_ep
|| (!ep
->desc
&& ep
->num
!= 0))
1048 if (!ep
->dev
->driver
|| ep
->dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
1051 avail
= net2272_ep_read(ep
, EP_AVAIL1
) << 8;
1052 avail
|= net2272_ep_read(ep
, EP_AVAIL0
);
1053 if (avail
> ep
->fifo_size
)
1056 avail
= ep
->fifo_size
- avail
;
1061 net2272_fifo_flush(struct usb_ep
*_ep
)
1063 struct net2272_ep
*ep
;
1065 ep
= container_of(_ep
, struct net2272_ep
, ep
);
1066 if (!_ep
|| (!ep
->desc
&& ep
->num
!= 0))
1068 if (!ep
->dev
->driver
|| ep
->dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
1071 net2272_ep_write(ep
, EP_STAT1
, 1 << BUFFER_FLUSH
);
1074 static struct usb_ep_ops net2272_ep_ops
= {
1075 .enable
= net2272_enable
,
1076 .disable
= net2272_disable
,
1078 .alloc_request
= net2272_alloc_request
,
1079 .free_request
= net2272_free_request
,
1081 .queue
= net2272_queue
,
1082 .dequeue
= net2272_dequeue
,
1084 .set_halt
= net2272_set_halt
,
1085 .set_wedge
= net2272_set_wedge
,
1086 .fifo_status
= net2272_fifo_status
,
1087 .fifo_flush
= net2272_fifo_flush
,
1090 /*---------------------------------------------------------------------------*/
1093 net2272_get_frame(struct usb_gadget
*_gadget
)
1095 struct net2272
*dev
;
1096 unsigned long flags
;
1101 dev
= container_of(_gadget
, struct net2272
, gadget
);
1102 spin_lock_irqsave(&dev
->lock
, flags
);
1104 ret
= net2272_read(dev
, FRAME1
) << 8;
1105 ret
|= net2272_read(dev
, FRAME0
);
1107 spin_unlock_irqrestore(&dev
->lock
, flags
);
1112 net2272_wakeup(struct usb_gadget
*_gadget
)
1114 struct net2272
*dev
;
1116 unsigned long flags
;
1120 dev
= container_of(_gadget
, struct net2272
, gadget
);
1122 spin_lock_irqsave(&dev
->lock
, flags
);
1123 tmp
= net2272_read(dev
, USBCTL0
);
1124 if (tmp
& (1 << IO_WAKEUP_ENABLE
))
1125 net2272_write(dev
, USBCTL1
, (1 << GENERATE_RESUME
));
1127 spin_unlock_irqrestore(&dev
->lock
, flags
);
1133 net2272_set_selfpowered(struct usb_gadget
*_gadget
, int value
)
1135 struct net2272
*dev
;
1139 dev
= container_of(_gadget
, struct net2272
, gadget
);
1141 dev
->is_selfpowered
= value
;
1147 net2272_pullup(struct usb_gadget
*_gadget
, int is_on
)
1149 struct net2272
*dev
;
1151 unsigned long flags
;
1155 dev
= container_of(_gadget
, struct net2272
, gadget
);
1157 spin_lock_irqsave(&dev
->lock
, flags
);
1158 tmp
= net2272_read(dev
, USBCTL0
);
1159 dev
->softconnect
= (is_on
!= 0);
1161 tmp
|= (1 << USB_DETECT_ENABLE
);
1163 tmp
&= ~(1 << USB_DETECT_ENABLE
);
1164 net2272_write(dev
, USBCTL0
, tmp
);
1165 spin_unlock_irqrestore(&dev
->lock
, flags
);
1170 static int net2272_start(struct usb_gadget
*_gadget
,
1171 struct usb_gadget_driver
*driver
);
1172 static int net2272_stop(struct usb_gadget
*_gadget
,
1173 struct usb_gadget_driver
*driver
);
1175 static const struct usb_gadget_ops net2272_ops
= {
1176 .get_frame
= net2272_get_frame
,
1177 .wakeup
= net2272_wakeup
,
1178 .set_selfpowered
= net2272_set_selfpowered
,
1179 .pullup
= net2272_pullup
,
1180 .udc_start
= net2272_start
,
1181 .udc_stop
= net2272_stop
,
1184 /*---------------------------------------------------------------------------*/
1187 registers_show(struct device
*_dev
, struct device_attribute
*attr
, char *buf
)
1189 struct net2272
*dev
;
1192 unsigned long flags
;
1197 dev
= dev_get_drvdata(_dev
);
1200 spin_lock_irqsave(&dev
->lock
, flags
);
1203 s
= dev
->driver
->driver
.name
;
1207 /* Main Control Registers */
1208 t
= scnprintf(next
, size
, "%s version %s,"
1209 "chiprev %02x, locctl %02x\n"
1210 "irqenb0 %02x irqenb1 %02x "
1211 "irqstat0 %02x irqstat1 %02x\n",
1212 driver_name
, driver_vers
, dev
->chiprev
,
1213 net2272_read(dev
, LOCCTL
),
1214 net2272_read(dev
, IRQENB0
),
1215 net2272_read(dev
, IRQENB1
),
1216 net2272_read(dev
, IRQSTAT0
),
1217 net2272_read(dev
, IRQSTAT1
));
1222 t1
= net2272_read(dev
, DMAREQ
);
1223 t
= scnprintf(next
, size
, "\ndmareq %02x: %s %s%s%s%s\n",
1224 t1
, ep_name
[(t1
& 0x01) + 1],
1225 t1
& (1 << DMA_CONTROL_DACK
) ? "dack " : "",
1226 t1
& (1 << DMA_REQUEST_ENABLE
) ? "reqenb " : "",
1227 t1
& (1 << DMA_REQUEST
) ? "req " : "",
1228 t1
& (1 << DMA_BUFFER_VALID
) ? "valid " : "");
1232 /* USB Control Registers */
1233 t1
= net2272_read(dev
, USBCTL1
);
1234 if (t1
& (1 << VBUS_PIN
)) {
1235 if (t1
& (1 << USB_HIGH_SPEED
))
1237 else if (dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
1243 t
= scnprintf(next
, size
,
1244 "usbctl0 %02x usbctl1 %02x addr 0x%02x (%s)\n",
1245 net2272_read(dev
, USBCTL0
), t1
,
1246 net2272_read(dev
, OURADDR
), s
);
1250 /* Endpoint Registers */
1251 for (i
= 0; i
< 4; ++i
) {
1252 struct net2272_ep
*ep
;
1258 t1
= net2272_ep_read(ep
, EP_CFG
);
1259 t2
= net2272_ep_read(ep
, EP_RSPSET
);
1260 t
= scnprintf(next
, size
,
1261 "\n%s\tcfg %02x rsp (%02x) %s%s%s%s%s%s%s%s"
1263 ep
->ep
.name
, t1
, t2
,
1264 (t2
& (1 << ALT_NAK_OUT_PACKETS
)) ? "NAK " : "",
1265 (t2
& (1 << HIDE_STATUS_PHASE
)) ? "hide " : "",
1266 (t2
& (1 << AUTOVALIDATE
)) ? "auto " : "",
1267 (t2
& (1 << INTERRUPT_MODE
)) ? "interrupt " : "",
1268 (t2
& (1 << CONTROL_STATUS_PHASE_HANDSHAKE
)) ? "status " : "",
1269 (t2
& (1 << NAK_OUT_PACKETS_MODE
)) ? "NAKmode " : "",
1270 (t2
& (1 << ENDPOINT_TOGGLE
)) ? "DATA1 " : "DATA0 ",
1271 (t2
& (1 << ENDPOINT_HALT
)) ? "HALT " : "",
1272 net2272_ep_read(ep
, EP_IRQENB
));
1276 t
= scnprintf(next
, size
,
1277 "\tstat0 %02x stat1 %02x avail %04x "
1279 net2272_ep_read(ep
, EP_STAT0
),
1280 net2272_ep_read(ep
, EP_STAT1
),
1281 (net2272_ep_read(ep
, EP_AVAIL1
) << 8) | net2272_ep_read(ep
, EP_AVAIL0
),
1283 ep
->is_in
? "in" : "out",
1284 type_string(t1
>> 5),
1285 ep
->stopped
? "*" : "");
1289 t
= scnprintf(next
, size
,
1290 "\tep_transfer %06x\n",
1291 ((net2272_ep_read(ep
, EP_TRANSFER2
) & 0xff) << 16) |
1292 ((net2272_ep_read(ep
, EP_TRANSFER1
) & 0xff) << 8) |
1293 ((net2272_ep_read(ep
, EP_TRANSFER0
) & 0xff)));
1297 t1
= net2272_ep_read(ep
, EP_BUFF_STATES
) & 0x03;
1298 t2
= (net2272_ep_read(ep
, EP_BUFF_STATES
) >> 2) & 0x03;
1299 t
= scnprintf(next
, size
,
1300 "\tbuf-a %s buf-b %s\n",
1301 buf_state_string(t1
),
1302 buf_state_string(t2
));
1307 spin_unlock_irqrestore(&dev
->lock
, flags
);
1309 return PAGE_SIZE
- size
;
1311 static DEVICE_ATTR_RO(registers
);
1313 /*---------------------------------------------------------------------------*/
1316 net2272_set_fifo_mode(struct net2272
*dev
, int mode
)
1320 tmp
= net2272_read(dev
, LOCCTL
) & 0x3f;
1322 net2272_write(dev
, LOCCTL
, tmp
);
1324 INIT_LIST_HEAD(&dev
->gadget
.ep_list
);
1326 /* always ep-a, ep-c ... maybe not ep-b */
1327 list_add_tail(&dev
->ep
[1].ep
.ep_list
, &dev
->gadget
.ep_list
);
1331 list_add_tail(&dev
->ep
[2].ep
.ep_list
, &dev
->gadget
.ep_list
);
1332 dev
->ep
[1].fifo_size
= dev
->ep
[2].fifo_size
= 512;
1335 list_add_tail(&dev
->ep
[2].ep
.ep_list
, &dev
->gadget
.ep_list
);
1336 dev
->ep
[1].fifo_size
= 1024;
1337 dev
->ep
[2].fifo_size
= 512;
1340 list_add_tail(&dev
->ep
[2].ep
.ep_list
, &dev
->gadget
.ep_list
);
1341 dev
->ep
[1].fifo_size
= dev
->ep
[2].fifo_size
= 1024;
1344 dev
->ep
[1].fifo_size
= 1024;
1348 /* ep-c is always 2 512 byte buffers */
1349 list_add_tail(&dev
->ep
[3].ep
.ep_list
, &dev
->gadget
.ep_list
);
1350 dev
->ep
[3].fifo_size
= 512;
1353 /*---------------------------------------------------------------------------*/
1356 net2272_usb_reset(struct net2272
*dev
)
1358 dev
->gadget
.speed
= USB_SPEED_UNKNOWN
;
1360 net2272_cancel_dma(dev
);
1362 net2272_write(dev
, IRQENB0
, 0);
1363 net2272_write(dev
, IRQENB1
, 0);
1365 /* clear irq state */
1366 net2272_write(dev
, IRQSTAT0
, 0xff);
1367 net2272_write(dev
, IRQSTAT1
, ~(1 << SUSPEND_REQUEST_INTERRUPT
));
1369 net2272_write(dev
, DMAREQ
,
1370 (0 << DMA_BUFFER_VALID
) |
1371 (0 << DMA_REQUEST_ENABLE
) |
1372 (1 << DMA_CONTROL_DACK
) |
1373 (dev
->dma_eot_polarity
<< EOT_POLARITY
) |
1374 (dev
->dma_dack_polarity
<< DACK_POLARITY
) |
1375 (dev
->dma_dreq_polarity
<< DREQ_POLARITY
) |
1376 ((dma_ep
>> 1) << DMA_ENDPOINT_SELECT
));
1378 net2272_cancel_dma(dev
);
1379 net2272_set_fifo_mode(dev
, (fifo_mode
<= 3) ? fifo_mode
: 0);
1381 /* Set the NET2272 ep fifo data width to 16-bit mode and for correct byte swapping
1382 * note that the higher level gadget drivers are expected to convert data to little endian.
1383 * Enable byte swap for your local bus/cpu if needed by setting BYTE_SWAP in LOCCTL here
1385 net2272_write(dev
, LOCCTL
, net2272_read(dev
, LOCCTL
) | (1 << DATA_WIDTH
));
1386 net2272_write(dev
, LOCCTL1
, (dma_mode
<< DMA_MODE
));
1390 net2272_usb_reinit(struct net2272
*dev
)
1394 /* basic endpoint init */
1395 for (i
= 0; i
< 4; ++i
) {
1396 struct net2272_ep
*ep
= &dev
->ep
[i
];
1398 ep
->ep
.name
= ep_name
[i
];
1403 if (use_dma
&& ep
->num
== dma_ep
)
1406 if (i
> 0 && i
<= 3)
1407 ep
->fifo_size
= 512;
1410 net2272_ep_reset(ep
);
1412 usb_ep_set_maxpacket_limit(&dev
->ep
[0].ep
, 64);
1414 dev
->gadget
.ep0
= &dev
->ep
[0].ep
;
1415 dev
->ep
[0].stopped
= 0;
1416 INIT_LIST_HEAD(&dev
->gadget
.ep0
->ep_list
);
1420 net2272_ep0_start(struct net2272
*dev
)
1422 struct net2272_ep
*ep0
= &dev
->ep
[0];
1424 net2272_ep_write(ep0
, EP_RSPSET
,
1425 (1 << NAK_OUT_PACKETS_MODE
) |
1426 (1 << ALT_NAK_OUT_PACKETS
));
1427 net2272_ep_write(ep0
, EP_RSPCLR
,
1428 (1 << HIDE_STATUS_PHASE
) |
1429 (1 << CONTROL_STATUS_PHASE_HANDSHAKE
));
1430 net2272_write(dev
, USBCTL0
,
1431 (dev
->softconnect
<< USB_DETECT_ENABLE
) |
1432 (1 << USB_ROOT_PORT_WAKEUP_ENABLE
) |
1433 (1 << IO_WAKEUP_ENABLE
));
1434 net2272_write(dev
, IRQENB0
,
1435 (1 << SETUP_PACKET_INTERRUPT_ENABLE
) |
1436 (1 << ENDPOINT_0_INTERRUPT_ENABLE
) |
1437 (1 << DMA_DONE_INTERRUPT_ENABLE
));
1438 net2272_write(dev
, IRQENB1
,
1439 (1 << VBUS_INTERRUPT_ENABLE
) |
1440 (1 << ROOT_PORT_RESET_INTERRUPT_ENABLE
) |
1441 (1 << SUSPEND_REQUEST_CHANGE_INTERRUPT_ENABLE
));
1444 /* when a driver is successfully registered, it will receive
1445 * control requests including set_configuration(), which enables
1446 * non-control requests. then usb traffic follows until a
1447 * disconnect is reported. then a host may connect again, or
1448 * the driver might get unbound.
1450 static int net2272_start(struct usb_gadget
*_gadget
,
1451 struct usb_gadget_driver
*driver
)
1453 struct net2272
*dev
;
1456 if (!driver
|| !driver
->unbind
|| !driver
->setup
||
1457 driver
->max_speed
!= USB_SPEED_HIGH
)
1460 dev
= container_of(_gadget
, struct net2272
, gadget
);
1462 for (i
= 0; i
< 4; ++i
)
1463 dev
->ep
[i
].irqs
= 0;
1464 /* hook up the driver ... */
1465 dev
->softconnect
= 1;
1466 driver
->driver
.bus
= NULL
;
1467 dev
->driver
= driver
;
1469 /* ... then enable host detection and ep0; and we're ready
1470 * for set_configuration as well as eventual disconnect.
1472 net2272_ep0_start(dev
);
1474 dev_dbg(dev
->dev
, "%s ready\n", driver
->driver
.name
);
1480 stop_activity(struct net2272
*dev
, struct usb_gadget_driver
*driver
)
1484 /* don't disconnect if it's not connected */
1485 if (dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
1488 /* stop hardware; prevent new request submissions;
1489 * and kill any outstanding requests.
1491 net2272_usb_reset(dev
);
1492 for (i
= 0; i
< 4; ++i
)
1493 net2272_dequeue_all(&dev
->ep
[i
]);
1495 /* report disconnect; the driver is already quiesced */
1497 spin_unlock(&dev
->lock
);
1498 driver
->disconnect(&dev
->gadget
);
1499 spin_lock(&dev
->lock
);
1502 net2272_usb_reinit(dev
);
1505 static int net2272_stop(struct usb_gadget
*_gadget
,
1506 struct usb_gadget_driver
*driver
)
1508 struct net2272
*dev
;
1509 unsigned long flags
;
1511 dev
= container_of(_gadget
, struct net2272
, gadget
);
1513 spin_lock_irqsave(&dev
->lock
, flags
);
1514 stop_activity(dev
, driver
);
1515 spin_unlock_irqrestore(&dev
->lock
, flags
);
1519 dev_dbg(dev
->dev
, "unregistered driver '%s'\n", driver
->driver
.name
);
1523 /*---------------------------------------------------------------------------*/
1524 /* handle ep-a/ep-b dma completions */
1526 net2272_handle_dma(struct net2272_ep
*ep
)
1528 struct net2272_request
*req
;
1532 if (!list_empty(&ep
->queue
))
1533 req
= list_entry(ep
->queue
.next
,
1534 struct net2272_request
, queue
);
1538 dev_vdbg(ep
->dev
->dev
, "handle_dma %s req %p\n", ep
->ep
.name
, req
);
1540 /* Ensure DREQ is de-asserted */
1541 net2272_write(ep
->dev
, DMAREQ
,
1542 (0 << DMA_BUFFER_VALID
)
1543 | (0 << DMA_REQUEST_ENABLE
)
1544 | (1 << DMA_CONTROL_DACK
)
1545 | (ep
->dev
->dma_eot_polarity
<< EOT_POLARITY
)
1546 | (ep
->dev
->dma_dack_polarity
<< DACK_POLARITY
)
1547 | (ep
->dev
->dma_dreq_polarity
<< DREQ_POLARITY
)
1548 | (ep
->dma
<< DMA_ENDPOINT_SELECT
));
1550 ep
->dev
->dma_busy
= 0;
1552 net2272_ep_write(ep
, EP_IRQENB
,
1553 (1 << DATA_PACKET_RECEIVED_INTERRUPT_ENABLE
)
1554 | (1 << DATA_PACKET_TRANSMITTED_INTERRUPT_ENABLE
)
1555 | net2272_ep_read(ep
, EP_IRQENB
));
1557 /* device-to-host transfer completed */
1559 /* validate a short packet or zlp if necessary */
1560 if ((req
->req
.length
% ep
->ep
.maxpacket
!= 0) ||
1562 set_fifo_bytecount(ep
, 0);
1564 net2272_done(ep
, req
, 0);
1565 if (!list_empty(&ep
->queue
)) {
1566 req
= list_entry(ep
->queue
.next
,
1567 struct net2272_request
, queue
);
1568 status
= net2272_kick_dma(ep
, req
);
1570 net2272_pio_advance(ep
);
1573 /* host-to-device transfer completed */
1575 /* terminated with a short packet? */
1576 if (net2272_read(ep
->dev
, IRQSTAT0
) &
1577 (1 << DMA_DONE_INTERRUPT
)) {
1578 /* abort system dma */
1579 net2272_cancel_dma(ep
->dev
);
1582 /* EP_TRANSFER will contain the number of bytes
1583 * actually received.
1584 * NOTE: There is no overflow detection on EP_TRANSFER:
1585 * We can't deal with transfers larger than 2^24 bytes!
1587 len
= (net2272_ep_read(ep
, EP_TRANSFER2
) << 16)
1588 | (net2272_ep_read(ep
, EP_TRANSFER1
) << 8)
1589 | (net2272_ep_read(ep
, EP_TRANSFER0
));
1594 req
->req
.actual
+= len
;
1596 /* get any remaining data */
1597 net2272_pio_advance(ep
);
1601 /*---------------------------------------------------------------------------*/
1604 net2272_handle_ep(struct net2272_ep
*ep
)
1606 struct net2272_request
*req
;
1609 if (!list_empty(&ep
->queue
))
1610 req
= list_entry(ep
->queue
.next
,
1611 struct net2272_request
, queue
);
1615 /* ack all, and handle what we care about */
1616 stat0
= net2272_ep_read(ep
, EP_STAT0
);
1617 stat1
= net2272_ep_read(ep
, EP_STAT1
);
1620 dev_vdbg(ep
->dev
->dev
, "%s ack ep_stat0 %02x, ep_stat1 %02x, req %p\n",
1621 ep
->ep
.name
, stat0
, stat1
, req
? &req
->req
: NULL
);
1623 net2272_ep_write(ep
, EP_STAT0
, stat0
&
1624 ~((1 << NAK_OUT_PACKETS
)
1625 | (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT
)));
1626 net2272_ep_write(ep
, EP_STAT1
, stat1
);
1628 /* data packet(s) received (in the fifo, OUT)
1629 * direction must be validated, otherwise control read status phase
1630 * could be interpreted as a valid packet
1632 if (!ep
->is_in
&& (stat0
& (1 << DATA_PACKET_RECEIVED_INTERRUPT
)))
1633 net2272_pio_advance(ep
);
1634 /* data packet(s) transmitted (IN) */
1635 else if (stat0
& (1 << DATA_PACKET_TRANSMITTED_INTERRUPT
))
1636 net2272_pio_advance(ep
);
1639 static struct net2272_ep
*
1640 net2272_get_ep_by_addr(struct net2272
*dev
, u16 wIndex
)
1642 struct net2272_ep
*ep
;
1644 if ((wIndex
& USB_ENDPOINT_NUMBER_MASK
) == 0)
1647 list_for_each_entry(ep
, &dev
->gadget
.ep_list
, ep
.ep_list
) {
1648 u8 bEndpointAddress
;
1652 bEndpointAddress
= ep
->desc
->bEndpointAddress
;
1653 if ((wIndex
^ bEndpointAddress
) & USB_DIR_IN
)
1655 if ((wIndex
& 0x0f) == (bEndpointAddress
& 0x0f))
1666 * JJJJJJJKKKKKKK * 8
1668 * {JKKKKKKK * 10}, JK
1670 static const u8 net2272_test_packet
[] = {
1671 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1672 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
1673 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
1674 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1675 0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD,
1676 0xFC, 0x7E, 0xBF, 0xDF, 0xEF, 0xF7, 0xFD, 0x7E
1680 net2272_set_test_mode(struct net2272
*dev
, int mode
)
1684 /* Disable all net2272 interrupts:
1685 * Nothing but a power cycle should stop the test.
1687 net2272_write(dev
, IRQENB0
, 0x00);
1688 net2272_write(dev
, IRQENB1
, 0x00);
1690 /* Force tranceiver to high-speed */
1691 net2272_write(dev
, XCVRDIAG
, 1 << FORCE_HIGH_SPEED
);
1693 net2272_write(dev
, PAGESEL
, 0);
1694 net2272_write(dev
, EP_STAT0
, 1 << DATA_PACKET_TRANSMITTED_INTERRUPT
);
1695 net2272_write(dev
, EP_RSPCLR
,
1696 (1 << CONTROL_STATUS_PHASE_HANDSHAKE
)
1697 | (1 << HIDE_STATUS_PHASE
));
1698 net2272_write(dev
, EP_CFG
, 1 << ENDPOINT_DIRECTION
);
1699 net2272_write(dev
, EP_STAT1
, 1 << BUFFER_FLUSH
);
1701 /* wait for status phase to complete */
1702 while (!(net2272_read(dev
, EP_STAT0
) &
1703 (1 << DATA_PACKET_TRANSMITTED_INTERRUPT
)))
1706 /* Enable test mode */
1707 net2272_write(dev
, USBTEST
, mode
);
1709 /* load test packet */
1710 if (mode
== TEST_PACKET
) {
1711 /* switch to 8 bit mode */
1712 net2272_write(dev
, LOCCTL
, net2272_read(dev
, LOCCTL
) &
1713 ~(1 << DATA_WIDTH
));
1715 for (i
= 0; i
< sizeof(net2272_test_packet
); ++i
)
1716 net2272_write(dev
, EP_DATA
, net2272_test_packet
[i
]);
1718 /* Validate test packet */
1719 net2272_write(dev
, EP_TRANSFER0
, 0);
1724 net2272_handle_stat0_irqs(struct net2272
*dev
, u8 stat
)
1726 struct net2272_ep
*ep
;
1729 /* starting a control request? */
1730 if (unlikely(stat
& (1 << SETUP_PACKET_INTERRUPT
))) {
1733 struct usb_ctrlrequest r
;
1736 struct net2272_request
*req
;
1738 if (dev
->gadget
.speed
== USB_SPEED_UNKNOWN
) {
1739 if (net2272_read(dev
, USBCTL1
) & (1 << USB_HIGH_SPEED
))
1740 dev
->gadget
.speed
= USB_SPEED_HIGH
;
1742 dev
->gadget
.speed
= USB_SPEED_FULL
;
1743 dev_dbg(dev
->dev
, "%s\n",
1744 usb_speed_string(dev
->gadget
.speed
));
1750 /* make sure any leftover interrupt state is cleared */
1751 stat
&= ~(1 << ENDPOINT_0_INTERRUPT
);
1752 while (!list_empty(&ep
->queue
)) {
1753 req
= list_entry(ep
->queue
.next
,
1754 struct net2272_request
, queue
);
1755 net2272_done(ep
, req
,
1756 (req
->req
.actual
== req
->req
.length
) ? 0 : -EPROTO
);
1759 dev
->protocol_stall
= 0;
1760 net2272_ep_write(ep
, EP_STAT0
,
1761 (1 << DATA_IN_TOKEN_INTERRUPT
)
1762 | (1 << DATA_OUT_TOKEN_INTERRUPT
)
1763 | (1 << DATA_PACKET_TRANSMITTED_INTERRUPT
)
1764 | (1 << DATA_PACKET_RECEIVED_INTERRUPT
)
1765 | (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT
));
1766 net2272_ep_write(ep
, EP_STAT1
,
1768 | (1 << USB_OUT_ACK_SENT
)
1769 | (1 << USB_OUT_NAK_SENT
)
1770 | (1 << USB_IN_ACK_RCVD
)
1771 | (1 << USB_IN_NAK_SENT
)
1772 | (1 << USB_STALL_SENT
)
1773 | (1 << LOCAL_OUT_ZLP
));
1776 * Ensure Control Read pre-validation setting is beyond maximum size
1777 * - Control Writes can leave non-zero values in EP_TRANSFER. If
1778 * an EP0 transfer following the Control Write is a Control Read,
1779 * the NET2272 sees the non-zero EP_TRANSFER as an unexpected
1780 * pre-validation count.
1781 * - Setting EP_TRANSFER beyond the maximum EP0 transfer size ensures
1782 * the pre-validation count cannot cause an unexpected validatation
1784 net2272_write(dev
, PAGESEL
, 0);
1785 net2272_write(dev
, EP_TRANSFER2
, 0xff);
1786 net2272_write(dev
, EP_TRANSFER1
, 0xff);
1787 net2272_write(dev
, EP_TRANSFER0
, 0xff);
1789 u
.raw
[0] = net2272_read(dev
, SETUP0
);
1790 u
.raw
[1] = net2272_read(dev
, SETUP1
);
1791 u
.raw
[2] = net2272_read(dev
, SETUP2
);
1792 u
.raw
[3] = net2272_read(dev
, SETUP3
);
1793 u
.raw
[4] = net2272_read(dev
, SETUP4
);
1794 u
.raw
[5] = net2272_read(dev
, SETUP5
);
1795 u
.raw
[6] = net2272_read(dev
, SETUP6
);
1796 u
.raw
[7] = net2272_read(dev
, SETUP7
);
1798 * If you have a big endian cpu make sure le16_to_cpus
1799 * performs the proper byte swapping here...
1801 le16_to_cpus(&u
.r
.wValue
);
1802 le16_to_cpus(&u
.r
.wIndex
);
1803 le16_to_cpus(&u
.r
.wLength
);
1806 net2272_write(dev
, IRQSTAT0
, 1 << SETUP_PACKET_INTERRUPT
);
1807 stat
^= (1 << SETUP_PACKET_INTERRUPT
);
1809 /* watch control traffic at the token level, and force
1810 * synchronization before letting the status phase happen.
1812 ep
->is_in
= (u
.r
.bRequestType
& USB_DIR_IN
) != 0;
1814 scratch
= (1 << DATA_PACKET_TRANSMITTED_INTERRUPT_ENABLE
)
1815 | (1 << DATA_OUT_TOKEN_INTERRUPT_ENABLE
)
1816 | (1 << DATA_IN_TOKEN_INTERRUPT_ENABLE
);
1817 stop_out_naking(ep
);
1819 scratch
= (1 << DATA_PACKET_RECEIVED_INTERRUPT_ENABLE
)
1820 | (1 << DATA_OUT_TOKEN_INTERRUPT_ENABLE
)
1821 | (1 << DATA_IN_TOKEN_INTERRUPT_ENABLE
);
1822 net2272_ep_write(ep
, EP_IRQENB
, scratch
);
1824 if ((u
.r
.bRequestType
& USB_TYPE_MASK
) != USB_TYPE_STANDARD
)
1826 switch (u
.r
.bRequest
) {
1827 case USB_REQ_GET_STATUS
: {
1828 struct net2272_ep
*e
;
1831 switch (u
.r
.bRequestType
& USB_RECIP_MASK
) {
1832 case USB_RECIP_ENDPOINT
:
1833 e
= net2272_get_ep_by_addr(dev
, u
.r
.wIndex
);
1834 if (!e
|| u
.r
.wLength
> 2)
1836 if (net2272_ep_read(e
, EP_RSPSET
) & (1 << ENDPOINT_HALT
))
1837 status
= __constant_cpu_to_le16(1);
1839 status
= __constant_cpu_to_le16(0);
1841 /* don't bother with a request object! */
1842 net2272_ep_write(&dev
->ep
[0], EP_IRQENB
, 0);
1843 writew(status
, net2272_reg_addr(dev
, EP_DATA
));
1844 set_fifo_bytecount(&dev
->ep
[0], 0);
1846 dev_vdbg(dev
->dev
, "%s stat %02x\n",
1847 ep
->ep
.name
, status
);
1848 goto next_endpoints
;
1849 case USB_RECIP_DEVICE
:
1850 if (u
.r
.wLength
> 2)
1852 if (dev
->is_selfpowered
)
1853 status
= (1 << USB_DEVICE_SELF_POWERED
);
1855 /* don't bother with a request object! */
1856 net2272_ep_write(&dev
->ep
[0], EP_IRQENB
, 0);
1857 writew(status
, net2272_reg_addr(dev
, EP_DATA
));
1858 set_fifo_bytecount(&dev
->ep
[0], 0);
1860 dev_vdbg(dev
->dev
, "device stat %02x\n", status
);
1861 goto next_endpoints
;
1862 case USB_RECIP_INTERFACE
:
1863 if (u
.r
.wLength
> 2)
1866 /* don't bother with a request object! */
1867 net2272_ep_write(&dev
->ep
[0], EP_IRQENB
, 0);
1868 writew(status
, net2272_reg_addr(dev
, EP_DATA
));
1869 set_fifo_bytecount(&dev
->ep
[0], 0);
1871 dev_vdbg(dev
->dev
, "interface status %02x\n", status
);
1872 goto next_endpoints
;
1877 case USB_REQ_CLEAR_FEATURE
: {
1878 struct net2272_ep
*e
;
1880 if (u
.r
.bRequestType
!= USB_RECIP_ENDPOINT
)
1882 if (u
.r
.wValue
!= USB_ENDPOINT_HALT
||
1885 e
= net2272_get_ep_by_addr(dev
, u
.r
.wIndex
);
1889 dev_vdbg(dev
->dev
, "%s wedged, halt not cleared\n",
1892 dev_vdbg(dev
->dev
, "%s clear halt\n", ep
->ep
.name
);
1896 goto next_endpoints
;
1898 case USB_REQ_SET_FEATURE
: {
1899 struct net2272_ep
*e
;
1901 if (u
.r
.bRequestType
== USB_RECIP_DEVICE
) {
1902 if (u
.r
.wIndex
!= NORMAL_OPERATION
)
1903 net2272_set_test_mode(dev
, (u
.r
.wIndex
>> 8));
1905 dev_vdbg(dev
->dev
, "test mode: %d\n", u
.r
.wIndex
);
1906 goto next_endpoints
;
1907 } else if (u
.r
.bRequestType
!= USB_RECIP_ENDPOINT
)
1909 if (u
.r
.wValue
!= USB_ENDPOINT_HALT
||
1912 e
= net2272_get_ep_by_addr(dev
, u
.r
.wIndex
);
1917 dev_vdbg(dev
->dev
, "%s set halt\n", ep
->ep
.name
);
1918 goto next_endpoints
;
1920 case USB_REQ_SET_ADDRESS
: {
1921 net2272_write(dev
, OURADDR
, u
.r
.wValue
& 0xff);
1927 dev_vdbg(dev
->dev
, "setup %02x.%02x v%04x i%04x "
1929 u
.r
.bRequestType
, u
.r
.bRequest
,
1930 u
.r
.wValue
, u
.r
.wIndex
,
1931 net2272_ep_read(ep
, EP_CFG
));
1932 spin_unlock(&dev
->lock
);
1933 tmp
= dev
->driver
->setup(&dev
->gadget
, &u
.r
);
1934 spin_lock(&dev
->lock
);
1937 /* stall ep0 on error */
1940 dev_vdbg(dev
->dev
, "req %02x.%02x protocol STALL; stat %d\n",
1941 u
.r
.bRequestType
, u
.r
.bRequest
, tmp
);
1942 dev
->protocol_stall
= 1;
1944 /* endpoint dma irq? */
1945 } else if (stat
& (1 << DMA_DONE_INTERRUPT
)) {
1946 net2272_cancel_dma(dev
);
1947 net2272_write(dev
, IRQSTAT0
, 1 << DMA_DONE_INTERRUPT
);
1948 stat
&= ~(1 << DMA_DONE_INTERRUPT
);
1949 num
= (net2272_read(dev
, DMAREQ
) & (1 << DMA_ENDPOINT_SELECT
))
1953 net2272_handle_dma(ep
);
1957 /* endpoint data irq? */
1958 scratch
= stat
& 0x0f;
1960 for (num
= 0; scratch
; num
++) {
1963 /* does this endpoint's FIFO and queue need tending? */
1965 if ((scratch
& t
) == 0)
1970 net2272_handle_ep(ep
);
1973 /* some interrupts we can just ignore */
1974 stat
&= ~(1 << SOF_INTERRUPT
);
1977 dev_dbg(dev
->dev
, "unhandled irqstat0 %02x\n", stat
);
1981 net2272_handle_stat1_irqs(struct net2272
*dev
, u8 stat
)
1985 /* after disconnect there's nothing else to do! */
1986 tmp
= (1 << VBUS_INTERRUPT
) | (1 << ROOT_PORT_RESET_INTERRUPT
);
1987 mask
= (1 << USB_HIGH_SPEED
) | (1 << USB_FULL_SPEED
);
1990 net2272_write(dev
, IRQSTAT1
, tmp
);
1991 if ((((stat
& (1 << ROOT_PORT_RESET_INTERRUPT
)) &&
1992 ((net2272_read(dev
, USBCTL1
) & mask
) == 0))
1993 || ((net2272_read(dev
, USBCTL1
) & (1 << VBUS_PIN
))
1995 && (dev
->gadget
.speed
!= USB_SPEED_UNKNOWN
)) {
1996 dev_dbg(dev
->dev
, "disconnect %s\n",
1997 dev
->driver
->driver
.name
);
1998 stop_activity(dev
, dev
->driver
);
1999 net2272_ep0_start(dev
);
2008 tmp
= (1 << SUSPEND_REQUEST_CHANGE_INTERRUPT
);
2010 net2272_write(dev
, IRQSTAT1
, tmp
);
2011 if (stat
& (1 << SUSPEND_REQUEST_INTERRUPT
)) {
2012 if (dev
->driver
->suspend
)
2013 dev
->driver
->suspend(&dev
->gadget
);
2014 if (!enable_suspend
) {
2015 stat
&= ~(1 << SUSPEND_REQUEST_INTERRUPT
);
2016 dev_dbg(dev
->dev
, "Suspend disabled, ignoring\n");
2019 if (dev
->driver
->resume
)
2020 dev
->driver
->resume(&dev
->gadget
);
2025 /* clear any other status/irqs */
2027 net2272_write(dev
, IRQSTAT1
, stat
);
2029 /* some status we can just ignore */
2030 stat
&= ~((1 << CONTROL_STATUS_INTERRUPT
)
2031 | (1 << SUSPEND_REQUEST_INTERRUPT
)
2032 | (1 << RESUME_INTERRUPT
));
2036 dev_dbg(dev
->dev
, "unhandled irqstat1 %02x\n", stat
);
2039 static irqreturn_t
net2272_irq(int irq
, void *_dev
)
2041 struct net2272
*dev
= _dev
;
2042 #if defined(PLX_PCI_RDK) || defined(PLX_PCI_RDK2)
2045 #if defined(PLX_PCI_RDK)
2048 spin_lock(&dev
->lock
);
2049 #if defined(PLX_PCI_RDK)
2050 intcsr
= readl(dev
->rdk1
.plx9054_base_addr
+ INTCSR
);
2052 if ((intcsr
& LOCAL_INTERRUPT_TEST
) == LOCAL_INTERRUPT_TEST
) {
2053 writel(intcsr
& ~(1 << PCI_INTERRUPT_ENABLE
),
2054 dev
->rdk1
.plx9054_base_addr
+ INTCSR
);
2055 net2272_handle_stat1_irqs(dev
, net2272_read(dev
, IRQSTAT1
));
2056 net2272_handle_stat0_irqs(dev
, net2272_read(dev
, IRQSTAT0
));
2057 intcsr
= readl(dev
->rdk1
.plx9054_base_addr
+ INTCSR
);
2058 writel(intcsr
| (1 << PCI_INTERRUPT_ENABLE
),
2059 dev
->rdk1
.plx9054_base_addr
+ INTCSR
);
2061 if ((intcsr
& DMA_CHANNEL_0_TEST
) == DMA_CHANNEL_0_TEST
) {
2062 writeb((1 << CHANNEL_CLEAR_INTERRUPT
| (0 << CHANNEL_ENABLE
)),
2063 dev
->rdk1
.plx9054_base_addr
+ DMACSR0
);
2065 dmareq
= net2272_read(dev
, DMAREQ
);
2067 net2272_handle_dma(&dev
->ep
[2]);
2069 net2272_handle_dma(&dev
->ep
[1]);
2072 #if defined(PLX_PCI_RDK2)
2073 /* see if PCI int for us by checking irqstat */
2074 intcsr
= readl(dev
->rdk2
.fpga_base_addr
+ RDK2_IRQSTAT
);
2075 if (!intcsr
& (1 << NET2272_PCI_IRQ
)) {
2076 spin_unlock(&dev
->lock
);
2079 /* check dma interrupts */
2081 /* Platform/devcice interrupt handler */
2082 #if !defined(PLX_PCI_RDK)
2083 net2272_handle_stat1_irqs(dev
, net2272_read(dev
, IRQSTAT1
));
2084 net2272_handle_stat0_irqs(dev
, net2272_read(dev
, IRQSTAT0
));
2086 spin_unlock(&dev
->lock
);
2091 static int net2272_present(struct net2272
*dev
)
2094 * Quick test to see if CPU can communicate properly with the NET2272.
2095 * Verifies connection using writes and reads to write/read and
2096 * read-only registers.
2098 * This routine is strongly recommended especially during early bring-up
2099 * of new hardware, however for designs that do not apply Power On System
2100 * Tests (POST) it may discarded (or perhaps minimized).
2105 /* Verify NET2272 write/read SCRATCH register can write and read */
2106 refval
= net2272_read(dev
, SCRATCH
);
2107 for (ii
= 0; ii
< 0x100; ii
+= 7) {
2108 net2272_write(dev
, SCRATCH
, ii
);
2109 val
= net2272_read(dev
, SCRATCH
);
2112 "%s: write/read SCRATCH register test failed: "
2113 "wrote:0x%2.2x, read:0x%2.2x\n",
2118 /* To be nice, we write the original SCRATCH value back: */
2119 net2272_write(dev
, SCRATCH
, refval
);
2121 /* Verify NET2272 CHIPREV register is read-only: */
2122 refval
= net2272_read(dev
, CHIPREV_2272
);
2123 for (ii
= 0; ii
< 0x100; ii
+= 7) {
2124 net2272_write(dev
, CHIPREV_2272
, ii
);
2125 val
= net2272_read(dev
, CHIPREV_2272
);
2126 if (val
!= refval
) {
2128 "%s: write/read CHIPREV register test failed: "
2129 "wrote 0x%2.2x, read:0x%2.2x expected:0x%2.2x\n",
2130 __func__
, ii
, val
, refval
);
2136 * Verify NET2272's "NET2270 legacy revision" register
2137 * - NET2272 has two revision registers. The NET2270 legacy revision
2138 * register should read the same value, regardless of the NET2272
2139 * silicon revision. The legacy register applies to NET2270
2140 * firmware being applied to the NET2272.
2142 val
= net2272_read(dev
, CHIPREV_LEGACY
);
2143 if (val
!= NET2270_LEGACY_REV
) {
2145 * Unexpected legacy revision value
2146 * - Perhaps the chip is a NET2270?
2149 "%s: WARNING: UNEXPECTED NET2272 LEGACY REGISTER VALUE:\n"
2150 " - CHIPREV_LEGACY: expected 0x%2.2x, got:0x%2.2x. (Not NET2272?)\n",
2151 __func__
, NET2270_LEGACY_REV
, val
);
2156 * Verify NET2272 silicon revision
2157 * - This revision register is appropriate for the silicon version
2160 val
= net2272_read(dev
, CHIPREV_2272
);
2162 case CHIPREV_NET2272_R1
:
2164 * NET2272 Rev 1 has DMA related errata:
2165 * - Newer silicon (Rev 1A or better) required
2168 "%s: Rev 1 detected: newer silicon recommended for DMA support\n",
2171 case CHIPREV_NET2272_R1A
:
2174 /* NET2272 silicon version *may* not work with this firmware */
2176 "%s: unexpected silicon revision register value: "
2177 " CHIPREV_2272: 0x%2.2x\n",
2180 * Return Success, even though the chip rev is not an expected value
2181 * - Older, pre-built firmware can attempt to operate on newer silicon
2182 * - Often, new silicon is perfectly compatible
2186 /* Success: NET2272 checks out OK */
2191 net2272_gadget_release(struct device
*_dev
)
2193 struct net2272
*dev
= dev_get_drvdata(_dev
);
2197 /*---------------------------------------------------------------------------*/
2200 net2272_remove(struct net2272
*dev
)
2202 usb_del_gadget_udc(&dev
->gadget
);
2204 /* start with the driver above us */
2206 /* should have been done already by driver model core */
2207 dev_warn(dev
->dev
, "pci remove, driver '%s' is still registered\n",
2208 dev
->driver
->driver
.name
);
2209 usb_gadget_unregister_driver(dev
->driver
);
2212 free_irq(dev
->irq
, dev
);
2213 iounmap(dev
->base_addr
);
2215 device_remove_file(dev
->dev
, &dev_attr_registers
);
2217 dev_info(dev
->dev
, "unbind\n");
2220 static struct net2272
*net2272_probe_init(struct device
*dev
, unsigned int irq
)
2222 struct net2272
*ret
;
2225 dev_dbg(dev
, "No IRQ!\n");
2226 return ERR_PTR(-ENODEV
);
2229 /* alloc, and start init */
2230 ret
= kzalloc(sizeof(*ret
), GFP_KERNEL
);
2232 return ERR_PTR(-ENOMEM
);
2234 spin_lock_init(&ret
->lock
);
2237 ret
->gadget
.ops
= &net2272_ops
;
2238 ret
->gadget
.max_speed
= USB_SPEED_HIGH
;
2240 /* the "gadget" abstracts/virtualizes the controller */
2241 ret
->gadget
.name
= driver_name
;
2247 net2272_probe_fin(struct net2272
*dev
, unsigned int irqflags
)
2251 /* See if there... */
2252 if (net2272_present(dev
)) {
2253 dev_warn(dev
->dev
, "2272 not found!\n");
2258 net2272_usb_reset(dev
);
2259 net2272_usb_reinit(dev
);
2261 ret
= request_irq(dev
->irq
, net2272_irq
, irqflags
, driver_name
, dev
);
2263 dev_err(dev
->dev
, "request interrupt %i failed\n", dev
->irq
);
2267 dev
->chiprev
= net2272_read(dev
, CHIPREV_2272
);
2270 dev_info(dev
->dev
, "%s\n", driver_desc
);
2271 dev_info(dev
->dev
, "irq %i, mem %p, chip rev %04x, dma %s\n",
2272 dev
->irq
, dev
->base_addr
, dev
->chiprev
,
2274 dev_info(dev
->dev
, "version: %s\n", driver_vers
);
2276 ret
= device_create_file(dev
->dev
, &dev_attr_registers
);
2280 ret
= usb_add_gadget_udc_release(dev
->dev
, &dev
->gadget
,
2281 net2272_gadget_release
);
2288 device_remove_file(dev
->dev
, &dev_attr_registers
);
2290 free_irq(dev
->irq
, dev
);
2298 * wrap this driver around the specified device, but
2299 * don't respond over USB until a gadget driver binds to us
2303 net2272_rdk1_probe(struct pci_dev
*pdev
, struct net2272
*dev
)
2305 unsigned long resource
, len
, tmp
;
2306 void __iomem
*mem_mapped_addr
[4];
2310 * BAR 0 holds PLX 9054 config registers
2311 * BAR 1 is i/o memory; unused here
2312 * BAR 2 holds EPLD config registers
2313 * BAR 3 holds NET2272 registers
2316 /* Find and map all address spaces */
2317 for (i
= 0; i
< 4; ++i
) {
2319 continue; /* BAR1 unused */
2321 resource
= pci_resource_start(pdev
, i
);
2322 len
= pci_resource_len(pdev
, i
);
2324 if (!request_mem_region(resource
, len
, driver_name
)) {
2325 dev_dbg(dev
->dev
, "controller already in use\n");
2330 mem_mapped_addr
[i
] = ioremap_nocache(resource
, len
);
2331 if (mem_mapped_addr
[i
] == NULL
) {
2332 release_mem_region(resource
, len
);
2333 dev_dbg(dev
->dev
, "can't map memory\n");
2339 dev
->rdk1
.plx9054_base_addr
= mem_mapped_addr
[0];
2340 dev
->rdk1
.epld_base_addr
= mem_mapped_addr
[2];
2341 dev
->base_addr
= mem_mapped_addr
[3];
2343 /* Set PLX 9054 bus width (16 bits) */
2344 tmp
= readl(dev
->rdk1
.plx9054_base_addr
+ LBRD1
);
2345 writel((tmp
& ~(3 << MEMORY_SPACE_LOCAL_BUS_WIDTH
)) | W16_BIT
,
2346 dev
->rdk1
.plx9054_base_addr
+ LBRD1
);
2348 /* Enable PLX 9054 Interrupts */
2349 writel(readl(dev
->rdk1
.plx9054_base_addr
+ INTCSR
) |
2350 (1 << PCI_INTERRUPT_ENABLE
) |
2351 (1 << LOCAL_INTERRUPT_INPUT_ENABLE
),
2352 dev
->rdk1
.plx9054_base_addr
+ INTCSR
);
2354 writeb((1 << CHANNEL_CLEAR_INTERRUPT
| (0 << CHANNEL_ENABLE
)),
2355 dev
->rdk1
.plx9054_base_addr
+ DMACSR0
);
2358 writeb((1 << EPLD_DMA_ENABLE
) |
2359 (1 << DMA_CTL_DACK
) |
2360 (1 << DMA_TIMEOUT_ENABLE
) |
2364 (1 << NET2272_RESET
),
2365 dev
->base_addr
+ EPLD_IO_CONTROL_REGISTER
);
2368 writeb(readb(dev
->base_addr
+ EPLD_IO_CONTROL_REGISTER
) &
2369 ~(1 << NET2272_RESET
),
2370 dev
->base_addr
+ EPLD_IO_CONTROL_REGISTER
);
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_nocache(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
);
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
);
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_nocache(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
);
2658 net2272_plat_remove(struct platform_device
*pdev
)
2660 struct net2272
*dev
= platform_get_drvdata(pdev
);
2662 net2272_remove(dev
);
2664 release_mem_region(pdev
->resource
[0].start
,
2665 resource_size(&pdev
->resource
[0]));
2672 static struct platform_driver net2272_plat_driver
= {
2673 .probe
= net2272_plat_probe
,
2674 .remove
= net2272_plat_remove
,
2676 .name
= driver_name
,
2677 .owner
= THIS_MODULE
,
2679 /* FIXME .suspend, .resume */
2681 MODULE_ALIAS("platform:net2272");
2683 static int __init
net2272_init(void)
2687 ret
= net2272_pci_register();
2690 ret
= platform_driver_register(&net2272_plat_driver
);
2696 net2272_pci_unregister();
2699 module_init(net2272_init
);
2701 static void __exit
net2272_cleanup(void)
2703 net2272_pci_unregister();
2704 platform_driver_unregister(&net2272_plat_driver
);
2706 module_exit(net2272_cleanup
);
2708 MODULE_DESCRIPTION(DRIVER_DESC
);
2709 MODULE_AUTHOR("PLX Technology, Inc.");
2710 MODULE_LICENSE("GPL");