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