1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * gadget.c - DesignWare USB3 DRD Controller Gadget Framework Link 4 * 5 * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com 6 * 7 * Authors: Felipe Balbi <balbi@ti.com>, 8 * Sebastian Andrzej Siewior <bigeasy@linutronix.de> 9 */ 10 11 #include <linux/kernel.h> 12 #include <linux/delay.h> 13 #include <linux/slab.h> 14 #include <linux/spinlock.h> 15 #include <linux/platform_device.h> 16 #include <linux/pm_runtime.h> 17 #include <linux/interrupt.h> 18 #include <linux/io.h> 19 #include <linux/list.h> 20 #include <linux/dma-mapping.h> 21 22 #include <linux/usb/ch9.h> 23 #include <linux/usb/gadget.h> 24 25 #include "debug.h" 26 #include "core.h" 27 #include "gadget.h" 28 #include "io.h" 29 30 /** 31 * dwc3_gadget_set_test_mode - enables usb2 test modes 32 * @dwc: pointer to our context structure 33 * @mode: the mode to set (J, K SE0 NAK, Force Enable) 34 * 35 * Caller should take care of locking. This function will return 0 on 36 * success or -EINVAL if wrong Test Selector is passed. 37 */ 38 int dwc3_gadget_set_test_mode(struct dwc3 *dwc, int mode) 39 { 40 u32 reg; 41 42 reg = dwc3_readl(dwc->regs, DWC3_DCTL); 43 reg &= ~DWC3_DCTL_TSTCTRL_MASK; 44 45 switch (mode) { 46 case TEST_J: 47 case TEST_K: 48 case TEST_SE0_NAK: 49 case TEST_PACKET: 50 case TEST_FORCE_EN: 51 reg |= mode << 1; 52 break; 53 default: 54 return -EINVAL; 55 } 56 57 dwc3_writel(dwc->regs, DWC3_DCTL, reg); 58 59 return 0; 60 } 61 62 /** 63 * dwc3_gadget_get_link_state - gets current state of usb link 64 * @dwc: pointer to our context structure 65 * 66 * Caller should take care of locking. This function will 67 * return the link state on success (>= 0) or -ETIMEDOUT. 68 */ 69 int dwc3_gadget_get_link_state(struct dwc3 *dwc) 70 { 71 u32 reg; 72 73 reg = dwc3_readl(dwc->regs, DWC3_DSTS); 74 75 return DWC3_DSTS_USBLNKST(reg); 76 } 77 78 /** 79 * dwc3_gadget_set_link_state - sets usb link to a particular state 80 * @dwc: pointer to our context structure 81 * @state: the state to put link into 82 * 83 * Caller should take care of locking. This function will 84 * return 0 on success or -ETIMEDOUT. 85 */ 86 int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state) 87 { 88 int retries = 10000; 89 u32 reg; 90 91 /* 92 * Wait until device controller is ready. Only applies to 1.94a and 93 * later RTL. 94 */ 95 if (dwc->revision >= DWC3_REVISION_194A) { 96 while (--retries) { 97 reg = dwc3_readl(dwc->regs, DWC3_DSTS); 98 if (reg & DWC3_DSTS_DCNRD) 99 udelay(5); 100 else 101 break; 102 } 103 104 if (retries <= 0) 105 return -ETIMEDOUT; 106 } 107 108 reg = dwc3_readl(dwc->regs, DWC3_DCTL); 109 reg &= ~DWC3_DCTL_ULSTCHNGREQ_MASK; 110 111 /* set requested state */ 112 reg |= DWC3_DCTL_ULSTCHNGREQ(state); 113 dwc3_writel(dwc->regs, DWC3_DCTL, reg); 114 115 /* 116 * The following code is racy when called from dwc3_gadget_wakeup, 117 * and is not needed, at least on newer versions 118 */ 119 if (dwc->revision >= DWC3_REVISION_194A) 120 return 0; 121 122 /* wait for a change in DSTS */ 123 retries = 10000; 124 while (--retries) { 125 reg = dwc3_readl(dwc->regs, DWC3_DSTS); 126 127 if (DWC3_DSTS_USBLNKST(reg) == state) 128 return 0; 129 130 udelay(5); 131 } 132 133 return -ETIMEDOUT; 134 } 135 136 /** 137 * dwc3_ep_inc_trb - increment a trb index. 138 * @index: Pointer to the TRB index to increment. 139 * 140 * The index should never point to the link TRB. After incrementing, 141 * if it is point to the link TRB, wrap around to the beginning. The 142 * link TRB is always at the last TRB entry. 143 */ 144 static void dwc3_ep_inc_trb(u8 *index) 145 { 146 (*index)++; 147 if (*index == (DWC3_TRB_NUM - 1)) 148 *index = 0; 149 } 150 151 /** 152 * dwc3_ep_inc_enq - increment endpoint's enqueue pointer 153 * @dep: The endpoint whose enqueue pointer we're incrementing 154 */ 155 static void dwc3_ep_inc_enq(struct dwc3_ep *dep) 156 { 157 dwc3_ep_inc_trb(&dep->trb_enqueue); 158 } 159 160 /** 161 * dwc3_ep_inc_deq - increment endpoint's dequeue pointer 162 * @dep: The endpoint whose enqueue pointer we're incrementing 163 */ 164 static void dwc3_ep_inc_deq(struct dwc3_ep *dep) 165 { 166 dwc3_ep_inc_trb(&dep->trb_dequeue); 167 } 168 169 void dwc3_gadget_del_and_unmap_request(struct dwc3_ep *dep, 170 struct dwc3_request *req, int status) 171 { 172 struct dwc3 *dwc = dep->dwc; 173 174 req->started = false; 175 list_del(&req->list); 176 req->remaining = 0; 177 178 if (req->request.status == -EINPROGRESS) 179 req->request.status = status; 180 181 if (req->trb) 182 usb_gadget_unmap_request_by_dev(dwc->sysdev, 183 &req->request, req->direction); 184 185 req->trb = NULL; 186 trace_dwc3_gadget_giveback(req); 187 188 if (dep->number > 1) 189 pm_runtime_put(dwc->dev); 190 } 191 192 /** 193 * dwc3_gadget_giveback - call struct usb_request's ->complete callback 194 * @dep: The endpoint to whom the request belongs to 195 * @req: The request we're giving back 196 * @status: completion code for the request 197 * 198 * Must be called with controller's lock held and interrupts disabled. This 199 * function will unmap @req and call its ->complete() callback to notify upper 200 * layers that it has completed. 201 */ 202 void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, 203 int status) 204 { 205 struct dwc3 *dwc = dep->dwc; 206 207 dwc3_gadget_del_and_unmap_request(dep, req, status); 208 209 spin_unlock(&dwc->lock); 210 usb_gadget_giveback_request(&dep->endpoint, &req->request); 211 spin_lock(&dwc->lock); 212 } 213 214 /** 215 * dwc3_send_gadget_generic_command - issue a generic command for the controller 216 * @dwc: pointer to the controller context 217 * @cmd: the command to be issued 218 * @param: command parameter 219 * 220 * Caller should take care of locking. Issue @cmd with a given @param to @dwc 221 * and wait for its completion. 222 */ 223 int dwc3_send_gadget_generic_command(struct dwc3 *dwc, unsigned cmd, u32 param) 224 { 225 u32 timeout = 500; 226 int status = 0; 227 int ret = 0; 228 u32 reg; 229 230 dwc3_writel(dwc->regs, DWC3_DGCMDPAR, param); 231 dwc3_writel(dwc->regs, DWC3_DGCMD, cmd | DWC3_DGCMD_CMDACT); 232 233 do { 234 reg = dwc3_readl(dwc->regs, DWC3_DGCMD); 235 if (!(reg & DWC3_DGCMD_CMDACT)) { 236 status = DWC3_DGCMD_STATUS(reg); 237 if (status) 238 ret = -EINVAL; 239 break; 240 } 241 } while (--timeout); 242 243 if (!timeout) { 244 ret = -ETIMEDOUT; 245 status = -ETIMEDOUT; 246 } 247 248 trace_dwc3_gadget_generic_cmd(cmd, param, status); 249 250 return ret; 251 } 252 253 static int __dwc3_gadget_wakeup(struct dwc3 *dwc); 254 255 /** 256 * dwc3_send_gadget_ep_cmd - issue an endpoint command 257 * @dep: the endpoint to which the command is going to be issued 258 * @cmd: the command to be issued 259 * @params: parameters to the command 260 * 261 * Caller should handle locking. This function will issue @cmd with given 262 * @params to @dep and wait for its completion. 263 */ 264 int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned cmd, 265 struct dwc3_gadget_ep_cmd_params *params) 266 { 267 const struct usb_endpoint_descriptor *desc = dep->endpoint.desc; 268 struct dwc3 *dwc = dep->dwc; 269 u32 timeout = 1000; 270 u32 reg; 271 272 int cmd_status = 0; 273 int susphy = false; 274 int ret = -EINVAL; 275 276 /* 277 * Synopsys Databook 2.60a states, on section 6.3.2.5.[1-8], that if 278 * we're issuing an endpoint command, we must check if 279 * GUSB2PHYCFG.SUSPHY bit is set. If it is, then we need to clear it. 280 * 281 * We will also set SUSPHY bit to what it was before returning as stated 282 * by the same section on Synopsys databook. 283 */ 284 if (dwc->gadget.speed <= USB_SPEED_HIGH) { 285 reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0)); 286 if (unlikely(reg & DWC3_GUSB2PHYCFG_SUSPHY)) { 287 susphy = true; 288 reg &= ~DWC3_GUSB2PHYCFG_SUSPHY; 289 dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg); 290 } 291 } 292 293 if (DWC3_DEPCMD_CMD(cmd) == DWC3_DEPCMD_STARTTRANSFER) { 294 int needs_wakeup; 295 296 needs_wakeup = (dwc->link_state == DWC3_LINK_STATE_U1 || 297 dwc->link_state == DWC3_LINK_STATE_U2 || 298 dwc->link_state == DWC3_LINK_STATE_U3); 299 300 if (unlikely(needs_wakeup)) { 301 ret = __dwc3_gadget_wakeup(dwc); 302 dev_WARN_ONCE(dwc->dev, ret, "wakeup failed --> %d\n", 303 ret); 304 } 305 } 306 307 dwc3_writel(dep->regs, DWC3_DEPCMDPAR0, params->param0); 308 dwc3_writel(dep->regs, DWC3_DEPCMDPAR1, params->param1); 309 dwc3_writel(dep->regs, DWC3_DEPCMDPAR2, params->param2); 310 311 /* 312 * Synopsys Databook 2.60a states in section 6.3.2.5.6 of that if we're 313 * not relying on XferNotReady, we can make use of a special "No 314 * Response Update Transfer" command where we should clear both CmdAct 315 * and CmdIOC bits. 316 * 317 * With this, we don't need to wait for command completion and can 318 * straight away issue further commands to the endpoint. 319 * 320 * NOTICE: We're making an assumption that control endpoints will never 321 * make use of Update Transfer command. This is a safe assumption 322 * because we can never have more than one request at a time with 323 * Control Endpoints. If anybody changes that assumption, this chunk 324 * needs to be updated accordingly. 325 */ 326 if (DWC3_DEPCMD_CMD(cmd) == DWC3_DEPCMD_UPDATETRANSFER && 327 !usb_endpoint_xfer_isoc(desc)) 328 cmd &= ~(DWC3_DEPCMD_CMDIOC | DWC3_DEPCMD_CMDACT); 329 else 330 cmd |= DWC3_DEPCMD_CMDACT; 331 332 dwc3_writel(dep->regs, DWC3_DEPCMD, cmd); 333 do { 334 reg = dwc3_readl(dep->regs, DWC3_DEPCMD); 335 if (!(reg & DWC3_DEPCMD_CMDACT)) { 336 cmd_status = DWC3_DEPCMD_STATUS(reg); 337 338 switch (cmd_status) { 339 case 0: 340 ret = 0; 341 break; 342 case DEPEVT_TRANSFER_NO_RESOURCE: 343 ret = -EINVAL; 344 break; 345 case DEPEVT_TRANSFER_BUS_EXPIRY: 346 /* 347 * SW issues START TRANSFER command to 348 * isochronous ep with future frame interval. If 349 * future interval time has already passed when 350 * core receives the command, it will respond 351 * with an error status of 'Bus Expiry'. 352 * 353 * Instead of always returning -EINVAL, let's 354 * give a hint to the gadget driver that this is 355 * the case by returning -EAGAIN. 356 */ 357 ret = -EAGAIN; 358 break; 359 default: 360 dev_WARN(dwc->dev, "UNKNOWN cmd status\n"); 361 } 362 363 break; 364 } 365 } while (--timeout); 366 367 if (timeout == 0) { 368 ret = -ETIMEDOUT; 369 cmd_status = -ETIMEDOUT; 370 } 371 372 trace_dwc3_gadget_ep_cmd(dep, cmd, params, cmd_status); 373 374 if (ret == 0) { 375 switch (DWC3_DEPCMD_CMD(cmd)) { 376 case DWC3_DEPCMD_STARTTRANSFER: 377 dep->flags |= DWC3_EP_TRANSFER_STARTED; 378 break; 379 case DWC3_DEPCMD_ENDTRANSFER: 380 dep->flags &= ~DWC3_EP_TRANSFER_STARTED; 381 break; 382 default: 383 /* nothing */ 384 break; 385 } 386 } 387 388 if (unlikely(susphy)) { 389 reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0)); 390 reg |= DWC3_GUSB2PHYCFG_SUSPHY; 391 dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg); 392 } 393 394 return ret; 395 } 396 397 static int dwc3_send_clear_stall_ep_cmd(struct dwc3_ep *dep) 398 { 399 struct dwc3 *dwc = dep->dwc; 400 struct dwc3_gadget_ep_cmd_params params; 401 u32 cmd = DWC3_DEPCMD_CLEARSTALL; 402 403 /* 404 * As of core revision 2.60a the recommended programming model 405 * is to set the ClearPendIN bit when issuing a Clear Stall EP 406 * command for IN endpoints. This is to prevent an issue where 407 * some (non-compliant) hosts may not send ACK TPs for pending 408 * IN transfers due to a mishandled error condition. Synopsys 409 * STAR 9000614252. 410 */ 411 if (dep->direction && (dwc->revision >= DWC3_REVISION_260A) && 412 (dwc->gadget.speed >= USB_SPEED_SUPER)) 413 cmd |= DWC3_DEPCMD_CLEARPENDIN; 414 415 memset(¶ms, 0, sizeof(params)); 416 417 return dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms); 418 } 419 420 static dma_addr_t dwc3_trb_dma_offset(struct dwc3_ep *dep, 421 struct dwc3_trb *trb) 422 { 423 u32 offset = (char *) trb - (char *) dep->trb_pool; 424 425 return dep->trb_pool_dma + offset; 426 } 427 428 static int dwc3_alloc_trb_pool(struct dwc3_ep *dep) 429 { 430 struct dwc3 *dwc = dep->dwc; 431 432 if (dep->trb_pool) 433 return 0; 434 435 dep->trb_pool = dma_alloc_coherent(dwc->sysdev, 436 sizeof(struct dwc3_trb) * DWC3_TRB_NUM, 437 &dep->trb_pool_dma, GFP_KERNEL); 438 if (!dep->trb_pool) { 439 dev_err(dep->dwc->dev, "failed to allocate trb pool for %s\n", 440 dep->name); 441 return -ENOMEM; 442 } 443 444 return 0; 445 } 446 447 static void dwc3_free_trb_pool(struct dwc3_ep *dep) 448 { 449 struct dwc3 *dwc = dep->dwc; 450 451 dma_free_coherent(dwc->sysdev, sizeof(struct dwc3_trb) * DWC3_TRB_NUM, 452 dep->trb_pool, dep->trb_pool_dma); 453 454 dep->trb_pool = NULL; 455 dep->trb_pool_dma = 0; 456 } 457 458 static int dwc3_gadget_set_xfer_resource(struct dwc3 *dwc, struct dwc3_ep *dep); 459 460 /** 461 * dwc3_gadget_start_config - configure ep resources 462 * @dwc: pointer to our controller context structure 463 * @dep: endpoint that is being enabled 464 * 465 * Issue a %DWC3_DEPCMD_DEPSTARTCFG command to @dep. After the command's 466 * completion, it will set Transfer Resource for all available endpoints. 467 * 468 * The assignment of transfer resources cannot perfectly follow the data book 469 * due to the fact that the controller driver does not have all knowledge of the 470 * configuration in advance. It is given this information piecemeal by the 471 * composite gadget framework after every SET_CONFIGURATION and 472 * SET_INTERFACE. Trying to follow the databook programming model in this 473 * scenario can cause errors. For two reasons: 474 * 475 * 1) The databook says to do %DWC3_DEPCMD_DEPSTARTCFG for every 476 * %USB_REQ_SET_CONFIGURATION and %USB_REQ_SET_INTERFACE (8.1.5). This is 477 * incorrect in the scenario of multiple interfaces. 478 * 479 * 2) The databook does not mention doing more %DWC3_DEPCMD_DEPXFERCFG for new 480 * endpoint on alt setting (8.1.6). 481 * 482 * The following simplified method is used instead: 483 * 484 * All hardware endpoints can be assigned a transfer resource and this setting 485 * will stay persistent until either a core reset or hibernation. So whenever we 486 * do a %DWC3_DEPCMD_DEPSTARTCFG(0) we can go ahead and do 487 * %DWC3_DEPCMD_DEPXFERCFG for every hardware endpoint as well. We are 488 * guaranteed that there are as many transfer resources as endpoints. 489 * 490 * This function is called for each endpoint when it is being enabled but is 491 * triggered only when called for EP0-out, which always happens first, and which 492 * should only happen in one of the above conditions. 493 */ 494 static int dwc3_gadget_start_config(struct dwc3 *dwc, struct dwc3_ep *dep) 495 { 496 struct dwc3_gadget_ep_cmd_params params; 497 u32 cmd; 498 int i; 499 int ret; 500 501 if (dep->number) 502 return 0; 503 504 memset(¶ms, 0x00, sizeof(params)); 505 cmd = DWC3_DEPCMD_DEPSTARTCFG; 506 507 ret = dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms); 508 if (ret) 509 return ret; 510 511 for (i = 0; i < DWC3_ENDPOINTS_NUM; i++) { 512 struct dwc3_ep *dep = dwc->eps[i]; 513 514 if (!dep) 515 continue; 516 517 ret = dwc3_gadget_set_xfer_resource(dwc, dep); 518 if (ret) 519 return ret; 520 } 521 522 return 0; 523 } 524 525 static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep, 526 bool modify, bool restore) 527 { 528 const struct usb_ss_ep_comp_descriptor *comp_desc; 529 const struct usb_endpoint_descriptor *desc; 530 struct dwc3_gadget_ep_cmd_params params; 531 532 if (dev_WARN_ONCE(dwc->dev, modify && restore, 533 "Can't modify and restore\n")) 534 return -EINVAL; 535 536 comp_desc = dep->endpoint.comp_desc; 537 desc = dep->endpoint.desc; 538 539 memset(¶ms, 0x00, sizeof(params)); 540 541 params.param0 = DWC3_DEPCFG_EP_TYPE(usb_endpoint_type(desc)) 542 | DWC3_DEPCFG_MAX_PACKET_SIZE(usb_endpoint_maxp(desc)); 543 544 /* Burst size is only needed in SuperSpeed mode */ 545 if (dwc->gadget.speed >= USB_SPEED_SUPER) { 546 u32 burst = dep->endpoint.maxburst; 547 params.param0 |= DWC3_DEPCFG_BURST_SIZE(burst - 1); 548 } 549 550 if (modify) { 551 params.param0 |= DWC3_DEPCFG_ACTION_MODIFY; 552 } else if (restore) { 553 params.param0 |= DWC3_DEPCFG_ACTION_RESTORE; 554 params.param2 |= dep->saved_state; 555 } else { 556 params.param0 |= DWC3_DEPCFG_ACTION_INIT; 557 } 558 559 if (usb_endpoint_xfer_control(desc)) 560 params.param1 = DWC3_DEPCFG_XFER_COMPLETE_EN; 561 562 if (dep->number <= 1 || usb_endpoint_xfer_isoc(desc)) 563 params.param1 |= DWC3_DEPCFG_XFER_NOT_READY_EN; 564 565 if (usb_ss_max_streams(comp_desc) && usb_endpoint_xfer_bulk(desc)) { 566 params.param1 |= DWC3_DEPCFG_STREAM_CAPABLE 567 | DWC3_DEPCFG_STREAM_EVENT_EN; 568 dep->stream_capable = true; 569 } 570 571 if (!usb_endpoint_xfer_control(desc)) 572 params.param1 |= DWC3_DEPCFG_XFER_IN_PROGRESS_EN; 573 574 /* 575 * We are doing 1:1 mapping for endpoints, meaning 576 * Physical Endpoints 2 maps to Logical Endpoint 2 and 577 * so on. We consider the direction bit as part of the physical 578 * endpoint number. So USB endpoint 0x81 is 0x03. 579 */ 580 params.param1 |= DWC3_DEPCFG_EP_NUMBER(dep->number); 581 582 /* 583 * We must use the lower 16 TX FIFOs even though 584 * HW might have more 585 */ 586 if (dep->direction) 587 params.param0 |= DWC3_DEPCFG_FIFO_NUMBER(dep->number >> 1); 588 589 if (desc->bInterval) { 590 params.param1 |= DWC3_DEPCFG_BINTERVAL_M1(desc->bInterval - 1); 591 dep->interval = 1 << (desc->bInterval - 1); 592 } 593 594 return dwc3_send_gadget_ep_cmd(dep, DWC3_DEPCMD_SETEPCONFIG, ¶ms); 595 } 596 597 static int dwc3_gadget_set_xfer_resource(struct dwc3 *dwc, struct dwc3_ep *dep) 598 { 599 struct dwc3_gadget_ep_cmd_params params; 600 601 memset(¶ms, 0x00, sizeof(params)); 602 603 params.param0 = DWC3_DEPXFERCFG_NUM_XFER_RES(1); 604 605 return dwc3_send_gadget_ep_cmd(dep, DWC3_DEPCMD_SETTRANSFRESOURCE, 606 ¶ms); 607 } 608 609 /** 610 * __dwc3_gadget_ep_enable - initializes a hw endpoint 611 * @dep: endpoint to be initialized 612 * @modify: if true, modify existing endpoint configuration 613 * @restore: if true, restore endpoint configuration from scratch buffer 614 * 615 * Caller should take care of locking. Execute all necessary commands to 616 * initialize a HW endpoint so it can be used by a gadget driver. 617 */ 618 static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, 619 bool modify, bool restore) 620 { 621 const struct usb_endpoint_descriptor *desc = dep->endpoint.desc; 622 struct dwc3 *dwc = dep->dwc; 623 624 u32 reg; 625 int ret; 626 627 if (!(dep->flags & DWC3_EP_ENABLED)) { 628 ret = dwc3_gadget_start_config(dwc, dep); 629 if (ret) 630 return ret; 631 } 632 633 ret = dwc3_gadget_set_ep_config(dwc, dep, modify, restore); 634 if (ret) 635 return ret; 636 637 if (!(dep->flags & DWC3_EP_ENABLED)) { 638 struct dwc3_trb *trb_st_hw; 639 struct dwc3_trb *trb_link; 640 641 dep->type = usb_endpoint_type(desc); 642 dep->flags |= DWC3_EP_ENABLED; 643 dep->flags &= ~DWC3_EP_END_TRANSFER_PENDING; 644 645 reg = dwc3_readl(dwc->regs, DWC3_DALEPENA); 646 reg |= DWC3_DALEPENA_EP(dep->number); 647 dwc3_writel(dwc->regs, DWC3_DALEPENA, reg); 648 649 init_waitqueue_head(&dep->wait_end_transfer); 650 651 if (usb_endpoint_xfer_control(desc)) 652 goto out; 653 654 /* Initialize the TRB ring */ 655 dep->trb_dequeue = 0; 656 dep->trb_enqueue = 0; 657 memset(dep->trb_pool, 0, 658 sizeof(struct dwc3_trb) * DWC3_TRB_NUM); 659 660 /* Link TRB. The HWO bit is never reset */ 661 trb_st_hw = &dep->trb_pool[0]; 662 663 trb_link = &dep->trb_pool[DWC3_TRB_NUM - 1]; 664 trb_link->bpl = lower_32_bits(dwc3_trb_dma_offset(dep, trb_st_hw)); 665 trb_link->bph = upper_32_bits(dwc3_trb_dma_offset(dep, trb_st_hw)); 666 trb_link->ctrl |= DWC3_TRBCTL_LINK_TRB; 667 trb_link->ctrl |= DWC3_TRB_CTRL_HWO; 668 } 669 670 /* 671 * Issue StartTransfer here with no-op TRB so we can always rely on No 672 * Response Update Transfer command. 673 */ 674 if (usb_endpoint_xfer_bulk(desc)) { 675 struct dwc3_gadget_ep_cmd_params params; 676 struct dwc3_trb *trb; 677 dma_addr_t trb_dma; 678 u32 cmd; 679 680 memset(¶ms, 0, sizeof(params)); 681 trb = &dep->trb_pool[0]; 682 trb_dma = dwc3_trb_dma_offset(dep, trb); 683 684 params.param0 = upper_32_bits(trb_dma); 685 params.param1 = lower_32_bits(trb_dma); 686 687 cmd = DWC3_DEPCMD_STARTTRANSFER; 688 689 ret = dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms); 690 if (ret < 0) 691 return ret; 692 693 dep->flags |= DWC3_EP_BUSY; 694 695 dep->resource_index = dwc3_gadget_ep_get_transfer_index(dep); 696 WARN_ON_ONCE(!dep->resource_index); 697 } 698 699 700 out: 701 trace_dwc3_gadget_ep_enable(dep); 702 703 return 0; 704 } 705 706 static void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum, bool force); 707 static void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep) 708 { 709 struct dwc3_request *req; 710 711 dwc3_stop_active_transfer(dwc, dep->number, true); 712 713 /* - giveback all requests to gadget driver */ 714 while (!list_empty(&dep->started_list)) { 715 req = next_request(&dep->started_list); 716 717 dwc3_gadget_giveback(dep, req, -ESHUTDOWN); 718 } 719 720 while (!list_empty(&dep->pending_list)) { 721 req = next_request(&dep->pending_list); 722 723 dwc3_gadget_giveback(dep, req, -ESHUTDOWN); 724 } 725 } 726 727 /** 728 * __dwc3_gadget_ep_disable - disables a hw endpoint 729 * @dep: the endpoint to disable 730 * 731 * This function undoes what __dwc3_gadget_ep_enable did and also removes 732 * requests which are currently being processed by the hardware and those which 733 * are not yet scheduled. 734 * 735 * Caller should take care of locking. 736 */ 737 static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep) 738 { 739 struct dwc3 *dwc = dep->dwc; 740 u32 reg; 741 742 trace_dwc3_gadget_ep_disable(dep); 743 744 dwc3_remove_requests(dwc, dep); 745 746 /* make sure HW endpoint isn't stalled */ 747 if (dep->flags & DWC3_EP_STALL) 748 __dwc3_gadget_ep_set_halt(dep, 0, false); 749 750 reg = dwc3_readl(dwc->regs, DWC3_DALEPENA); 751 reg &= ~DWC3_DALEPENA_EP(dep->number); 752 dwc3_writel(dwc->regs, DWC3_DALEPENA, reg); 753 754 dep->stream_capable = false; 755 dep->type = 0; 756 dep->flags &= DWC3_EP_END_TRANSFER_PENDING; 757 758 /* Clear out the ep descriptors for non-ep0 */ 759 if (dep->number > 1) { 760 dep->endpoint.comp_desc = NULL; 761 dep->endpoint.desc = NULL; 762 } 763 764 return 0; 765 } 766 767 /* -------------------------------------------------------------------------- */ 768 769 static int dwc3_gadget_ep0_enable(struct usb_ep *ep, 770 const struct usb_endpoint_descriptor *desc) 771 { 772 return -EINVAL; 773 } 774 775 static int dwc3_gadget_ep0_disable(struct usb_ep *ep) 776 { 777 return -EINVAL; 778 } 779 780 /* -------------------------------------------------------------------------- */ 781 782 static int dwc3_gadget_ep_enable(struct usb_ep *ep, 783 const struct usb_endpoint_descriptor *desc) 784 { 785 struct dwc3_ep *dep; 786 struct dwc3 *dwc; 787 unsigned long flags; 788 int ret; 789 790 if (!ep || !desc || desc->bDescriptorType != USB_DT_ENDPOINT) { 791 pr_debug("dwc3: invalid parameters\n"); 792 return -EINVAL; 793 } 794 795 if (!desc->wMaxPacketSize) { 796 pr_debug("dwc3: missing wMaxPacketSize\n"); 797 return -EINVAL; 798 } 799 800 dep = to_dwc3_ep(ep); 801 dwc = dep->dwc; 802 803 if (dev_WARN_ONCE(dwc->dev, dep->flags & DWC3_EP_ENABLED, 804 "%s is already enabled\n", 805 dep->name)) 806 return 0; 807 808 spin_lock_irqsave(&dwc->lock, flags); 809 ret = __dwc3_gadget_ep_enable(dep, false, false); 810 spin_unlock_irqrestore(&dwc->lock, flags); 811 812 return ret; 813 } 814 815 static int dwc3_gadget_ep_disable(struct usb_ep *ep) 816 { 817 struct dwc3_ep *dep; 818 struct dwc3 *dwc; 819 unsigned long flags; 820 int ret; 821 822 if (!ep) { 823 pr_debug("dwc3: invalid parameters\n"); 824 return -EINVAL; 825 } 826 827 dep = to_dwc3_ep(ep); 828 dwc = dep->dwc; 829 830 if (dev_WARN_ONCE(dwc->dev, !(dep->flags & DWC3_EP_ENABLED), 831 "%s is already disabled\n", 832 dep->name)) 833 return 0; 834 835 spin_lock_irqsave(&dwc->lock, flags); 836 ret = __dwc3_gadget_ep_disable(dep); 837 spin_unlock_irqrestore(&dwc->lock, flags); 838 839 return ret; 840 } 841 842 static struct usb_request *dwc3_gadget_ep_alloc_request(struct usb_ep *ep, 843 gfp_t gfp_flags) 844 { 845 struct dwc3_request *req; 846 struct dwc3_ep *dep = to_dwc3_ep(ep); 847 848 req = kzalloc(sizeof(*req), gfp_flags); 849 if (!req) 850 return NULL; 851 852 req->epnum = dep->number; 853 req->dep = dep; 854 855 dep->allocated_requests++; 856 857 trace_dwc3_alloc_request(req); 858 859 return &req->request; 860 } 861 862 static void dwc3_gadget_ep_free_request(struct usb_ep *ep, 863 struct usb_request *request) 864 { 865 struct dwc3_request *req = to_dwc3_request(request); 866 struct dwc3_ep *dep = to_dwc3_ep(ep); 867 868 dep->allocated_requests--; 869 trace_dwc3_free_request(req); 870 kfree(req); 871 } 872 873 static u32 dwc3_calc_trbs_left(struct dwc3_ep *dep); 874 875 static void __dwc3_prepare_one_trb(struct dwc3_ep *dep, struct dwc3_trb *trb, 876 dma_addr_t dma, unsigned length, unsigned chain, unsigned node, 877 unsigned stream_id, unsigned short_not_ok, unsigned no_interrupt) 878 { 879 struct dwc3 *dwc = dep->dwc; 880 struct usb_gadget *gadget = &dwc->gadget; 881 enum usb_device_speed speed = gadget->speed; 882 883 dwc3_ep_inc_enq(dep); 884 885 trb->size = DWC3_TRB_SIZE_LENGTH(length); 886 trb->bpl = lower_32_bits(dma); 887 trb->bph = upper_32_bits(dma); 888 889 switch (usb_endpoint_type(dep->endpoint.desc)) { 890 case USB_ENDPOINT_XFER_CONTROL: 891 trb->ctrl = DWC3_TRBCTL_CONTROL_SETUP; 892 break; 893 894 case USB_ENDPOINT_XFER_ISOC: 895 if (!node) { 896 trb->ctrl = DWC3_TRBCTL_ISOCHRONOUS_FIRST; 897 898 /* 899 * USB Specification 2.0 Section 5.9.2 states that: "If 900 * there is only a single transaction in the microframe, 901 * only a DATA0 data packet PID is used. If there are 902 * two transactions per microframe, DATA1 is used for 903 * the first transaction data packet and DATA0 is used 904 * for the second transaction data packet. If there are 905 * three transactions per microframe, DATA2 is used for 906 * the first transaction data packet, DATA1 is used for 907 * the second, and DATA0 is used for the third." 908 * 909 * IOW, we should satisfy the following cases: 910 * 911 * 1) length <= maxpacket 912 * - DATA0 913 * 914 * 2) maxpacket < length <= (2 * maxpacket) 915 * - DATA1, DATA0 916 * 917 * 3) (2 * maxpacket) < length <= (3 * maxpacket) 918 * - DATA2, DATA1, DATA0 919 */ 920 if (speed == USB_SPEED_HIGH) { 921 struct usb_ep *ep = &dep->endpoint; 922 unsigned int mult = 2; 923 unsigned int maxp = usb_endpoint_maxp(ep->desc); 924 925 if (length <= (2 * maxp)) 926 mult--; 927 928 if (length <= maxp) 929 mult--; 930 931 trb->size |= DWC3_TRB_SIZE_PCM1(mult); 932 } 933 } else { 934 trb->ctrl = DWC3_TRBCTL_ISOCHRONOUS; 935 } 936 937 /* always enable Interrupt on Missed ISOC */ 938 trb->ctrl |= DWC3_TRB_CTRL_ISP_IMI; 939 break; 940 941 case USB_ENDPOINT_XFER_BULK: 942 case USB_ENDPOINT_XFER_INT: 943 trb->ctrl = DWC3_TRBCTL_NORMAL; 944 break; 945 default: 946 /* 947 * This is only possible with faulty memory because we 948 * checked it already :) 949 */ 950 dev_WARN(dwc->dev, "Unknown endpoint type %d\n", 951 usb_endpoint_type(dep->endpoint.desc)); 952 } 953 954 /* always enable Continue on Short Packet */ 955 if (usb_endpoint_dir_out(dep->endpoint.desc)) { 956 trb->ctrl |= DWC3_TRB_CTRL_CSP; 957 958 if (short_not_ok) 959 trb->ctrl |= DWC3_TRB_CTRL_ISP_IMI; 960 } 961 962 if ((!no_interrupt && !chain) || 963 (dwc3_calc_trbs_left(dep) == 0)) 964 trb->ctrl |= DWC3_TRB_CTRL_IOC; 965 966 if (chain) 967 trb->ctrl |= DWC3_TRB_CTRL_CHN; 968 969 if (usb_endpoint_xfer_bulk(dep->endpoint.desc) && dep->stream_capable) 970 trb->ctrl |= DWC3_TRB_CTRL_SID_SOFN(stream_id); 971 972 trb->ctrl |= DWC3_TRB_CTRL_HWO; 973 974 trace_dwc3_prepare_trb(dep, trb); 975 } 976 977 /** 978 * dwc3_prepare_one_trb - setup one TRB from one request 979 * @dep: endpoint for which this request is prepared 980 * @req: dwc3_request pointer 981 * @chain: should this TRB be chained to the next? 982 * @node: only for isochronous endpoints. First TRB needs different type. 983 */ 984 static void dwc3_prepare_one_trb(struct dwc3_ep *dep, 985 struct dwc3_request *req, unsigned chain, unsigned node) 986 { 987 struct dwc3_trb *trb; 988 unsigned length = req->request.length; 989 unsigned stream_id = req->request.stream_id; 990 unsigned short_not_ok = req->request.short_not_ok; 991 unsigned no_interrupt = req->request.no_interrupt; 992 dma_addr_t dma = req->request.dma; 993 994 trb = &dep->trb_pool[dep->trb_enqueue]; 995 996 if (!req->trb) { 997 dwc3_gadget_move_started_request(req); 998 req->trb = trb; 999 req->trb_dma = dwc3_trb_dma_offset(dep, trb); 1000 dep->queued_requests++; 1001 } 1002 1003 __dwc3_prepare_one_trb(dep, trb, dma, length, chain, node, 1004 stream_id, short_not_ok, no_interrupt); 1005 } 1006 1007 /** 1008 * dwc3_ep_prev_trb - returns the previous TRB in the ring 1009 * @dep: The endpoint with the TRB ring 1010 * @index: The index of the current TRB in the ring 1011 * 1012 * Returns the TRB prior to the one pointed to by the index. If the 1013 * index is 0, we will wrap backwards, skip the link TRB, and return 1014 * the one just before that. 1015 */ 1016 static struct dwc3_trb *dwc3_ep_prev_trb(struct dwc3_ep *dep, u8 index) 1017 { 1018 u8 tmp = index; 1019 1020 if (!tmp) 1021 tmp = DWC3_TRB_NUM - 1; 1022 1023 return &dep->trb_pool[tmp - 1]; 1024 } 1025 1026 static u32 dwc3_calc_trbs_left(struct dwc3_ep *dep) 1027 { 1028 struct dwc3_trb *tmp; 1029 u8 trbs_left; 1030 1031 /* 1032 * If enqueue & dequeue are equal than it is either full or empty. 1033 * 1034 * One way to know for sure is if the TRB right before us has HWO bit 1035 * set or not. If it has, then we're definitely full and can't fit any 1036 * more transfers in our ring. 1037 */ 1038 if (dep->trb_enqueue == dep->trb_dequeue) { 1039 tmp = dwc3_ep_prev_trb(dep, dep->trb_enqueue); 1040 if (tmp->ctrl & DWC3_TRB_CTRL_HWO) 1041 return 0; 1042 1043 return DWC3_TRB_NUM - 1; 1044 } 1045 1046 trbs_left = dep->trb_dequeue - dep->trb_enqueue; 1047 trbs_left &= (DWC3_TRB_NUM - 1); 1048 1049 if (dep->trb_dequeue < dep->trb_enqueue) 1050 trbs_left--; 1051 1052 return trbs_left; 1053 } 1054 1055 static void dwc3_prepare_one_trb_sg(struct dwc3_ep *dep, 1056 struct dwc3_request *req) 1057 { 1058 struct scatterlist *sg = req->sg; 1059 struct scatterlist *s; 1060 int i; 1061 1062 for_each_sg(sg, s, req->num_pending_sgs, i) { 1063 unsigned int length = req->request.length; 1064 unsigned int maxp = usb_endpoint_maxp(dep->endpoint.desc); 1065 unsigned int rem = length % maxp; 1066 unsigned chain = true; 1067 1068 if (sg_is_last(s)) 1069 chain = false; 1070 1071 if (rem && usb_endpoint_dir_out(dep->endpoint.desc) && !chain) { 1072 struct dwc3 *dwc = dep->dwc; 1073 struct dwc3_trb *trb; 1074 1075 req->unaligned = true; 1076 1077 /* prepare normal TRB */ 1078 dwc3_prepare_one_trb(dep, req, true, i); 1079 1080 /* Now prepare one extra TRB to align transfer size */ 1081 trb = &dep->trb_pool[dep->trb_enqueue]; 1082 __dwc3_prepare_one_trb(dep, trb, dwc->bounce_addr, 1083 maxp - rem, false, 0, 1084 req->request.stream_id, 1085 req->request.short_not_ok, 1086 req->request.no_interrupt); 1087 } else { 1088 dwc3_prepare_one_trb(dep, req, chain, i); 1089 } 1090 1091 if (!dwc3_calc_trbs_left(dep)) 1092 break; 1093 } 1094 } 1095 1096 static void dwc3_prepare_one_trb_linear(struct dwc3_ep *dep, 1097 struct dwc3_request *req) 1098 { 1099 unsigned int length = req->request.length; 1100 unsigned int maxp = usb_endpoint_maxp(dep->endpoint.desc); 1101 unsigned int rem = length % maxp; 1102 1103 if (rem && usb_endpoint_dir_out(dep->endpoint.desc)) { 1104 struct dwc3 *dwc = dep->dwc; 1105 struct dwc3_trb *trb; 1106 1107 req->unaligned = true; 1108 1109 /* prepare normal TRB */ 1110 dwc3_prepare_one_trb(dep, req, true, 0); 1111 1112 /* Now prepare one extra TRB to align transfer size */ 1113 trb = &dep->trb_pool[dep->trb_enqueue]; 1114 __dwc3_prepare_one_trb(dep, trb, dwc->bounce_addr, maxp - rem, 1115 false, 0, req->request.stream_id, 1116 req->request.short_not_ok, 1117 req->request.no_interrupt); 1118 } else if (req->request.zero && req->request.length && 1119 (IS_ALIGNED(req->request.length,dep->endpoint.maxpacket))) { 1120 struct dwc3 *dwc = dep->dwc; 1121 struct dwc3_trb *trb; 1122 1123 req->zero = true; 1124 1125 /* prepare normal TRB */ 1126 dwc3_prepare_one_trb(dep, req, true, 0); 1127 1128 /* Now prepare one extra TRB to handle ZLP */ 1129 trb = &dep->trb_pool[dep->trb_enqueue]; 1130 __dwc3_prepare_one_trb(dep, trb, dwc->bounce_addr, 0, 1131 false, 0, req->request.stream_id, 1132 req->request.short_not_ok, 1133 req->request.no_interrupt); 1134 } else { 1135 dwc3_prepare_one_trb(dep, req, false, 0); 1136 } 1137 } 1138 1139 /* 1140 * dwc3_prepare_trbs - setup TRBs from requests 1141 * @dep: endpoint for which requests are being prepared 1142 * 1143 * The function goes through the requests list and sets up TRBs for the 1144 * transfers. The function returns once there are no more TRBs available or 1145 * it runs out of requests. 1146 */ 1147 static void dwc3_prepare_trbs(struct dwc3_ep *dep) 1148 { 1149 struct dwc3_request *req, *n; 1150 1151 BUILD_BUG_ON_NOT_POWER_OF_2(DWC3_TRB_NUM); 1152 1153 /* 1154 * We can get in a situation where there's a request in the started list 1155 * but there weren't enough TRBs to fully kick it in the first time 1156 * around, so it has been waiting for more TRBs to be freed up. 1157 * 1158 * In that case, we should check if we have a request with pending_sgs 1159 * in the started list and prepare TRBs for that request first, 1160 * otherwise we will prepare TRBs completely out of order and that will 1161 * break things. 1162 */ 1163 list_for_each_entry(req, &dep->started_list, list) { 1164 if (req->num_pending_sgs > 0) 1165 dwc3_prepare_one_trb_sg(dep, req); 1166 1167 if (!dwc3_calc_trbs_left(dep)) 1168 return; 1169 } 1170 1171 list_for_each_entry_safe(req, n, &dep->pending_list, list) { 1172 struct dwc3 *dwc = dep->dwc; 1173 int ret; 1174 1175 ret = usb_gadget_map_request_by_dev(dwc->sysdev, &req->request, 1176 dep->direction); 1177 if (ret) 1178 return; 1179 1180 req->sg = req->request.sg; 1181 req->num_pending_sgs = req->request.num_mapped_sgs; 1182 1183 if (req->num_pending_sgs > 0) 1184 dwc3_prepare_one_trb_sg(dep, req); 1185 else 1186 dwc3_prepare_one_trb_linear(dep, req); 1187 1188 if (!dwc3_calc_trbs_left(dep)) 1189 return; 1190 } 1191 } 1192 1193 static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep) 1194 { 1195 struct dwc3_gadget_ep_cmd_params params; 1196 struct dwc3_request *req; 1197 int starting; 1198 int ret; 1199 u32 cmd; 1200 1201 if (!dwc3_calc_trbs_left(dep)) 1202 return 0; 1203 1204 starting = !(dep->flags & DWC3_EP_BUSY); 1205 1206 dwc3_prepare_trbs(dep); 1207 req = next_request(&dep->started_list); 1208 if (!req) { 1209 dep->flags |= DWC3_EP_PENDING_REQUEST; 1210 return 0; 1211 } 1212 1213 memset(¶ms, 0, sizeof(params)); 1214 1215 if (starting) { 1216 params.param0 = upper_32_bits(req->trb_dma); 1217 params.param1 = lower_32_bits(req->trb_dma); 1218 cmd = DWC3_DEPCMD_STARTTRANSFER; 1219 1220 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) 1221 cmd |= DWC3_DEPCMD_PARAM(dep->frame_number); 1222 } else { 1223 cmd = DWC3_DEPCMD_UPDATETRANSFER | 1224 DWC3_DEPCMD_PARAM(dep->resource_index); 1225 } 1226 1227 ret = dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms); 1228 if (ret < 0) { 1229 /* 1230 * FIXME we need to iterate over the list of requests 1231 * here and stop, unmap, free and del each of the linked 1232 * requests instead of what we do now. 1233 */ 1234 if (req->trb) 1235 memset(req->trb, 0, sizeof(struct dwc3_trb)); 1236 dep->queued_requests--; 1237 dwc3_gadget_del_and_unmap_request(dep, req, ret); 1238 return ret; 1239 } 1240 1241 dep->flags |= DWC3_EP_BUSY; 1242 1243 if (starting) { 1244 dep->resource_index = dwc3_gadget_ep_get_transfer_index(dep); 1245 WARN_ON_ONCE(!dep->resource_index); 1246 } 1247 1248 return 0; 1249 } 1250 1251 static int __dwc3_gadget_get_frame(struct dwc3 *dwc) 1252 { 1253 u32 reg; 1254 1255 reg = dwc3_readl(dwc->regs, DWC3_DSTS); 1256 return DWC3_DSTS_SOFFN(reg); 1257 } 1258 1259 static void __dwc3_gadget_start_isoc(struct dwc3 *dwc, 1260 struct dwc3_ep *dep, u32 cur_uf) 1261 { 1262 if (list_empty(&dep->pending_list)) { 1263 dev_info(dwc->dev, "%s: ran out of requests\n", 1264 dep->name); 1265 dep->flags |= DWC3_EP_PENDING_REQUEST; 1266 return; 1267 } 1268 1269 /* 1270 * Schedule the first trb for one interval in the future or at 1271 * least 4 microframes. 1272 */ 1273 dep->frame_number = cur_uf + max_t(u32, 4, dep->interval); 1274 __dwc3_gadget_kick_transfer(dep); 1275 } 1276 1277 static void dwc3_gadget_start_isoc(struct dwc3 *dwc, 1278 struct dwc3_ep *dep, const struct dwc3_event_depevt *event) 1279 { 1280 u32 cur_uf, mask; 1281 1282 mask = ~(dep->interval - 1); 1283 cur_uf = event->parameters & mask; 1284 1285 __dwc3_gadget_start_isoc(dwc, dep, cur_uf); 1286 } 1287 1288 static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req) 1289 { 1290 struct dwc3 *dwc = dep->dwc; 1291 1292 if (!dep->endpoint.desc) { 1293 dev_err(dwc->dev, "%s: can't queue to disabled endpoint\n", 1294 dep->name); 1295 return -ESHUTDOWN; 1296 } 1297 1298 if (WARN(req->dep != dep, "request %pK belongs to '%s'\n", 1299 &req->request, req->dep->name)) 1300 return -EINVAL; 1301 1302 pm_runtime_get(dwc->dev); 1303 1304 req->request.actual = 0; 1305 req->request.status = -EINPROGRESS; 1306 req->direction = dep->direction; 1307 req->epnum = dep->number; 1308 1309 trace_dwc3_ep_queue(req); 1310 1311 list_add_tail(&req->list, &dep->pending_list); 1312 1313 /* 1314 * NOTICE: Isochronous endpoints should NEVER be prestarted. We must 1315 * wait for a XferNotReady event so we will know what's the current 1316 * (micro-)frame number. 1317 * 1318 * Without this trick, we are very, very likely gonna get Bus Expiry 1319 * errors which will force us issue EndTransfer command. 1320 */ 1321 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { 1322 if ((dep->flags & DWC3_EP_PENDING_REQUEST)) { 1323 if (dep->flags & DWC3_EP_TRANSFER_STARTED) { 1324 dwc3_stop_active_transfer(dwc, dep->number, true); 1325 dep->flags = DWC3_EP_ENABLED; 1326 } else { 1327 u32 cur_uf; 1328 1329 cur_uf = __dwc3_gadget_get_frame(dwc); 1330 __dwc3_gadget_start_isoc(dwc, dep, cur_uf); 1331 dep->flags &= ~DWC3_EP_PENDING_REQUEST; 1332 } 1333 return 0; 1334 } 1335 1336 if ((dep->flags & DWC3_EP_BUSY) && 1337 !(dep->flags & DWC3_EP_MISSED_ISOC)) 1338 goto out; 1339 1340 return 0; 1341 } 1342 1343 out: 1344 return __dwc3_gadget_kick_transfer(dep); 1345 } 1346 1347 static int dwc3_gadget_ep_queue(struct usb_ep *ep, struct usb_request *request, 1348 gfp_t gfp_flags) 1349 { 1350 struct dwc3_request *req = to_dwc3_request(request); 1351 struct dwc3_ep *dep = to_dwc3_ep(ep); 1352 struct dwc3 *dwc = dep->dwc; 1353 1354 unsigned long flags; 1355 1356 int ret; 1357 1358 spin_lock_irqsave(&dwc->lock, flags); 1359 ret = __dwc3_gadget_ep_queue(dep, req); 1360 spin_unlock_irqrestore(&dwc->lock, flags); 1361 1362 return ret; 1363 } 1364 1365 static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, 1366 struct usb_request *request) 1367 { 1368 struct dwc3_request *req = to_dwc3_request(request); 1369 struct dwc3_request *r = NULL; 1370 1371 struct dwc3_ep *dep = to_dwc3_ep(ep); 1372 struct dwc3 *dwc = dep->dwc; 1373 1374 unsigned long flags; 1375 int ret = 0; 1376 1377 trace_dwc3_ep_dequeue(req); 1378 1379 spin_lock_irqsave(&dwc->lock, flags); 1380 1381 list_for_each_entry(r, &dep->pending_list, list) { 1382 if (r == req) 1383 break; 1384 } 1385 1386 if (r != req) { 1387 list_for_each_entry(r, &dep->started_list, list) { 1388 if (r == req) 1389 break; 1390 } 1391 if (r == req) { 1392 /* wait until it is processed */ 1393 dwc3_stop_active_transfer(dwc, dep->number, true); 1394 1395 /* 1396 * If request was already started, this means we had to 1397 * stop the transfer. With that we also need to ignore 1398 * all TRBs used by the request, however TRBs can only 1399 * be modified after completion of END_TRANSFER 1400 * command. So what we do here is that we wait for 1401 * END_TRANSFER completion and only after that, we jump 1402 * over TRBs by clearing HWO and incrementing dequeue 1403 * pointer. 1404 * 1405 * Note that we have 2 possible types of transfers here: 1406 * 1407 * i) Linear buffer request 1408 * ii) SG-list based request 1409 * 1410 * SG-list based requests will have r->num_pending_sgs 1411 * set to a valid number (> 0). Linear requests, 1412 * normally use a single TRB. 1413 * 1414 * For each of these two cases, if r->unaligned flag is 1415 * set, one extra TRB has been used to align transfer 1416 * size to wMaxPacketSize. 1417 * 1418 * All of these cases need to be taken into 1419 * consideration so we don't mess up our TRB ring 1420 * pointers. 1421 */ 1422 wait_event_lock_irq(dep->wait_end_transfer, 1423 !(dep->flags & DWC3_EP_END_TRANSFER_PENDING), 1424 dwc->lock); 1425 1426 if (!r->trb) 1427 goto out1; 1428 1429 if (r->num_pending_sgs) { 1430 struct dwc3_trb *trb; 1431 int i = 0; 1432 1433 for (i = 0; i < r->num_pending_sgs; i++) { 1434 trb = r->trb + i; 1435 trb->ctrl &= ~DWC3_TRB_CTRL_HWO; 1436 dwc3_ep_inc_deq(dep); 1437 } 1438 1439 if (r->unaligned || r->zero) { 1440 trb = r->trb + r->num_pending_sgs + 1; 1441 trb->ctrl &= ~DWC3_TRB_CTRL_HWO; 1442 dwc3_ep_inc_deq(dep); 1443 } 1444 } else { 1445 struct dwc3_trb *trb = r->trb; 1446 1447 trb->ctrl &= ~DWC3_TRB_CTRL_HWO; 1448 dwc3_ep_inc_deq(dep); 1449 1450 if (r->unaligned || r->zero) { 1451 trb = r->trb + 1; 1452 trb->ctrl &= ~DWC3_TRB_CTRL_HWO; 1453 dwc3_ep_inc_deq(dep); 1454 } 1455 } 1456 goto out1; 1457 } 1458 dev_err(dwc->dev, "request %pK was not queued to %s\n", 1459 request, ep->name); 1460 ret = -EINVAL; 1461 goto out0; 1462 } 1463 1464 out1: 1465 /* giveback the request */ 1466 dep->queued_requests--; 1467 dwc3_gadget_giveback(dep, req, -ECONNRESET); 1468 1469 out0: 1470 spin_unlock_irqrestore(&dwc->lock, flags); 1471 1472 return ret; 1473 } 1474 1475 int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value, int protocol) 1476 { 1477 struct dwc3_gadget_ep_cmd_params params; 1478 struct dwc3 *dwc = dep->dwc; 1479 int ret; 1480 1481 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { 1482 dev_err(dwc->dev, "%s is of Isochronous type\n", dep->name); 1483 return -EINVAL; 1484 } 1485 1486 memset(¶ms, 0x00, sizeof(params)); 1487 1488 if (value) { 1489 struct dwc3_trb *trb; 1490 1491 unsigned transfer_in_flight; 1492 unsigned started; 1493 1494 if (dep->flags & DWC3_EP_STALL) 1495 return 0; 1496 1497 if (dep->number > 1) 1498 trb = dwc3_ep_prev_trb(dep, dep->trb_enqueue); 1499 else 1500 trb = &dwc->ep0_trb[dep->trb_enqueue]; 1501 1502 transfer_in_flight = trb->ctrl & DWC3_TRB_CTRL_HWO; 1503 started = !list_empty(&dep->started_list); 1504 1505 if (!protocol && ((dep->direction && transfer_in_flight) || 1506 (!dep->direction && started))) { 1507 return -EAGAIN; 1508 } 1509 1510 ret = dwc3_send_gadget_ep_cmd(dep, DWC3_DEPCMD_SETSTALL, 1511 ¶ms); 1512 if (ret) 1513 dev_err(dwc->dev, "failed to set STALL on %s\n", 1514 dep->name); 1515 else 1516 dep->flags |= DWC3_EP_STALL; 1517 } else { 1518 if (!(dep->flags & DWC3_EP_STALL)) 1519 return 0; 1520 1521 ret = dwc3_send_clear_stall_ep_cmd(dep); 1522 if (ret) 1523 dev_err(dwc->dev, "failed to clear STALL on %s\n", 1524 dep->name); 1525 else 1526 dep->flags &= ~(DWC3_EP_STALL | DWC3_EP_WEDGE); 1527 } 1528 1529 return ret; 1530 } 1531 1532 static int dwc3_gadget_ep_set_halt(struct usb_ep *ep, int value) 1533 { 1534 struct dwc3_ep *dep = to_dwc3_ep(ep); 1535 struct dwc3 *dwc = dep->dwc; 1536 1537 unsigned long flags; 1538 1539 int ret; 1540 1541 spin_lock_irqsave(&dwc->lock, flags); 1542 ret = __dwc3_gadget_ep_set_halt(dep, value, false); 1543 spin_unlock_irqrestore(&dwc->lock, flags); 1544 1545 return ret; 1546 } 1547 1548 static int dwc3_gadget_ep_set_wedge(struct usb_ep *ep) 1549 { 1550 struct dwc3_ep *dep = to_dwc3_ep(ep); 1551 struct dwc3 *dwc = dep->dwc; 1552 unsigned long flags; 1553 int ret; 1554 1555 spin_lock_irqsave(&dwc->lock, flags); 1556 dep->flags |= DWC3_EP_WEDGE; 1557 1558 if (dep->number == 0 || dep->number == 1) 1559 ret = __dwc3_gadget_ep0_set_halt(ep, 1); 1560 else 1561 ret = __dwc3_gadget_ep_set_halt(dep, 1, false); 1562 spin_unlock_irqrestore(&dwc->lock, flags); 1563 1564 return ret; 1565 } 1566 1567 /* -------------------------------------------------------------------------- */ 1568 1569 static struct usb_endpoint_descriptor dwc3_gadget_ep0_desc = { 1570 .bLength = USB_DT_ENDPOINT_SIZE, 1571 .bDescriptorType = USB_DT_ENDPOINT, 1572 .bmAttributes = USB_ENDPOINT_XFER_CONTROL, 1573 }; 1574 1575 static const struct usb_ep_ops dwc3_gadget_ep0_ops = { 1576 .enable = dwc3_gadget_ep0_enable, 1577 .disable = dwc3_gadget_ep0_disable, 1578 .alloc_request = dwc3_gadget_ep_alloc_request, 1579 .free_request = dwc3_gadget_ep_free_request, 1580 .queue = dwc3_gadget_ep0_queue, 1581 .dequeue = dwc3_gadget_ep_dequeue, 1582 .set_halt = dwc3_gadget_ep0_set_halt, 1583 .set_wedge = dwc3_gadget_ep_set_wedge, 1584 }; 1585 1586 static const struct usb_ep_ops dwc3_gadget_ep_ops = { 1587 .enable = dwc3_gadget_ep_enable, 1588 .disable = dwc3_gadget_ep_disable, 1589 .alloc_request = dwc3_gadget_ep_alloc_request, 1590 .free_request = dwc3_gadget_ep_free_request, 1591 .queue = dwc3_gadget_ep_queue, 1592 .dequeue = dwc3_gadget_ep_dequeue, 1593 .set_halt = dwc3_gadget_ep_set_halt, 1594 .set_wedge = dwc3_gadget_ep_set_wedge, 1595 }; 1596 1597 /* -------------------------------------------------------------------------- */ 1598 1599 static int dwc3_gadget_get_frame(struct usb_gadget *g) 1600 { 1601 struct dwc3 *dwc = gadget_to_dwc(g); 1602 1603 return __dwc3_gadget_get_frame(dwc); 1604 } 1605 1606 static int __dwc3_gadget_wakeup(struct dwc3 *dwc) 1607 { 1608 int retries; 1609 1610 int ret; 1611 u32 reg; 1612 1613 u8 link_state; 1614 u8 speed; 1615 1616 /* 1617 * According to the Databook Remote wakeup request should 1618 * be issued only when the device is in early suspend state. 1619 * 1620 * We can check that via USB Link State bits in DSTS register. 1621 */ 1622 reg = dwc3_readl(dwc->regs, DWC3_DSTS); 1623 1624 speed = reg & DWC3_DSTS_CONNECTSPD; 1625 if ((speed == DWC3_DSTS_SUPERSPEED) || 1626 (speed == DWC3_DSTS_SUPERSPEED_PLUS)) 1627 return 0; 1628 1629 link_state = DWC3_DSTS_USBLNKST(reg); 1630 1631 switch (link_state) { 1632 case DWC3_LINK_STATE_RX_DET: /* in HS, means Early Suspend */ 1633 case DWC3_LINK_STATE_U3: /* in HS, means SUSPEND */ 1634 break; 1635 default: 1636 return -EINVAL; 1637 } 1638 1639 ret = dwc3_gadget_set_link_state(dwc, DWC3_LINK_STATE_RECOV); 1640 if (ret < 0) { 1641 dev_err(dwc->dev, "failed to put link in Recovery\n"); 1642 return ret; 1643 } 1644 1645 /* Recent versions do this automatically */ 1646 if (dwc->revision < DWC3_REVISION_194A) { 1647 /* write zeroes to Link Change Request */ 1648 reg = dwc3_readl(dwc->regs, DWC3_DCTL); 1649 reg &= ~DWC3_DCTL_ULSTCHNGREQ_MASK; 1650 dwc3_writel(dwc->regs, DWC3_DCTL, reg); 1651 } 1652 1653 /* poll until Link State changes to ON */ 1654 retries = 20000; 1655 1656 while (retries--) { 1657 reg = dwc3_readl(dwc->regs, DWC3_DSTS); 1658 1659 /* in HS, means ON */ 1660 if (DWC3_DSTS_USBLNKST(reg) == DWC3_LINK_STATE_U0) 1661 break; 1662 } 1663 1664 if (DWC3_DSTS_USBLNKST(reg) != DWC3_LINK_STATE_U0) { 1665 dev_err(dwc->dev, "failed to send remote wakeup\n"); 1666 return -EINVAL; 1667 } 1668 1669 return 0; 1670 } 1671 1672 static int dwc3_gadget_wakeup(struct usb_gadget *g) 1673 { 1674 struct dwc3 *dwc = gadget_to_dwc(g); 1675 unsigned long flags; 1676 int ret; 1677 1678 spin_lock_irqsave(&dwc->lock, flags); 1679 ret = __dwc3_gadget_wakeup(dwc); 1680 spin_unlock_irqrestore(&dwc->lock, flags); 1681 1682 return ret; 1683 } 1684 1685 static int dwc3_gadget_set_selfpowered(struct usb_gadget *g, 1686 int is_selfpowered) 1687 { 1688 struct dwc3 *dwc = gadget_to_dwc(g); 1689 unsigned long flags; 1690 1691 spin_lock_irqsave(&dwc->lock, flags); 1692 g->is_selfpowered = !!is_selfpowered; 1693 spin_unlock_irqrestore(&dwc->lock, flags); 1694 1695 return 0; 1696 } 1697 1698 static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend) 1699 { 1700 u32 reg; 1701 u32 timeout = 500; 1702 1703 if (pm_runtime_suspended(dwc->dev)) 1704 return 0; 1705 1706 reg = dwc3_readl(dwc->regs, DWC3_DCTL); 1707 if (is_on) { 1708 if (dwc->revision <= DWC3_REVISION_187A) { 1709 reg &= ~DWC3_DCTL_TRGTULST_MASK; 1710 reg |= DWC3_DCTL_TRGTULST_RX_DET; 1711 } 1712 1713 if (dwc->revision >= DWC3_REVISION_194A) 1714 reg &= ~DWC3_DCTL_KEEP_CONNECT; 1715 reg |= DWC3_DCTL_RUN_STOP; 1716 1717 if (dwc->has_hibernation) 1718 reg |= DWC3_DCTL_KEEP_CONNECT; 1719 1720 dwc->pullups_connected = true; 1721 } else { 1722 reg &= ~DWC3_DCTL_RUN_STOP; 1723 1724 if (dwc->has_hibernation && !suspend) 1725 reg &= ~DWC3_DCTL_KEEP_CONNECT; 1726 1727 dwc->pullups_connected = false; 1728 } 1729 1730 dwc3_writel(dwc->regs, DWC3_DCTL, reg); 1731 1732 do { 1733 reg = dwc3_readl(dwc->regs, DWC3_DSTS); 1734 reg &= DWC3_DSTS_DEVCTRLHLT; 1735 } while (--timeout && !(!is_on ^ !reg)); 1736 1737 if (!timeout) 1738 return -ETIMEDOUT; 1739 1740 return 0; 1741 } 1742 1743 static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) 1744 { 1745 struct dwc3 *dwc = gadget_to_dwc(g); 1746 unsigned long flags; 1747 int ret; 1748 1749 is_on = !!is_on; 1750 1751 /* 1752 * Per databook, when we want to stop the gadget, if a control transfer 1753 * is still in process, complete it and get the core into setup phase. 1754 */ 1755 if (!is_on && dwc->ep0state != EP0_SETUP_PHASE) { 1756 reinit_completion(&dwc->ep0_in_setup); 1757 1758 ret = wait_for_completion_timeout(&dwc->ep0_in_setup, 1759 msecs_to_jiffies(DWC3_PULL_UP_TIMEOUT)); 1760 if (ret == 0) { 1761 dev_err(dwc->dev, "timed out waiting for SETUP phase\n"); 1762 return -ETIMEDOUT; 1763 } 1764 } 1765 1766 spin_lock_irqsave(&dwc->lock, flags); 1767 ret = dwc3_gadget_run_stop(dwc, is_on, false); 1768 spin_unlock_irqrestore(&dwc->lock, flags); 1769 1770 return ret; 1771 } 1772 1773 static void dwc3_gadget_enable_irq(struct dwc3 *dwc) 1774 { 1775 u32 reg; 1776 1777 /* Enable all but Start and End of Frame IRQs */ 1778 reg = (DWC3_DEVTEN_VNDRDEVTSTRCVEDEN | 1779 DWC3_DEVTEN_EVNTOVERFLOWEN | 1780 DWC3_DEVTEN_CMDCMPLTEN | 1781 DWC3_DEVTEN_ERRTICERREN | 1782 DWC3_DEVTEN_WKUPEVTEN | 1783 DWC3_DEVTEN_CONNECTDONEEN | 1784 DWC3_DEVTEN_USBRSTEN | 1785 DWC3_DEVTEN_DISCONNEVTEN); 1786 1787 if (dwc->revision < DWC3_REVISION_250A) 1788 reg |= DWC3_DEVTEN_ULSTCNGEN; 1789 1790 dwc3_writel(dwc->regs, DWC3_DEVTEN, reg); 1791 } 1792 1793 static void dwc3_gadget_disable_irq(struct dwc3 *dwc) 1794 { 1795 /* mask all interrupts */ 1796 dwc3_writel(dwc->regs, DWC3_DEVTEN, 0x00); 1797 } 1798 1799 static irqreturn_t dwc3_interrupt(int irq, void *_dwc); 1800 static irqreturn_t dwc3_thread_interrupt(int irq, void *_dwc); 1801 1802 /** 1803 * dwc3_gadget_setup_nump - calculate and initialize NUMP field of %DWC3_DCFG 1804 * @dwc: pointer to our context structure 1805 * 1806 * The following looks like complex but it's actually very simple. In order to 1807 * calculate the number of packets we can burst at once on OUT transfers, we're 1808 * gonna use RxFIFO size. 1809 * 1810 * To calculate RxFIFO size we need two numbers: 1811 * MDWIDTH = size, in bits, of the internal memory bus 1812 * RAM2_DEPTH = depth, in MDWIDTH, of internal RAM2 (where RxFIFO sits) 1813 * 1814 * Given these two numbers, the formula is simple: 1815 * 1816 * RxFIFO Size = (RAM2_DEPTH * MDWIDTH / 8) - 24 - 16; 1817 * 1818 * 24 bytes is for 3x SETUP packets 1819 * 16 bytes is a clock domain crossing tolerance 1820 * 1821 * Given RxFIFO Size, NUMP = RxFIFOSize / 1024; 1822 */ 1823 static void dwc3_gadget_setup_nump(struct dwc3 *dwc) 1824 { 1825 u32 ram2_depth; 1826 u32 mdwidth; 1827 u32 nump; 1828 u32 reg; 1829 1830 ram2_depth = DWC3_GHWPARAMS7_RAM2_DEPTH(dwc->hwparams.hwparams7); 1831 mdwidth = DWC3_GHWPARAMS0_MDWIDTH(dwc->hwparams.hwparams0); 1832 1833 nump = ((ram2_depth * mdwidth / 8) - 24 - 16) / 1024; 1834 nump = min_t(u32, nump, 16); 1835 1836 /* update NumP */ 1837 reg = dwc3_readl(dwc->regs, DWC3_DCFG); 1838 reg &= ~DWC3_DCFG_NUMP_MASK; 1839 reg |= nump << DWC3_DCFG_NUMP_SHIFT; 1840 dwc3_writel(dwc->regs, DWC3_DCFG, reg); 1841 } 1842 1843 static int __dwc3_gadget_start(struct dwc3 *dwc) 1844 { 1845 struct dwc3_ep *dep; 1846 int ret = 0; 1847 u32 reg; 1848 1849 /* 1850 * Use IMOD if enabled via dwc->imod_interval. Otherwise, if 1851 * the core supports IMOD, disable it. 1852 */ 1853 if (dwc->imod_interval) { 1854 dwc3_writel(dwc->regs, DWC3_DEV_IMOD(0), dwc->imod_interval); 1855 dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(0), DWC3_GEVNTCOUNT_EHB); 1856 } else if (dwc3_has_imod(dwc)) { 1857 dwc3_writel(dwc->regs, DWC3_DEV_IMOD(0), 0); 1858 } 1859 1860 /* 1861 * We are telling dwc3 that we want to use DCFG.NUMP as ACK TP's NUMP 1862 * field instead of letting dwc3 itself calculate that automatically. 1863 * 1864 * This way, we maximize the chances that we'll be able to get several 1865 * bursts of data without going through any sort of endpoint throttling. 1866 */ 1867 reg = dwc3_readl(dwc->regs, DWC3_GRXTHRCFG); 1868 if (dwc3_is_usb31(dwc)) 1869 reg &= ~DWC31_GRXTHRCFG_PKTCNTSEL; 1870 else 1871 reg &= ~DWC3_GRXTHRCFG_PKTCNTSEL; 1872 1873 dwc3_writel(dwc->regs, DWC3_GRXTHRCFG, reg); 1874 1875 dwc3_gadget_setup_nump(dwc); 1876 1877 /* Start with SuperSpeed Default */ 1878 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512); 1879 1880 dep = dwc->eps[0]; 1881 ret = __dwc3_gadget_ep_enable(dep, false, false); 1882 if (ret) { 1883 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 1884 goto err0; 1885 } 1886 1887 dep = dwc->eps[1]; 1888 ret = __dwc3_gadget_ep_enable(dep, false, false); 1889 if (ret) { 1890 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 1891 goto err1; 1892 } 1893 1894 /* begin to receive SETUP packets */ 1895 dwc->ep0state = EP0_SETUP_PHASE; 1896 dwc3_ep0_out_start(dwc); 1897 1898 dwc3_gadget_enable_irq(dwc); 1899 1900 return 0; 1901 1902 err1: 1903 __dwc3_gadget_ep_disable(dwc->eps[0]); 1904 1905 err0: 1906 return ret; 1907 } 1908 1909 static int dwc3_gadget_start(struct usb_gadget *g, 1910 struct usb_gadget_driver *driver) 1911 { 1912 struct dwc3 *dwc = gadget_to_dwc(g); 1913 unsigned long flags; 1914 int ret = 0; 1915 int irq; 1916 1917 irq = dwc->irq_gadget; 1918 ret = request_threaded_irq(irq, dwc3_interrupt, dwc3_thread_interrupt, 1919 IRQF_SHARED, "dwc3", dwc->ev_buf); 1920 if (ret) { 1921 dev_err(dwc->dev, "failed to request irq #%d --> %d\n", 1922 irq, ret); 1923 goto err0; 1924 } 1925 1926 spin_lock_irqsave(&dwc->lock, flags); 1927 if (dwc->gadget_driver) { 1928 dev_err(dwc->dev, "%s is already bound to %s\n", 1929 dwc->gadget.name, 1930 dwc->gadget_driver->driver.name); 1931 ret = -EBUSY; 1932 goto err1; 1933 } 1934 1935 dwc->gadget_driver = driver; 1936 1937 if (pm_runtime_active(dwc->dev)) 1938 __dwc3_gadget_start(dwc); 1939 1940 spin_unlock_irqrestore(&dwc->lock, flags); 1941 1942 return 0; 1943 1944 err1: 1945 spin_unlock_irqrestore(&dwc->lock, flags); 1946 free_irq(irq, dwc); 1947 1948 err0: 1949 return ret; 1950 } 1951 1952 static void __dwc3_gadget_stop(struct dwc3 *dwc) 1953 { 1954 dwc3_gadget_disable_irq(dwc); 1955 __dwc3_gadget_ep_disable(dwc->eps[0]); 1956 __dwc3_gadget_ep_disable(dwc->eps[1]); 1957 } 1958 1959 static int dwc3_gadget_stop(struct usb_gadget *g) 1960 { 1961 struct dwc3 *dwc = gadget_to_dwc(g); 1962 unsigned long flags; 1963 int epnum; 1964 u32 tmo_eps = 0; 1965 1966 spin_lock_irqsave(&dwc->lock, flags); 1967 1968 if (pm_runtime_suspended(dwc->dev)) 1969 goto out; 1970 1971 __dwc3_gadget_stop(dwc); 1972 1973 for (epnum = 2; epnum < DWC3_ENDPOINTS_NUM; epnum++) { 1974 struct dwc3_ep *dep = dwc->eps[epnum]; 1975 int ret; 1976 1977 if (!dep) 1978 continue; 1979 1980 if (!(dep->flags & DWC3_EP_END_TRANSFER_PENDING)) 1981 continue; 1982 1983 ret = wait_event_interruptible_lock_irq_timeout(dep->wait_end_transfer, 1984 !(dep->flags & DWC3_EP_END_TRANSFER_PENDING), 1985 dwc->lock, msecs_to_jiffies(5)); 1986 1987 if (ret <= 0) { 1988 /* Timed out or interrupted! There's nothing much 1989 * we can do so we just log here and print which 1990 * endpoints timed out at the end. 1991 */ 1992 tmo_eps |= 1 << epnum; 1993 dep->flags &= DWC3_EP_END_TRANSFER_PENDING; 1994 } 1995 } 1996 1997 if (tmo_eps) { 1998 dev_err(dwc->dev, 1999 "end transfer timed out on endpoints 0x%x [bitmap]\n", 2000 tmo_eps); 2001 } 2002 2003 out: 2004 dwc->gadget_driver = NULL; 2005 spin_unlock_irqrestore(&dwc->lock, flags); 2006 2007 free_irq(dwc->irq_gadget, dwc->ev_buf); 2008 2009 return 0; 2010 } 2011 2012 static void dwc3_gadget_set_speed(struct usb_gadget *g, 2013 enum usb_device_speed speed) 2014 { 2015 struct dwc3 *dwc = gadget_to_dwc(g); 2016 unsigned long flags; 2017 u32 reg; 2018 2019 spin_lock_irqsave(&dwc->lock, flags); 2020 reg = dwc3_readl(dwc->regs, DWC3_DCFG); 2021 reg &= ~(DWC3_DCFG_SPEED_MASK); 2022 2023 /* 2024 * WORKAROUND: DWC3 revision < 2.20a have an issue 2025 * which would cause metastability state on Run/Stop 2026 * bit if we try to force the IP to USB2-only mode. 2027 * 2028 * Because of that, we cannot configure the IP to any 2029 * speed other than the SuperSpeed 2030 * 2031 * Refers to: 2032 * 2033 * STAR#9000525659: Clock Domain Crossing on DCTL in 2034 * USB 2.0 Mode 2035 */ 2036 if (dwc->revision < DWC3_REVISION_220A && 2037 !dwc->dis_metastability_quirk) { 2038 reg |= DWC3_DCFG_SUPERSPEED; 2039 } else { 2040 switch (speed) { 2041 case USB_SPEED_LOW: 2042 reg |= DWC3_DCFG_LOWSPEED; 2043 break; 2044 case USB_SPEED_FULL: 2045 reg |= DWC3_DCFG_FULLSPEED; 2046 break; 2047 case USB_SPEED_HIGH: 2048 reg |= DWC3_DCFG_HIGHSPEED; 2049 break; 2050 case USB_SPEED_SUPER: 2051 reg |= DWC3_DCFG_SUPERSPEED; 2052 break; 2053 case USB_SPEED_SUPER_PLUS: 2054 if (dwc3_is_usb31(dwc)) 2055 reg |= DWC3_DCFG_SUPERSPEED_PLUS; 2056 else 2057 reg |= DWC3_DCFG_SUPERSPEED; 2058 break; 2059 default: 2060 dev_err(dwc->dev, "invalid speed (%d)\n", speed); 2061 2062 if (dwc->revision & DWC3_REVISION_IS_DWC31) 2063 reg |= DWC3_DCFG_SUPERSPEED_PLUS; 2064 else 2065 reg |= DWC3_DCFG_SUPERSPEED; 2066 } 2067 } 2068 dwc3_writel(dwc->regs, DWC3_DCFG, reg); 2069 2070 spin_unlock_irqrestore(&dwc->lock, flags); 2071 } 2072 2073 static const struct usb_gadget_ops dwc3_gadget_ops = { 2074 .get_frame = dwc3_gadget_get_frame, 2075 .wakeup = dwc3_gadget_wakeup, 2076 .set_selfpowered = dwc3_gadget_set_selfpowered, 2077 .pullup = dwc3_gadget_pullup, 2078 .udc_start = dwc3_gadget_start, 2079 .udc_stop = dwc3_gadget_stop, 2080 .udc_set_speed = dwc3_gadget_set_speed, 2081 }; 2082 2083 /* -------------------------------------------------------------------------- */ 2084 2085 static int dwc3_gadget_init_endpoints(struct dwc3 *dwc, u8 total) 2086 { 2087 struct dwc3_ep *dep; 2088 u8 epnum; 2089 2090 INIT_LIST_HEAD(&dwc->gadget.ep_list); 2091 2092 for (epnum = 0; epnum < total; epnum++) { 2093 bool direction = epnum & 1; 2094 u8 num = epnum >> 1; 2095 2096 dep = kzalloc(sizeof(*dep), GFP_KERNEL); 2097 if (!dep) 2098 return -ENOMEM; 2099 2100 dep->dwc = dwc; 2101 dep->number = epnum; 2102 dep->direction = direction; 2103 dep->regs = dwc->regs + DWC3_DEP_BASE(epnum); 2104 dwc->eps[epnum] = dep; 2105 2106 snprintf(dep->name, sizeof(dep->name), "ep%u%s", num, 2107 direction ? "in" : "out"); 2108 2109 dep->endpoint.name = dep->name; 2110 2111 if (!(dep->number > 1)) { 2112 dep->endpoint.desc = &dwc3_gadget_ep0_desc; 2113 dep->endpoint.comp_desc = NULL; 2114 } 2115 2116 spin_lock_init(&dep->lock); 2117 2118 if (num == 0) { 2119 usb_ep_set_maxpacket_limit(&dep->endpoint, 512); 2120 dep->endpoint.maxburst = 1; 2121 dep->endpoint.ops = &dwc3_gadget_ep0_ops; 2122 if (!direction) 2123 dwc->gadget.ep0 = &dep->endpoint; 2124 } else if (direction) { 2125 int mdwidth; 2126 int kbytes; 2127 int size; 2128 int ret; 2129 2130 mdwidth = DWC3_MDWIDTH(dwc->hwparams.hwparams0); 2131 /* MDWIDTH is represented in bits, we need it in bytes */ 2132 mdwidth /= 8; 2133 2134 size = dwc3_readl(dwc->regs, DWC3_GTXFIFOSIZ(num)); 2135 if (dwc3_is_usb31(dwc)) 2136 size = DWC31_GTXFIFOSIZ_TXFDEF(size); 2137 else 2138 size = DWC3_GTXFIFOSIZ_TXFDEF(size); 2139 2140 /* FIFO Depth is in MDWDITH bytes. Multiply */ 2141 size *= mdwidth; 2142 2143 kbytes = size / 1024; 2144 if (kbytes == 0) 2145 kbytes = 1; 2146 2147 /* 2148 * FIFO sizes account an extra MDWIDTH * (kbytes + 1) bytes for 2149 * internal overhead. We don't really know how these are used, 2150 * but documentation say it exists. 2151 */ 2152 size -= mdwidth * (kbytes + 1); 2153 size /= kbytes; 2154 2155 usb_ep_set_maxpacket_limit(&dep->endpoint, size); 2156 2157 dep->endpoint.max_streams = 15; 2158 dep->endpoint.ops = &dwc3_gadget_ep_ops; 2159 list_add_tail(&dep->endpoint.ep_list, 2160 &dwc->gadget.ep_list); 2161 2162 ret = dwc3_alloc_trb_pool(dep); 2163 if (ret) 2164 return ret; 2165 } else { 2166 int ret; 2167 2168 usb_ep_set_maxpacket_limit(&dep->endpoint, 1024); 2169 dep->endpoint.max_streams = 15; 2170 dep->endpoint.ops = &dwc3_gadget_ep_ops; 2171 list_add_tail(&dep->endpoint.ep_list, 2172 &dwc->gadget.ep_list); 2173 2174 ret = dwc3_alloc_trb_pool(dep); 2175 if (ret) 2176 return ret; 2177 } 2178 2179 if (num == 0) { 2180 dep->endpoint.caps.type_control = true; 2181 } else { 2182 dep->endpoint.caps.type_iso = true; 2183 dep->endpoint.caps.type_bulk = true; 2184 dep->endpoint.caps.type_int = true; 2185 } 2186 2187 dep->endpoint.caps.dir_in = direction; 2188 dep->endpoint.caps.dir_out = !direction; 2189 2190 INIT_LIST_HEAD(&dep->pending_list); 2191 INIT_LIST_HEAD(&dep->started_list); 2192 } 2193 2194 return 0; 2195 } 2196 2197 static void dwc3_gadget_free_endpoints(struct dwc3 *dwc) 2198 { 2199 struct dwc3_ep *dep; 2200 u8 epnum; 2201 2202 for (epnum = 0; epnum < DWC3_ENDPOINTS_NUM; epnum++) { 2203 dep = dwc->eps[epnum]; 2204 if (!dep) 2205 continue; 2206 /* 2207 * Physical endpoints 0 and 1 are special; they form the 2208 * bi-directional USB endpoint 0. 2209 * 2210 * For those two physical endpoints, we don't allocate a TRB 2211 * pool nor do we add them the endpoints list. Due to that, we 2212 * shouldn't do these two operations otherwise we would end up 2213 * with all sorts of bugs when removing dwc3.ko. 2214 */ 2215 if (epnum != 0 && epnum != 1) { 2216 dwc3_free_trb_pool(dep); 2217 list_del(&dep->endpoint.ep_list); 2218 } 2219 2220 kfree(dep); 2221 } 2222 } 2223 2224 /* -------------------------------------------------------------------------- */ 2225 2226 static int __dwc3_cleanup_done_trbs(struct dwc3 *dwc, struct dwc3_ep *dep, 2227 struct dwc3_request *req, struct dwc3_trb *trb, 2228 const struct dwc3_event_depevt *event, int status, 2229 int chain) 2230 { 2231 unsigned int count; 2232 unsigned int s_pkt = 0; 2233 unsigned int trb_status; 2234 2235 dwc3_ep_inc_deq(dep); 2236 2237 if (req->trb == trb) 2238 dep->queued_requests--; 2239 2240 trace_dwc3_complete_trb(dep, trb); 2241 2242 /* 2243 * If we're in the middle of series of chained TRBs and we 2244 * receive a short transfer along the way, DWC3 will skip 2245 * through all TRBs including the last TRB in the chain (the 2246 * where CHN bit is zero. DWC3 will also avoid clearing HWO 2247 * bit and SW has to do it manually. 2248 * 2249 * We're going to do that here to avoid problems of HW trying 2250 * to use bogus TRBs for transfers. 2251 */ 2252 if (chain && (trb->ctrl & DWC3_TRB_CTRL_HWO)) 2253 trb->ctrl &= ~DWC3_TRB_CTRL_HWO; 2254 2255 /* 2256 * If we're dealing with unaligned size OUT transfer, we will be left 2257 * with one TRB pending in the ring. We need to manually clear HWO bit 2258 * from that TRB. 2259 */ 2260 if ((req->zero || req->unaligned) && (trb->ctrl & DWC3_TRB_CTRL_HWO)) { 2261 trb->ctrl &= ~DWC3_TRB_CTRL_HWO; 2262 return 1; 2263 } 2264 2265 count = trb->size & DWC3_TRB_SIZE_MASK; 2266 req->remaining += count; 2267 2268 if ((trb->ctrl & DWC3_TRB_CTRL_HWO) && status != -ESHUTDOWN) 2269 return 1; 2270 2271 if (dep->direction) { 2272 if (count) { 2273 trb_status = DWC3_TRB_SIZE_TRBSTS(trb->size); 2274 if (trb_status == DWC3_TRBSTS_MISSED_ISOC) { 2275 /* 2276 * If missed isoc occurred and there is 2277 * no request queued then issue END 2278 * TRANSFER, so that core generates 2279 * next xfernotready and we will issue 2280 * a fresh START TRANSFER. 2281 * If there are still queued request 2282 * then wait, do not issue either END 2283 * or UPDATE TRANSFER, just attach next 2284 * request in pending_list during 2285 * giveback.If any future queued request 2286 * is successfully transferred then we 2287 * will issue UPDATE TRANSFER for all 2288 * request in the pending_list. 2289 */ 2290 dep->flags |= DWC3_EP_MISSED_ISOC; 2291 } else { 2292 dev_err(dwc->dev, "incomplete IN transfer %s\n", 2293 dep->name); 2294 status = -ECONNRESET; 2295 } 2296 } else { 2297 dep->flags &= ~DWC3_EP_MISSED_ISOC; 2298 } 2299 } else { 2300 if (count && (event->status & DEPEVT_STATUS_SHORT)) 2301 s_pkt = 1; 2302 } 2303 2304 if (s_pkt && !chain) 2305 return 1; 2306 2307 if ((event->status & DEPEVT_STATUS_IOC) && 2308 (trb->ctrl & DWC3_TRB_CTRL_IOC)) 2309 return 1; 2310 2311 return 0; 2312 } 2313 2314 static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep, 2315 const struct dwc3_event_depevt *event, int status) 2316 { 2317 struct dwc3_request *req, *n; 2318 struct dwc3_trb *trb; 2319 bool ioc = false; 2320 int ret = 0; 2321 2322 list_for_each_entry_safe(req, n, &dep->started_list, list) { 2323 unsigned length; 2324 int chain; 2325 2326 length = req->request.length; 2327 chain = req->num_pending_sgs > 0; 2328 if (chain) { 2329 struct scatterlist *sg = req->sg; 2330 struct scatterlist *s; 2331 unsigned int pending = req->num_pending_sgs; 2332 unsigned int i; 2333 2334 for_each_sg(sg, s, pending, i) { 2335 trb = &dep->trb_pool[dep->trb_dequeue]; 2336 2337 if (trb->ctrl & DWC3_TRB_CTRL_HWO) 2338 break; 2339 2340 req->sg = sg_next(s); 2341 req->num_pending_sgs--; 2342 2343 ret = __dwc3_cleanup_done_trbs(dwc, dep, req, trb, 2344 event, status, chain); 2345 if (ret) 2346 break; 2347 } 2348 } else { 2349 trb = &dep->trb_pool[dep->trb_dequeue]; 2350 ret = __dwc3_cleanup_done_trbs(dwc, dep, req, trb, 2351 event, status, chain); 2352 } 2353 2354 if (req->unaligned || req->zero) { 2355 trb = &dep->trb_pool[dep->trb_dequeue]; 2356 ret = __dwc3_cleanup_done_trbs(dwc, dep, req, trb, 2357 event, status, false); 2358 req->unaligned = false; 2359 req->zero = false; 2360 } 2361 2362 req->request.actual = length - req->remaining; 2363 2364 if ((req->request.actual < length) && req->num_pending_sgs) 2365 return __dwc3_gadget_kick_transfer(dep); 2366 2367 dwc3_gadget_giveback(dep, req, status); 2368 2369 if (ret) { 2370 if ((event->status & DEPEVT_STATUS_IOC) && 2371 (trb->ctrl & DWC3_TRB_CTRL_IOC)) 2372 ioc = true; 2373 break; 2374 } 2375 } 2376 2377 /* 2378 * Our endpoint might get disabled by another thread during 2379 * dwc3_gadget_giveback(). If that happens, we're just gonna return 1 2380 * early on so DWC3_EP_BUSY flag gets cleared 2381 */ 2382 if (!dep->endpoint.desc) 2383 return 1; 2384 2385 if (usb_endpoint_xfer_isoc(dep->endpoint.desc) && 2386 list_empty(&dep->started_list)) { 2387 if (list_empty(&dep->pending_list)) { 2388 /* 2389 * If there is no entry in request list then do 2390 * not issue END TRANSFER now. Just set PENDING 2391 * flag, so that END TRANSFER is issued when an 2392 * entry is added into request list. 2393 */ 2394 dep->flags = DWC3_EP_PENDING_REQUEST; 2395 } else { 2396 dwc3_stop_active_transfer(dwc, dep->number, true); 2397 dep->flags = DWC3_EP_ENABLED; 2398 } 2399 return 1; 2400 } 2401 2402 if (usb_endpoint_xfer_isoc(dep->endpoint.desc) && ioc) 2403 return 0; 2404 2405 return 1; 2406 } 2407 2408 static void dwc3_endpoint_transfer_complete(struct dwc3 *dwc, 2409 struct dwc3_ep *dep, const struct dwc3_event_depevt *event) 2410 { 2411 unsigned status = 0; 2412 int clean_busy; 2413 u32 is_xfer_complete; 2414 2415 is_xfer_complete = (event->endpoint_event == DWC3_DEPEVT_XFERCOMPLETE); 2416 2417 if (event->status & DEPEVT_STATUS_BUSERR) 2418 status = -ECONNRESET; 2419 2420 clean_busy = dwc3_cleanup_done_reqs(dwc, dep, event, status); 2421 if (clean_busy && (!dep->endpoint.desc || is_xfer_complete || 2422 usb_endpoint_xfer_isoc(dep->endpoint.desc))) 2423 dep->flags &= ~DWC3_EP_BUSY; 2424 2425 /* 2426 * WORKAROUND: This is the 2nd half of U1/U2 -> U0 workaround. 2427 * See dwc3_gadget_linksts_change_interrupt() for 1st half. 2428 */ 2429 if (dwc->revision < DWC3_REVISION_183A) { 2430 u32 reg; 2431 int i; 2432 2433 for (i = 0; i < DWC3_ENDPOINTS_NUM; i++) { 2434 dep = dwc->eps[i]; 2435 2436 if (!(dep->flags & DWC3_EP_ENABLED)) 2437 continue; 2438 2439 if (!list_empty(&dep->started_list)) 2440 return; 2441 } 2442 2443 reg = dwc3_readl(dwc->regs, DWC3_DCTL); 2444 reg |= dwc->u1u2; 2445 dwc3_writel(dwc->regs, DWC3_DCTL, reg); 2446 2447 dwc->u1u2 = 0; 2448 } 2449 2450 /* 2451 * Our endpoint might get disabled by another thread during 2452 * dwc3_gadget_giveback(). If that happens, we're just gonna return 1 2453 * early on so DWC3_EP_BUSY flag gets cleared 2454 */ 2455 if (!dep->endpoint.desc) 2456 return; 2457 2458 if (!usb_endpoint_xfer_isoc(dep->endpoint.desc)) 2459 __dwc3_gadget_kick_transfer(dep); 2460 } 2461 2462 static void dwc3_endpoint_interrupt(struct dwc3 *dwc, 2463 const struct dwc3_event_depevt *event) 2464 { 2465 struct dwc3_ep *dep; 2466 u8 epnum = event->endpoint_number; 2467 u8 cmd; 2468 2469 dep = dwc->eps[epnum]; 2470 2471 if (!(dep->flags & DWC3_EP_ENABLED)) { 2472 if (!(dep->flags & DWC3_EP_END_TRANSFER_PENDING)) 2473 return; 2474 2475 /* Handle only EPCMDCMPLT when EP disabled */ 2476 if (event->endpoint_event != DWC3_DEPEVT_EPCMDCMPLT) 2477 return; 2478 } 2479 2480 if (epnum == 0 || epnum == 1) { 2481 dwc3_ep0_interrupt(dwc, event); 2482 return; 2483 } 2484 2485 switch (event->endpoint_event) { 2486 case DWC3_DEPEVT_XFERCOMPLETE: 2487 dep->resource_index = 0; 2488 2489 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { 2490 dev_err(dwc->dev, "XferComplete for Isochronous endpoint\n"); 2491 return; 2492 } 2493 2494 dwc3_endpoint_transfer_complete(dwc, dep, event); 2495 break; 2496 case DWC3_DEPEVT_XFERINPROGRESS: 2497 dwc3_endpoint_transfer_complete(dwc, dep, event); 2498 break; 2499 case DWC3_DEPEVT_XFERNOTREADY: 2500 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) 2501 dwc3_gadget_start_isoc(dwc, dep, event); 2502 else 2503 __dwc3_gadget_kick_transfer(dep); 2504 2505 break; 2506 case DWC3_DEPEVT_STREAMEVT: 2507 if (!usb_endpoint_xfer_bulk(dep->endpoint.desc)) { 2508 dev_err(dwc->dev, "Stream event for non-Bulk %s\n", 2509 dep->name); 2510 return; 2511 } 2512 break; 2513 case DWC3_DEPEVT_EPCMDCMPLT: 2514 cmd = DEPEVT_PARAMETER_CMD(event->parameters); 2515 2516 if (cmd == DWC3_DEPCMD_ENDTRANSFER) { 2517 dep->flags &= ~DWC3_EP_END_TRANSFER_PENDING; 2518 wake_up(&dep->wait_end_transfer); 2519 } 2520 break; 2521 case DWC3_DEPEVT_RXTXFIFOEVT: 2522 break; 2523 } 2524 } 2525 2526 static void dwc3_disconnect_gadget(struct dwc3 *dwc) 2527 { 2528 if (dwc->gadget_driver && dwc->gadget_driver->disconnect) { 2529 spin_unlock(&dwc->lock); 2530 dwc->gadget_driver->disconnect(&dwc->gadget); 2531 spin_lock(&dwc->lock); 2532 } 2533 } 2534 2535 static void dwc3_suspend_gadget(struct dwc3 *dwc) 2536 { 2537 if (dwc->gadget_driver && dwc->gadget_driver->suspend) { 2538 spin_unlock(&dwc->lock); 2539 dwc->gadget_driver->suspend(&dwc->gadget); 2540 spin_lock(&dwc->lock); 2541 } 2542 } 2543 2544 static void dwc3_resume_gadget(struct dwc3 *dwc) 2545 { 2546 if (dwc->gadget_driver && dwc->gadget_driver->resume) { 2547 spin_unlock(&dwc->lock); 2548 dwc->gadget_driver->resume(&dwc->gadget); 2549 spin_lock(&dwc->lock); 2550 } 2551 } 2552 2553 static void dwc3_reset_gadget(struct dwc3 *dwc) 2554 { 2555 if (!dwc->gadget_driver) 2556 return; 2557 2558 if (dwc->gadget.speed != USB_SPEED_UNKNOWN) { 2559 spin_unlock(&dwc->lock); 2560 usb_gadget_udc_reset(&dwc->gadget, dwc->gadget_driver); 2561 spin_lock(&dwc->lock); 2562 } 2563 } 2564 2565 static void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum, bool force) 2566 { 2567 struct dwc3_ep *dep; 2568 struct dwc3_gadget_ep_cmd_params params; 2569 u32 cmd; 2570 int ret; 2571 2572 dep = dwc->eps[epnum]; 2573 2574 if ((dep->flags & DWC3_EP_END_TRANSFER_PENDING) || 2575 !dep->resource_index) 2576 return; 2577 2578 /* 2579 * NOTICE: We are violating what the Databook says about the 2580 * EndTransfer command. Ideally we would _always_ wait for the 2581 * EndTransfer Command Completion IRQ, but that's causing too 2582 * much trouble synchronizing between us and gadget driver. 2583 * 2584 * We have discussed this with the IP Provider and it was 2585 * suggested to giveback all requests here, but give HW some 2586 * extra time to synchronize with the interconnect. We're using 2587 * an arbitrary 100us delay for that. 2588 * 2589 * Note also that a similar handling was tested by Synopsys 2590 * (thanks a lot Paul) and nothing bad has come out of it. 2591 * In short, what we're doing is: 2592 * 2593 * - Issue EndTransfer WITH CMDIOC bit set 2594 * - Wait 100us 2595 * 2596 * As of IP version 3.10a of the DWC_usb3 IP, the controller 2597 * supports a mode to work around the above limitation. The 2598 * software can poll the CMDACT bit in the DEPCMD register 2599 * after issuing a EndTransfer command. This mode is enabled 2600 * by writing GUCTL2[14]. This polling is already done in the 2601 * dwc3_send_gadget_ep_cmd() function so if the mode is 2602 * enabled, the EndTransfer command will have completed upon 2603 * returning from this function and we don't need to delay for 2604 * 100us. 2605 * 2606 * This mode is NOT available on the DWC_usb31 IP. 2607 */ 2608 2609 cmd = DWC3_DEPCMD_ENDTRANSFER; 2610 cmd |= force ? DWC3_DEPCMD_HIPRI_FORCERM : 0; 2611 cmd |= DWC3_DEPCMD_CMDIOC; 2612 cmd |= DWC3_DEPCMD_PARAM(dep->resource_index); 2613 memset(¶ms, 0, sizeof(params)); 2614 ret = dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms); 2615 WARN_ON_ONCE(ret); 2616 dep->resource_index = 0; 2617 dep->flags &= ~DWC3_EP_BUSY; 2618 2619 if (dwc3_is_usb31(dwc) || dwc->revision < DWC3_REVISION_310A) { 2620 dep->flags |= DWC3_EP_END_TRANSFER_PENDING; 2621 udelay(100); 2622 } 2623 } 2624 2625 static void dwc3_clear_stall_all_ep(struct dwc3 *dwc) 2626 { 2627 u32 epnum; 2628 2629 for (epnum = 1; epnum < DWC3_ENDPOINTS_NUM; epnum++) { 2630 struct dwc3_ep *dep; 2631 int ret; 2632 2633 dep = dwc->eps[epnum]; 2634 if (!dep) 2635 continue; 2636 2637 if (!(dep->flags & DWC3_EP_STALL)) 2638 continue; 2639 2640 dep->flags &= ~DWC3_EP_STALL; 2641 2642 ret = dwc3_send_clear_stall_ep_cmd(dep); 2643 WARN_ON_ONCE(ret); 2644 } 2645 } 2646 2647 static void dwc3_gadget_disconnect_interrupt(struct dwc3 *dwc) 2648 { 2649 int reg; 2650 2651 reg = dwc3_readl(dwc->regs, DWC3_DCTL); 2652 reg &= ~DWC3_DCTL_INITU1ENA; 2653 dwc3_writel(dwc->regs, DWC3_DCTL, reg); 2654 2655 reg &= ~DWC3_DCTL_INITU2ENA; 2656 dwc3_writel(dwc->regs, DWC3_DCTL, reg); 2657 2658 dwc3_disconnect_gadget(dwc); 2659 2660 dwc->gadget.speed = USB_SPEED_UNKNOWN; 2661 dwc->setup_packet_pending = false; 2662 usb_gadget_set_state(&dwc->gadget, USB_STATE_NOTATTACHED); 2663 2664 dwc->connected = false; 2665 } 2666 2667 static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc) 2668 { 2669 u32 reg; 2670 2671 dwc->connected = true; 2672 2673 /* 2674 * WORKAROUND: DWC3 revisions <1.88a have an issue which 2675 * would cause a missing Disconnect Event if there's a 2676 * pending Setup Packet in the FIFO. 2677 * 2678 * There's no suggested workaround on the official Bug 2679 * report, which states that "unless the driver/application 2680 * is doing any special handling of a disconnect event, 2681 * there is no functional issue". 2682 * 2683 * Unfortunately, it turns out that we _do_ some special 2684 * handling of a disconnect event, namely complete all 2685 * pending transfers, notify gadget driver of the 2686 * disconnection, and so on. 2687 * 2688 * Our suggested workaround is to follow the Disconnect 2689 * Event steps here, instead, based on a setup_packet_pending 2690 * flag. Such flag gets set whenever we have a SETUP_PENDING 2691 * status for EP0 TRBs and gets cleared on XferComplete for the 2692 * same endpoint. 2693 * 2694 * Refers to: 2695 * 2696 * STAR#9000466709: RTL: Device : Disconnect event not 2697 * generated if setup packet pending in FIFO 2698 */ 2699 if (dwc->revision < DWC3_REVISION_188A) { 2700 if (dwc->setup_packet_pending) 2701 dwc3_gadget_disconnect_interrupt(dwc); 2702 } 2703 2704 dwc3_reset_gadget(dwc); 2705 2706 reg = dwc3_readl(dwc->regs, DWC3_DCTL); 2707 reg &= ~DWC3_DCTL_TSTCTRL_MASK; 2708 dwc3_writel(dwc->regs, DWC3_DCTL, reg); 2709 dwc->test_mode = false; 2710 dwc3_clear_stall_all_ep(dwc); 2711 2712 /* Reset device address to zero */ 2713 reg = dwc3_readl(dwc->regs, DWC3_DCFG); 2714 reg &= ~(DWC3_DCFG_DEVADDR_MASK); 2715 dwc3_writel(dwc->regs, DWC3_DCFG, reg); 2716 } 2717 2718 static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc) 2719 { 2720 struct dwc3_ep *dep; 2721 int ret; 2722 u32 reg; 2723 u8 speed; 2724 2725 reg = dwc3_readl(dwc->regs, DWC3_DSTS); 2726 speed = reg & DWC3_DSTS_CONNECTSPD; 2727 dwc->speed = speed; 2728 2729 /* 2730 * RAMClkSel is reset to 0 after USB reset, so it must be reprogrammed 2731 * each time on Connect Done. 2732 * 2733 * Currently we always use the reset value. If any platform 2734 * wants to set this to a different value, we need to add a 2735 * setting and update GCTL.RAMCLKSEL here. 2736 */ 2737 2738 switch (speed) { 2739 case DWC3_DSTS_SUPERSPEED_PLUS: 2740 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512); 2741 dwc->gadget.ep0->maxpacket = 512; 2742 dwc->gadget.speed = USB_SPEED_SUPER_PLUS; 2743 break; 2744 case DWC3_DSTS_SUPERSPEED: 2745 /* 2746 * WORKAROUND: DWC3 revisions <1.90a have an issue which 2747 * would cause a missing USB3 Reset event. 2748 * 2749 * In such situations, we should force a USB3 Reset 2750 * event by calling our dwc3_gadget_reset_interrupt() 2751 * routine. 2752 * 2753 * Refers to: 2754 * 2755 * STAR#9000483510: RTL: SS : USB3 reset event may 2756 * not be generated always when the link enters poll 2757 */ 2758 if (dwc->revision < DWC3_REVISION_190A) 2759 dwc3_gadget_reset_interrupt(dwc); 2760 2761 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512); 2762 dwc->gadget.ep0->maxpacket = 512; 2763 dwc->gadget.speed = USB_SPEED_SUPER; 2764 break; 2765 case DWC3_DSTS_HIGHSPEED: 2766 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(64); 2767 dwc->gadget.ep0->maxpacket = 64; 2768 dwc->gadget.speed = USB_SPEED_HIGH; 2769 break; 2770 case DWC3_DSTS_FULLSPEED: 2771 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(64); 2772 dwc->gadget.ep0->maxpacket = 64; 2773 dwc->gadget.speed = USB_SPEED_FULL; 2774 break; 2775 case DWC3_DSTS_LOWSPEED: 2776 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(8); 2777 dwc->gadget.ep0->maxpacket = 8; 2778 dwc->gadget.speed = USB_SPEED_LOW; 2779 break; 2780 } 2781 2782 dwc->eps[1]->endpoint.maxpacket = dwc->gadget.ep0->maxpacket; 2783 2784 /* Enable USB2 LPM Capability */ 2785 2786 if ((dwc->revision > DWC3_REVISION_194A) && 2787 (speed != DWC3_DSTS_SUPERSPEED) && 2788 (speed != DWC3_DSTS_SUPERSPEED_PLUS)) { 2789 reg = dwc3_readl(dwc->regs, DWC3_DCFG); 2790 reg |= DWC3_DCFG_LPM_CAP; 2791 dwc3_writel(dwc->regs, DWC3_DCFG, reg); 2792 2793 reg = dwc3_readl(dwc->regs, DWC3_DCTL); 2794 reg &= ~(DWC3_DCTL_HIRD_THRES_MASK | DWC3_DCTL_L1_HIBER_EN); 2795 2796 reg |= DWC3_DCTL_HIRD_THRES(dwc->hird_threshold); 2797 2798 /* 2799 * When dwc3 revisions >= 2.40a, LPM Erratum is enabled and 2800 * DCFG.LPMCap is set, core responses with an ACK and the 2801 * BESL value in the LPM token is less than or equal to LPM 2802 * NYET threshold. 2803 */ 2804 WARN_ONCE(dwc->revision < DWC3_REVISION_240A 2805 && dwc->has_lpm_erratum, 2806 "LPM Erratum not available on dwc3 revisions < 2.40a\n"); 2807 2808 if (dwc->has_lpm_erratum && dwc->revision >= DWC3_REVISION_240A) 2809 reg |= DWC3_DCTL_LPM_ERRATA(dwc->lpm_nyet_threshold); 2810 2811 dwc3_writel(dwc->regs, DWC3_DCTL, reg); 2812 } else { 2813 reg = dwc3_readl(dwc->regs, DWC3_DCTL); 2814 reg &= ~DWC3_DCTL_HIRD_THRES_MASK; 2815 dwc3_writel(dwc->regs, DWC3_DCTL, reg); 2816 } 2817 2818 dep = dwc->eps[0]; 2819 ret = __dwc3_gadget_ep_enable(dep, true, false); 2820 if (ret) { 2821 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 2822 return; 2823 } 2824 2825 dep = dwc->eps[1]; 2826 ret = __dwc3_gadget_ep_enable(dep, true, false); 2827 if (ret) { 2828 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 2829 return; 2830 } 2831 2832 /* 2833 * Configure PHY via GUSB3PIPECTLn if required. 2834 * 2835 * Update GTXFIFOSIZn 2836 * 2837 * In both cases reset values should be sufficient. 2838 */ 2839 } 2840 2841 static void dwc3_gadget_wakeup_interrupt(struct dwc3 *dwc) 2842 { 2843 /* 2844 * TODO take core out of low power mode when that's 2845 * implemented. 2846 */ 2847 2848 if (dwc->gadget_driver && dwc->gadget_driver->resume) { 2849 spin_unlock(&dwc->lock); 2850 dwc->gadget_driver->resume(&dwc->gadget); 2851 spin_lock(&dwc->lock); 2852 } 2853 } 2854 2855 static void dwc3_gadget_linksts_change_interrupt(struct dwc3 *dwc, 2856 unsigned int evtinfo) 2857 { 2858 enum dwc3_link_state next = evtinfo & DWC3_LINK_STATE_MASK; 2859 unsigned int pwropt; 2860 2861 /* 2862 * WORKAROUND: DWC3 < 2.50a have an issue when configured without 2863 * Hibernation mode enabled which would show up when device detects 2864 * host-initiated U3 exit. 2865 * 2866 * In that case, device will generate a Link State Change Interrupt 2867 * from U3 to RESUME which is only necessary if Hibernation is 2868 * configured in. 2869 * 2870 * There are no functional changes due to such spurious event and we 2871 * just need to ignore it. 2872 * 2873 * Refers to: 2874 * 2875 * STAR#9000570034 RTL: SS Resume event generated in non-Hibernation 2876 * operational mode 2877 */ 2878 pwropt = DWC3_GHWPARAMS1_EN_PWROPT(dwc->hwparams.hwparams1); 2879 if ((dwc->revision < DWC3_REVISION_250A) && 2880 (pwropt != DWC3_GHWPARAMS1_EN_PWROPT_HIB)) { 2881 if ((dwc->link_state == DWC3_LINK_STATE_U3) && 2882 (next == DWC3_LINK_STATE_RESUME)) { 2883 return; 2884 } 2885 } 2886 2887 /* 2888 * WORKAROUND: DWC3 Revisions <1.83a have an issue which, depending 2889 * on the link partner, the USB session might do multiple entry/exit 2890 * of low power states before a transfer takes place. 2891 * 2892 * Due to this problem, we might experience lower throughput. The 2893 * suggested workaround is to disable DCTL[12:9] bits if we're 2894 * transitioning from U1/U2 to U0 and enable those bits again 2895 * after a transfer completes and there are no pending transfers 2896 * on any of the enabled endpoints. 2897 * 2898 * This is the first half of that workaround. 2899 * 2900 * Refers to: 2901 * 2902 * STAR#9000446952: RTL: Device SS : if U1/U2 ->U0 takes >128us 2903 * core send LGO_Ux entering U0 2904 */ 2905 if (dwc->revision < DWC3_REVISION_183A) { 2906 if (next == DWC3_LINK_STATE_U0) { 2907 u32 u1u2; 2908 u32 reg; 2909 2910 switch (dwc->link_state) { 2911 case DWC3_LINK_STATE_U1: 2912 case DWC3_LINK_STATE_U2: 2913 reg = dwc3_readl(dwc->regs, DWC3_DCTL); 2914 u1u2 = reg & (DWC3_DCTL_INITU2ENA 2915 | DWC3_DCTL_ACCEPTU2ENA 2916 | DWC3_DCTL_INITU1ENA 2917 | DWC3_DCTL_ACCEPTU1ENA); 2918 2919 if (!dwc->u1u2) 2920 dwc->u1u2 = reg & u1u2; 2921 2922 reg &= ~u1u2; 2923 2924 dwc3_writel(dwc->regs, DWC3_DCTL, reg); 2925 break; 2926 default: 2927 /* do nothing */ 2928 break; 2929 } 2930 } 2931 } 2932 2933 switch (next) { 2934 case DWC3_LINK_STATE_U1: 2935 if (dwc->speed == USB_SPEED_SUPER) 2936 dwc3_suspend_gadget(dwc); 2937 break; 2938 case DWC3_LINK_STATE_U2: 2939 case DWC3_LINK_STATE_U3: 2940 dwc3_suspend_gadget(dwc); 2941 break; 2942 case DWC3_LINK_STATE_RESUME: 2943 dwc3_resume_gadget(dwc); 2944 break; 2945 default: 2946 /* do nothing */ 2947 break; 2948 } 2949 2950 dwc->link_state = next; 2951 } 2952 2953 static void dwc3_gadget_suspend_interrupt(struct dwc3 *dwc, 2954 unsigned int evtinfo) 2955 { 2956 enum dwc3_link_state next = evtinfo & DWC3_LINK_STATE_MASK; 2957 2958 if (dwc->link_state != next && next == DWC3_LINK_STATE_U3) 2959 dwc3_suspend_gadget(dwc); 2960 2961 dwc->link_state = next; 2962 } 2963 2964 static void dwc3_gadget_hibernation_interrupt(struct dwc3 *dwc, 2965 unsigned int evtinfo) 2966 { 2967 unsigned int is_ss = evtinfo & BIT(4); 2968 2969 /* 2970 * WORKAROUND: DWC3 revison 2.20a with hibernation support 2971 * have a known issue which can cause USB CV TD.9.23 to fail 2972 * randomly. 2973 * 2974 * Because of this issue, core could generate bogus hibernation 2975 * events which SW needs to ignore. 2976 * 2977 * Refers to: 2978 * 2979 * STAR#9000546576: Device Mode Hibernation: Issue in USB 2.0 2980 * Device Fallback from SuperSpeed 2981 */ 2982 if (is_ss ^ (dwc->speed == USB_SPEED_SUPER)) 2983 return; 2984 2985 /* enter hibernation here */ 2986 } 2987 2988 static void dwc3_gadget_interrupt(struct dwc3 *dwc, 2989 const struct dwc3_event_devt *event) 2990 { 2991 switch (event->type) { 2992 case DWC3_DEVICE_EVENT_DISCONNECT: 2993 dwc3_gadget_disconnect_interrupt(dwc); 2994 break; 2995 case DWC3_DEVICE_EVENT_RESET: 2996 dwc3_gadget_reset_interrupt(dwc); 2997 break; 2998 case DWC3_DEVICE_EVENT_CONNECT_DONE: 2999 dwc3_gadget_conndone_interrupt(dwc); 3000 break; 3001 case DWC3_DEVICE_EVENT_WAKEUP: 3002 dwc3_gadget_wakeup_interrupt(dwc); 3003 break; 3004 case DWC3_DEVICE_EVENT_HIBER_REQ: 3005 if (dev_WARN_ONCE(dwc->dev, !dwc->has_hibernation, 3006 "unexpected hibernation event\n")) 3007 break; 3008 3009 dwc3_gadget_hibernation_interrupt(dwc, event->event_info); 3010 break; 3011 case DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE: 3012 dwc3_gadget_linksts_change_interrupt(dwc, event->event_info); 3013 break; 3014 case DWC3_DEVICE_EVENT_EOPF: 3015 /* It changed to be suspend event for version 2.30a and above */ 3016 if (dwc->revision >= DWC3_REVISION_230A) { 3017 /* 3018 * Ignore suspend event until the gadget enters into 3019 * USB_STATE_CONFIGURED state. 3020 */ 3021 if (dwc->gadget.state >= USB_STATE_CONFIGURED) 3022 dwc3_gadget_suspend_interrupt(dwc, 3023 event->event_info); 3024 } 3025 break; 3026 case DWC3_DEVICE_EVENT_SOF: 3027 case DWC3_DEVICE_EVENT_ERRATIC_ERROR: 3028 case DWC3_DEVICE_EVENT_CMD_CMPL: 3029 case DWC3_DEVICE_EVENT_OVERFLOW: 3030 break; 3031 default: 3032 dev_WARN(dwc->dev, "UNKNOWN IRQ %d\n", event->type); 3033 } 3034 } 3035 3036 static void dwc3_process_event_entry(struct dwc3 *dwc, 3037 const union dwc3_event *event) 3038 { 3039 trace_dwc3_event(event->raw, dwc); 3040 3041 if (!event->type.is_devspec) 3042 dwc3_endpoint_interrupt(dwc, &event->depevt); 3043 else if (event->type.type == DWC3_EVENT_TYPE_DEV) 3044 dwc3_gadget_interrupt(dwc, &event->devt); 3045 else 3046 dev_err(dwc->dev, "UNKNOWN IRQ type %d\n", event->raw); 3047 } 3048 3049 static irqreturn_t dwc3_process_event_buf(struct dwc3_event_buffer *evt) 3050 { 3051 struct dwc3 *dwc = evt->dwc; 3052 irqreturn_t ret = IRQ_NONE; 3053 int left; 3054 u32 reg; 3055 3056 left = evt->count; 3057 3058 if (!(evt->flags & DWC3_EVENT_PENDING)) 3059 return IRQ_NONE; 3060 3061 while (left > 0) { 3062 union dwc3_event event; 3063 3064 event.raw = *(u32 *) (evt->cache + evt->lpos); 3065 3066 dwc3_process_event_entry(dwc, &event); 3067 3068 /* 3069 * FIXME we wrap around correctly to the next entry as 3070 * almost all entries are 4 bytes in size. There is one 3071 * entry which has 12 bytes which is a regular entry 3072 * followed by 8 bytes data. ATM I don't know how 3073 * things are organized if we get next to the a 3074 * boundary so I worry about that once we try to handle 3075 * that. 3076 */ 3077 evt->lpos = (evt->lpos + 4) % evt->length; 3078 left -= 4; 3079 } 3080 3081 evt->count = 0; 3082 evt->flags &= ~DWC3_EVENT_PENDING; 3083 ret = IRQ_HANDLED; 3084 3085 /* Unmask interrupt */ 3086 reg = dwc3_readl(dwc->regs, DWC3_GEVNTSIZ(0)); 3087 reg &= ~DWC3_GEVNTSIZ_INTMASK; 3088 dwc3_writel(dwc->regs, DWC3_GEVNTSIZ(0), reg); 3089 3090 if (dwc->imod_interval) { 3091 dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(0), DWC3_GEVNTCOUNT_EHB); 3092 dwc3_writel(dwc->regs, DWC3_DEV_IMOD(0), dwc->imod_interval); 3093 } 3094 3095 return ret; 3096 } 3097 3098 static irqreturn_t dwc3_thread_interrupt(int irq, void *_evt) 3099 { 3100 struct dwc3_event_buffer *evt = _evt; 3101 struct dwc3 *dwc = evt->dwc; 3102 unsigned long flags; 3103 irqreturn_t ret = IRQ_NONE; 3104 3105 spin_lock_irqsave(&dwc->lock, flags); 3106 ret = dwc3_process_event_buf(evt); 3107 spin_unlock_irqrestore(&dwc->lock, flags); 3108 3109 return ret; 3110 } 3111 3112 static irqreturn_t dwc3_check_event_buf(struct dwc3_event_buffer *evt) 3113 { 3114 struct dwc3 *dwc = evt->dwc; 3115 u32 amount; 3116 u32 count; 3117 u32 reg; 3118 3119 if (pm_runtime_suspended(dwc->dev)) { 3120 pm_runtime_get(dwc->dev); 3121 disable_irq_nosync(dwc->irq_gadget); 3122 dwc->pending_events = true; 3123 return IRQ_HANDLED; 3124 } 3125 3126 /* 3127 * With PCIe legacy interrupt, test shows that top-half irq handler can 3128 * be called again after HW interrupt deassertion. Check if bottom-half 3129 * irq event handler completes before caching new event to prevent 3130 * losing events. 3131 */ 3132 if (evt->flags & DWC3_EVENT_PENDING) 3133 return IRQ_HANDLED; 3134 3135 count = dwc3_readl(dwc->regs, DWC3_GEVNTCOUNT(0)); 3136 count &= DWC3_GEVNTCOUNT_MASK; 3137 if (!count) 3138 return IRQ_NONE; 3139 3140 evt->count = count; 3141 evt->flags |= DWC3_EVENT_PENDING; 3142 3143 /* Mask interrupt */ 3144 reg = dwc3_readl(dwc->regs, DWC3_GEVNTSIZ(0)); 3145 reg |= DWC3_GEVNTSIZ_INTMASK; 3146 dwc3_writel(dwc->regs, DWC3_GEVNTSIZ(0), reg); 3147 3148 amount = min(count, evt->length - evt->lpos); 3149 memcpy(evt->cache + evt->lpos, evt->buf + evt->lpos, amount); 3150 3151 if (amount < count) 3152 memcpy(evt->cache, evt->buf, count - amount); 3153 3154 dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(0), count); 3155 3156 return IRQ_WAKE_THREAD; 3157 } 3158 3159 static irqreturn_t dwc3_interrupt(int irq, void *_evt) 3160 { 3161 struct dwc3_event_buffer *evt = _evt; 3162 3163 return dwc3_check_event_buf(evt); 3164 } 3165 3166 static int dwc3_gadget_get_irq(struct dwc3 *dwc) 3167 { 3168 struct platform_device *dwc3_pdev = to_platform_device(dwc->dev); 3169 int irq; 3170 3171 irq = platform_get_irq_byname(dwc3_pdev, "peripheral"); 3172 if (irq > 0) 3173 goto out; 3174 3175 if (irq == -EPROBE_DEFER) 3176 goto out; 3177 3178 irq = platform_get_irq_byname(dwc3_pdev, "dwc_usb3"); 3179 if (irq > 0) 3180 goto out; 3181 3182 if (irq == -EPROBE_DEFER) 3183 goto out; 3184 3185 irq = platform_get_irq(dwc3_pdev, 0); 3186 if (irq > 0) 3187 goto out; 3188 3189 if (irq != -EPROBE_DEFER) 3190 dev_err(dwc->dev, "missing peripheral IRQ\n"); 3191 3192 if (!irq) 3193 irq = -EINVAL; 3194 3195 out: 3196 return irq; 3197 } 3198 3199 /** 3200 * dwc3_gadget_init - initializes gadget related registers 3201 * @dwc: pointer to our controller context structure 3202 * 3203 * Returns 0 on success otherwise negative errno. 3204 */ 3205 int dwc3_gadget_init(struct dwc3 *dwc) 3206 { 3207 int ret; 3208 int irq; 3209 3210 irq = dwc3_gadget_get_irq(dwc); 3211 if (irq < 0) { 3212 ret = irq; 3213 goto err0; 3214 } 3215 3216 dwc->irq_gadget = irq; 3217 3218 dwc->ep0_trb = dma_alloc_coherent(dwc->sysdev, 3219 sizeof(*dwc->ep0_trb) * 2, 3220 &dwc->ep0_trb_addr, GFP_KERNEL); 3221 if (!dwc->ep0_trb) { 3222 dev_err(dwc->dev, "failed to allocate ep0 trb\n"); 3223 ret = -ENOMEM; 3224 goto err0; 3225 } 3226 3227 dwc->setup_buf = kzalloc(DWC3_EP0_SETUP_SIZE, GFP_KERNEL); 3228 if (!dwc->setup_buf) { 3229 ret = -ENOMEM; 3230 goto err1; 3231 } 3232 3233 dwc->bounce = dma_alloc_coherent(dwc->sysdev, DWC3_BOUNCE_SIZE, 3234 &dwc->bounce_addr, GFP_KERNEL); 3235 if (!dwc->bounce) { 3236 ret = -ENOMEM; 3237 goto err2; 3238 } 3239 3240 init_completion(&dwc->ep0_in_setup); 3241 3242 dwc->gadget.ops = &dwc3_gadget_ops; 3243 dwc->gadget.speed = USB_SPEED_UNKNOWN; 3244 dwc->gadget.sg_supported = true; 3245 dwc->gadget.name = "dwc3-gadget"; 3246 dwc->gadget.is_otg = dwc->dr_mode == USB_DR_MODE_OTG; 3247 3248 /* 3249 * FIXME We might be setting max_speed to <SUPER, however versions 3250 * <2.20a of dwc3 have an issue with metastability (documented 3251 * elsewhere in this driver) which tells us we can't set max speed to 3252 * anything lower than SUPER. 3253 * 3254 * Because gadget.max_speed is only used by composite.c and function 3255 * drivers (i.e. it won't go into dwc3's registers) we are allowing this 3256 * to happen so we avoid sending SuperSpeed Capability descriptor 3257 * together with our BOS descriptor as that could confuse host into 3258 * thinking we can handle super speed. 3259 * 3260 * Note that, in fact, we won't even support GetBOS requests when speed 3261 * is less than super speed because we don't have means, yet, to tell 3262 * composite.c that we are USB 2.0 + LPM ECN. 3263 */ 3264 if (dwc->revision < DWC3_REVISION_220A && 3265 !dwc->dis_metastability_quirk) 3266 dev_info(dwc->dev, "changing max_speed on rev %08x\n", 3267 dwc->revision); 3268 3269 dwc->gadget.max_speed = dwc->maximum_speed; 3270 3271 /* 3272 * REVISIT: Here we should clear all pending IRQs to be 3273 * sure we're starting from a well known location. 3274 */ 3275 3276 ret = dwc3_gadget_init_endpoints(dwc, dwc->num_eps); 3277 if (ret) 3278 goto err3; 3279 3280 ret = usb_add_gadget_udc(dwc->dev, &dwc->gadget); 3281 if (ret) { 3282 dev_err(dwc->dev, "failed to register udc\n"); 3283 goto err4; 3284 } 3285 3286 return 0; 3287 3288 err4: 3289 dwc3_gadget_free_endpoints(dwc); 3290 3291 err3: 3292 dma_free_coherent(dwc->sysdev, DWC3_BOUNCE_SIZE, dwc->bounce, 3293 dwc->bounce_addr); 3294 3295 err2: 3296 kfree(dwc->setup_buf); 3297 3298 err1: 3299 dma_free_coherent(dwc->sysdev, sizeof(*dwc->ep0_trb) * 2, 3300 dwc->ep0_trb, dwc->ep0_trb_addr); 3301 3302 err0: 3303 return ret; 3304 } 3305 3306 /* -------------------------------------------------------------------------- */ 3307 3308 void dwc3_gadget_exit(struct dwc3 *dwc) 3309 { 3310 usb_del_gadget_udc(&dwc->gadget); 3311 dwc3_gadget_free_endpoints(dwc); 3312 dma_free_coherent(dwc->sysdev, DWC3_BOUNCE_SIZE, dwc->bounce, 3313 dwc->bounce_addr); 3314 kfree(dwc->setup_buf); 3315 dma_free_coherent(dwc->sysdev, sizeof(*dwc->ep0_trb) * 2, 3316 dwc->ep0_trb, dwc->ep0_trb_addr); 3317 } 3318 3319 int dwc3_gadget_suspend(struct dwc3 *dwc) 3320 { 3321 if (!dwc->gadget_driver) 3322 return 0; 3323 3324 dwc3_gadget_run_stop(dwc, false, false); 3325 dwc3_disconnect_gadget(dwc); 3326 __dwc3_gadget_stop(dwc); 3327 3328 return 0; 3329 } 3330 3331 int dwc3_gadget_resume(struct dwc3 *dwc) 3332 { 3333 int ret; 3334 3335 if (!dwc->gadget_driver) 3336 return 0; 3337 3338 ret = __dwc3_gadget_start(dwc); 3339 if (ret < 0) 3340 goto err0; 3341 3342 ret = dwc3_gadget_run_stop(dwc, true, false); 3343 if (ret < 0) 3344 goto err1; 3345 3346 return 0; 3347 3348 err1: 3349 __dwc3_gadget_stop(dwc); 3350 3351 err0: 3352 return ret; 3353 } 3354 3355 void dwc3_gadget_process_pending_events(struct dwc3 *dwc) 3356 { 3357 if (dwc->pending_events) { 3358 dwc3_interrupt(dwc->irq_gadget, dwc->ev_buf); 3359 dwc->pending_events = false; 3360 enable_irq(dwc->irq_gadget); 3361 } 3362 } 3363