root/drivers/usb/gadget/udc/net2272.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. assert_out_naking
  2. stop_out_naking
  3. type_string
  4. buf_state_string
  5. dma_mode_string
  6. net2272_enable
  7. net2272_ep_reset
  8. net2272_disable
  9. net2272_alloc_request
  10. net2272_free_request
  11. net2272_done
  12. net2272_write_packet
  13. net2272_write_fifo
  14. net2272_out_flush
  15. net2272_read_packet
  16. net2272_read_fifo
  17. net2272_pio_advance
  18. net2272_request_dma
  19. net2272_start_dma
  20. net2272_kick_dma
  21. net2272_cancel_dma
  22. net2272_queue
  23. net2272_dequeue_all
  24. net2272_dequeue
  25. net2272_set_halt_and_wedge
  26. net2272_set_halt
  27. net2272_set_wedge
  28. net2272_fifo_status
  29. net2272_fifo_flush
  30. net2272_get_frame
  31. net2272_wakeup
  32. net2272_set_selfpowered
  33. net2272_pullup
  34. registers_show
  35. net2272_set_fifo_mode
  36. net2272_usb_reset
  37. net2272_usb_reinit
  38. net2272_ep0_start
  39. net2272_start
  40. stop_activity
  41. net2272_stop
  42. net2272_handle_dma
  43. net2272_handle_ep
  44. net2272_get_ep_by_addr
  45. net2272_set_test_mode
  46. net2272_handle_stat0_irqs
  47. net2272_handle_stat1_irqs
  48. net2272_irq
  49. net2272_present
  50. net2272_gadget_release
  51. net2272_remove
  52. net2272_probe_init
  53. net2272_probe_fin
  54. net2272_rdk1_probe
  55. net2272_rdk2_probe
  56. net2272_pci_probe
  57. net2272_rdk1_remove
  58. net2272_rdk2_remove
  59. net2272_pci_remove
  60. net2272_pci_register
  61. net2272_pci_unregister
  62. net2272_pci_register
  63. net2272_pci_unregister
  64. net2272_plat_probe
  65. net2272_plat_remove
  66. net2272_init
  67. net2272_cleanup

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

/* [<][>][^][v][top][bottom][index][help] */