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