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