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