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