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/gpio.h>
13 #include <linux/init.h>
14 #include <linux/interrupt.h>
16 #include <linux/ioport.h>
17 #include <linux/kernel.h>
18 #include <linux/list.h>
19 #include <linux/module.h>
20 #include <linux/moduleparam.h>
21 #include <linux/pci.h>
22 #include <linux/platform_device.h>
23 #include <linux/prefetch.h>
24 #include <linux/sched.h>
25 #include <linux/slab.h>
26 #include <linux/timer.h>
27 #include <linux/usb.h>
28 #include <linux/usb/ch9.h>
29 #include <linux/usb/gadget.h>
31 #include <asm/byteorder.h>
32 #include <asm/unaligned.h>
36 #define DRIVER_DESC "PLX NET2272 USB Peripheral Controller"
38 static const char driver_name
[] = "net2272";
39 static const char driver_vers
[] = "2006 October 17/mainline";
40 static const char driver_desc
[] = DRIVER_DESC
;
42 static const char ep0name
[] = "ep0";
43 static const char * const ep_name
[] = {
45 "ep-a", "ep-b", "ep-c",
48 #ifdef CONFIG_USB_NET2272_DMA
50 * use_dma: the NET2272 can use an external DMA controller.
51 * Note that since there is no generic DMA api, some functions,
52 * notably request_dma, start_dma, and cancel_dma will need to be
53 * modified for your platform's particular dma controller.
55 * If use_dma is disabled, pio will be used instead.
57 static bool use_dma
= 0;
58 module_param(use_dma
, bool, 0644);
61 * dma_ep: selects the endpoint for use with dma (1=ep-a, 2=ep-b)
62 * The NET2272 can only use dma for a single endpoint at a time.
63 * At some point this could be modified to allow either endpoint
64 * to take control of dma as it becomes available.
66 * Note that DMA should not be used on OUT endpoints unless it can
67 * be guaranteed that no short packets will arrive on an IN endpoint
68 * while the DMA operation is pending. Otherwise the OUT DMA will
69 * terminate prematurely (See NET2272 Errata 630-0213-0101)
71 static ushort dma_ep
= 1;
72 module_param(dma_ep
, ushort
, 0644);
75 * dma_mode: net2272 dma mode setting (see LOCCTL1 definiton):
76 * mode 0 == Slow DREQ mode
77 * mode 1 == Fast DREQ mode
78 * mode 2 == Burst mode
80 static ushort dma_mode
= 2;
81 module_param(dma_mode
, ushort
, 0644);
89 * fifo_mode: net2272 buffer configuration:
90 * mode 0 == ep-{a,b,c} 512db each
91 * mode 1 == ep-a 1k, ep-{b,c} 512db
92 * mode 2 == ep-a 1k, ep-b 1k, ep-c 512db
93 * mode 3 == ep-a 1k, ep-b disabled, ep-c 512db
95 static ushort fifo_mode
= 0;
96 module_param(fifo_mode
, ushort
, 0644);
99 * enable_suspend: When enabled, the driver will respond to
100 * USB suspend requests by powering down the NET2272. Otherwise,
101 * USB suspend requests will be ignored. This is acceptible for
102 * self-powered devices. For bus powered devices set this to 1.
104 static ushort enable_suspend
= 0;
105 module_param(enable_suspend
, ushort
, 0644);
107 static void assert_out_naking(struct net2272_ep
*ep
, const char *where
)
115 tmp
= net2272_ep_read(ep
, EP_STAT0
);
116 if ((tmp
& (1 << NAK_OUT_PACKETS
)) == 0) {
117 dev_dbg(ep
->dev
->dev
, "%s %s %02x !NAK\n",
118 ep
->ep
.name
, where
, tmp
);
119 net2272_ep_write(ep
, EP_RSPSET
, 1 << ALT_NAK_OUT_PACKETS
);
122 #define ASSERT_OUT_NAKING(ep) assert_out_naking(ep, __func__)
124 static void stop_out_naking(struct net2272_ep
*ep
)
126 u8 tmp
= net2272_ep_read(ep
, EP_STAT0
);
128 if ((tmp
& (1 << NAK_OUT_PACKETS
)) != 0)
129 net2272_ep_write(ep
, EP_RSPCLR
, 1 << ALT_NAK_OUT_PACKETS
);
132 #define PIPEDIR(bAddress) (usb_pipein(bAddress) ? "in" : "out")
134 static char *type_string(u8 bmAttributes
)
136 switch ((bmAttributes
) & USB_ENDPOINT_XFERTYPE_MASK
) {
137 case USB_ENDPOINT_XFER_BULK
: return "bulk";
138 case USB_ENDPOINT_XFER_ISOC
: return "iso";
139 case USB_ENDPOINT_XFER_INT
: return "intr";
140 default: return "control";
144 static char *buf_state_string(unsigned state
)
147 case BUFF_FREE
: return "free";
148 case BUFF_VALID
: return "valid";
149 case BUFF_LCL
: return "local";
150 case BUFF_USB
: return "usb";
151 default: return "unknown";
155 static char *dma_mode_string(void)
160 case 0: return "SLOW DREQ";
161 case 1: return "FAST DREQ";
162 case 2: return "BURST";
163 default: return "invalid";
167 static void net2272_dequeue_all(struct net2272_ep
*);
168 static int net2272_kick_dma(struct net2272_ep
*, struct net2272_request
*);
169 static int net2272_fifo_status(struct usb_ep
*);
171 static const struct usb_ep_ops net2272_ep_ops
;
173 /*---------------------------------------------------------------------------*/
176 net2272_enable(struct usb_ep
*_ep
, const struct usb_endpoint_descriptor
*desc
)
179 struct net2272_ep
*ep
;
184 ep
= container_of(_ep
, struct net2272_ep
, ep
);
185 if (!_ep
|| !desc
|| ep
->desc
|| _ep
->name
== ep0name
186 || desc
->bDescriptorType
!= USB_DT_ENDPOINT
)
189 if (!dev
->driver
|| dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
192 max
= usb_endpoint_maxp(desc
);
194 spin_lock_irqsave(&dev
->lock
, flags
);
195 _ep
->maxpacket
= max
;
198 /* net2272_ep_reset() has already been called */
202 /* set speed-dependent max packet */
203 net2272_ep_write(ep
, EP_MAXPKT0
, max
& 0xff);
204 net2272_ep_write(ep
, EP_MAXPKT1
, (max
& 0xff00) >> 8);
206 /* set type, direction, address; reset fifo counters */
207 net2272_ep_write(ep
, EP_STAT1
, 1 << BUFFER_FLUSH
);
208 tmp
= usb_endpoint_type(desc
);
209 if (usb_endpoint_xfer_bulk(desc
)) {
210 /* catch some particularly blatant driver bugs */
211 if ((dev
->gadget
.speed
== USB_SPEED_HIGH
&& max
!= 512) ||
212 (dev
->gadget
.speed
== USB_SPEED_FULL
&& max
> 64)) {
213 spin_unlock_irqrestore(&dev
->lock
, flags
);
217 ep
->is_iso
= usb_endpoint_xfer_isoc(desc
) ? 1 : 0;
218 tmp
<<= ENDPOINT_TYPE
;
219 tmp
|= ((desc
->bEndpointAddress
& 0x0f) << ENDPOINT_NUMBER
);
220 tmp
|= usb_endpoint_dir_in(desc
) << ENDPOINT_DIRECTION
;
221 tmp
|= (1 << ENDPOINT_ENABLE
);
223 /* for OUT transfers, block the rx fifo until a read is posted */
224 ep
->is_in
= usb_endpoint_dir_in(desc
);
226 net2272_ep_write(ep
, EP_RSPSET
, 1 << ALT_NAK_OUT_PACKETS
);
228 net2272_ep_write(ep
, EP_CFG
, tmp
);
231 tmp
= (1 << ep
->num
) | net2272_read(dev
, IRQENB0
);
232 net2272_write(dev
, IRQENB0
, tmp
);
234 tmp
= (1 << DATA_PACKET_RECEIVED_INTERRUPT_ENABLE
)
235 | (1 << DATA_PACKET_TRANSMITTED_INTERRUPT_ENABLE
)
236 | net2272_ep_read(ep
, EP_IRQENB
);
237 net2272_ep_write(ep
, EP_IRQENB
, tmp
);
239 tmp
= desc
->bEndpointAddress
;
240 dev_dbg(dev
->dev
, "enabled %s (ep%d%s-%s) max %04x cfg %02x\n",
241 _ep
->name
, tmp
& 0x0f, PIPEDIR(tmp
),
242 type_string(desc
->bmAttributes
), max
,
243 net2272_ep_read(ep
, EP_CFG
));
245 spin_unlock_irqrestore(&dev
->lock
, flags
);
249 static void net2272_ep_reset(struct net2272_ep
*ep
)
254 INIT_LIST_HEAD(&ep
->queue
);
256 usb_ep_set_maxpacket_limit(&ep
->ep
, ~0);
257 ep
->ep
.ops
= &net2272_ep_ops
;
259 /* disable irqs, endpoint */
260 net2272_ep_write(ep
, EP_IRQENB
, 0);
262 /* init to our chosen defaults, notably so that we NAK OUT
263 * packets until the driver queues a read.
265 tmp
= (1 << NAK_OUT_PACKETS_MODE
) | (1 << ALT_NAK_OUT_PACKETS
);
266 net2272_ep_write(ep
, EP_RSPSET
, tmp
);
268 tmp
= (1 << INTERRUPT_MODE
) | (1 << HIDE_STATUS_PHASE
);
270 tmp
|= (1 << ENDPOINT_TOGGLE
) | (1 << ENDPOINT_HALT
);
272 net2272_ep_write(ep
, EP_RSPCLR
, tmp
);
274 /* scrub most status bits, and flush any fifo state */
275 net2272_ep_write(ep
, EP_STAT0
,
276 (1 << DATA_IN_TOKEN_INTERRUPT
)
277 | (1 << DATA_OUT_TOKEN_INTERRUPT
)
278 | (1 << DATA_PACKET_TRANSMITTED_INTERRUPT
)
279 | (1 << DATA_PACKET_RECEIVED_INTERRUPT
)
280 | (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT
));
282 net2272_ep_write(ep
, EP_STAT1
,
284 | (1 << USB_OUT_ACK_SENT
)
285 | (1 << USB_OUT_NAK_SENT
)
286 | (1 << USB_IN_ACK_RCVD
)
287 | (1 << USB_IN_NAK_SENT
)
288 | (1 << USB_STALL_SENT
)
289 | (1 << LOCAL_OUT_ZLP
)
290 | (1 << BUFFER_FLUSH
));
292 /* fifo size is handled seperately */
295 static int net2272_disable(struct usb_ep
*_ep
)
297 struct net2272_ep
*ep
;
300 ep
= container_of(_ep
, struct net2272_ep
, ep
);
301 if (!_ep
|| !ep
->desc
|| _ep
->name
== ep0name
)
304 spin_lock_irqsave(&ep
->dev
->lock
, flags
);
305 net2272_dequeue_all(ep
);
306 net2272_ep_reset(ep
);
308 dev_vdbg(ep
->dev
->dev
, "disabled %s\n", _ep
->name
);
310 spin_unlock_irqrestore(&ep
->dev
->lock
, flags
);
314 /*---------------------------------------------------------------------------*/
316 static struct usb_request
*
317 net2272_alloc_request(struct usb_ep
*_ep
, gfp_t gfp_flags
)
319 struct net2272_request
*req
;
324 req
= kzalloc(sizeof(*req
), gfp_flags
);
328 INIT_LIST_HEAD(&req
->queue
);
334 net2272_free_request(struct usb_ep
*_ep
, struct usb_request
*_req
)
336 struct net2272_request
*req
;
341 req
= container_of(_req
, struct net2272_request
, req
);
342 WARN_ON(!list_empty(&req
->queue
));
347 net2272_done(struct net2272_ep
*ep
, struct net2272_request
*req
, int status
)
350 unsigned stopped
= ep
->stopped
;
353 if (ep
->dev
->protocol_stall
) {
360 list_del_init(&req
->queue
);
362 if (req
->req
.status
== -EINPROGRESS
)
363 req
->req
.status
= status
;
365 status
= req
->req
.status
;
368 if (use_dma
&& ep
->dma
)
369 usb_gadget_unmap_request(&dev
->gadget
, &req
->req
,
372 if (status
&& status
!= -ESHUTDOWN
)
373 dev_vdbg(dev
->dev
, "complete %s req %p stat %d len %u/%u buf %p\n",
374 ep
->ep
.name
, &req
->req
, status
,
375 req
->req
.actual
, req
->req
.length
, req
->req
.buf
);
377 /* don't modify queue heads during completion callback */
379 spin_unlock(&dev
->lock
);
380 usb_gadget_giveback_request(&ep
->ep
, &req
->req
);
381 spin_lock(&dev
->lock
);
382 ep
->stopped
= stopped
;
386 net2272_write_packet(struct net2272_ep
*ep
, u8
*buf
,
387 struct net2272_request
*req
, unsigned max
)
389 u16 __iomem
*ep_data
= net2272_reg_addr(ep
->dev
, EP_DATA
);
391 unsigned length
, count
;
394 length
= min(req
->req
.length
- req
->req
.actual
, max
);
395 req
->req
.actual
+= length
;
397 dev_vdbg(ep
->dev
->dev
, "write packet %s req %p max %u len %u avail %u\n",
398 ep
->ep
.name
, req
, max
, length
,
399 (net2272_ep_read(ep
, EP_AVAIL1
) << 8) | net2272_ep_read(ep
, EP_AVAIL0
));
404 while (likely(count
>= 2)) {
405 /* no byte-swap required; chip endian set during init */
406 writew(*bufp
++, ep_data
);
411 /* write final byte by placing the NET2272 into 8-bit mode */
412 if (unlikely(count
)) {
413 tmp
= net2272_read(ep
->dev
, LOCCTL
);
414 net2272_write(ep
->dev
, LOCCTL
, tmp
& ~(1 << DATA_WIDTH
));
415 writeb(*buf
, ep_data
);
416 net2272_write(ep
->dev
, LOCCTL
, tmp
);
421 /* returns: 0: still running, 1: completed, negative: errno */
423 net2272_write_fifo(struct net2272_ep
*ep
, struct net2272_request
*req
)
429 dev_vdbg(ep
->dev
->dev
, "write_fifo %s actual %d len %d\n",
430 ep
->ep
.name
, req
->req
.actual
, req
->req
.length
);
433 * Keep loading the endpoint until the final packet is loaded,
434 * or the endpoint buffer is full.
438 * Clear interrupt status
439 * - Packet Transmitted interrupt will become set again when the
440 * host successfully takes another packet
442 net2272_ep_write(ep
, EP_STAT0
, (1 << DATA_PACKET_TRANSMITTED_INTERRUPT
));
443 while (!(net2272_ep_read(ep
, EP_STAT0
) & (1 << BUFFER_FULL
))) {
444 buf
= req
->req
.buf
+ req
->req
.actual
;
448 net2272_ep_read(ep
, EP_STAT0
);
450 max
= (net2272_ep_read(ep
, EP_AVAIL1
) << 8) |
451 (net2272_ep_read(ep
, EP_AVAIL0
));
453 if (max
< ep
->ep
.maxpacket
)
454 max
= (net2272_ep_read(ep
, EP_AVAIL1
) << 8)
455 | (net2272_ep_read(ep
, EP_AVAIL0
));
457 count
= net2272_write_packet(ep
, buf
, req
, max
);
458 /* see if we are done */
459 if (req
->req
.length
== req
->req
.actual
) {
460 /* validate short or zlp packet */
461 if (count
< ep
->ep
.maxpacket
)
462 set_fifo_bytecount(ep
, 0);
463 net2272_done(ep
, req
, 0);
465 if (!list_empty(&ep
->queue
)) {
466 req
= list_entry(ep
->queue
.next
,
467 struct net2272_request
,
469 status
= net2272_kick_dma(ep
, req
);
472 if ((net2272_ep_read(ep
, EP_STAT0
)
473 & (1 << BUFFER_EMPTY
)))
478 net2272_ep_write(ep
, EP_STAT0
, (1 << DATA_PACKET_TRANSMITTED_INTERRUPT
));
484 net2272_out_flush(struct net2272_ep
*ep
)
486 ASSERT_OUT_NAKING(ep
);
488 net2272_ep_write(ep
, EP_STAT0
, (1 << DATA_OUT_TOKEN_INTERRUPT
)
489 | (1 << DATA_PACKET_RECEIVED_INTERRUPT
));
490 net2272_ep_write(ep
, EP_STAT1
, 1 << BUFFER_FLUSH
);
494 net2272_read_packet(struct net2272_ep
*ep
, u8
*buf
,
495 struct net2272_request
*req
, unsigned avail
)
497 u16 __iomem
*ep_data
= net2272_reg_addr(ep
->dev
, EP_DATA
);
501 req
->req
.actual
+= avail
;
503 dev_vdbg(ep
->dev
->dev
, "read packet %s req %p len %u avail %u\n",
504 ep
->ep
.name
, req
, avail
,
505 (net2272_ep_read(ep
, EP_AVAIL1
) << 8) | net2272_ep_read(ep
, EP_AVAIL0
));
507 is_short
= (avail
< ep
->ep
.maxpacket
);
509 if (unlikely(avail
== 0)) {
510 /* remove any zlp from the buffer */
511 (void)readw(ep_data
);
515 /* Ensure we get the final byte */
516 if (unlikely(avail
% 2))
521 *bufp
++ = readw(ep_data
);
526 * To avoid false endpoint available race condition must read
527 * ep stat0 twice in the case of a short transfer
529 if (net2272_ep_read(ep
, EP_STAT0
) & (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT
))
530 net2272_ep_read(ep
, EP_STAT0
);
536 net2272_read_fifo(struct net2272_ep
*ep
, struct net2272_request
*req
)
545 dev_vdbg(ep
->dev
->dev
, "read_fifo %s actual %d len %d\n",
546 ep
->ep
.name
, req
->req
.actual
, req
->req
.length
);
550 buf
= req
->req
.buf
+ req
->req
.actual
;
553 count
= (net2272_ep_read(ep
, EP_AVAIL1
) << 8)
554 | net2272_ep_read(ep
, EP_AVAIL0
);
556 net2272_ep_write(ep
, EP_STAT0
,
557 (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT
) |
558 (1 << DATA_PACKET_RECEIVED_INTERRUPT
));
560 tmp
= req
->req
.length
- req
->req
.actual
;
563 if ((tmp
% ep
->ep
.maxpacket
) != 0) {
564 dev_err(ep
->dev
->dev
,
565 "%s out fifo %d bytes, expected %d\n",
566 ep
->ep
.name
, count
, tmp
);
569 count
= (tmp
> 0) ? tmp
: 0;
572 is_short
= net2272_read_packet(ep
, buf
, req
, count
);
575 if (unlikely(cleanup
|| is_short
||
576 req
->req
.actual
== req
->req
.length
)) {
579 net2272_out_flush(ep
);
580 net2272_done(ep
, req
, -EOVERFLOW
);
582 net2272_done(ep
, req
, 0);
584 /* re-initialize endpoint transfer registers
585 * otherwise they may result in erroneous pre-validation
586 * for subsequent control reads
588 if (unlikely(ep
->num
== 0)) {
589 net2272_ep_write(ep
, EP_TRANSFER2
, 0);
590 net2272_ep_write(ep
, EP_TRANSFER1
, 0);
591 net2272_ep_write(ep
, EP_TRANSFER0
, 0);
594 if (!list_empty(&ep
->queue
)) {
595 req
= list_entry(ep
->queue
.next
,
596 struct net2272_request
, queue
);
597 status
= net2272_kick_dma(ep
, req
);
599 !(net2272_ep_read(ep
, EP_STAT0
) & (1 << BUFFER_EMPTY
)))
604 } while (!(net2272_ep_read(ep
, EP_STAT0
) & (1 << BUFFER_EMPTY
)));
610 net2272_pio_advance(struct net2272_ep
*ep
)
612 struct net2272_request
*req
;
614 if (unlikely(list_empty(&ep
->queue
)))
617 req
= list_entry(ep
->queue
.next
, struct net2272_request
, queue
);
618 (ep
->is_in
? net2272_write_fifo
: net2272_read_fifo
)(ep
, req
);
621 /* returns 0 on success, else negative errno */
623 net2272_request_dma(struct net2272
*dev
, unsigned ep
, u32 buf
,
624 unsigned len
, unsigned dir
)
626 dev_vdbg(dev
->dev
, "request_dma ep %d buf %08x len %d dir %d\n",
629 /* The NET2272 only supports a single dma channel */
633 * EP_TRANSFER (used to determine the number of bytes received
634 * in an OUT transfer) is 24 bits wide; don't ask for more than that.
636 if ((dir
== 1) && (len
> 0x1000000))
641 /* initialize platform's dma */
642 #ifdef CONFIG_USB_PCI
643 /* NET2272 addr, buffer addr, length, etc. */
644 switch (dev
->dev_id
) {
645 case PCI_DEVICE_ID_RDK1
:
646 /* Setup PLX 9054 DMA mode */
647 writel((1 << LOCAL_BUS_WIDTH
) |
648 (1 << TA_READY_INPUT_ENABLE
) |
649 (0 << LOCAL_BURST_ENABLE
) |
650 (1 << DONE_INTERRUPT_ENABLE
) |
651 (1 << LOCAL_ADDRESSING_MODE
) |
653 (1 << DMA_EOT_ENABLE
) |
654 (1 << FAST_SLOW_TERMINATE_MODE_SELECT
) |
655 (1 << DMA_CHANNEL_INTERRUPT_SELECT
),
656 dev
->rdk1
.plx9054_base_addr
+ DMAMODE0
);
658 writel(0x100000, dev
->rdk1
.plx9054_base_addr
+ DMALADR0
);
659 writel(buf
, dev
->rdk1
.plx9054_base_addr
+ DMAPADR0
);
660 writel(len
, dev
->rdk1
.plx9054_base_addr
+ DMASIZ0
);
661 writel((dir
<< DIRECTION_OF_TRANSFER
) |
662 (1 << INTERRUPT_AFTER_TERMINAL_COUNT
),
663 dev
->rdk1
.plx9054_base_addr
+ DMADPR0
);
664 writel((1 << LOCAL_DMA_CHANNEL_0_INTERRUPT_ENABLE
) |
665 readl(dev
->rdk1
.plx9054_base_addr
+ INTCSR
),
666 dev
->rdk1
.plx9054_base_addr
+ INTCSR
);
672 net2272_write(dev
, DMAREQ
,
673 (0 << DMA_BUFFER_VALID
) |
674 (1 << DMA_REQUEST_ENABLE
) |
675 (1 << DMA_CONTROL_DACK
) |
676 (dev
->dma_eot_polarity
<< EOT_POLARITY
) |
677 (dev
->dma_dack_polarity
<< DACK_POLARITY
) |
678 (dev
->dma_dreq_polarity
<< DREQ_POLARITY
) |
679 ((ep
>> 1) << DMA_ENDPOINT_SELECT
));
681 (void) net2272_read(dev
, SCRATCH
);
687 net2272_start_dma(struct net2272
*dev
)
689 /* start platform's dma controller */
690 #ifdef CONFIG_USB_PCI
691 switch (dev
->dev_id
) {
692 case PCI_DEVICE_ID_RDK1
:
693 writeb((1 << CHANNEL_ENABLE
) | (1 << CHANNEL_START
),
694 dev
->rdk1
.plx9054_base_addr
+ DMACSR0
);
700 /* returns 0 on success, else negative errno */
702 net2272_kick_dma(struct net2272_ep
*ep
, struct net2272_request
*req
)
707 if (!use_dma
|| (ep
->num
< 1) || (ep
->num
> 2) || !ep
->dma
)
710 /* don't use dma for odd-length transfers
711 * otherwise, we'd need to deal with the last byte with pio
713 if (req
->req
.length
& 1)
716 dev_vdbg(ep
->dev
->dev
, "kick_dma %s req %p dma %08llx\n",
717 ep
->ep
.name
, req
, (unsigned long long) req
->req
.dma
);
719 net2272_ep_write(ep
, EP_RSPSET
, 1 << ALT_NAK_OUT_PACKETS
);
721 /* The NET2272 can only use DMA on one endpoint at a time */
722 if (ep
->dev
->dma_busy
)
725 /* Make sure we only DMA an even number of bytes (we'll use
726 * pio to complete the transfer)
728 size
= req
->req
.length
;
731 /* device-to-host transfer */
733 /* initialize platform's dma controller */
734 if (net2272_request_dma(ep
->dev
, ep
->num
, req
->req
.dma
, size
, 0))
735 /* unable to obtain DMA channel; return error and use pio mode */
737 req
->req
.actual
+= size
;
739 /* host-to-device transfer */
741 tmp
= net2272_ep_read(ep
, EP_STAT0
);
743 /* initialize platform's dma controller */
744 if (net2272_request_dma(ep
->dev
, ep
->num
, req
->req
.dma
, size
, 1))
745 /* unable to obtain DMA channel; return error and use pio mode */
748 if (!(tmp
& (1 << BUFFER_EMPTY
)))
754 /* allow the endpoint's buffer to fill */
755 net2272_ep_write(ep
, EP_RSPCLR
, 1 << ALT_NAK_OUT_PACKETS
);
757 /* this transfer completed and data's already in the fifo
758 * return error so pio gets used.
760 if (tmp
& (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT
)) {
763 net2272_write(ep
->dev
, DMAREQ
,
764 (0 << DMA_BUFFER_VALID
) |
765 (0 << DMA_REQUEST_ENABLE
) |
766 (1 << DMA_CONTROL_DACK
) |
767 (ep
->dev
->dma_eot_polarity
<< EOT_POLARITY
) |
768 (ep
->dev
->dma_dack_polarity
<< DACK_POLARITY
) |
769 (ep
->dev
->dma_dreq_polarity
<< DREQ_POLARITY
) |
770 ((ep
->num
>> 1) << DMA_ENDPOINT_SELECT
));
776 /* Don't use per-packet interrupts: use dma interrupts only */
777 net2272_ep_write(ep
, EP_IRQENB
, 0);
779 net2272_start_dma(ep
->dev
);
784 static void net2272_cancel_dma(struct net2272
*dev
)
786 #ifdef CONFIG_USB_PCI
787 switch (dev
->dev_id
) {
788 case PCI_DEVICE_ID_RDK1
:
789 writeb(0, dev
->rdk1
.plx9054_base_addr
+ DMACSR0
);
790 writeb(1 << CHANNEL_ABORT
, dev
->rdk1
.plx9054_base_addr
+ DMACSR0
);
791 while (!(readb(dev
->rdk1
.plx9054_base_addr
+ DMACSR0
) &
792 (1 << CHANNEL_DONE
)))
793 continue; /* wait for dma to stabalize */
795 /* dma abort generates an interrupt */
796 writeb(1 << CHANNEL_CLEAR_INTERRUPT
,
797 dev
->rdk1
.plx9054_base_addr
+ DMACSR0
);
805 /*---------------------------------------------------------------------------*/
808 net2272_queue(struct usb_ep
*_ep
, struct usb_request
*_req
, gfp_t gfp_flags
)
810 struct net2272_request
*req
;
811 struct net2272_ep
*ep
;
817 req
= container_of(_req
, struct net2272_request
, req
);
818 if (!_req
|| !_req
->complete
|| !_req
->buf
819 || !list_empty(&req
->queue
))
821 ep
= container_of(_ep
, struct net2272_ep
, ep
);
822 if (!_ep
|| (!ep
->desc
&& ep
->num
!= 0))
825 if (!dev
->driver
|| dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
828 /* set up dma mapping in case the caller didn't */
829 if (use_dma
&& ep
->dma
) {
830 status
= usb_gadget_map_request(&dev
->gadget
, _req
,
836 dev_vdbg(dev
->dev
, "%s queue req %p, len %d buf %p dma %08llx %s\n",
837 _ep
->name
, _req
, _req
->length
, _req
->buf
,
838 (unsigned long long) _req
->dma
, _req
->zero
? "zero" : "!zero");
840 spin_lock_irqsave(&dev
->lock
, flags
);
842 _req
->status
= -EINPROGRESS
;
845 /* kickstart this i/o queue? */
846 if (list_empty(&ep
->queue
) && !ep
->stopped
) {
847 /* maybe there's no control data, just status ack */
848 if (ep
->num
== 0 && _req
->length
== 0) {
849 net2272_done(ep
, req
, 0);
850 dev_vdbg(dev
->dev
, "%s status ack\n", ep
->ep
.name
);
854 /* Return zlp, don't let it block subsequent packets */
855 s
= net2272_ep_read(ep
, EP_STAT0
);
856 if (s
& (1 << BUFFER_EMPTY
)) {
857 /* Buffer is empty check for a blocking zlp, handle it */
858 if ((s
& (1 << NAK_OUT_PACKETS
)) &&
859 net2272_ep_read(ep
, EP_STAT1
) & (1 << LOCAL_OUT_ZLP
)) {
860 dev_dbg(dev
->dev
, "WARNING: returning ZLP short packet termination!\n");
862 * Request is going to terminate with a short packet ...
863 * hope the client is ready for it!
865 status
= net2272_read_fifo(ep
, req
);
866 /* clear short packet naking */
867 net2272_ep_write(ep
, EP_STAT0
, (1 << NAK_OUT_PACKETS
));
873 status
= net2272_kick_dma(ep
, req
);
876 /* dma failed (most likely in use by another endpoint)
882 status
= net2272_write_fifo(ep
, req
);
884 s
= net2272_ep_read(ep
, EP_STAT0
);
885 if ((s
& (1 << BUFFER_EMPTY
)) == 0)
886 status
= net2272_read_fifo(ep
, req
);
889 if (unlikely(status
!= 0)) {
897 list_add_tail(&req
->queue
, &ep
->queue
);
899 if (likely(!list_empty(&ep
->queue
)))
900 net2272_ep_write(ep
, EP_RSPCLR
, 1 << ALT_NAK_OUT_PACKETS
);
902 spin_unlock_irqrestore(&dev
->lock
, flags
);
907 /* dequeue ALL requests */
909 net2272_dequeue_all(struct net2272_ep
*ep
)
911 struct net2272_request
*req
;
913 /* called with spinlock held */
916 while (!list_empty(&ep
->queue
)) {
917 req
= list_entry(ep
->queue
.next
,
918 struct net2272_request
,
920 net2272_done(ep
, req
, -ESHUTDOWN
);
924 /* dequeue JUST ONE request */
926 net2272_dequeue(struct usb_ep
*_ep
, struct usb_request
*_req
)
928 struct net2272_ep
*ep
;
929 struct net2272_request
*req
;
933 ep
= container_of(_ep
, struct net2272_ep
, ep
);
934 if (!_ep
|| (!ep
->desc
&& ep
->num
!= 0) || !_req
)
937 spin_lock_irqsave(&ep
->dev
->lock
, flags
);
938 stopped
= ep
->stopped
;
941 /* make sure it's still queued on this endpoint */
942 list_for_each_entry(req
, &ep
->queue
, queue
) {
943 if (&req
->req
== _req
)
946 if (&req
->req
!= _req
) {
947 ep
->stopped
= stopped
;
948 spin_unlock_irqrestore(&ep
->dev
->lock
, flags
);
952 /* queue head may be partially complete */
953 if (ep
->queue
.next
== &req
->queue
) {
954 dev_dbg(ep
->dev
->dev
, "unlink (%s) pio\n", _ep
->name
);
955 net2272_done(ep
, req
, -ECONNRESET
);
958 ep
->stopped
= stopped
;
960 spin_unlock_irqrestore(&ep
->dev
->lock
, flags
);
964 /*---------------------------------------------------------------------------*/
967 net2272_set_halt_and_wedge(struct usb_ep
*_ep
, int value
, int wedged
)
969 struct net2272_ep
*ep
;
973 ep
= container_of(_ep
, struct net2272_ep
, ep
);
974 if (!_ep
|| (!ep
->desc
&& ep
->num
!= 0))
976 if (!ep
->dev
->driver
|| ep
->dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
978 if (ep
->desc
/* not ep0 */ && usb_endpoint_xfer_isoc(ep
->desc
))
981 spin_lock_irqsave(&ep
->dev
->lock
, flags
);
982 if (!list_empty(&ep
->queue
))
984 else if (ep
->is_in
&& value
&& net2272_fifo_status(_ep
) != 0)
987 dev_vdbg(ep
->dev
->dev
, "%s %s %s\n", _ep
->name
,
988 value
? "set" : "clear",
989 wedged
? "wedge" : "halt");
993 ep
->dev
->protocol_stall
= 1;
1003 spin_unlock_irqrestore(&ep
->dev
->lock
, flags
);
1009 net2272_set_halt(struct usb_ep
*_ep
, int value
)
1011 return net2272_set_halt_and_wedge(_ep
, value
, 0);
1015 net2272_set_wedge(struct usb_ep
*_ep
)
1017 if (!_ep
|| _ep
->name
== ep0name
)
1019 return net2272_set_halt_and_wedge(_ep
, 1, 1);
1023 net2272_fifo_status(struct usb_ep
*_ep
)
1025 struct net2272_ep
*ep
;
1028 ep
= container_of(_ep
, struct net2272_ep
, ep
);
1029 if (!_ep
|| (!ep
->desc
&& ep
->num
!= 0))
1031 if (!ep
->dev
->driver
|| ep
->dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
1034 avail
= net2272_ep_read(ep
, EP_AVAIL1
) << 8;
1035 avail
|= net2272_ep_read(ep
, EP_AVAIL0
);
1036 if (avail
> ep
->fifo_size
)
1039 avail
= ep
->fifo_size
- avail
;
1044 net2272_fifo_flush(struct usb_ep
*_ep
)
1046 struct net2272_ep
*ep
;
1048 ep
= container_of(_ep
, struct net2272_ep
, ep
);
1049 if (!_ep
|| (!ep
->desc
&& ep
->num
!= 0))
1051 if (!ep
->dev
->driver
|| ep
->dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
1054 net2272_ep_write(ep
, EP_STAT1
, 1 << BUFFER_FLUSH
);
1057 static const struct usb_ep_ops net2272_ep_ops
= {
1058 .enable
= net2272_enable
,
1059 .disable
= net2272_disable
,
1061 .alloc_request
= net2272_alloc_request
,
1062 .free_request
= net2272_free_request
,
1064 .queue
= net2272_queue
,
1065 .dequeue
= net2272_dequeue
,
1067 .set_halt
= net2272_set_halt
,
1068 .set_wedge
= net2272_set_wedge
,
1069 .fifo_status
= net2272_fifo_status
,
1070 .fifo_flush
= net2272_fifo_flush
,
1073 /*---------------------------------------------------------------------------*/
1076 net2272_get_frame(struct usb_gadget
*_gadget
)
1078 struct net2272
*dev
;
1079 unsigned long flags
;
1084 dev
= container_of(_gadget
, struct net2272
, gadget
);
1085 spin_lock_irqsave(&dev
->lock
, flags
);
1087 ret
= net2272_read(dev
, FRAME1
) << 8;
1088 ret
|= net2272_read(dev
, FRAME0
);
1090 spin_unlock_irqrestore(&dev
->lock
, flags
);
1095 net2272_wakeup(struct usb_gadget
*_gadget
)
1097 struct net2272
*dev
;
1099 unsigned long flags
;
1103 dev
= container_of(_gadget
, struct net2272
, gadget
);
1105 spin_lock_irqsave(&dev
->lock
, flags
);
1106 tmp
= net2272_read(dev
, USBCTL0
);
1107 if (tmp
& (1 << IO_WAKEUP_ENABLE
))
1108 net2272_write(dev
, USBCTL1
, (1 << GENERATE_RESUME
));
1110 spin_unlock_irqrestore(&dev
->lock
, flags
);
1116 net2272_set_selfpowered(struct usb_gadget
*_gadget
, int value
)
1121 _gadget
->is_selfpowered
= (value
!= 0);
1127 net2272_pullup(struct usb_gadget
*_gadget
, int is_on
)
1129 struct net2272
*dev
;
1131 unsigned long flags
;
1135 dev
= container_of(_gadget
, struct net2272
, gadget
);
1137 spin_lock_irqsave(&dev
->lock
, flags
);
1138 tmp
= net2272_read(dev
, USBCTL0
);
1139 dev
->softconnect
= (is_on
!= 0);
1141 tmp
|= (1 << USB_DETECT_ENABLE
);
1143 tmp
&= ~(1 << USB_DETECT_ENABLE
);
1144 net2272_write(dev
, USBCTL0
, tmp
);
1145 spin_unlock_irqrestore(&dev
->lock
, flags
);
1150 static int net2272_start(struct usb_gadget
*_gadget
,
1151 struct usb_gadget_driver
*driver
);
1152 static int net2272_stop(struct usb_gadget
*_gadget
);
1154 static const struct usb_gadget_ops net2272_ops
= {
1155 .get_frame
= net2272_get_frame
,
1156 .wakeup
= net2272_wakeup
,
1157 .set_selfpowered
= net2272_set_selfpowered
,
1158 .pullup
= net2272_pullup
,
1159 .udc_start
= net2272_start
,
1160 .udc_stop
= net2272_stop
,
1163 /*---------------------------------------------------------------------------*/
1166 registers_show(struct device
*_dev
, struct device_attribute
*attr
, char *buf
)
1168 struct net2272
*dev
;
1171 unsigned long flags
;
1176 dev
= dev_get_drvdata(_dev
);
1179 spin_lock_irqsave(&dev
->lock
, flags
);
1181 /* Main Control Registers */
1182 t
= scnprintf(next
, size
, "%s version %s,"
1183 "chiprev %02x, locctl %02x\n"
1184 "irqenb0 %02x irqenb1 %02x "
1185 "irqstat0 %02x irqstat1 %02x\n",
1186 driver_name
, driver_vers
, dev
->chiprev
,
1187 net2272_read(dev
, LOCCTL
),
1188 net2272_read(dev
, IRQENB0
),
1189 net2272_read(dev
, IRQENB1
),
1190 net2272_read(dev
, IRQSTAT0
),
1191 net2272_read(dev
, IRQSTAT1
));
1196 t1
= net2272_read(dev
, DMAREQ
);
1197 t
= scnprintf(next
, size
, "\ndmareq %02x: %s %s%s%s%s\n",
1198 t1
, ep_name
[(t1
& 0x01) + 1],
1199 t1
& (1 << DMA_CONTROL_DACK
) ? "dack " : "",
1200 t1
& (1 << DMA_REQUEST_ENABLE
) ? "reqenb " : "",
1201 t1
& (1 << DMA_REQUEST
) ? "req " : "",
1202 t1
& (1 << DMA_BUFFER_VALID
) ? "valid " : "");
1206 /* USB Control Registers */
1207 t1
= net2272_read(dev
, USBCTL1
);
1208 if (t1
& (1 << VBUS_PIN
)) {
1209 if (t1
& (1 << USB_HIGH_SPEED
))
1211 else if (dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
1217 t
= scnprintf(next
, size
,
1218 "usbctl0 %02x usbctl1 %02x addr 0x%02x (%s)\n",
1219 net2272_read(dev
, USBCTL0
), t1
,
1220 net2272_read(dev
, OURADDR
), s
);
1224 /* Endpoint Registers */
1225 for (i
= 0; i
< 4; ++i
) {
1226 struct net2272_ep
*ep
;
1232 t1
= net2272_ep_read(ep
, EP_CFG
);
1233 t2
= net2272_ep_read(ep
, EP_RSPSET
);
1234 t
= scnprintf(next
, size
,
1235 "\n%s\tcfg %02x rsp (%02x) %s%s%s%s%s%s%s%s"
1237 ep
->ep
.name
, t1
, t2
,
1238 (t2
& (1 << ALT_NAK_OUT_PACKETS
)) ? "NAK " : "",
1239 (t2
& (1 << HIDE_STATUS_PHASE
)) ? "hide " : "",
1240 (t2
& (1 << AUTOVALIDATE
)) ? "auto " : "",
1241 (t2
& (1 << INTERRUPT_MODE
)) ? "interrupt " : "",
1242 (t2
& (1 << CONTROL_STATUS_PHASE_HANDSHAKE
)) ? "status " : "",
1243 (t2
& (1 << NAK_OUT_PACKETS_MODE
)) ? "NAKmode " : "",
1244 (t2
& (1 << ENDPOINT_TOGGLE
)) ? "DATA1 " : "DATA0 ",
1245 (t2
& (1 << ENDPOINT_HALT
)) ? "HALT " : "",
1246 net2272_ep_read(ep
, EP_IRQENB
));
1250 t
= scnprintf(next
, size
,
1251 "\tstat0 %02x stat1 %02x avail %04x "
1253 net2272_ep_read(ep
, EP_STAT0
),
1254 net2272_ep_read(ep
, EP_STAT1
),
1255 (net2272_ep_read(ep
, EP_AVAIL1
) << 8) | net2272_ep_read(ep
, EP_AVAIL0
),
1257 ep
->is_in
? "in" : "out",
1258 type_string(t1
>> 5),
1259 ep
->stopped
? "*" : "");
1263 t
= scnprintf(next
, size
,
1264 "\tep_transfer %06x\n",
1265 ((net2272_ep_read(ep
, EP_TRANSFER2
) & 0xff) << 16) |
1266 ((net2272_ep_read(ep
, EP_TRANSFER1
) & 0xff) << 8) |
1267 ((net2272_ep_read(ep
, EP_TRANSFER0
) & 0xff)));
1271 t1
= net2272_ep_read(ep
, EP_BUFF_STATES
) & 0x03;
1272 t2
= (net2272_ep_read(ep
, EP_BUFF_STATES
) >> 2) & 0x03;
1273 t
= scnprintf(next
, size
,
1274 "\tbuf-a %s buf-b %s\n",
1275 buf_state_string(t1
),
1276 buf_state_string(t2
));
1281 spin_unlock_irqrestore(&dev
->lock
, flags
);
1283 return PAGE_SIZE
- size
;
1285 static DEVICE_ATTR_RO(registers
);
1287 /*---------------------------------------------------------------------------*/
1290 net2272_set_fifo_mode(struct net2272
*dev
, int mode
)
1294 tmp
= net2272_read(dev
, LOCCTL
) & 0x3f;
1296 net2272_write(dev
, LOCCTL
, tmp
);
1298 INIT_LIST_HEAD(&dev
->gadget
.ep_list
);
1300 /* always ep-a, ep-c ... maybe not ep-b */
1301 list_add_tail(&dev
->ep
[1].ep
.ep_list
, &dev
->gadget
.ep_list
);
1305 list_add_tail(&dev
->ep
[2].ep
.ep_list
, &dev
->gadget
.ep_list
);
1306 dev
->ep
[1].fifo_size
= dev
->ep
[2].fifo_size
= 512;
1309 list_add_tail(&dev
->ep
[2].ep
.ep_list
, &dev
->gadget
.ep_list
);
1310 dev
->ep
[1].fifo_size
= 1024;
1311 dev
->ep
[2].fifo_size
= 512;
1314 list_add_tail(&dev
->ep
[2].ep
.ep_list
, &dev
->gadget
.ep_list
);
1315 dev
->ep
[1].fifo_size
= dev
->ep
[2].fifo_size
= 1024;
1318 dev
->ep
[1].fifo_size
= 1024;
1322 /* ep-c is always 2 512 byte buffers */
1323 list_add_tail(&dev
->ep
[3].ep
.ep_list
, &dev
->gadget
.ep_list
);
1324 dev
->ep
[3].fifo_size
= 512;
1327 /*---------------------------------------------------------------------------*/
1330 net2272_usb_reset(struct net2272
*dev
)
1332 dev
->gadget
.speed
= USB_SPEED_UNKNOWN
;
1334 net2272_cancel_dma(dev
);
1336 net2272_write(dev
, IRQENB0
, 0);
1337 net2272_write(dev
, IRQENB1
, 0);
1339 /* clear irq state */
1340 net2272_write(dev
, IRQSTAT0
, 0xff);
1341 net2272_write(dev
, IRQSTAT1
, ~(1 << SUSPEND_REQUEST_INTERRUPT
));
1343 net2272_write(dev
, DMAREQ
,
1344 (0 << DMA_BUFFER_VALID
) |
1345 (0 << DMA_REQUEST_ENABLE
) |
1346 (1 << DMA_CONTROL_DACK
) |
1347 (dev
->dma_eot_polarity
<< EOT_POLARITY
) |
1348 (dev
->dma_dack_polarity
<< DACK_POLARITY
) |
1349 (dev
->dma_dreq_polarity
<< DREQ_POLARITY
) |
1350 ((dma_ep
>> 1) << DMA_ENDPOINT_SELECT
));
1352 net2272_cancel_dma(dev
);
1353 net2272_set_fifo_mode(dev
, (fifo_mode
<= 3) ? fifo_mode
: 0);
1355 /* Set the NET2272 ep fifo data width to 16-bit mode and for correct byte swapping
1356 * note that the higher level gadget drivers are expected to convert data to little endian.
1357 * Enable byte swap for your local bus/cpu if needed by setting BYTE_SWAP in LOCCTL here
1359 net2272_write(dev
, LOCCTL
, net2272_read(dev
, LOCCTL
) | (1 << DATA_WIDTH
));
1360 net2272_write(dev
, LOCCTL1
, (dma_mode
<< DMA_MODE
));
1364 net2272_usb_reinit(struct net2272
*dev
)
1368 /* basic endpoint init */
1369 for (i
= 0; i
< 4; ++i
) {
1370 struct net2272_ep
*ep
= &dev
->ep
[i
];
1372 ep
->ep
.name
= ep_name
[i
];
1377 if (use_dma
&& ep
->num
== dma_ep
)
1380 if (i
> 0 && i
<= 3)
1381 ep
->fifo_size
= 512;
1384 net2272_ep_reset(ep
);
1387 ep
->ep
.caps
.type_control
= true;
1389 ep
->ep
.caps
.type_iso
= true;
1390 ep
->ep
.caps
.type_bulk
= true;
1391 ep
->ep
.caps
.type_int
= true;
1394 ep
->ep
.caps
.dir_in
= true;
1395 ep
->ep
.caps
.dir_out
= true;
1397 usb_ep_set_maxpacket_limit(&dev
->ep
[0].ep
, 64);
1399 dev
->gadget
.ep0
= &dev
->ep
[0].ep
;
1400 dev
->ep
[0].stopped
= 0;
1401 INIT_LIST_HEAD(&dev
->gadget
.ep0
->ep_list
);
1405 net2272_ep0_start(struct net2272
*dev
)
1407 struct net2272_ep
*ep0
= &dev
->ep
[0];
1409 net2272_ep_write(ep0
, EP_RSPSET
,
1410 (1 << NAK_OUT_PACKETS_MODE
) |
1411 (1 << ALT_NAK_OUT_PACKETS
));
1412 net2272_ep_write(ep0
, EP_RSPCLR
,
1413 (1 << HIDE_STATUS_PHASE
) |
1414 (1 << CONTROL_STATUS_PHASE_HANDSHAKE
));
1415 net2272_write(dev
, USBCTL0
,
1416 (dev
->softconnect
<< USB_DETECT_ENABLE
) |
1417 (1 << USB_ROOT_PORT_WAKEUP_ENABLE
) |
1418 (1 << IO_WAKEUP_ENABLE
));
1419 net2272_write(dev
, IRQENB0
,
1420 (1 << SETUP_PACKET_INTERRUPT_ENABLE
) |
1421 (1 << ENDPOINT_0_INTERRUPT_ENABLE
) |
1422 (1 << DMA_DONE_INTERRUPT_ENABLE
));
1423 net2272_write(dev
, IRQENB1
,
1424 (1 << VBUS_INTERRUPT_ENABLE
) |
1425 (1 << ROOT_PORT_RESET_INTERRUPT_ENABLE
) |
1426 (1 << SUSPEND_REQUEST_CHANGE_INTERRUPT_ENABLE
));
1429 /* when a driver is successfully registered, it will receive
1430 * control requests including set_configuration(), which enables
1431 * non-control requests. then usb traffic follows until a
1432 * disconnect is reported. then a host may connect again, or
1433 * the driver might get unbound.
1435 static int net2272_start(struct usb_gadget
*_gadget
,
1436 struct usb_gadget_driver
*driver
)
1438 struct net2272
*dev
;
1441 if (!driver
|| !driver
->setup
||
1442 driver
->max_speed
!= USB_SPEED_HIGH
)
1445 dev
= container_of(_gadget
, struct net2272
, gadget
);
1447 for (i
= 0; i
< 4; ++i
)
1448 dev
->ep
[i
].irqs
= 0;
1449 /* hook up the driver ... */
1450 dev
->softconnect
= 1;
1451 driver
->driver
.bus
= NULL
;
1452 dev
->driver
= driver
;
1454 /* ... then enable host detection and ep0; and we're ready
1455 * for set_configuration as well as eventual disconnect.
1457 net2272_ep0_start(dev
);
1463 stop_activity(struct net2272
*dev
, struct usb_gadget_driver
*driver
)
1467 /* don't disconnect if it's not connected */
1468 if (dev
->gadget
.speed
== USB_SPEED_UNKNOWN
)
1471 /* stop hardware; prevent new request submissions;
1472 * and kill any outstanding requests.
1474 net2272_usb_reset(dev
);
1475 for (i
= 0; i
< 4; ++i
)
1476 net2272_dequeue_all(&dev
->ep
[i
]);
1478 /* report disconnect; the driver is already quiesced */
1480 spin_unlock(&dev
->lock
);
1481 driver
->disconnect(&dev
->gadget
);
1482 spin_lock(&dev
->lock
);
1485 net2272_usb_reinit(dev
);
1488 static int net2272_stop(struct usb_gadget
*_gadget
)
1490 struct net2272
*dev
;
1491 unsigned long flags
;
1493 dev
= container_of(_gadget
, struct net2272
, gadget
);
1495 spin_lock_irqsave(&dev
->lock
, flags
);
1496 stop_activity(dev
, NULL
);
1497 spin_unlock_irqrestore(&dev
->lock
, flags
);
1504 /*---------------------------------------------------------------------------*/
1505 /* handle ep-a/ep-b dma completions */
1507 net2272_handle_dma(struct net2272_ep
*ep
)
1509 struct net2272_request
*req
;
1513 if (!list_empty(&ep
->queue
))
1514 req
= list_entry(ep
->queue
.next
,
1515 struct net2272_request
, queue
);
1519 dev_vdbg(ep
->dev
->dev
, "handle_dma %s req %p\n", ep
->ep
.name
, req
);
1521 /* Ensure DREQ is de-asserted */
1522 net2272_write(ep
->dev
, DMAREQ
,
1523 (0 << DMA_BUFFER_VALID
)
1524 | (0 << DMA_REQUEST_ENABLE
)
1525 | (1 << DMA_CONTROL_DACK
)
1526 | (ep
->dev
->dma_eot_polarity
<< EOT_POLARITY
)
1527 | (ep
->dev
->dma_dack_polarity
<< DACK_POLARITY
)
1528 | (ep
->dev
->dma_dreq_polarity
<< DREQ_POLARITY
)
1529 | (ep
->dma
<< DMA_ENDPOINT_SELECT
));
1531 ep
->dev
->dma_busy
= 0;
1533 net2272_ep_write(ep
, EP_IRQENB
,
1534 (1 << DATA_PACKET_RECEIVED_INTERRUPT_ENABLE
)
1535 | (1 << DATA_PACKET_TRANSMITTED_INTERRUPT_ENABLE
)
1536 | net2272_ep_read(ep
, EP_IRQENB
));
1538 /* device-to-host transfer completed */
1540 /* validate a short packet or zlp if necessary */
1541 if ((req
->req
.length
% ep
->ep
.maxpacket
!= 0) ||
1543 set_fifo_bytecount(ep
, 0);
1545 net2272_done(ep
, req
, 0);
1546 if (!list_empty(&ep
->queue
)) {
1547 req
= list_entry(ep
->queue
.next
,
1548 struct net2272_request
, queue
);
1549 status
= net2272_kick_dma(ep
, req
);
1551 net2272_pio_advance(ep
);
1554 /* host-to-device transfer completed */
1556 /* terminated with a short packet? */
1557 if (net2272_read(ep
->dev
, IRQSTAT0
) &
1558 (1 << DMA_DONE_INTERRUPT
)) {
1559 /* abort system dma */
1560 net2272_cancel_dma(ep
->dev
);
1563 /* EP_TRANSFER will contain the number of bytes
1564 * actually received.
1565 * NOTE: There is no overflow detection on EP_TRANSFER:
1566 * We can't deal with transfers larger than 2^24 bytes!
1568 len
= (net2272_ep_read(ep
, EP_TRANSFER2
) << 16)
1569 | (net2272_ep_read(ep
, EP_TRANSFER1
) << 8)
1570 | (net2272_ep_read(ep
, EP_TRANSFER0
));
1575 req
->req
.actual
+= len
;
1577 /* get any remaining data */
1578 net2272_pio_advance(ep
);
1582 /*---------------------------------------------------------------------------*/
1585 net2272_handle_ep(struct net2272_ep
*ep
)
1587 struct net2272_request
*req
;
1590 if (!list_empty(&ep
->queue
))
1591 req
= list_entry(ep
->queue
.next
,
1592 struct net2272_request
, queue
);
1596 /* ack all, and handle what we care about */
1597 stat0
= net2272_ep_read(ep
, EP_STAT0
);
1598 stat1
= net2272_ep_read(ep
, EP_STAT1
);
1601 dev_vdbg(ep
->dev
->dev
, "%s ack ep_stat0 %02x, ep_stat1 %02x, req %p\n",
1602 ep
->ep
.name
, stat0
, stat1
, req
? &req
->req
: NULL
);
1604 net2272_ep_write(ep
, EP_STAT0
, stat0
&
1605 ~((1 << NAK_OUT_PACKETS
)
1606 | (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT
)));
1607 net2272_ep_write(ep
, EP_STAT1
, stat1
);
1609 /* data packet(s) received (in the fifo, OUT)
1610 * direction must be validated, otherwise control read status phase
1611 * could be interpreted as a valid packet
1613 if (!ep
->is_in
&& (stat0
& (1 << DATA_PACKET_RECEIVED_INTERRUPT
)))
1614 net2272_pio_advance(ep
);
1615 /* data packet(s) transmitted (IN) */
1616 else if (stat0
& (1 << DATA_PACKET_TRANSMITTED_INTERRUPT
))
1617 net2272_pio_advance(ep
);
1620 static struct net2272_ep
*
1621 net2272_get_ep_by_addr(struct net2272
*dev
, u16 wIndex
)
1623 struct net2272_ep
*ep
;
1625 if ((wIndex
& USB_ENDPOINT_NUMBER_MASK
) == 0)
1628 list_for_each_entry(ep
, &dev
->gadget
.ep_list
, ep
.ep_list
) {
1629 u8 bEndpointAddress
;
1633 bEndpointAddress
= ep
->desc
->bEndpointAddress
;
1634 if ((wIndex
^ bEndpointAddress
) & USB_DIR_IN
)
1636 if ((wIndex
& 0x0f) == (bEndpointAddress
& 0x0f))
1647 * JJJJJJJKKKKKKK * 8
1649 * {JKKKKKKK * 10}, JK
1651 static const u8 net2272_test_packet
[] = {
1652 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1653 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
1654 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
1655 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
1656 0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD,
1657 0xFC, 0x7E, 0xBF, 0xDF, 0xEF, 0xF7, 0xFD, 0x7E
1661 net2272_set_test_mode(struct net2272
*dev
, int mode
)
1665 /* Disable all net2272 interrupts:
1666 * Nothing but a power cycle should stop the test.
1668 net2272_write(dev
, IRQENB0
, 0x00);
1669 net2272_write(dev
, IRQENB1
, 0x00);
1671 /* Force tranceiver to high-speed */
1672 net2272_write(dev
, XCVRDIAG
, 1 << FORCE_HIGH_SPEED
);
1674 net2272_write(dev
, PAGESEL
, 0);
1675 net2272_write(dev
, EP_STAT0
, 1 << DATA_PACKET_TRANSMITTED_INTERRUPT
);
1676 net2272_write(dev
, EP_RSPCLR
,
1677 (1 << CONTROL_STATUS_PHASE_HANDSHAKE
)
1678 | (1 << HIDE_STATUS_PHASE
));
1679 net2272_write(dev
, EP_CFG
, 1 << ENDPOINT_DIRECTION
);
1680 net2272_write(dev
, EP_STAT1
, 1 << BUFFER_FLUSH
);
1682 /* wait for status phase to complete */
1683 while (!(net2272_read(dev
, EP_STAT0
) &
1684 (1 << DATA_PACKET_TRANSMITTED_INTERRUPT
)))
1687 /* Enable test mode */
1688 net2272_write(dev
, USBTEST
, mode
);
1690 /* load test packet */
1691 if (mode
== TEST_PACKET
) {
1692 /* switch to 8 bit mode */
1693 net2272_write(dev
, LOCCTL
, net2272_read(dev
, LOCCTL
) &
1694 ~(1 << DATA_WIDTH
));
1696 for (i
= 0; i
< sizeof(net2272_test_packet
); ++i
)
1697 net2272_write(dev
, EP_DATA
, net2272_test_packet
[i
]);
1699 /* Validate test packet */
1700 net2272_write(dev
, EP_TRANSFER0
, 0);
1705 net2272_handle_stat0_irqs(struct net2272
*dev
, u8 stat
)
1707 struct net2272_ep
*ep
;
1710 /* starting a control request? */
1711 if (unlikely(stat
& (1 << SETUP_PACKET_INTERRUPT
))) {
1714 struct usb_ctrlrequest r
;
1717 struct net2272_request
*req
;
1719 if (dev
->gadget
.speed
== USB_SPEED_UNKNOWN
) {
1720 if (net2272_read(dev
, USBCTL1
) & (1 << USB_HIGH_SPEED
))
1721 dev
->gadget
.speed
= USB_SPEED_HIGH
;
1723 dev
->gadget
.speed
= USB_SPEED_FULL
;
1724 dev_dbg(dev
->dev
, "%s\n",
1725 usb_speed_string(dev
->gadget
.speed
));
1731 /* make sure any leftover interrupt state is cleared */
1732 stat
&= ~(1 << ENDPOINT_0_INTERRUPT
);
1733 while (!list_empty(&ep
->queue
)) {
1734 req
= list_entry(ep
->queue
.next
,
1735 struct net2272_request
, queue
);
1736 net2272_done(ep
, req
,
1737 (req
->req
.actual
== req
->req
.length
) ? 0 : -EPROTO
);
1740 dev
->protocol_stall
= 0;
1741 net2272_ep_write(ep
, EP_STAT0
,
1742 (1 << DATA_IN_TOKEN_INTERRUPT
)
1743 | (1 << DATA_OUT_TOKEN_INTERRUPT
)
1744 | (1 << DATA_PACKET_TRANSMITTED_INTERRUPT
)
1745 | (1 << DATA_PACKET_RECEIVED_INTERRUPT
)
1746 | (1 << SHORT_PACKET_TRANSFERRED_INTERRUPT
));
1747 net2272_ep_write(ep
, EP_STAT1
,
1749 | (1 << USB_OUT_ACK_SENT
)
1750 | (1 << USB_OUT_NAK_SENT
)
1751 | (1 << USB_IN_ACK_RCVD
)
1752 | (1 << USB_IN_NAK_SENT
)
1753 | (1 << USB_STALL_SENT
)
1754 | (1 << LOCAL_OUT_ZLP
));
1757 * Ensure Control Read pre-validation setting is beyond maximum size
1758 * - Control Writes can leave non-zero values in EP_TRANSFER. If
1759 * an EP0 transfer following the Control Write is a Control Read,
1760 * the NET2272 sees the non-zero EP_TRANSFER as an unexpected
1761 * pre-validation count.
1762 * - Setting EP_TRANSFER beyond the maximum EP0 transfer size ensures
1763 * the pre-validation count cannot cause an unexpected validatation
1765 net2272_write(dev
, PAGESEL
, 0);
1766 net2272_write(dev
, EP_TRANSFER2
, 0xff);
1767 net2272_write(dev
, EP_TRANSFER1
, 0xff);
1768 net2272_write(dev
, EP_TRANSFER0
, 0xff);
1770 u
.raw
[0] = net2272_read(dev
, SETUP0
);
1771 u
.raw
[1] = net2272_read(dev
, SETUP1
);
1772 u
.raw
[2] = net2272_read(dev
, SETUP2
);
1773 u
.raw
[3] = net2272_read(dev
, SETUP3
);
1774 u
.raw
[4] = net2272_read(dev
, SETUP4
);
1775 u
.raw
[5] = net2272_read(dev
, SETUP5
);
1776 u
.raw
[6] = net2272_read(dev
, SETUP6
);
1777 u
.raw
[7] = net2272_read(dev
, SETUP7
);
1779 * If you have a big endian cpu make sure le16_to_cpus
1780 * performs the proper byte swapping here...
1782 le16_to_cpus(&u
.r
.wValue
);
1783 le16_to_cpus(&u
.r
.wIndex
);
1784 le16_to_cpus(&u
.r
.wLength
);
1787 net2272_write(dev
, IRQSTAT0
, 1 << SETUP_PACKET_INTERRUPT
);
1788 stat
^= (1 << SETUP_PACKET_INTERRUPT
);
1790 /* watch control traffic at the token level, and force
1791 * synchronization before letting the status phase happen.
1793 ep
->is_in
= (u
.r
.bRequestType
& USB_DIR_IN
) != 0;
1795 scratch
= (1 << DATA_PACKET_TRANSMITTED_INTERRUPT_ENABLE
)
1796 | (1 << DATA_OUT_TOKEN_INTERRUPT_ENABLE
)
1797 | (1 << DATA_IN_TOKEN_INTERRUPT_ENABLE
);
1798 stop_out_naking(ep
);
1800 scratch
= (1 << DATA_PACKET_RECEIVED_INTERRUPT_ENABLE
)
1801 | (1 << DATA_OUT_TOKEN_INTERRUPT_ENABLE
)
1802 | (1 << DATA_IN_TOKEN_INTERRUPT_ENABLE
);
1803 net2272_ep_write(ep
, EP_IRQENB
, scratch
);
1805 if ((u
.r
.bRequestType
& USB_TYPE_MASK
) != USB_TYPE_STANDARD
)
1807 switch (u
.r
.bRequest
) {
1808 case USB_REQ_GET_STATUS
: {
1809 struct net2272_ep
*e
;
1812 switch (u
.r
.bRequestType
& USB_RECIP_MASK
) {
1813 case USB_RECIP_ENDPOINT
:
1814 e
= net2272_get_ep_by_addr(dev
, u
.r
.wIndex
);
1815 if (!e
|| u
.r
.wLength
> 2)
1817 if (net2272_ep_read(e
, EP_RSPSET
) & (1 << ENDPOINT_HALT
))
1818 status
= cpu_to_le16(1);
1820 status
= cpu_to_le16(0);
1822 /* don't bother with a request object! */
1823 net2272_ep_write(&dev
->ep
[0], EP_IRQENB
, 0);
1824 writew(status
, net2272_reg_addr(dev
, EP_DATA
));
1825 set_fifo_bytecount(&dev
->ep
[0], 0);
1827 dev_vdbg(dev
->dev
, "%s stat %02x\n",
1828 ep
->ep
.name
, status
);
1829 goto next_endpoints
;
1830 case USB_RECIP_DEVICE
:
1831 if (u
.r
.wLength
> 2)
1833 if (dev
->gadget
.is_selfpowered
)
1834 status
= (1 << USB_DEVICE_SELF_POWERED
);
1836 /* don't bother with a request object! */
1837 net2272_ep_write(&dev
->ep
[0], EP_IRQENB
, 0);
1838 writew(status
, net2272_reg_addr(dev
, EP_DATA
));
1839 set_fifo_bytecount(&dev
->ep
[0], 0);
1841 dev_vdbg(dev
->dev
, "device stat %02x\n", status
);
1842 goto next_endpoints
;
1843 case USB_RECIP_INTERFACE
:
1844 if (u
.r
.wLength
> 2)
1847 /* don't bother with a request object! */
1848 net2272_ep_write(&dev
->ep
[0], EP_IRQENB
, 0);
1849 writew(status
, net2272_reg_addr(dev
, EP_DATA
));
1850 set_fifo_bytecount(&dev
->ep
[0], 0);
1852 dev_vdbg(dev
->dev
, "interface status %02x\n", status
);
1853 goto next_endpoints
;
1858 case USB_REQ_CLEAR_FEATURE
: {
1859 struct net2272_ep
*e
;
1861 if (u
.r
.bRequestType
!= USB_RECIP_ENDPOINT
)
1863 if (u
.r
.wValue
!= USB_ENDPOINT_HALT
||
1866 e
= net2272_get_ep_by_addr(dev
, u
.r
.wIndex
);
1870 dev_vdbg(dev
->dev
, "%s wedged, halt not cleared\n",
1873 dev_vdbg(dev
->dev
, "%s clear halt\n", ep
->ep
.name
);
1877 goto next_endpoints
;
1879 case USB_REQ_SET_FEATURE
: {
1880 struct net2272_ep
*e
;
1882 if (u
.r
.bRequestType
== USB_RECIP_DEVICE
) {
1883 if (u
.r
.wIndex
!= NORMAL_OPERATION
)
1884 net2272_set_test_mode(dev
, (u
.r
.wIndex
>> 8));
1886 dev_vdbg(dev
->dev
, "test mode: %d\n", u
.r
.wIndex
);
1887 goto next_endpoints
;
1888 } else if (u
.r
.bRequestType
!= USB_RECIP_ENDPOINT
)
1890 if (u
.r
.wValue
!= USB_ENDPOINT_HALT
||
1893 e
= net2272_get_ep_by_addr(dev
, u
.r
.wIndex
);
1898 dev_vdbg(dev
->dev
, "%s set halt\n", ep
->ep
.name
);
1899 goto next_endpoints
;
1901 case USB_REQ_SET_ADDRESS
: {
1902 net2272_write(dev
, OURADDR
, u
.r
.wValue
& 0xff);
1908 dev_vdbg(dev
->dev
, "setup %02x.%02x v%04x i%04x "
1910 u
.r
.bRequestType
, u
.r
.bRequest
,
1911 u
.r
.wValue
, u
.r
.wIndex
,
1912 net2272_ep_read(ep
, EP_CFG
));
1913 spin_unlock(&dev
->lock
);
1914 tmp
= dev
->driver
->setup(&dev
->gadget
, &u
.r
);
1915 spin_lock(&dev
->lock
);
1918 /* stall ep0 on error */
1921 dev_vdbg(dev
->dev
, "req %02x.%02x protocol STALL; stat %d\n",
1922 u
.r
.bRequestType
, u
.r
.bRequest
, tmp
);
1923 dev
->protocol_stall
= 1;
1925 /* endpoint dma irq? */
1926 } else if (stat
& (1 << DMA_DONE_INTERRUPT
)) {
1927 net2272_cancel_dma(dev
);
1928 net2272_write(dev
, IRQSTAT0
, 1 << DMA_DONE_INTERRUPT
);
1929 stat
&= ~(1 << DMA_DONE_INTERRUPT
);
1930 num
= (net2272_read(dev
, DMAREQ
) & (1 << DMA_ENDPOINT_SELECT
))
1934 net2272_handle_dma(ep
);
1938 /* endpoint data irq? */
1939 scratch
= stat
& 0x0f;
1941 for (num
= 0; scratch
; num
++) {
1944 /* does this endpoint's FIFO and queue need tending? */
1946 if ((scratch
& t
) == 0)
1951 net2272_handle_ep(ep
);
1954 /* some interrupts we can just ignore */
1955 stat
&= ~(1 << SOF_INTERRUPT
);
1958 dev_dbg(dev
->dev
, "unhandled irqstat0 %02x\n", stat
);
1962 net2272_handle_stat1_irqs(struct net2272
*dev
, u8 stat
)
1966 /* after disconnect there's nothing else to do! */
1967 tmp
= (1 << VBUS_INTERRUPT
) | (1 << ROOT_PORT_RESET_INTERRUPT
);
1968 mask
= (1 << USB_HIGH_SPEED
) | (1 << USB_FULL_SPEED
);
1972 bool disconnect
= false;
1975 * Ignore disconnects and resets if the speed hasn't been set.
1976 * VBUS can bounce and there's always an initial reset.
1978 net2272_write(dev
, IRQSTAT1
, tmp
);
1979 if (dev
->gadget
.speed
!= USB_SPEED_UNKNOWN
) {
1980 if ((stat
& (1 << VBUS_INTERRUPT
)) &&
1981 (net2272_read(dev
, USBCTL1
) &
1982 (1 << VBUS_PIN
)) == 0) {
1984 dev_dbg(dev
->dev
, "disconnect %s\n",
1985 dev
->driver
->driver
.name
);
1986 } else if ((stat
& (1 << ROOT_PORT_RESET_INTERRUPT
)) &&
1987 (net2272_read(dev
, USBCTL1
) & mask
)
1990 dev_dbg(dev
->dev
, "reset %s\n",
1991 dev
->driver
->driver
.name
);
1994 if (disconnect
|| reset
) {
1995 stop_activity(dev
, dev
->driver
);
1996 net2272_ep0_start(dev
);
1997 spin_unlock(&dev
->lock
);
1999 usb_gadget_udc_reset
2000 (&dev
->gadget
, dev
->driver
);
2002 (dev
->driver
->disconnect
)
2004 spin_lock(&dev
->lock
);
2014 tmp
= (1 << SUSPEND_REQUEST_CHANGE_INTERRUPT
);
2016 net2272_write(dev
, IRQSTAT1
, tmp
);
2017 if (stat
& (1 << SUSPEND_REQUEST_INTERRUPT
)) {
2018 if (dev
->driver
->suspend
)
2019 dev
->driver
->suspend(&dev
->gadget
);
2020 if (!enable_suspend
) {
2021 stat
&= ~(1 << SUSPEND_REQUEST_INTERRUPT
);
2022 dev_dbg(dev
->dev
, "Suspend disabled, ignoring\n");
2025 if (dev
->driver
->resume
)
2026 dev
->driver
->resume(&dev
->gadget
);
2031 /* clear any other status/irqs */
2033 net2272_write(dev
, IRQSTAT1
, stat
);
2035 /* some status we can just ignore */
2036 stat
&= ~((1 << CONTROL_STATUS_INTERRUPT
)
2037 | (1 << SUSPEND_REQUEST_INTERRUPT
)
2038 | (1 << RESUME_INTERRUPT
));
2042 dev_dbg(dev
->dev
, "unhandled irqstat1 %02x\n", stat
);
2045 static irqreturn_t
net2272_irq(int irq
, void *_dev
)
2047 struct net2272
*dev
= _dev
;
2048 #if defined(PLX_PCI_RDK) || defined(PLX_PCI_RDK2)
2051 #if defined(PLX_PCI_RDK)
2054 spin_lock(&dev
->lock
);
2055 #if defined(PLX_PCI_RDK)
2056 intcsr
= readl(dev
->rdk1
.plx9054_base_addr
+ INTCSR
);
2058 if ((intcsr
& LOCAL_INTERRUPT_TEST
) == LOCAL_INTERRUPT_TEST
) {
2059 writel(intcsr
& ~(1 << PCI_INTERRUPT_ENABLE
),
2060 dev
->rdk1
.plx9054_base_addr
+ INTCSR
);
2061 net2272_handle_stat1_irqs(dev
, net2272_read(dev
, IRQSTAT1
));
2062 net2272_handle_stat0_irqs(dev
, net2272_read(dev
, IRQSTAT0
));
2063 intcsr
= readl(dev
->rdk1
.plx9054_base_addr
+ INTCSR
);
2064 writel(intcsr
| (1 << PCI_INTERRUPT_ENABLE
),
2065 dev
->rdk1
.plx9054_base_addr
+ INTCSR
);
2067 if ((intcsr
& DMA_CHANNEL_0_TEST
) == DMA_CHANNEL_0_TEST
) {
2068 writeb((1 << CHANNEL_CLEAR_INTERRUPT
| (0 << CHANNEL_ENABLE
)),
2069 dev
->rdk1
.plx9054_base_addr
+ DMACSR0
);
2071 dmareq
= net2272_read(dev
, DMAREQ
);
2073 net2272_handle_dma(&dev
->ep
[2]);
2075 net2272_handle_dma(&dev
->ep
[1]);
2078 #if defined(PLX_PCI_RDK2)
2079 /* see if PCI int for us by checking irqstat */
2080 intcsr
= readl(dev
->rdk2
.fpga_base_addr
+ RDK2_IRQSTAT
);
2081 if (!(intcsr
& (1 << NET2272_PCI_IRQ
))) {
2082 spin_unlock(&dev
->lock
);
2085 /* check dma interrupts */
2087 /* Platform/devcice interrupt handler */
2088 #if !defined(PLX_PCI_RDK)
2089 net2272_handle_stat1_irqs(dev
, net2272_read(dev
, IRQSTAT1
));
2090 net2272_handle_stat0_irqs(dev
, net2272_read(dev
, IRQSTAT0
));
2092 spin_unlock(&dev
->lock
);
2097 static int net2272_present(struct net2272
*dev
)
2100 * Quick test to see if CPU can communicate properly with the NET2272.
2101 * Verifies connection using writes and reads to write/read and
2102 * read-only registers.
2104 * This routine is strongly recommended especially during early bring-up
2105 * of new hardware, however for designs that do not apply Power On System
2106 * Tests (POST) it may discarded (or perhaps minimized).
2111 /* Verify NET2272 write/read SCRATCH register can write and read */
2112 refval
= net2272_read(dev
, SCRATCH
);
2113 for (ii
= 0; ii
< 0x100; ii
+= 7) {
2114 net2272_write(dev
, SCRATCH
, ii
);
2115 val
= net2272_read(dev
, SCRATCH
);
2118 "%s: write/read SCRATCH register test failed: "
2119 "wrote:0x%2.2x, read:0x%2.2x\n",
2124 /* To be nice, we write the original SCRATCH value back: */
2125 net2272_write(dev
, SCRATCH
, refval
);
2127 /* Verify NET2272 CHIPREV register is read-only: */
2128 refval
= net2272_read(dev
, CHIPREV_2272
);
2129 for (ii
= 0; ii
< 0x100; ii
+= 7) {
2130 net2272_write(dev
, CHIPREV_2272
, ii
);
2131 val
= net2272_read(dev
, CHIPREV_2272
);
2132 if (val
!= refval
) {
2134 "%s: write/read CHIPREV register test failed: "
2135 "wrote 0x%2.2x, read:0x%2.2x expected:0x%2.2x\n",
2136 __func__
, ii
, val
, refval
);
2142 * Verify NET2272's "NET2270 legacy revision" register
2143 * - NET2272 has two revision registers. The NET2270 legacy revision
2144 * register should read the same value, regardless of the NET2272
2145 * silicon revision. The legacy register applies to NET2270
2146 * firmware being applied to the NET2272.
2148 val
= net2272_read(dev
, CHIPREV_LEGACY
);
2149 if (val
!= NET2270_LEGACY_REV
) {
2151 * Unexpected legacy revision value
2152 * - Perhaps the chip is a NET2270?
2155 "%s: WARNING: UNEXPECTED NET2272 LEGACY REGISTER VALUE:\n"
2156 " - CHIPREV_LEGACY: expected 0x%2.2x, got:0x%2.2x. (Not NET2272?)\n",
2157 __func__
, NET2270_LEGACY_REV
, val
);
2162 * Verify NET2272 silicon revision
2163 * - This revision register is appropriate for the silicon version
2166 val
= net2272_read(dev
, CHIPREV_2272
);
2168 case CHIPREV_NET2272_R1
:
2170 * NET2272 Rev 1 has DMA related errata:
2171 * - Newer silicon (Rev 1A or better) required
2174 "%s: Rev 1 detected: newer silicon recommended for DMA support\n",
2177 case CHIPREV_NET2272_R1A
:
2180 /* NET2272 silicon version *may* not work with this firmware */
2182 "%s: unexpected silicon revision register value: "
2183 " CHIPREV_2272: 0x%2.2x\n",
2186 * Return Success, even though the chip rev is not an expected value
2187 * - Older, pre-built firmware can attempt to operate on newer silicon
2188 * - Often, new silicon is perfectly compatible
2192 /* Success: NET2272 checks out OK */
2197 net2272_gadget_release(struct device
*_dev
)
2199 struct net2272
*dev
= dev_get_drvdata(_dev
);
2203 /*---------------------------------------------------------------------------*/
2206 net2272_remove(struct net2272
*dev
)
2208 usb_del_gadget_udc(&dev
->gadget
);
2209 free_irq(dev
->irq
, dev
);
2210 iounmap(dev
->base_addr
);
2211 device_remove_file(dev
->dev
, &dev_attr_registers
);
2213 dev_info(dev
->dev
, "unbind\n");
2216 static struct net2272
*net2272_probe_init(struct device
*dev
, unsigned int irq
)
2218 struct net2272
*ret
;
2221 dev_dbg(dev
, "No IRQ!\n");
2222 return ERR_PTR(-ENODEV
);
2225 /* alloc, and start init */
2226 ret
= kzalloc(sizeof(*ret
), GFP_KERNEL
);
2228 return ERR_PTR(-ENOMEM
);
2230 spin_lock_init(&ret
->lock
);
2233 ret
->gadget
.ops
= &net2272_ops
;
2234 ret
->gadget
.max_speed
= USB_SPEED_HIGH
;
2236 /* the "gadget" abstracts/virtualizes the controller */
2237 ret
->gadget
.name
= driver_name
;
2243 net2272_probe_fin(struct net2272
*dev
, unsigned int irqflags
)
2247 /* See if there... */
2248 if (net2272_present(dev
)) {
2249 dev_warn(dev
->dev
, "2272 not found!\n");
2254 net2272_usb_reset(dev
);
2255 net2272_usb_reinit(dev
);
2257 ret
= request_irq(dev
->irq
, net2272_irq
, irqflags
, driver_name
, dev
);
2259 dev_err(dev
->dev
, "request interrupt %i failed\n", dev
->irq
);
2263 dev
->chiprev
= net2272_read(dev
, CHIPREV_2272
);
2266 dev_info(dev
->dev
, "%s\n", driver_desc
);
2267 dev_info(dev
->dev
, "irq %i, mem %p, chip rev %04x, dma %s\n",
2268 dev
->irq
, dev
->base_addr
, dev
->chiprev
,
2270 dev_info(dev
->dev
, "version: %s\n", driver_vers
);
2272 ret
= device_create_file(dev
->dev
, &dev_attr_registers
);
2276 ret
= usb_add_gadget_udc_release(dev
->dev
, &dev
->gadget
,
2277 net2272_gadget_release
);
2284 device_remove_file(dev
->dev
, &dev_attr_registers
);
2286 free_irq(dev
->irq
, dev
);
2291 #ifdef CONFIG_USB_PCI
2294 * wrap this driver around the specified device, but
2295 * don't respond over USB until a gadget driver binds to us
2299 net2272_rdk1_probe(struct pci_dev
*pdev
, struct net2272
*dev
)
2301 unsigned long resource
, len
, tmp
;
2302 void __iomem
*mem_mapped_addr
[4];
2306 * BAR 0 holds PLX 9054 config registers
2307 * BAR 1 is i/o memory; unused here
2308 * BAR 2 holds EPLD config registers
2309 * BAR 3 holds NET2272 registers
2312 /* Find and map all address spaces */
2313 for (i
= 0; i
< 4; ++i
) {
2315 continue; /* BAR1 unused */
2317 resource
= pci_resource_start(pdev
, i
);
2318 len
= pci_resource_len(pdev
, i
);
2320 if (!request_mem_region(resource
, len
, driver_name
)) {
2321 dev_dbg(dev
->dev
, "controller already in use\n");
2326 mem_mapped_addr
[i
] = ioremap(resource
, len
);
2327 if (mem_mapped_addr
[i
] == NULL
) {
2328 release_mem_region(resource
, len
);
2329 dev_dbg(dev
->dev
, "can't map memory\n");
2335 dev
->rdk1
.plx9054_base_addr
= mem_mapped_addr
[0];
2336 dev
->rdk1
.epld_base_addr
= mem_mapped_addr
[2];
2337 dev
->base_addr
= mem_mapped_addr
[3];
2339 /* Set PLX 9054 bus width (16 bits) */
2340 tmp
= readl(dev
->rdk1
.plx9054_base_addr
+ LBRD1
);
2341 writel((tmp
& ~(3 << MEMORY_SPACE_LOCAL_BUS_WIDTH
)) | W16_BIT
,
2342 dev
->rdk1
.plx9054_base_addr
+ LBRD1
);
2344 /* Enable PLX 9054 Interrupts */
2345 writel(readl(dev
->rdk1
.plx9054_base_addr
+ INTCSR
) |
2346 (1 << PCI_INTERRUPT_ENABLE
) |
2347 (1 << LOCAL_INTERRUPT_INPUT_ENABLE
),
2348 dev
->rdk1
.plx9054_base_addr
+ INTCSR
);
2350 writeb((1 << CHANNEL_CLEAR_INTERRUPT
| (0 << CHANNEL_ENABLE
)),
2351 dev
->rdk1
.plx9054_base_addr
+ DMACSR0
);
2354 writeb((1 << EPLD_DMA_ENABLE
) |
2355 (1 << DMA_CTL_DACK
) |
2356 (1 << DMA_TIMEOUT_ENABLE
) |
2360 (1 << NET2272_RESET
),
2361 dev
->base_addr
+ EPLD_IO_CONTROL_REGISTER
);
2364 writeb(readb(dev
->base_addr
+ EPLD_IO_CONTROL_REGISTER
) &
2365 ~(1 << NET2272_RESET
),
2366 dev
->base_addr
+ EPLD_IO_CONTROL_REGISTER
);
2373 iounmap(mem_mapped_addr
[i
]);
2374 release_mem_region(pci_resource_start(pdev
, i
),
2375 pci_resource_len(pdev
, i
));
2382 net2272_rdk2_probe(struct pci_dev
*pdev
, struct net2272
*dev
)
2384 unsigned long resource
, len
;
2385 void __iomem
*mem_mapped_addr
[2];
2389 * BAR 0 holds FGPA config registers
2390 * BAR 1 holds NET2272 registers
2393 /* Find and map all address spaces, bar2-3 unused in rdk 2 */
2394 for (i
= 0; i
< 2; ++i
) {
2395 resource
= pci_resource_start(pdev
, i
);
2396 len
= pci_resource_len(pdev
, i
);
2398 if (!request_mem_region(resource
, len
, driver_name
)) {
2399 dev_dbg(dev
->dev
, "controller already in use\n");
2404 mem_mapped_addr
[i
] = ioremap(resource
, len
);
2405 if (mem_mapped_addr
[i
] == NULL
) {
2406 release_mem_region(resource
, len
);
2407 dev_dbg(dev
->dev
, "can't map memory\n");
2413 dev
->rdk2
.fpga_base_addr
= mem_mapped_addr
[0];
2414 dev
->base_addr
= mem_mapped_addr
[1];
2417 /* Set 2272 bus width (16 bits) and reset */
2418 writel((1 << CHIP_RESET
), dev
->rdk2
.fpga_base_addr
+ RDK2_LOCCTLRDK
);
2420 writel((1 << BUS_WIDTH
), dev
->rdk2
.fpga_base_addr
+ RDK2_LOCCTLRDK
);
2421 /* Print fpga version number */
2422 dev_info(dev
->dev
, "RDK2 FPGA version %08x\n",
2423 readl(dev
->rdk2
.fpga_base_addr
+ RDK2_FPGAREV
));
2424 /* Enable FPGA Interrupts */
2425 writel((1 << NET2272_PCI_IRQ
), dev
->rdk2
.fpga_base_addr
+ RDK2_IRQENB
);
2431 iounmap(mem_mapped_addr
[i
]);
2432 release_mem_region(pci_resource_start(pdev
, i
),
2433 pci_resource_len(pdev
, i
));
2440 net2272_pci_probe(struct pci_dev
*pdev
, const struct pci_device_id
*id
)
2442 struct net2272
*dev
;
2445 dev
= net2272_probe_init(&pdev
->dev
, pdev
->irq
);
2447 return PTR_ERR(dev
);
2448 dev
->dev_id
= pdev
->device
;
2450 if (pci_enable_device(pdev
) < 0) {
2455 pci_set_master(pdev
);
2457 switch (pdev
->device
) {
2458 case PCI_DEVICE_ID_RDK1
: ret
= net2272_rdk1_probe(pdev
, dev
); break;
2459 case PCI_DEVICE_ID_RDK2
: ret
= net2272_rdk2_probe(pdev
, dev
); break;
2465 ret
= net2272_probe_fin(dev
, 0);
2469 pci_set_drvdata(pdev
, dev
);
2474 pci_disable_device(pdev
);
2482 net2272_rdk1_remove(struct pci_dev
*pdev
, struct net2272
*dev
)
2486 /* disable PLX 9054 interrupts */
2487 writel(readl(dev
->rdk1
.plx9054_base_addr
+ INTCSR
) &
2488 ~(1 << PCI_INTERRUPT_ENABLE
),
2489 dev
->rdk1
.plx9054_base_addr
+ INTCSR
);
2491 /* clean up resources allocated during probe() */
2492 iounmap(dev
->rdk1
.plx9054_base_addr
);
2493 iounmap(dev
->rdk1
.epld_base_addr
);
2495 for (i
= 0; i
< 4; ++i
) {
2497 continue; /* BAR1 unused */
2498 release_mem_region(pci_resource_start(pdev
, i
),
2499 pci_resource_len(pdev
, i
));
2504 net2272_rdk2_remove(struct pci_dev
*pdev
, struct net2272
*dev
)
2508 /* disable fpga interrupts
2509 writel(readl(dev->rdk1.plx9054_base_addr + INTCSR) &
2510 ~(1 << PCI_INTERRUPT_ENABLE),
2511 dev->rdk1.plx9054_base_addr + INTCSR);
2514 /* clean up resources allocated during probe() */
2515 iounmap(dev
->rdk2
.fpga_base_addr
);
2517 for (i
= 0; i
< 2; ++i
)
2518 release_mem_region(pci_resource_start(pdev
, i
),
2519 pci_resource_len(pdev
, i
));
2523 net2272_pci_remove(struct pci_dev
*pdev
)
2525 struct net2272
*dev
= pci_get_drvdata(pdev
);
2527 net2272_remove(dev
);
2529 switch (pdev
->device
) {
2530 case PCI_DEVICE_ID_RDK1
: net2272_rdk1_remove(pdev
, dev
); break;
2531 case PCI_DEVICE_ID_RDK2
: net2272_rdk2_remove(pdev
, dev
); break;
2535 pci_disable_device(pdev
);
2540 /* Table of matching PCI IDs */
2541 static struct pci_device_id pci_ids
[] = {
2543 .class = ((PCI_CLASS_BRIDGE_OTHER
<< 8) | 0xfe),
2545 .vendor
= PCI_VENDOR_ID_PLX
,
2546 .device
= PCI_DEVICE_ID_RDK1
,
2547 .subvendor
= PCI_ANY_ID
,
2548 .subdevice
= PCI_ANY_ID
,
2551 .class = ((PCI_CLASS_BRIDGE_OTHER
<< 8) | 0xfe),
2553 .vendor
= PCI_VENDOR_ID_PLX
,
2554 .device
= PCI_DEVICE_ID_RDK2
,
2555 .subvendor
= PCI_ANY_ID
,
2556 .subdevice
= PCI_ANY_ID
,
2560 MODULE_DEVICE_TABLE(pci
, pci_ids
);
2562 static struct pci_driver net2272_pci_driver
= {
2563 .name
= driver_name
,
2564 .id_table
= pci_ids
,
2566 .probe
= net2272_pci_probe
,
2567 .remove
= net2272_pci_remove
,
2570 static int net2272_pci_register(void)
2572 return pci_register_driver(&net2272_pci_driver
);
2575 static void net2272_pci_unregister(void)
2577 pci_unregister_driver(&net2272_pci_driver
);
2581 static inline int net2272_pci_register(void) { return 0; }
2582 static inline void net2272_pci_unregister(void) { }
2585 /*---------------------------------------------------------------------------*/
2588 net2272_plat_probe(struct platform_device
*pdev
)
2590 struct net2272
*dev
;
2592 unsigned int irqflags
;
2593 resource_size_t base
, len
;
2594 struct resource
*iomem
, *iomem_bus
, *irq_res
;
2596 irq_res
= platform_get_resource(pdev
, IORESOURCE_IRQ
, 0);
2597 iomem
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
2598 iomem_bus
= platform_get_resource(pdev
, IORESOURCE_BUS
, 0);
2599 if (!irq_res
|| !iomem
) {
2600 dev_err(&pdev
->dev
, "must provide irq/base addr");
2604 dev
= net2272_probe_init(&pdev
->dev
, irq_res
->start
);
2606 return PTR_ERR(dev
);
2609 if (irq_res
->flags
& IORESOURCE_IRQ_HIGHEDGE
)
2610 irqflags
|= IRQF_TRIGGER_RISING
;
2611 if (irq_res
->flags
& IORESOURCE_IRQ_LOWEDGE
)
2612 irqflags
|= IRQF_TRIGGER_FALLING
;
2613 if (irq_res
->flags
& IORESOURCE_IRQ_HIGHLEVEL
)
2614 irqflags
|= IRQF_TRIGGER_HIGH
;
2615 if (irq_res
->flags
& IORESOURCE_IRQ_LOWLEVEL
)
2616 irqflags
|= IRQF_TRIGGER_LOW
;
2618 base
= iomem
->start
;
2619 len
= resource_size(iomem
);
2621 dev
->base_shift
= iomem_bus
->start
;
2623 if (!request_mem_region(base
, len
, driver_name
)) {
2624 dev_dbg(dev
->dev
, "get request memory region!\n");
2628 dev
->base_addr
= ioremap(base
, len
);
2629 if (!dev
->base_addr
) {
2630 dev_dbg(dev
->dev
, "can't map memory\n");
2635 ret
= net2272_probe_fin(dev
, IRQF_TRIGGER_LOW
);
2639 platform_set_drvdata(pdev
, dev
);
2640 dev_info(&pdev
->dev
, "running in 16-bit, %sbyte swap local bus mode\n",
2641 (net2272_read(dev
, LOCCTL
) & (1 << BYTE_SWAP
)) ? "" : "no ");
2646 iounmap(dev
->base_addr
);
2648 release_mem_region(base
, len
);
2656 net2272_plat_remove(struct platform_device
*pdev
)
2658 struct net2272
*dev
= platform_get_drvdata(pdev
);
2660 net2272_remove(dev
);
2662 release_mem_region(pdev
->resource
[0].start
,
2663 resource_size(&pdev
->resource
[0]));
2670 static struct platform_driver net2272_plat_driver
= {
2671 .probe
= net2272_plat_probe
,
2672 .remove
= net2272_plat_remove
,
2674 .name
= driver_name
,
2676 /* FIXME .suspend, .resume */
2678 MODULE_ALIAS("platform:net2272");
2680 static int __init
net2272_init(void)
2684 ret
= net2272_pci_register();
2687 ret
= platform_driver_register(&net2272_plat_driver
);
2693 net2272_pci_unregister();
2696 module_init(net2272_init
);
2698 static void __exit
net2272_cleanup(void)
2700 net2272_pci_unregister();
2701 platform_driver_unregister(&net2272_plat_driver
);
2703 module_exit(net2272_cleanup
);
2705 MODULE_DESCRIPTION(DRIVER_DESC
);
2706 MODULE_AUTHOR("PLX Technology, Inc.");
2707 MODULE_LICENSE("GPL");