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