1 /* 2 * drivers/usb/gadget/dwc2_udc_otg.c 3 * Designware DWC2 on-chip full/high speed USB OTG 2.0 device controllers 4 * 5 * Copyright (C) 2008 for Samsung Electronics 6 * 7 * BSP Support for Samsung's UDC driver 8 * available at: 9 * git://git.kernel.org/pub/scm/linux/kernel/git/kki_ap/linux-2.6-samsung.git 10 * 11 * State machine bugfixes: 12 * Marek Szyprowski <m.szyprowski@samsung.com> 13 * 14 * Ported to u-boot: 15 * Marek Szyprowski <m.szyprowski@samsung.com> 16 * Lukasz Majewski <l.majewski@samsumg.com> 17 * 18 * SPDX-License-Identifier: GPL-2.0+ 19 */ 20 #undef DEBUG 21 #include <common.h> 22 #include <clk.h> 23 #include <dm.h> 24 #include <generic-phy.h> 25 #include <malloc.h> 26 #include <reset.h> 27 28 #include <linux/errno.h> 29 #include <linux/list.h> 30 31 #include <linux/usb/ch9.h> 32 #include <linux/usb/otg.h> 33 #include <linux/usb/gadget.h> 34 35 #include <asm/byteorder.h> 36 #include <asm/unaligned.h> 37 #include <asm/io.h> 38 39 #include <asm/mach-types.h> 40 41 #include <power/regulator.h> 42 43 #include "dwc2_udc_otg_regs.h" 44 #include "dwc2_udc_otg_priv.h" 45 46 /***********************************************************/ 47 48 #define OTG_DMA_MODE 1 49 50 #define DEBUG_SETUP 0 51 #define DEBUG_EP0 0 52 #define DEBUG_ISR 0 53 #define DEBUG_OUT_EP 0 54 #define DEBUG_IN_EP 0 55 56 #include <usb/dwc2_udc.h> 57 58 #define EP0_CON 0 59 #define EP_MASK 0xF 60 61 static char *state_names[] = { 62 "WAIT_FOR_SETUP", 63 "DATA_STATE_XMIT", 64 "DATA_STATE_NEED_ZLP", 65 "WAIT_FOR_OUT_STATUS", 66 "DATA_STATE_RECV", 67 "WAIT_FOR_COMPLETE", 68 "WAIT_FOR_OUT_COMPLETE", 69 "WAIT_FOR_IN_COMPLETE", 70 "WAIT_FOR_NULL_COMPLETE", 71 }; 72 73 #define DRIVER_VERSION "15 March 2009" 74 75 struct dwc2_udc *the_controller; 76 77 static const char driver_name[] = "dwc2-udc"; 78 static const char ep0name[] = "ep0-control"; 79 80 /* Max packet size*/ 81 static unsigned int ep0_fifo_size = 64; 82 static unsigned int ep_fifo_size = 512; 83 static unsigned int ep_fifo_size2 = 1024; 84 static int reset_available = 1; 85 86 static struct usb_ctrlrequest *usb_ctrl; 87 static dma_addr_t usb_ctrl_dma_addr; 88 89 /* 90 Local declarations. 91 */ 92 static int dwc2_ep_enable(struct usb_ep *ep, 93 const struct usb_endpoint_descriptor *); 94 static int dwc2_ep_disable(struct usb_ep *ep); 95 static struct usb_request *dwc2_alloc_request(struct usb_ep *ep, 96 gfp_t gfp_flags); 97 static void dwc2_free_request(struct usb_ep *ep, struct usb_request *); 98 99 static int dwc2_queue(struct usb_ep *ep, struct usb_request *, gfp_t gfp_flags); 100 static int dwc2_dequeue(struct usb_ep *ep, struct usb_request *); 101 static int dwc2_fifo_status(struct usb_ep *ep); 102 static void dwc2_fifo_flush(struct usb_ep *ep); 103 static void dwc2_ep0_read(struct dwc2_udc *dev); 104 static void dwc2_ep0_kick(struct dwc2_udc *dev, struct dwc2_ep *ep); 105 static void dwc2_handle_ep0(struct dwc2_udc *dev); 106 static int dwc2_ep0_write(struct dwc2_udc *dev); 107 static int write_fifo_ep0(struct dwc2_ep *ep, struct dwc2_request *req); 108 static void done(struct dwc2_ep *ep, struct dwc2_request *req, int status); 109 static void stop_activity(struct dwc2_udc *dev, 110 struct usb_gadget_driver *driver); 111 static int udc_enable(struct dwc2_udc *dev); 112 static void udc_set_address(struct dwc2_udc *dev, unsigned char address); 113 static void reconfig_usbd(struct dwc2_udc *dev); 114 static void set_max_pktsize(struct dwc2_udc *dev, enum usb_device_speed speed); 115 static void nuke(struct dwc2_ep *ep, int status); 116 static int dwc2_udc_set_halt(struct usb_ep *_ep, int value); 117 static void dwc2_udc_set_nak(struct dwc2_ep *ep); 118 119 void set_udc_gadget_private_data(void *p) 120 { 121 debug_cond(DEBUG_SETUP != 0, 122 "%s: the_controller: 0x%p, p: 0x%p\n", __func__, 123 the_controller, p); 124 the_controller->gadget.dev.device_data = p; 125 } 126 127 void *get_udc_gadget_private_data(struct usb_gadget *gadget) 128 { 129 return gadget->dev.device_data; 130 } 131 132 static struct usb_ep_ops dwc2_ep_ops = { 133 .enable = dwc2_ep_enable, 134 .disable = dwc2_ep_disable, 135 136 .alloc_request = dwc2_alloc_request, 137 .free_request = dwc2_free_request, 138 139 .queue = dwc2_queue, 140 .dequeue = dwc2_dequeue, 141 142 .set_halt = dwc2_udc_set_halt, 143 .fifo_status = dwc2_fifo_status, 144 .fifo_flush = dwc2_fifo_flush, 145 }; 146 147 #define create_proc_files() do {} while (0) 148 #define remove_proc_files() do {} while (0) 149 150 /***********************************************************/ 151 152 struct dwc2_usbotg_reg *reg; 153 154 bool dfu_usb_get_reset(void) 155 { 156 return !!(readl(®->gintsts) & INT_RESET); 157 } 158 159 __weak void otg_phy_init(struct dwc2_udc *dev) {} 160 __weak void otg_phy_off(struct dwc2_udc *dev) {} 161 162 /***********************************************************/ 163 164 #include "dwc2_udc_otg_xfer_dma.c" 165 166 /* 167 * udc_disable - disable USB device controller 168 */ 169 static void udc_disable(struct dwc2_udc *dev) 170 { 171 debug_cond(DEBUG_SETUP != 0, "%s: %p\n", __func__, dev); 172 173 udc_set_address(dev, 0); 174 175 dev->ep0state = WAIT_FOR_SETUP; 176 dev->gadget.speed = USB_SPEED_UNKNOWN; 177 dev->usb_address = 0; 178 dev->connected = 0; 179 180 otg_phy_off(dev); 181 } 182 183 /* 184 * udc_reinit - initialize software state 185 */ 186 static void udc_reinit(struct dwc2_udc *dev) 187 { 188 unsigned int i; 189 190 debug_cond(DEBUG_SETUP != 0, "%s: %p\n", __func__, dev); 191 192 /* device/ep0 records init */ 193 INIT_LIST_HEAD(&dev->gadget.ep_list); 194 INIT_LIST_HEAD(&dev->gadget.ep0->ep_list); 195 dev->ep0state = WAIT_FOR_SETUP; 196 197 /* basic endpoint records init */ 198 for (i = 0; i < DWC2_MAX_ENDPOINTS; i++) { 199 struct dwc2_ep *ep = &dev->ep[i]; 200 201 if (i != 0) 202 list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list); 203 204 ep->desc = 0; 205 ep->stopped = 0; 206 INIT_LIST_HEAD(&ep->queue); 207 ep->pio_irqs = 0; 208 } 209 210 /* the rest was statically initialized, and is read-only */ 211 } 212 213 #define BYTES2MAXP(x) (x / 8) 214 #define MAXP2BYTES(x) (x * 8) 215 216 /* until it's enabled, this UDC should be completely invisible 217 * to any USB host. 218 */ 219 static int udc_enable(struct dwc2_udc *dev) 220 { 221 debug_cond(DEBUG_SETUP != 0, "%s: %p\n", __func__, dev); 222 223 otg_phy_init(dev); 224 reconfig_usbd(dev); 225 226 debug_cond(DEBUG_SETUP != 0, 227 "DWC2 USB 2.0 OTG Controller Core Initialized : 0x%x\n", 228 readl(®->gintmsk)); 229 230 dev->gadget.speed = USB_SPEED_UNKNOWN; 231 232 return 0; 233 } 234 235 #if !CONFIG_IS_ENABLED(DM_USB_GADGET) 236 /* 237 Register entry point for the peripheral controller driver. 238 */ 239 int usb_gadget_register_driver(struct usb_gadget_driver *driver) 240 { 241 struct dwc2_udc *dev = the_controller; 242 int retval = 0; 243 unsigned long flags = 0; 244 245 debug_cond(DEBUG_SETUP != 0, "%s: %s\n", __func__, "no name"); 246 247 if (!driver 248 || (driver->speed != USB_SPEED_FULL 249 && driver->speed != USB_SPEED_HIGH) 250 || !driver->bind || !driver->disconnect || !driver->setup) 251 return -EINVAL; 252 if (!dev) 253 return -ENODEV; 254 if (dev->driver) 255 return -EBUSY; 256 257 spin_lock_irqsave(&dev->lock, flags); 258 /* first hook up the driver ... */ 259 dev->driver = driver; 260 spin_unlock_irqrestore(&dev->lock, flags); 261 262 if (retval) { /* TODO */ 263 printf("target device_add failed, error %d\n", retval); 264 return retval; 265 } 266 267 retval = driver->bind(&dev->gadget); 268 if (retval) { 269 debug_cond(DEBUG_SETUP != 0, 270 "%s: bind to driver --> error %d\n", 271 dev->gadget.name, retval); 272 dev->driver = 0; 273 return retval; 274 } 275 276 enable_irq(IRQ_OTG); 277 278 debug_cond(DEBUG_SETUP != 0, 279 "Registered gadget driver %s\n", dev->gadget.name); 280 udc_enable(dev); 281 282 return 0; 283 } 284 285 /* 286 * Unregister entry point for the peripheral controller driver. 287 */ 288 int usb_gadget_unregister_driver(struct usb_gadget_driver *driver) 289 { 290 struct dwc2_udc *dev = the_controller; 291 unsigned long flags = 0; 292 293 if (!dev) 294 return -ENODEV; 295 if (!driver || driver != dev->driver) 296 return -EINVAL; 297 298 spin_lock_irqsave(&dev->lock, flags); 299 dev->driver = 0; 300 stop_activity(dev, driver); 301 spin_unlock_irqrestore(&dev->lock, flags); 302 303 driver->unbind(&dev->gadget); 304 305 disable_irq(IRQ_OTG); 306 307 udc_disable(dev); 308 return 0; 309 } 310 #else /* !CONFIG_IS_ENABLED(DM_USB_GADGET) */ 311 312 static int dwc2_gadget_start(struct usb_gadget *g, 313 struct usb_gadget_driver *driver) 314 { 315 struct dwc2_udc *dev = the_controller; 316 317 debug_cond(DEBUG_SETUP != 0, "%s: %s\n", __func__, "no name"); 318 319 if (!driver || 320 (driver->speed != USB_SPEED_FULL && 321 driver->speed != USB_SPEED_HIGH) || 322 !driver->bind || !driver->disconnect || !driver->setup) 323 return -EINVAL; 324 325 if (!dev) 326 return -ENODEV; 327 328 if (dev->driver) 329 return -EBUSY; 330 331 /* first hook up the driver ... */ 332 dev->driver = driver; 333 334 debug_cond(DEBUG_SETUP != 0, 335 "Registered gadget driver %s\n", dev->gadget.name); 336 return udc_enable(dev); 337 } 338 339 static int dwc2_gadget_stop(struct usb_gadget *g) 340 { 341 struct dwc2_udc *dev = the_controller; 342 343 if (!dev) 344 return -ENODEV; 345 346 if (!dev->driver) 347 return -EINVAL; 348 349 dev->driver = 0; 350 stop_activity(dev, dev->driver); 351 352 udc_disable(dev); 353 354 return 0; 355 } 356 357 #endif /* !CONFIG_IS_ENABLED(DM_USB_GADGET) */ 358 359 /* 360 * done - retire a request; caller blocked irqs 361 */ 362 static void done(struct dwc2_ep *ep, struct dwc2_request *req, int status) 363 { 364 unsigned int stopped = ep->stopped; 365 366 debug("%s: %s %p, req = %p, stopped = %d\n", 367 __func__, ep->ep.name, ep, &req->req, stopped); 368 369 list_del_init(&req->queue); 370 371 if (likely(req->req.status == -EINPROGRESS)) 372 req->req.status = status; 373 else 374 status = req->req.status; 375 376 if (status && status != -ESHUTDOWN) { 377 debug("complete %s req %p stat %d len %u/%u\n", 378 ep->ep.name, &req->req, status, 379 req->req.actual, req->req.length); 380 } 381 382 /* don't modify queue heads during completion callback */ 383 ep->stopped = 1; 384 385 #ifdef DEBUG 386 printf("calling complete callback\n"); 387 { 388 int i, len = req->req.length; 389 390 printf("pkt[%d] = ", req->req.length); 391 if (len > 64) 392 len = 64; 393 for (i = 0; i < len; i++) { 394 printf("%02x", ((u8 *)req->req.buf)[i]); 395 if ((i & 7) == 7) 396 printf(" "); 397 } 398 printf("\n"); 399 } 400 #endif 401 spin_unlock(&ep->dev->lock); 402 req->req.complete(&ep->ep, &req->req); 403 spin_lock(&ep->dev->lock); 404 405 debug("callback completed\n"); 406 407 ep->stopped = stopped; 408 } 409 410 /* 411 * nuke - dequeue ALL requests 412 */ 413 static void nuke(struct dwc2_ep *ep, int status) 414 { 415 struct dwc2_request *req; 416 417 debug("%s: %s %p\n", __func__, ep->ep.name, ep); 418 419 /* called with irqs blocked */ 420 while (!list_empty(&ep->queue)) { 421 req = list_entry(ep->queue.next, struct dwc2_request, queue); 422 done(ep, req, status); 423 } 424 } 425 426 static void stop_activity(struct dwc2_udc *dev, 427 struct usb_gadget_driver *driver) 428 { 429 int i; 430 431 /* don't disconnect drivers more than once */ 432 if (dev->gadget.speed == USB_SPEED_UNKNOWN) 433 driver = 0; 434 dev->gadget.speed = USB_SPEED_UNKNOWN; 435 436 /* prevent new request submissions, kill any outstanding requests */ 437 for (i = 0; i < DWC2_MAX_ENDPOINTS; i++) { 438 struct dwc2_ep *ep = &dev->ep[i]; 439 ep->stopped = 1; 440 nuke(ep, -ESHUTDOWN); 441 } 442 443 /* report disconnect; the driver is already quiesced */ 444 if (driver) { 445 spin_unlock(&dev->lock); 446 driver->disconnect(&dev->gadget); 447 spin_lock(&dev->lock); 448 } 449 450 /* re-init driver-visible data structures */ 451 udc_reinit(dev); 452 } 453 454 static void reconfig_usbd(struct dwc2_udc *dev) 455 { 456 /* 2. Soft-reset OTG Core and then unreset again. */ 457 int i; 458 unsigned int uTemp = writel(CORE_SOFT_RESET, ®->grstctl); 459 uint32_t dflt_gusbcfg; 460 uint32_t rx_fifo_sz, tx_fifo_sz, np_tx_fifo_sz; 461 u32 max_hw_ep; 462 463 debug("Reseting OTG controller\n"); 464 465 dflt_gusbcfg = 466 0<<15 /* PHY Low Power Clock sel*/ 467 |1<<14 /* Non-Periodic TxFIFO Rewind Enable*/ 468 |0x5<<10 /* Turnaround time*/ 469 |0<<9 | 0<<8 /* [0:HNP disable,1:HNP enable][ 0:SRP disable*/ 470 /* 1:SRP enable] H1= 1,1*/ 471 |0<<7 /* Ulpi DDR sel*/ 472 |0<<6 /* 0: high speed utmi+, 1: full speed serial*/ 473 |0<<4 /* 0: utmi+, 1:ulpi*/ 474 #ifdef CONFIG_USB_GADGET_DWC2_OTG_PHY_BUS_WIDTH_8 475 |0<<3 /* phy i/f 0:8bit, 1:16bit*/ 476 #else 477 |1<<3 /* phy i/f 0:8bit, 1:16bit*/ 478 #endif 479 |0x7<<0; /* HS/FS Timeout**/ 480 481 if (dev->pdata->usb_gusbcfg) 482 dflt_gusbcfg = dev->pdata->usb_gusbcfg; 483 484 writel(dflt_gusbcfg, ®->gusbcfg); 485 486 /* 3. Put the OTG device core in the disconnected state.*/ 487 uTemp = readl(®->dctl); 488 uTemp |= SOFT_DISCONNECT; 489 writel(uTemp, ®->dctl); 490 491 udelay(20); 492 493 /* 4. Make the OTG device core exit from the disconnected state.*/ 494 uTemp = readl(®->dctl); 495 uTemp = uTemp & ~SOFT_DISCONNECT; 496 writel(uTemp, ®->dctl); 497 498 /* 5. Configure OTG Core to initial settings of device mode.*/ 499 /* [][1: full speed(30Mhz) 0:high speed]*/ 500 writel(EP_MISS_CNT(1) | DEV_SPEED_HIGH_SPEED_20, ®->dcfg); 501 502 mdelay(1); 503 504 /* 6. Unmask the core interrupts*/ 505 writel(GINTMSK_INIT, ®->gintmsk); 506 507 /* 7. Set NAK bit of EP0, EP1, EP2*/ 508 writel(DEPCTL_EPDIS|DEPCTL_SNAK, ®->out_endp[EP0_CON].doepctl); 509 writel(DEPCTL_EPDIS|DEPCTL_SNAK, ®->in_endp[EP0_CON].diepctl); 510 511 for (i = 1; i < DWC2_MAX_ENDPOINTS; i++) { 512 writel(DEPCTL_EPDIS|DEPCTL_SNAK, ®->out_endp[i].doepctl); 513 writel(DEPCTL_EPDIS|DEPCTL_SNAK, ®->in_endp[i].diepctl); 514 } 515 516 /* 8. Unmask EPO interrupts*/ 517 writel(((1 << EP0_CON) << DAINT_OUT_BIT) 518 | (1 << EP0_CON), ®->daintmsk); 519 520 /* 9. Unmask device OUT EP common interrupts*/ 521 writel(DOEPMSK_INIT, ®->doepmsk); 522 523 /* 10. Unmask device IN EP common interrupts*/ 524 writel(DIEPMSK_INIT, ®->diepmsk); 525 526 rx_fifo_sz = RX_FIFO_SIZE; 527 np_tx_fifo_sz = NPTX_FIFO_SIZE; 528 tx_fifo_sz = PTX_FIFO_SIZE; 529 530 if (dev->pdata->rx_fifo_sz) 531 rx_fifo_sz = dev->pdata->rx_fifo_sz; 532 if (dev->pdata->np_tx_fifo_sz) 533 np_tx_fifo_sz = dev->pdata->np_tx_fifo_sz; 534 if (dev->pdata->tx_fifo_sz) 535 tx_fifo_sz = dev->pdata->tx_fifo_sz; 536 537 /* 11. Set Rx FIFO Size (in 32-bit words) */ 538 writel(rx_fifo_sz, ®->grxfsiz); 539 540 /* 12. Set Non Periodic Tx FIFO Size */ 541 writel((np_tx_fifo_sz << 16) | rx_fifo_sz, 542 ®->gnptxfsiz); 543 544 /* retrieve the number of IN Endpoints (excluding ep0) */ 545 max_hw_ep = (readl(®->ghwcfg4) & GHWCFG4_NUM_IN_EPS_MASK) >> 546 GHWCFG4_NUM_IN_EPS_SHIFT; 547 548 for (i = 0; i < max_hw_ep; i++) 549 writel((rx_fifo_sz + np_tx_fifo_sz + (tx_fifo_sz * i)) | 550 tx_fifo_sz << 16, ®->dieptxf[i]); 551 552 /* Flush the RX FIFO */ 553 writel(RX_FIFO_FLUSH, ®->grstctl); 554 while (readl(®->grstctl) & RX_FIFO_FLUSH) 555 debug("%s: waiting for DWC2_UDC_OTG_GRSTCTL\n", __func__); 556 557 /* Flush all the Tx FIFO's */ 558 writel(TX_FIFO_FLUSH_ALL, ®->grstctl); 559 writel(TX_FIFO_FLUSH_ALL | TX_FIFO_FLUSH, ®->grstctl); 560 while (readl(®->grstctl) & TX_FIFO_FLUSH) 561 debug("%s: waiting for DWC2_UDC_OTG_GRSTCTL\n", __func__); 562 563 /* 13. Clear NAK bit of EP0, EP1, EP2*/ 564 /* For Slave mode*/ 565 /* EP0: Control OUT */ 566 writel(DEPCTL_EPDIS | DEPCTL_CNAK, 567 ®->out_endp[EP0_CON].doepctl); 568 569 /* 14. Initialize OTG Link Core.*/ 570 writel(GAHBCFG_INIT, ®->gahbcfg); 571 } 572 573 static void set_max_pktsize(struct dwc2_udc *dev, enum usb_device_speed speed) 574 { 575 unsigned int ep_ctrl; 576 int i; 577 578 if (speed == USB_SPEED_HIGH) { 579 ep0_fifo_size = 64; 580 ep_fifo_size = 512; 581 ep_fifo_size2 = 1024; 582 dev->gadget.speed = USB_SPEED_HIGH; 583 } else { 584 ep0_fifo_size = 64; 585 ep_fifo_size = 64; 586 ep_fifo_size2 = 64; 587 dev->gadget.speed = USB_SPEED_FULL; 588 } 589 590 dev->ep[0].ep.maxpacket = ep0_fifo_size; 591 for (i = 1; i < DWC2_MAX_ENDPOINTS; i++) 592 dev->ep[i].ep.maxpacket = ep_fifo_size; 593 594 /* EP0 - Control IN (64 bytes)*/ 595 ep_ctrl = readl(®->in_endp[EP0_CON].diepctl); 596 writel(ep_ctrl|(0<<0), ®->in_endp[EP0_CON].diepctl); 597 598 /* EP0 - Control OUT (64 bytes)*/ 599 ep_ctrl = readl(®->out_endp[EP0_CON].doepctl); 600 writel(ep_ctrl|(0<<0), ®->out_endp[EP0_CON].doepctl); 601 } 602 603 static int dwc2_ep_enable(struct usb_ep *_ep, 604 const struct usb_endpoint_descriptor *desc) 605 { 606 struct dwc2_ep *ep; 607 struct dwc2_udc *dev; 608 unsigned long flags = 0; 609 610 debug("%s: %p\n", __func__, _ep); 611 612 ep = container_of(_ep, struct dwc2_ep, ep); 613 if (!_ep || !desc || ep->desc || _ep->name == ep0name 614 || desc->bDescriptorType != USB_DT_ENDPOINT 615 || ep->bEndpointAddress != desc->bEndpointAddress 616 || ep_maxpacket(ep) < 617 le16_to_cpu(get_unaligned(&desc->wMaxPacketSize))) { 618 619 debug("%s: bad ep or descriptor\n", __func__); 620 return -EINVAL; 621 } 622 623 /* xfer types must match, except that interrupt ~= bulk */ 624 if (ep->bmAttributes != desc->bmAttributes 625 && ep->bmAttributes != USB_ENDPOINT_XFER_BULK 626 && desc->bmAttributes != USB_ENDPOINT_XFER_INT) { 627 628 debug("%s: %s type mismatch\n", __func__, _ep->name); 629 return -EINVAL; 630 } 631 632 /* hardware _could_ do smaller, but driver doesn't */ 633 if ((desc->bmAttributes == USB_ENDPOINT_XFER_BULK && 634 le16_to_cpu(get_unaligned(&desc->wMaxPacketSize)) > 635 ep_maxpacket(ep)) || !get_unaligned(&desc->wMaxPacketSize)) { 636 637 debug("%s: bad %s maxpacket\n", __func__, _ep->name); 638 return -ERANGE; 639 } 640 641 dev = ep->dev; 642 if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) { 643 644 debug("%s: bogus device state\n", __func__); 645 return -ESHUTDOWN; 646 } 647 648 ep->stopped = 0; 649 ep->desc = desc; 650 ep->pio_irqs = 0; 651 ep->ep.maxpacket = le16_to_cpu(get_unaligned(&desc->wMaxPacketSize)); 652 653 /* Reset halt state */ 654 dwc2_udc_set_nak(ep); 655 dwc2_udc_set_halt(_ep, 0); 656 657 spin_lock_irqsave(&ep->dev->lock, flags); 658 dwc2_udc_ep_activate(ep); 659 spin_unlock_irqrestore(&ep->dev->lock, flags); 660 661 debug("%s: enabled %s, stopped = %d, maxpacket = %d\n", 662 __func__, _ep->name, ep->stopped, ep->ep.maxpacket); 663 return 0; 664 } 665 666 /* 667 * Disable EP 668 */ 669 static int dwc2_ep_disable(struct usb_ep *_ep) 670 { 671 struct dwc2_ep *ep; 672 unsigned long flags = 0; 673 674 debug("%s: %p\n", __func__, _ep); 675 676 ep = container_of(_ep, struct dwc2_ep, ep); 677 if (!_ep || !ep->desc) { 678 debug("%s: %s not enabled\n", __func__, 679 _ep ? ep->ep.name : NULL); 680 return -EINVAL; 681 } 682 683 spin_lock_irqsave(&ep->dev->lock, flags); 684 685 /* Nuke all pending requests */ 686 nuke(ep, -ESHUTDOWN); 687 688 ep->desc = 0; 689 ep->stopped = 1; 690 691 spin_unlock_irqrestore(&ep->dev->lock, flags); 692 693 debug("%s: disabled %s\n", __func__, _ep->name); 694 return 0; 695 } 696 697 static struct usb_request *dwc2_alloc_request(struct usb_ep *ep, 698 gfp_t gfp_flags) 699 { 700 struct dwc2_request *req; 701 702 debug("%s: %s %p\n", __func__, ep->name, ep); 703 704 req = memalign(CONFIG_SYS_CACHELINE_SIZE, sizeof(*req)); 705 if (!req) 706 return 0; 707 708 memset(req, 0, sizeof *req); 709 INIT_LIST_HEAD(&req->queue); 710 711 return &req->req; 712 } 713 714 static void dwc2_free_request(struct usb_ep *ep, struct usb_request *_req) 715 { 716 struct dwc2_request *req; 717 718 debug("%s: %p\n", __func__, ep); 719 720 req = container_of(_req, struct dwc2_request, req); 721 WARN_ON(!list_empty(&req->queue)); 722 kfree(req); 723 } 724 725 /* dequeue JUST ONE request */ 726 static int dwc2_dequeue(struct usb_ep *_ep, struct usb_request *_req) 727 { 728 struct dwc2_ep *ep; 729 struct dwc2_request *req; 730 unsigned long flags = 0; 731 732 debug("%s: %p\n", __func__, _ep); 733 734 ep = container_of(_ep, struct dwc2_ep, ep); 735 if (!_ep || ep->ep.name == ep0name) 736 return -EINVAL; 737 738 spin_lock_irqsave(&ep->dev->lock, flags); 739 740 /* make sure it's actually queued on this endpoint */ 741 list_for_each_entry(req, &ep->queue, queue) { 742 if (&req->req == _req) 743 break; 744 } 745 if (&req->req != _req) { 746 spin_unlock_irqrestore(&ep->dev->lock, flags); 747 return -EINVAL; 748 } 749 750 done(ep, req, -ECONNRESET); 751 752 spin_unlock_irqrestore(&ep->dev->lock, flags); 753 return 0; 754 } 755 756 /* 757 * Return bytes in EP FIFO 758 */ 759 static int dwc2_fifo_status(struct usb_ep *_ep) 760 { 761 int count = 0; 762 struct dwc2_ep *ep; 763 764 ep = container_of(_ep, struct dwc2_ep, ep); 765 if (!_ep) { 766 debug("%s: bad ep\n", __func__); 767 return -ENODEV; 768 } 769 770 debug("%s: %d\n", __func__, ep_index(ep)); 771 772 /* LPD can't report unclaimed bytes from IN fifos */ 773 if (ep_is_in(ep)) 774 return -EOPNOTSUPP; 775 776 return count; 777 } 778 779 /* 780 * Flush EP FIFO 781 */ 782 static void dwc2_fifo_flush(struct usb_ep *_ep) 783 { 784 struct dwc2_ep *ep; 785 786 ep = container_of(_ep, struct dwc2_ep, ep); 787 if (unlikely(!_ep || (!ep->desc && ep->ep.name != ep0name))) { 788 debug("%s: bad ep\n", __func__); 789 return; 790 } 791 792 debug("%s: %d\n", __func__, ep_index(ep)); 793 } 794 795 static const struct usb_gadget_ops dwc2_udc_ops = { 796 /* current versions must always be self-powered */ 797 #if CONFIG_IS_ENABLED(DM_USB_GADGET) 798 .udc_start = dwc2_gadget_start, 799 .udc_stop = dwc2_gadget_stop, 800 #endif 801 }; 802 803 static struct dwc2_udc memory = { 804 .usb_address = 0, 805 .gadget = { 806 .ops = &dwc2_udc_ops, 807 .ep0 = &memory.ep[0].ep, 808 .name = driver_name, 809 }, 810 811 /* control endpoint */ 812 .ep[0] = { 813 .ep = { 814 .name = ep0name, 815 .ops = &dwc2_ep_ops, 816 .maxpacket = EP0_FIFO_SIZE, 817 }, 818 .dev = &memory, 819 820 .bEndpointAddress = 0, 821 .bmAttributes = 0, 822 823 .ep_type = ep_control, 824 }, 825 826 /* first group of endpoints */ 827 .ep[1] = { 828 .ep = { 829 .name = "ep1in-bulk", 830 .ops = &dwc2_ep_ops, 831 .maxpacket = EP_FIFO_SIZE, 832 }, 833 .dev = &memory, 834 835 .bEndpointAddress = USB_DIR_IN | 1, 836 .bmAttributes = USB_ENDPOINT_XFER_BULK, 837 838 .ep_type = ep_bulk_out, 839 .fifo_num = 1, 840 }, 841 842 .ep[2] = { 843 .ep = { 844 .name = "ep2out-bulk", 845 .ops = &dwc2_ep_ops, 846 .maxpacket = EP_FIFO_SIZE, 847 }, 848 .dev = &memory, 849 850 .bEndpointAddress = USB_DIR_OUT | 2, 851 .bmAttributes = USB_ENDPOINT_XFER_BULK, 852 853 .ep_type = ep_bulk_in, 854 .fifo_num = 2, 855 }, 856 857 .ep[3] = { 858 .ep = { 859 .name = "ep3in-int", 860 .ops = &dwc2_ep_ops, 861 .maxpacket = EP_FIFO_SIZE, 862 }, 863 .dev = &memory, 864 865 .bEndpointAddress = USB_DIR_IN | 3, 866 .bmAttributes = USB_ENDPOINT_XFER_INT, 867 868 .ep_type = ep_interrupt, 869 .fifo_num = 3, 870 }, 871 }; 872 873 /* 874 * probe - binds to the platform device 875 */ 876 877 int dwc2_udc_probe(struct dwc2_plat_otg_data *pdata) 878 { 879 struct dwc2_udc *dev = &memory; 880 int retval = 0; 881 882 debug("%s: %p\n", __func__, pdata); 883 884 dev->pdata = pdata; 885 886 reg = (struct dwc2_usbotg_reg *)pdata->regs_otg; 887 888 dev->gadget.is_dualspeed = 1; /* Hack only*/ 889 dev->gadget.is_otg = 0; 890 dev->gadget.is_a_peripheral = 0; 891 dev->gadget.b_hnp_enable = 0; 892 dev->gadget.a_hnp_support = 0; 893 dev->gadget.a_alt_hnp_support = 0; 894 895 the_controller = dev; 896 897 usb_ctrl = memalign(CONFIG_SYS_CACHELINE_SIZE, 898 ROUND(sizeof(struct usb_ctrlrequest), 899 CONFIG_SYS_CACHELINE_SIZE)); 900 if (!usb_ctrl) { 901 pr_err("No memory available for UDC!\n"); 902 return -ENOMEM; 903 } 904 905 usb_ctrl_dma_addr = (dma_addr_t) usb_ctrl; 906 907 udc_reinit(dev); 908 909 return retval; 910 } 911 912 int dwc2_udc_handle_interrupt(void) 913 { 914 u32 intr_status = readl(®->gintsts); 915 u32 gintmsk = readl(®->gintmsk); 916 917 if (intr_status & gintmsk) 918 return dwc2_udc_irq(1, (void *)the_controller); 919 920 return 0; 921 } 922 923 #if !CONFIG_IS_ENABLED(DM_USB_GADGET) 924 925 int usb_gadget_handle_interrupts(int index) 926 { 927 return dwc2_udc_handle_interrupt(); 928 } 929 930 #else /* CONFIG_IS_ENABLED(DM_USB_GADGET) */ 931 932 struct dwc2_priv_data { 933 struct clk_bulk clks; 934 struct reset_ctl_bulk resets; 935 struct phy *phys; 936 int num_phys; 937 }; 938 939 int dm_usb_gadget_handle_interrupts(struct udevice *dev) 940 { 941 return dwc2_udc_handle_interrupt(); 942 } 943 944 int dwc2_phy_setup(struct udevice *dev, struct phy **array, int *num_phys) 945 { 946 int i, ret, count; 947 struct phy *usb_phys; 948 949 /* Return if no phy declared */ 950 if (!dev_read_prop(dev, "phys", NULL)) 951 return 0; 952 953 count = dev_count_phandle_with_args(dev, "phys", "#phy-cells"); 954 if (count <= 0) 955 return count; 956 957 usb_phys = devm_kcalloc(dev, count, sizeof(struct phy), 958 GFP_KERNEL); 959 if (!usb_phys) 960 return -ENOMEM; 961 962 for (i = 0; i < count; i++) { 963 ret = generic_phy_get_by_index(dev, i, &usb_phys[i]); 964 if (ret && ret != -ENOENT) { 965 dev_err(dev, "Failed to get USB PHY%d for %s\n", 966 i, dev->name); 967 return ret; 968 } 969 } 970 971 for (i = 0; i < count; i++) { 972 ret = generic_phy_init(&usb_phys[i]); 973 if (ret) { 974 dev_err(dev, "Can't init USB PHY%d for %s\n", 975 i, dev->name); 976 goto phys_init_err; 977 } 978 } 979 980 for (i = 0; i < count; i++) { 981 ret = generic_phy_power_on(&usb_phys[i]); 982 if (ret) { 983 dev_err(dev, "Can't power USB PHY%d for %s\n", 984 i, dev->name); 985 goto phys_poweron_err; 986 } 987 } 988 989 *array = usb_phys; 990 *num_phys = count; 991 992 return 0; 993 994 phys_poweron_err: 995 for (i = count - 1; i >= 0; i--) 996 generic_phy_power_off(&usb_phys[i]); 997 998 for (i = 0; i < count; i++) 999 generic_phy_exit(&usb_phys[i]); 1000 1001 return ret; 1002 1003 phys_init_err: 1004 for (; i >= 0; i--) 1005 generic_phy_exit(&usb_phys[i]); 1006 1007 return ret; 1008 } 1009 1010 void dwc2_phy_shutdown(struct udevice *dev, struct phy *usb_phys, int num_phys) 1011 { 1012 int i, ret; 1013 1014 for (i = 0; i < num_phys; i++) { 1015 if (!generic_phy_valid(&usb_phys[i])) 1016 continue; 1017 1018 ret = generic_phy_power_off(&usb_phys[i]); 1019 ret |= generic_phy_exit(&usb_phys[i]); 1020 if (ret) { 1021 dev_err(dev, "Can't shutdown USB PHY%d for %s\n", 1022 i, dev->name); 1023 } 1024 } 1025 } 1026 1027 static int dwc2_udc_otg_ofdata_to_platdata(struct udevice *dev) 1028 { 1029 struct dwc2_plat_otg_data *platdata = dev_get_platdata(dev); 1030 int node = dev_of_offset(dev); 1031 1032 if (usb_get_dr_mode(node) != USB_DR_MODE_PERIPHERAL) { 1033 dev_dbg(dev, "Invalid mode\n"); 1034 return -ENODEV; 1035 } 1036 1037 platdata->regs_otg = dev_read_addr(dev); 1038 1039 platdata->rx_fifo_sz = dev_read_u32_default(dev, "g-rx-fifo-size", 0); 1040 platdata->np_tx_fifo_sz = dev_read_u32_default(dev, 1041 "g-np-tx-fifo-size", 0); 1042 platdata->tx_fifo_sz = dev_read_u32_default(dev, "g-tx-fifo-size", 0); 1043 1044 platdata->force_b_session_valid = 1045 dev_read_bool(dev, "force-b-session-valid"); 1046 1047 return 0; 1048 } 1049 1050 static int dwc2_udc_otg_reset_init(struct udevice *dev, 1051 struct reset_ctl_bulk *resets) 1052 { 1053 int ret; 1054 1055 ret = reset_get_bulk(dev, resets); 1056 if (ret == -ENOTSUPP) 1057 return 0; 1058 1059 if (ret) 1060 return ret; 1061 1062 ret = reset_assert_bulk(resets); 1063 1064 if (!ret) { 1065 udelay(2); 1066 ret = reset_deassert_bulk(resets); 1067 } 1068 if (ret) { 1069 reset_release_bulk(resets); 1070 return ret; 1071 } 1072 1073 return 0; 1074 } 1075 1076 static int dwc2_udc_otg_clk_init(struct udevice *dev, 1077 struct clk_bulk *clks) 1078 { 1079 int ret; 1080 1081 ret = clk_get_bulk(dev, clks); 1082 if (ret == -ENOSYS) 1083 return 0; 1084 1085 if (ret) 1086 return ret; 1087 1088 ret = clk_enable_bulk(clks); 1089 if (ret) { 1090 clk_release_bulk(clks); 1091 return ret; 1092 } 1093 1094 return 0; 1095 } 1096 1097 static int dwc2_udc_otg_probe(struct udevice *dev) 1098 { 1099 struct dwc2_plat_otg_data *platdata = dev_get_platdata(dev); 1100 struct dwc2_priv_data *priv = dev_get_priv(dev); 1101 struct dwc2_usbotg_reg *usbotg_reg = 1102 (struct dwc2_usbotg_reg *)platdata->regs_otg; 1103 int ret; 1104 1105 ret = dwc2_udc_otg_clk_init(dev, &priv->clks); 1106 if (ret) 1107 return ret; 1108 1109 ret = dwc2_udc_otg_reset_init(dev, &priv->resets); 1110 if (ret) 1111 return ret; 1112 1113 ret = dwc2_phy_setup(dev, &priv->phys, &priv->num_phys); 1114 if (ret) 1115 return ret; 1116 1117 if (platdata->force_b_session_valid) 1118 /* Override B session bits : value and enable */ 1119 setbits_le32(&usbotg_reg->gotgctl, B_VALOEN | B_VALOVAL); 1120 1121 ret = dwc2_udc_probe(platdata); 1122 if (ret) 1123 return ret; 1124 1125 the_controller->driver = 0; 1126 1127 ret = usb_add_gadget_udc((struct device *)dev, &the_controller->gadget); 1128 1129 return ret; 1130 } 1131 1132 static int dwc2_udc_otg_remove(struct udevice *dev) 1133 { 1134 struct dwc2_priv_data *priv = dev_get_priv(dev); 1135 1136 usb_del_gadget_udc(&the_controller->gadget); 1137 1138 reset_release_bulk(&priv->resets); 1139 1140 clk_release_bulk(&priv->clks); 1141 1142 dwc2_phy_shutdown(dev, priv->phys, priv->num_phys); 1143 1144 return dm_scan_fdt_dev(dev); 1145 } 1146 1147 static const struct udevice_id dwc2_udc_otg_ids[] = { 1148 { .compatible = "snps,dwc2" }, 1149 }; 1150 1151 U_BOOT_DRIVER(dwc2_udc_otg) = { 1152 .name = "dwc2-udc-otg", 1153 .id = UCLASS_USB_GADGET_GENERIC, 1154 .of_match = dwc2_udc_otg_ids, 1155 .ofdata_to_platdata = dwc2_udc_otg_ofdata_to_platdata, 1156 .probe = dwc2_udc_otg_probe, 1157 .remove = dwc2_udc_otg_remove, 1158 .platdata_auto_alloc_size = sizeof(struct dwc2_plat_otg_data), 1159 .priv_auto_alloc_size = sizeof(struct dwc2_priv_data), 1160 }; 1161 1162 int dwc2_udc_B_session_valid(struct udevice *dev) 1163 { 1164 struct dwc2_plat_otg_data *platdata = dev_get_platdata(dev); 1165 struct dwc2_usbotg_reg *usbotg_reg = 1166 (struct dwc2_usbotg_reg *)platdata->regs_otg; 1167 1168 return readl(&usbotg_reg->gotgctl) & B_SESSION_VALID; 1169 } 1170 #endif /* CONFIG_IS_ENABLED(DM_USB_GADGET) */ 1171