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