aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-04-01 20:06:09 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-04-01 20:06:09 -0400
commit3e75c6de1ac33fe3500f44573d9212dc82c99f59 (patch)
treeef10932e204ba8a9885051b06d4524d284207d61 /drivers/usb/dwc3
parentcb1595563880a81dab6eab9a5ecb4520d2e76077 (diff)
parent940ab8f1ef9369da5b58a1bec6820bfd4a7b9042 (diff)
Merge tag 'usb-3.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB patches from Greg KH: "Here's the big USB pull request for 3.15-rc1. The normal set of patches, lots of controller driver updates, and a smattering of individual USB driver updates as well. All have been in linux-next for a while" * tag 'usb-3.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (249 commits) xhci: Transition maintainership to Mathias Nyman. USB: disable reset-resume when USB_QUIRK_RESET is set USB: unbind all interfaces before rebinding any usb: phy: Add ulpi IDs for SMSC USB3320 and TI TUSB1210 usb: gadget: tcm_usb_gadget: stop format strings usb: gadget: f_fs: add missing spinlock and mutex unlock usb: gadget: composite: switch over to ERR_CAST() usb: gadget: inode: switch over to memdup_user() usb: gadget: f_subset: switch over to PTR_RET usb: gadget: lpc32xx_udc: fix wrong clk_put() sequence USB: keyspan: remove dead debugging code USB: serial: add missing newlines to dev_<level> messages. USB: serial: add missing braces USB: serial: continue to write on errors USB: serial: continue to read on errors USB: serial: make bulk_out_size a lower limit USB: cypress_m8: fix potential scheduling while atomic devicetree: bindings: document lsi,zevio-usb usb: chipidea: add support for USB OTG controller on LSI Zevio SoCs usb: chipidea: imx: Use dev_name() for ci_hdrc name to distinguish USBs ...
Diffstat (limited to 'drivers/usb/dwc3')
-rw-r--r--drivers/usb/dwc3/core.c251
-rw-r--r--drivers/usb/dwc3/core.h105
-rw-r--r--drivers/usb/dwc3/dwc3-omap.c5
-rw-r--r--drivers/usb/dwc3/gadget.c183
-rw-r--r--drivers/usb/dwc3/gadget.h12
5 files changed, 455 insertions, 101 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index a49217ae3533..d001417e8e37 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -61,9 +61,10 @@ void dwc3_set_mode(struct dwc3 *dwc, u32 mode)
61 * dwc3_core_soft_reset - Issues core soft reset and PHY reset 61 * dwc3_core_soft_reset - Issues core soft reset and PHY reset
62 * @dwc: pointer to our context structure 62 * @dwc: pointer to our context structure
63 */ 63 */
64static void dwc3_core_soft_reset(struct dwc3 *dwc) 64static int dwc3_core_soft_reset(struct dwc3 *dwc)
65{ 65{
66 u32 reg; 66 u32 reg;
67 int ret;
67 68
68 /* Before Resetting PHY, put Core in Reset */ 69 /* Before Resetting PHY, put Core in Reset */
69 reg = dwc3_readl(dwc->regs, DWC3_GCTL); 70 reg = dwc3_readl(dwc->regs, DWC3_GCTL);
@@ -82,6 +83,15 @@ static void dwc3_core_soft_reset(struct dwc3 *dwc)
82 83
83 usb_phy_init(dwc->usb2_phy); 84 usb_phy_init(dwc->usb2_phy);
84 usb_phy_init(dwc->usb3_phy); 85 usb_phy_init(dwc->usb3_phy);
86 ret = phy_init(dwc->usb2_generic_phy);
87 if (ret < 0)
88 return ret;
89
90 ret = phy_init(dwc->usb3_generic_phy);
91 if (ret < 0) {
92 phy_exit(dwc->usb2_generic_phy);
93 return ret;
94 }
85 mdelay(100); 95 mdelay(100);
86 96
87 /* Clear USB3 PHY reset */ 97 /* Clear USB3 PHY reset */
@@ -100,6 +110,8 @@ static void dwc3_core_soft_reset(struct dwc3 *dwc)
100 reg = dwc3_readl(dwc->regs, DWC3_GCTL); 110 reg = dwc3_readl(dwc->regs, DWC3_GCTL);
101 reg &= ~DWC3_GCTL_CORESOFTRESET; 111 reg &= ~DWC3_GCTL_CORESOFTRESET;
102 dwc3_writel(dwc->regs, DWC3_GCTL, reg); 112 dwc3_writel(dwc->regs, DWC3_GCTL, reg);
113
114 return 0;
103} 115}
104 116
105/** 117/**
@@ -242,6 +254,90 @@ static void dwc3_event_buffers_cleanup(struct dwc3 *dwc)
242 } 254 }
243} 255}
244 256
257static int dwc3_alloc_scratch_buffers(struct dwc3 *dwc)
258{
259 if (!dwc->has_hibernation)
260 return 0;
261
262 if (!dwc->nr_scratch)
263 return 0;
264
265 dwc->scratchbuf = kmalloc_array(dwc->nr_scratch,
266 DWC3_SCRATCHBUF_SIZE, GFP_KERNEL);
267 if (!dwc->scratchbuf)
268 return -ENOMEM;
269
270 return 0;
271}
272
273static int dwc3_setup_scratch_buffers(struct dwc3 *dwc)
274{
275 dma_addr_t scratch_addr;
276 u32 param;
277 int ret;
278
279 if (!dwc->has_hibernation)
280 return 0;
281
282 if (!dwc->nr_scratch)
283 return 0;
284
285 /* should never fall here */
286 if (!WARN_ON(dwc->scratchbuf))
287 return 0;
288
289 scratch_addr = dma_map_single(dwc->dev, dwc->scratchbuf,
290 dwc->nr_scratch * DWC3_SCRATCHBUF_SIZE,
291 DMA_BIDIRECTIONAL);
292 if (dma_mapping_error(dwc->dev, scratch_addr)) {
293 dev_err(dwc->dev, "failed to map scratch buffer\n");
294 ret = -EFAULT;
295 goto err0;
296 }
297
298 dwc->scratch_addr = scratch_addr;
299
300 param = lower_32_bits(scratch_addr);
301
302 ret = dwc3_send_gadget_generic_command(dwc,
303 DWC3_DGCMD_SET_SCRATCHPAD_ADDR_LO, param);
304 if (ret < 0)
305 goto err1;
306
307 param = upper_32_bits(scratch_addr);
308
309 ret = dwc3_send_gadget_generic_command(dwc,
310 DWC3_DGCMD_SET_SCRATCHPAD_ADDR_HI, param);
311 if (ret < 0)
312 goto err1;
313
314 return 0;
315
316err1:
317 dma_unmap_single(dwc->dev, dwc->scratch_addr, dwc->nr_scratch *
318 DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
319
320err0:
321 return ret;
322}
323
324static void dwc3_free_scratch_buffers(struct dwc3 *dwc)
325{
326 if (!dwc->has_hibernation)
327 return;
328
329 if (!dwc->nr_scratch)
330 return;
331
332 /* should never fall here */
333 if (!WARN_ON(dwc->scratchbuf))
334 return;
335
336 dma_unmap_single(dwc->dev, dwc->scratch_addr, dwc->nr_scratch *
337 DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
338 kfree(dwc->scratchbuf);
339}
340
245static void dwc3_core_num_eps(struct dwc3 *dwc) 341static void dwc3_core_num_eps(struct dwc3 *dwc)
246{ 342{
247 struct dwc3_hwparams *parms = &dwc->hwparams; 343 struct dwc3_hwparams *parms = &dwc->hwparams;
@@ -277,6 +373,7 @@ static void dwc3_cache_hwparams(struct dwc3 *dwc)
277static int dwc3_core_init(struct dwc3 *dwc) 373static int dwc3_core_init(struct dwc3 *dwc)
278{ 374{
279 unsigned long timeout; 375 unsigned long timeout;
376 u32 hwparams4 = dwc->hwparams.hwparams4;
280 u32 reg; 377 u32 reg;
281 int ret; 378 int ret;
282 379
@@ -306,7 +403,9 @@ static int dwc3_core_init(struct dwc3 *dwc)
306 cpu_relax(); 403 cpu_relax();
307 } while (true); 404 } while (true);
308 405
309 dwc3_core_soft_reset(dwc); 406 ret = dwc3_core_soft_reset(dwc);
407 if (ret)
408 goto err0;
310 409
311 reg = dwc3_readl(dwc->regs, DWC3_GCTL); 410 reg = dwc3_readl(dwc->regs, DWC3_GCTL);
312 reg &= ~DWC3_GCTL_SCALEDOWN_MASK; 411 reg &= ~DWC3_GCTL_SCALEDOWN_MASK;
@@ -314,7 +413,29 @@ static int dwc3_core_init(struct dwc3 *dwc)
314 413
315 switch (DWC3_GHWPARAMS1_EN_PWROPT(dwc->hwparams.hwparams1)) { 414 switch (DWC3_GHWPARAMS1_EN_PWROPT(dwc->hwparams.hwparams1)) {
316 case DWC3_GHWPARAMS1_EN_PWROPT_CLK: 415 case DWC3_GHWPARAMS1_EN_PWROPT_CLK:
317 reg &= ~DWC3_GCTL_DSBLCLKGTNG; 416 /**
417 * WORKAROUND: DWC3 revisions between 2.10a and 2.50a have an
418 * issue which would cause xHCI compliance tests to fail.
419 *
420 * Because of that we cannot enable clock gating on such
421 * configurations.
422 *
423 * Refers to:
424 *
425 * STAR#9000588375: Clock Gating, SOF Issues when ref_clk-Based
426 * SOF/ITP Mode Used
427 */
428 if ((dwc->dr_mode == USB_DR_MODE_HOST ||
429 dwc->dr_mode == USB_DR_MODE_OTG) &&
430 (dwc->revision >= DWC3_REVISION_210A &&
431 dwc->revision <= DWC3_REVISION_250A))
432 reg |= DWC3_GCTL_DSBLCLKGTNG | DWC3_GCTL_SOFITPSYNC;
433 else
434 reg &= ~DWC3_GCTL_DSBLCLKGTNG;
435 break;
436 case DWC3_GHWPARAMS1_EN_PWROPT_HIB:
437 /* enable hibernation here */
438 dwc->nr_scratch = DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(hwparams4);
318 break; 439 break;
319 default: 440 default:
320 dev_dbg(dwc->dev, "No power optimization available\n"); 441 dev_dbg(dwc->dev, "No power optimization available\n");
@@ -333,16 +454,36 @@ static int dwc3_core_init(struct dwc3 *dwc)
333 454
334 dwc3_writel(dwc->regs, DWC3_GCTL, reg); 455 dwc3_writel(dwc->regs, DWC3_GCTL, reg);
335 456
457 ret = dwc3_alloc_scratch_buffers(dwc);
458 if (ret)
459 goto err1;
460
461 ret = dwc3_setup_scratch_buffers(dwc);
462 if (ret)
463 goto err2;
464
336 return 0; 465 return 0;
337 466
467err2:
468 dwc3_free_scratch_buffers(dwc);
469
470err1:
471 usb_phy_shutdown(dwc->usb2_phy);
472 usb_phy_shutdown(dwc->usb3_phy);
473 phy_exit(dwc->usb2_generic_phy);
474 phy_exit(dwc->usb3_generic_phy);
475
338err0: 476err0:
339 return ret; 477 return ret;
340} 478}
341 479
342static void dwc3_core_exit(struct dwc3 *dwc) 480static void dwc3_core_exit(struct dwc3 *dwc)
343{ 481{
482 dwc3_free_scratch_buffers(dwc);
344 usb_phy_shutdown(dwc->usb2_phy); 483 usb_phy_shutdown(dwc->usb2_phy);
345 usb_phy_shutdown(dwc->usb3_phy); 484 usb_phy_shutdown(dwc->usb3_phy);
485 phy_exit(dwc->usb2_generic_phy);
486 phy_exit(dwc->usb3_generic_phy);
346} 487}
347 488
348#define DWC3_ALIGN_MASK (16 - 1) 489#define DWC3_ALIGN_MASK (16 - 1)
@@ -411,32 +552,52 @@ static int dwc3_probe(struct platform_device *pdev)
411 552
412 if (IS_ERR(dwc->usb2_phy)) { 553 if (IS_ERR(dwc->usb2_phy)) {
413 ret = PTR_ERR(dwc->usb2_phy); 554 ret = PTR_ERR(dwc->usb2_phy);
414 555 if (ret == -ENXIO || ret == -ENODEV) {
415 /* 556 dwc->usb2_phy = NULL;
416 * if -ENXIO is returned, it means PHY layer wasn't 557 } else if (ret == -EPROBE_DEFER) {
417 * enabled, so it makes no sense to return -EPROBE_DEFER
418 * in that case, since no PHY driver will ever probe.
419 */
420 if (ret == -ENXIO)
421 return ret; 558 return ret;
422 559 } else {
423 dev_err(dev, "no usb2 phy configured\n"); 560 dev_err(dev, "no usb2 phy configured\n");
424 return -EPROBE_DEFER; 561 return ret;
562 }
425 } 563 }
426 564
427 if (IS_ERR(dwc->usb3_phy)) { 565 if (IS_ERR(dwc->usb3_phy)) {
428 ret = PTR_ERR(dwc->usb3_phy); 566 ret = PTR_ERR(dwc->usb3_phy);
567 if (ret == -ENXIO || ret == -ENODEV) {
568 dwc->usb3_phy = NULL;
569 } else if (ret == -EPROBE_DEFER) {
570 return ret;
571 } else {
572 dev_err(dev, "no usb3 phy configured\n");
573 return ret;
574 }
575 }
429 576
430 /* 577 dwc->usb2_generic_phy = devm_phy_get(dev, "usb2-phy");
431 * if -ENXIO is returned, it means PHY layer wasn't 578 if (IS_ERR(dwc->usb2_generic_phy)) {
432 * enabled, so it makes no sense to return -EPROBE_DEFER 579 ret = PTR_ERR(dwc->usb2_generic_phy);
433 * in that case, since no PHY driver will ever probe. 580 if (ret == -ENOSYS || ret == -ENODEV) {
434 */ 581 dwc->usb2_generic_phy = NULL;
435 if (ret == -ENXIO) 582 } else if (ret == -EPROBE_DEFER) {
583 return ret;
584 } else {
585 dev_err(dev, "no usb2 phy configured\n");
436 return ret; 586 return ret;
587 }
588 }
437 589
438 dev_err(dev, "no usb3 phy configured\n"); 590 dwc->usb3_generic_phy = devm_phy_get(dev, "usb3-phy");
439 return -EPROBE_DEFER; 591 if (IS_ERR(dwc->usb3_generic_phy)) {
592 ret = PTR_ERR(dwc->usb3_generic_phy);
593 if (ret == -ENOSYS || ret == -ENODEV) {
594 dwc->usb3_generic_phy = NULL;
595 } else if (ret == -EPROBE_DEFER) {
596 return ret;
597 } else {
598 dev_err(dev, "no usb3 phy configured\n");
599 return ret;
600 }
440 } 601 }
441 602
442 dwc->xhci_resources[0].start = res->start; 603 dwc->xhci_resources[0].start = res->start;
@@ -479,6 +640,14 @@ static int dwc3_probe(struct platform_device *pdev)
479 goto err0; 640 goto err0;
480 } 641 }
481 642
643 if (IS_ENABLED(CONFIG_USB_DWC3_HOST))
644 dwc->dr_mode = USB_DR_MODE_HOST;
645 else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET))
646 dwc->dr_mode = USB_DR_MODE_PERIPHERAL;
647
648 if (dwc->dr_mode == USB_DR_MODE_UNKNOWN)
649 dwc->dr_mode = USB_DR_MODE_OTG;
650
482 ret = dwc3_core_init(dwc); 651 ret = dwc3_core_init(dwc);
483 if (ret) { 652 if (ret) {
484 dev_err(dev, "failed to initialize core\n"); 653 dev_err(dev, "failed to initialize core\n");
@@ -487,21 +656,20 @@ static int dwc3_probe(struct platform_device *pdev)
487 656
488 usb_phy_set_suspend(dwc->usb2_phy, 0); 657 usb_phy_set_suspend(dwc->usb2_phy, 0);
489 usb_phy_set_suspend(dwc->usb3_phy, 0); 658 usb_phy_set_suspend(dwc->usb3_phy, 0);
659 ret = phy_power_on(dwc->usb2_generic_phy);
660 if (ret < 0)
661 goto err1;
662
663 ret = phy_power_on(dwc->usb3_generic_phy);
664 if (ret < 0)
665 goto err_usb2phy_power;
490 666
491 ret = dwc3_event_buffers_setup(dwc); 667 ret = dwc3_event_buffers_setup(dwc);
492 if (ret) { 668 if (ret) {
493 dev_err(dwc->dev, "failed to setup event buffers\n"); 669 dev_err(dwc->dev, "failed to setup event buffers\n");
494 goto err1; 670 goto err_usb3phy_power;
495 } 671 }
496 672
497 if (IS_ENABLED(CONFIG_USB_DWC3_HOST))
498 dwc->dr_mode = USB_DR_MODE_HOST;
499 else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET))
500 dwc->dr_mode = USB_DR_MODE_PERIPHERAL;
501
502 if (dwc->dr_mode == USB_DR_MODE_UNKNOWN)
503 dwc->dr_mode = USB_DR_MODE_OTG;
504
505 switch (dwc->dr_mode) { 673 switch (dwc->dr_mode) {
506 case USB_DR_MODE_PERIPHERAL: 674 case USB_DR_MODE_PERIPHERAL:
507 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE); 675 dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE);
@@ -568,6 +736,12 @@ err3:
568err2: 736err2:
569 dwc3_event_buffers_cleanup(dwc); 737 dwc3_event_buffers_cleanup(dwc);
570 738
739err_usb3phy_power:
740 phy_power_off(dwc->usb3_generic_phy);
741
742err_usb2phy_power:
743 phy_power_off(dwc->usb2_generic_phy);
744
571err1: 745err1:
572 usb_phy_set_suspend(dwc->usb2_phy, 1); 746 usb_phy_set_suspend(dwc->usb2_phy, 1);
573 usb_phy_set_suspend(dwc->usb3_phy, 1); 747 usb_phy_set_suspend(dwc->usb3_phy, 1);
@@ -585,6 +759,8 @@ static int dwc3_remove(struct platform_device *pdev)
585 759
586 usb_phy_set_suspend(dwc->usb2_phy, 1); 760 usb_phy_set_suspend(dwc->usb2_phy, 1);
587 usb_phy_set_suspend(dwc->usb3_phy, 1); 761 usb_phy_set_suspend(dwc->usb3_phy, 1);
762 phy_power_off(dwc->usb2_generic_phy);
763 phy_power_off(dwc->usb3_generic_phy);
588 764
589 pm_runtime_put_sync(&pdev->dev); 765 pm_runtime_put_sync(&pdev->dev);
590 pm_runtime_disable(&pdev->dev); 766 pm_runtime_disable(&pdev->dev);
@@ -682,6 +858,8 @@ static int dwc3_suspend(struct device *dev)
682 858
683 usb_phy_shutdown(dwc->usb3_phy); 859 usb_phy_shutdown(dwc->usb3_phy);
684 usb_phy_shutdown(dwc->usb2_phy); 860 usb_phy_shutdown(dwc->usb2_phy);
861 phy_exit(dwc->usb2_generic_phy);
862 phy_exit(dwc->usb3_generic_phy);
685 863
686 return 0; 864 return 0;
687} 865}
@@ -690,9 +868,17 @@ static int dwc3_resume(struct device *dev)
690{ 868{
691 struct dwc3 *dwc = dev_get_drvdata(dev); 869 struct dwc3 *dwc = dev_get_drvdata(dev);
692 unsigned long flags; 870 unsigned long flags;
871 int ret;
693 872
694 usb_phy_init(dwc->usb3_phy); 873 usb_phy_init(dwc->usb3_phy);
695 usb_phy_init(dwc->usb2_phy); 874 usb_phy_init(dwc->usb2_phy);
875 ret = phy_init(dwc->usb2_generic_phy);
876 if (ret < 0)
877 return ret;
878
879 ret = phy_init(dwc->usb3_generic_phy);
880 if (ret < 0)
881 goto err_usb2phy_init;
696 882
697 spin_lock_irqsave(&dwc->lock, flags); 883 spin_lock_irqsave(&dwc->lock, flags);
698 884
@@ -716,6 +902,11 @@ static int dwc3_resume(struct device *dev)
716 pm_runtime_enable(dev); 902 pm_runtime_enable(dev);
717 903
718 return 0; 904 return 0;
905
906err_usb2phy_init:
907 phy_exit(dwc->usb2_generic_phy);
908
909 return ret;
719} 910}
720 911
721static const struct dev_pm_ops dwc3_dev_pm_ops = { 912static const struct dev_pm_ops dwc3_dev_pm_ops = {
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index f8af8d44af85..57332e3768e4 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -31,11 +31,14 @@
31#include <linux/usb/gadget.h> 31#include <linux/usb/gadget.h>
32#include <linux/usb/otg.h> 32#include <linux/usb/otg.h>
33 33
34#include <linux/phy/phy.h>
35
34/* Global constants */ 36/* Global constants */
35#define DWC3_EP0_BOUNCE_SIZE 512 37#define DWC3_EP0_BOUNCE_SIZE 512
36#define DWC3_ENDPOINTS_NUM 32 38#define DWC3_ENDPOINTS_NUM 32
37#define DWC3_XHCI_RESOURCES_NUM 2 39#define DWC3_XHCI_RESOURCES_NUM 2
38 40
41#define DWC3_SCRATCHBUF_SIZE 4096 /* each buffer is assumed to be 4KiB */
39#define DWC3_EVENT_SIZE 4 /* bytes */ 42#define DWC3_EVENT_SIZE 4 /* bytes */
40#define DWC3_EVENT_MAX_NUM 64 /* 2 events/endpoint */ 43#define DWC3_EVENT_MAX_NUM 64 /* 2 events/endpoint */
41#define DWC3_EVENT_BUFFERS_SIZE (DWC3_EVENT_SIZE * DWC3_EVENT_MAX_NUM) 44#define DWC3_EVENT_BUFFERS_SIZE (DWC3_EVENT_SIZE * DWC3_EVENT_MAX_NUM)
@@ -157,6 +160,7 @@
157#define DWC3_GCTL_PRTCAP_OTG 3 160#define DWC3_GCTL_PRTCAP_OTG 3
158 161
159#define DWC3_GCTL_CORESOFTRESET (1 << 11) 162#define DWC3_GCTL_CORESOFTRESET (1 << 11)
163#define DWC3_GCTL_SOFITPSYNC (1 << 10)
160#define DWC3_GCTL_SCALEDOWN(n) ((n) << 4) 164#define DWC3_GCTL_SCALEDOWN(n) ((n) << 4)
161#define DWC3_GCTL_SCALEDOWN_MASK DWC3_GCTL_SCALEDOWN(3) 165#define DWC3_GCTL_SCALEDOWN_MASK DWC3_GCTL_SCALEDOWN(3)
162#define DWC3_GCTL_DISSCRAMBLE (1 << 3) 166#define DWC3_GCTL_DISSCRAMBLE (1 << 3)
@@ -318,7 +322,7 @@
318/* Device Endpoint Command Register */ 322/* Device Endpoint Command Register */
319#define DWC3_DEPCMD_PARAM_SHIFT 16 323#define DWC3_DEPCMD_PARAM_SHIFT 16
320#define DWC3_DEPCMD_PARAM(x) ((x) << DWC3_DEPCMD_PARAM_SHIFT) 324#define DWC3_DEPCMD_PARAM(x) ((x) << DWC3_DEPCMD_PARAM_SHIFT)
321#define DWC3_DEPCMD_GET_RSC_IDX(x) (((x) >> DWC3_DEPCMD_PARAM_SHIFT) & 0x7f) 325#define DWC3_DEPCMD_GET_RSC_IDX(x) (((x) >> DWC3_DEPCMD_PARAM_SHIFT) & 0x7f)
322#define DWC3_DEPCMD_STATUS(x) (((x) >> 15) & 1) 326#define DWC3_DEPCMD_STATUS(x) (((x) >> 15) & 1)
323#define DWC3_DEPCMD_HIPRI_FORCERM (1 << 11) 327#define DWC3_DEPCMD_HIPRI_FORCERM (1 << 11)
324#define DWC3_DEPCMD_CMDACT (1 << 10) 328#define DWC3_DEPCMD_CMDACT (1 << 10)
@@ -393,6 +397,7 @@ struct dwc3_event_buffer {
393 * @busy_slot: first slot which is owned by HW 397 * @busy_slot: first slot which is owned by HW
394 * @desc: usb_endpoint_descriptor pointer 398 * @desc: usb_endpoint_descriptor pointer
395 * @dwc: pointer to DWC controller 399 * @dwc: pointer to DWC controller
400 * @saved_state: ep state saved during hibernation
396 * @flags: endpoint flags (wedged, stalled, ...) 401 * @flags: endpoint flags (wedged, stalled, ...)
397 * @current_trb: index of current used trb 402 * @current_trb: index of current used trb
398 * @number: endpoint number (1 - 15) 403 * @number: endpoint number (1 - 15)
@@ -415,6 +420,7 @@ struct dwc3_ep {
415 const struct usb_ss_ep_comp_descriptor *comp_desc; 420 const struct usb_ss_ep_comp_descriptor *comp_desc;
416 struct dwc3 *dwc; 421 struct dwc3 *dwc;
417 422
423 u32 saved_state;
418 unsigned flags; 424 unsigned flags;
419#define DWC3_EP_ENABLED (1 << 0) 425#define DWC3_EP_ENABLED (1 << 0)
420#define DWC3_EP_STALL (1 << 1) 426#define DWC3_EP_STALL (1 << 1)
@@ -598,6 +604,7 @@ struct dwc3_scratchpad_array {
598 * @ep0_trb: dma address of ep0_trb 604 * @ep0_trb: dma address of ep0_trb
599 * @ep0_usb_req: dummy req used while handling STD USB requests 605 * @ep0_usb_req: dummy req used while handling STD USB requests
600 * @ep0_bounce_addr: dma address of ep0_bounce 606 * @ep0_bounce_addr: dma address of ep0_bounce
607 * @scratch_addr: dma address of scratchbuf
601 * @lock: for synchronizing 608 * @lock: for synchronizing
602 * @dev: pointer to our struct device 609 * @dev: pointer to our struct device
603 * @xhci: pointer to our xHCI child 610 * @xhci: pointer to our xHCI child
@@ -606,6 +613,7 @@ struct dwc3_scratchpad_array {
606 * @gadget_driver: pointer to the gadget driver 613 * @gadget_driver: pointer to the gadget driver
607 * @regs: base address for our registers 614 * @regs: base address for our registers
608 * @regs_size: address space size 615 * @regs_size: address space size
616 * @nr_scratch: number of scratch buffers
609 * @num_event_buffers: calculated number of event buffers 617 * @num_event_buffers: calculated number of event buffers
610 * @u1u2: only used on revisions <1.83a for workaround 618 * @u1u2: only used on revisions <1.83a for workaround
611 * @maximum_speed: maximum speed requested (mainly for testing purposes) 619 * @maximum_speed: maximum speed requested (mainly for testing purposes)
@@ -613,16 +621,10 @@ struct dwc3_scratchpad_array {
613 * @dr_mode: requested mode of operation 621 * @dr_mode: requested mode of operation
614 * @usb2_phy: pointer to USB2 PHY 622 * @usb2_phy: pointer to USB2 PHY
615 * @usb3_phy: pointer to USB3 PHY 623 * @usb3_phy: pointer to USB3 PHY
624 * @usb2_generic_phy: pointer to USB2 PHY
625 * @usb3_generic_phy: pointer to USB3 PHY
616 * @dcfg: saved contents of DCFG register 626 * @dcfg: saved contents of DCFG register
617 * @gctl: saved contents of GCTL register 627 * @gctl: saved contents of GCTL register
618 * @is_selfpowered: true when we are selfpowered
619 * @three_stage_setup: set if we perform a three phase setup
620 * @ep0_bounced: true when we used bounce buffer
621 * @ep0_expect_in: true when we expect a DATA IN transfer
622 * @start_config_issued: true when StartConfig command has been issued
623 * @setup_packet_pending: true when there's a Setup Packet in FIFO. Workaround
624 * @needs_fifo_resize: not all users might want fifo resizing, flag it
625 * @resize_fifos: tells us it's ok to reconfigure our TxFIFO sizes.
626 * @isoch_delay: wValue from Set Isochronous Delay request; 628 * @isoch_delay: wValue from Set Isochronous Delay request;
627 * @u2sel: parameter from Set SEL request. 629 * @u2sel: parameter from Set SEL request.
628 * @u2pel: parameter from Set SEL request. 630 * @u2pel: parameter from Set SEL request.
@@ -637,15 +639,31 @@ struct dwc3_scratchpad_array {
637 * @mem: points to start of memory which is used for this struct. 639 * @mem: points to start of memory which is used for this struct.
638 * @hwparams: copy of hwparams registers 640 * @hwparams: copy of hwparams registers
639 * @root: debugfs root folder pointer 641 * @root: debugfs root folder pointer
642 * @regset: debugfs pointer to regdump file
643 * @test_mode: true when we're entering a USB test mode
644 * @test_mode_nr: test feature selector
645 * @delayed_status: true when gadget driver asks for delayed status
646 * @ep0_bounced: true when we used bounce buffer
647 * @ep0_expect_in: true when we expect a DATA IN transfer
648 * @has_hibernation: true when dwc3 was configured with Hibernation
649 * @is_selfpowered: true when we are selfpowered
650 * @needs_fifo_resize: not all users might want fifo resizing, flag it
651 * @pullups_connected: true when Run/Stop bit is set
652 * @resize_fifos: tells us it's ok to reconfigure our TxFIFO sizes.
653 * @setup_packet_pending: true when there's a Setup Packet in FIFO. Workaround
654 * @start_config_issued: true when StartConfig command has been issued
655 * @three_stage_setup: set if we perform a three phase setup
640 */ 656 */
641struct dwc3 { 657struct dwc3 {
642 struct usb_ctrlrequest *ctrl_req; 658 struct usb_ctrlrequest *ctrl_req;
643 struct dwc3_trb *ep0_trb; 659 struct dwc3_trb *ep0_trb;
644 void *ep0_bounce; 660 void *ep0_bounce;
661 void *scratchbuf;
645 u8 *setup_buf; 662 u8 *setup_buf;
646 dma_addr_t ctrl_req_addr; 663 dma_addr_t ctrl_req_addr;
647 dma_addr_t ep0_trb_addr; 664 dma_addr_t ep0_trb_addr;
648 dma_addr_t ep0_bounce_addr; 665 dma_addr_t ep0_bounce_addr;
666 dma_addr_t scratch_addr;
649 struct dwc3_request ep0_usb_req; 667 struct dwc3_request ep0_usb_req;
650 668
651 /* device lock */ 669 /* device lock */
@@ -665,6 +683,9 @@ struct dwc3 {
665 struct usb_phy *usb2_phy; 683 struct usb_phy *usb2_phy;
666 struct usb_phy *usb3_phy; 684 struct usb_phy *usb3_phy;
667 685
686 struct phy *usb2_generic_phy;
687 struct phy *usb3_generic_phy;
688
668 void __iomem *regs; 689 void __iomem *regs;
669 size_t regs_size; 690 size_t regs_size;
670 691
@@ -674,6 +695,7 @@ struct dwc3 {
674 u32 dcfg; 695 u32 dcfg;
675 u32 gctl; 696 u32 gctl;
676 697
698 u32 nr_scratch;
677 u32 num_event_buffers; 699 u32 num_event_buffers;
678 u32 u1u2; 700 u32 u1u2;
679 u32 maximum_speed; 701 u32 maximum_speed;
@@ -695,17 +717,9 @@ struct dwc3 {
695#define DWC3_REVISION_230A 0x5533230a 717#define DWC3_REVISION_230A 0x5533230a
696#define DWC3_REVISION_240A 0x5533240a 718#define DWC3_REVISION_240A 0x5533240a
697#define DWC3_REVISION_250A 0x5533250a 719#define DWC3_REVISION_250A 0x5533250a
698 720#define DWC3_REVISION_260A 0x5533260a
699 unsigned is_selfpowered:1; 721#define DWC3_REVISION_270A 0x5533270a
700 unsigned three_stage_setup:1; 722#define DWC3_REVISION_280A 0x5533280a
701 unsigned ep0_bounced:1;
702 unsigned ep0_expect_in:1;
703 unsigned start_config_issued:1;
704 unsigned setup_packet_pending:1;
705 unsigned delayed_status:1;
706 unsigned needs_fifo_resize:1;
707 unsigned resize_fifos:1;
708 unsigned pullups_connected:1;
709 723
710 enum dwc3_ep0_next ep0_next_event; 724 enum dwc3_ep0_next ep0_next_event;
711 enum dwc3_ep0_state ep0state; 725 enum dwc3_ep0_state ep0state;
@@ -730,6 +744,18 @@ struct dwc3 {
730 744
731 u8 test_mode; 745 u8 test_mode;
732 u8 test_mode_nr; 746 u8 test_mode_nr;
747
748 unsigned delayed_status:1;
749 unsigned ep0_bounced:1;
750 unsigned ep0_expect_in:1;
751 unsigned has_hibernation:1;
752 unsigned is_selfpowered:1;
753 unsigned needs_fifo_resize:1;
754 unsigned pullups_connected:1;
755 unsigned resize_fifos:1;
756 unsigned setup_packet_pending:1;
757 unsigned start_config_issued:1;
758 unsigned three_stage_setup:1;
733}; 759};
734 760
735/* -------------------------------------------------------------------------- */ 761/* -------------------------------------------------------------------------- */
@@ -815,15 +841,15 @@ struct dwc3_event_depevt {
815 * 12 - VndrDevTstRcved 841 * 12 - VndrDevTstRcved
816 * @reserved15_12: Reserved, not used 842 * @reserved15_12: Reserved, not used
817 * @event_info: Information about this event 843 * @event_info: Information about this event
818 * @reserved31_24: Reserved, not used 844 * @reserved31_25: Reserved, not used
819 */ 845 */
820struct dwc3_event_devt { 846struct dwc3_event_devt {
821 u32 one_bit:1; 847 u32 one_bit:1;
822 u32 device_event:7; 848 u32 device_event:7;
823 u32 type:4; 849 u32 type:4;
824 u32 reserved15_12:4; 850 u32 reserved15_12:4;
825 u32 event_info:8; 851 u32 event_info:9;
826 u32 reserved31_24:8; 852 u32 reserved31_25:7;
827} __packed; 853} __packed;
828 854
829/** 855/**
@@ -856,6 +882,19 @@ union dwc3_event {
856 struct dwc3_event_gevt gevt; 882 struct dwc3_event_gevt gevt;
857}; 883};
858 884
885/**
886 * struct dwc3_gadget_ep_cmd_params - representation of endpoint command
887 * parameters
888 * @param2: third parameter
889 * @param1: second parameter
890 * @param0: first parameter
891 */
892struct dwc3_gadget_ep_cmd_params {
893 u32 param2;
894 u32 param1;
895 u32 param0;
896};
897
859/* 898/*
860 * DWC3 Features to be used as Driver Data 899 * DWC3 Features to be used as Driver Data
861 */ 900 */
@@ -881,11 +920,31 @@ static inline void dwc3_host_exit(struct dwc3 *dwc)
881#if IS_ENABLED(CONFIG_USB_DWC3_GADGET) || IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE) 920#if IS_ENABLED(CONFIG_USB_DWC3_GADGET) || IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)
882int dwc3_gadget_init(struct dwc3 *dwc); 921int dwc3_gadget_init(struct dwc3 *dwc);
883void dwc3_gadget_exit(struct dwc3 *dwc); 922void dwc3_gadget_exit(struct dwc3 *dwc);
923int dwc3_gadget_set_test_mode(struct dwc3 *dwc, int mode);
924int dwc3_gadget_get_link_state(struct dwc3 *dwc);
925int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state);
926int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep,
927 unsigned cmd, struct dwc3_gadget_ep_cmd_params *params);
928int dwc3_send_gadget_generic_command(struct dwc3 *dwc, int cmd, u32 param);
884#else 929#else
885static inline int dwc3_gadget_init(struct dwc3 *dwc) 930static inline int dwc3_gadget_init(struct dwc3 *dwc)
886{ return 0; } 931{ return 0; }
887static inline void dwc3_gadget_exit(struct dwc3 *dwc) 932static inline void dwc3_gadget_exit(struct dwc3 *dwc)
888{ } 933{ }
934static inline int dwc3_gadget_set_test_mode(struct dwc3 *dwc, int mode)
935{ return 0; }
936static inline int dwc3_gadget_get_link_state(struct dwc3 *dwc)
937{ return 0; }
938static inline int dwc3_gadget_set_link_state(struct dwc3 *dwc,
939 enum dwc3_link_state state)
940{ return 0; }
941
942static inline int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep,
943 unsigned cmd, struct dwc3_gadget_ep_cmd_params *params)
944{ return 0; }
945static inline int dwc3_send_gadget_generic_command(struct dwc3 *dwc,
946 int cmd, u32 param)
947{ return 0; }
889#endif 948#endif
890 949
891/* power management interface */ 950/* power management interface */
diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
index b1d7ee6e40b7..1160ff41bed4 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -423,11 +423,6 @@ static int dwc3_omap_probe(struct platform_device *pdev)
423 } 423 }
424 424
425 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 425 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
426 if (!res) {
427 dev_err(dev, "missing memory base resource\n");
428 return -EINVAL;
429 }
430
431 base = devm_ioremap_resource(dev, res); 426 base = devm_ioremap_resource(dev, res);
432 if (IS_ERR(base)) 427 if (IS_ERR(base))
433 return PTR_ERR(base); 428 return PTR_ERR(base);
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 2da0a5a2803a..a740eac74d56 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -68,6 +68,22 @@ int dwc3_gadget_set_test_mode(struct dwc3 *dwc, int mode)
68} 68}
69 69
70/** 70/**
71 * dwc3_gadget_get_link_state - Gets current state of USB Link
72 * @dwc: pointer to our context structure
73 *
74 * Caller should take care of locking. This function will
75 * return the link state on success (>= 0) or -ETIMEDOUT.
76 */
77int dwc3_gadget_get_link_state(struct dwc3 *dwc)
78{
79 u32 reg;
80
81 reg = dwc3_readl(dwc->regs, DWC3_DSTS);
82
83 return DWC3_DSTS_USBLNKST(reg);
84}
85
86/**
71 * dwc3_gadget_set_link_state - Sets USB Link to a particular State 87 * dwc3_gadget_set_link_state - Sets USB Link to a particular State
72 * @dwc: pointer to our context structure 88 * @dwc: pointer to our context structure
73 * @state: the state to put link into 89 * @state: the state to put link into
@@ -417,7 +433,7 @@ static int dwc3_gadget_start_config(struct dwc3 *dwc, struct dwc3_ep *dep)
417static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep, 433static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep,
418 const struct usb_endpoint_descriptor *desc, 434 const struct usb_endpoint_descriptor *desc,
419 const struct usb_ss_ep_comp_descriptor *comp_desc, 435 const struct usb_ss_ep_comp_descriptor *comp_desc,
420 bool ignore) 436 bool ignore, bool restore)
421{ 437{
422 struct dwc3_gadget_ep_cmd_params params; 438 struct dwc3_gadget_ep_cmd_params params;
423 439
@@ -436,6 +452,11 @@ static int dwc3_gadget_set_ep_config(struct dwc3 *dwc, struct dwc3_ep *dep,
436 if (ignore) 452 if (ignore)
437 params.param0 |= DWC3_DEPCFG_IGN_SEQ_NUM; 453 params.param0 |= DWC3_DEPCFG_IGN_SEQ_NUM;
438 454
455 if (restore) {
456 params.param0 |= DWC3_DEPCFG_ACTION_RESTORE;
457 params.param2 |= dep->saved_state;
458 }
459
439 params.param1 = DWC3_DEPCFG_XFER_COMPLETE_EN 460 params.param1 = DWC3_DEPCFG_XFER_COMPLETE_EN
440 | DWC3_DEPCFG_XFER_NOT_READY_EN; 461 | DWC3_DEPCFG_XFER_NOT_READY_EN;
441 462
@@ -494,7 +515,7 @@ static int dwc3_gadget_set_xfer_resource(struct dwc3 *dwc, struct dwc3_ep *dep)
494static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, 515static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep,
495 const struct usb_endpoint_descriptor *desc, 516 const struct usb_endpoint_descriptor *desc,
496 const struct usb_ss_ep_comp_descriptor *comp_desc, 517 const struct usb_ss_ep_comp_descriptor *comp_desc,
497 bool ignore) 518 bool ignore, bool restore)
498{ 519{
499 struct dwc3 *dwc = dep->dwc; 520 struct dwc3 *dwc = dep->dwc;
500 u32 reg; 521 u32 reg;
@@ -508,7 +529,8 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep,
508 return ret; 529 return ret;
509 } 530 }
510 531
511 ret = dwc3_gadget_set_ep_config(dwc, dep, desc, comp_desc, ignore); 532 ret = dwc3_gadget_set_ep_config(dwc, dep, desc, comp_desc, ignore,
533 restore);
512 if (ret) 534 if (ret)
513 return ret; 535 return ret;
514 536
@@ -548,13 +570,13 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep,
548 return 0; 570 return 0;
549} 571}
550 572
551static void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum); 573static void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum, bool force);
552static void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep) 574static void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep)
553{ 575{
554 struct dwc3_request *req; 576 struct dwc3_request *req;
555 577
556 if (!list_empty(&dep->req_queued)) { 578 if (!list_empty(&dep->req_queued)) {
557 dwc3_stop_active_transfer(dwc, dep->number); 579 dwc3_stop_active_transfer(dwc, dep->number, true);
558 580
559 /* - giveback all requests to gadget driver */ 581 /* - giveback all requests to gadget driver */
560 while (!list_empty(&dep->req_queued)) { 582 while (!list_empty(&dep->req_queued)) {
@@ -659,7 +681,7 @@ static int dwc3_gadget_ep_enable(struct usb_ep *ep,
659 } 681 }
660 682
661 spin_lock_irqsave(&dwc->lock, flags); 683 spin_lock_irqsave(&dwc->lock, flags);
662 ret = __dwc3_gadget_ep_enable(dep, desc, ep->comp_desc, false); 684 ret = __dwc3_gadget_ep_enable(dep, desc, ep->comp_desc, false, false);
663 spin_unlock_irqrestore(&dwc->lock, flags); 685 spin_unlock_irqrestore(&dwc->lock, flags);
664 686
665 return ret; 687 return ret;
@@ -771,9 +793,6 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
771 trb->ctrl = DWC3_TRBCTL_ISOCHRONOUS_FIRST; 793 trb->ctrl = DWC3_TRBCTL_ISOCHRONOUS_FIRST;
772 else 794 else
773 trb->ctrl = DWC3_TRBCTL_ISOCHRONOUS; 795 trb->ctrl = DWC3_TRBCTL_ISOCHRONOUS;
774
775 if (!req->request.no_interrupt && !chain)
776 trb->ctrl |= DWC3_TRB_CTRL_IOC;
777 break; 796 break;
778 797
779 case USB_ENDPOINT_XFER_BULK: 798 case USB_ENDPOINT_XFER_BULK:
@@ -788,6 +807,9 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
788 BUG(); 807 BUG();
789 } 808 }
790 809
810 if (!req->request.no_interrupt && !chain)
811 trb->ctrl |= DWC3_TRB_CTRL_IOC;
812
791 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { 813 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
792 trb->ctrl |= DWC3_TRB_CTRL_ISP_IMI; 814 trb->ctrl |= DWC3_TRB_CTRL_ISP_IMI;
793 trb->ctrl |= DWC3_TRB_CTRL_CSP; 815 trb->ctrl |= DWC3_TRB_CTRL_CSP;
@@ -1077,7 +1099,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
1077 */ 1099 */
1078 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { 1100 if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
1079 if (list_empty(&dep->req_queued)) { 1101 if (list_empty(&dep->req_queued)) {
1080 dwc3_stop_active_transfer(dwc, dep->number); 1102 dwc3_stop_active_transfer(dwc, dep->number, true);
1081 dep->flags = DWC3_EP_ENABLED; 1103 dep->flags = DWC3_EP_ENABLED;
1082 } 1104 }
1083 return 0; 1105 return 0;
@@ -1107,6 +1129,23 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
1107 return ret; 1129 return ret;
1108 } 1130 }
1109 1131
1132 /*
1133 * 4. Stream Capable Bulk Endpoints. We need to start the transfer
1134 * right away, otherwise host will not know we have streams to be
1135 * handled.
1136 */
1137 if (dep->stream_capable) {
1138 int ret;
1139
1140 ret = __dwc3_gadget_kick_transfer(dep, 0, true);
1141 if (ret && ret != -EBUSY) {
1142 struct dwc3 *dwc = dep->dwc;
1143
1144 dev_dbg(dwc->dev, "%s: failed to kick transfers\n",
1145 dep->name);
1146 }
1147 }
1148
1110 return 0; 1149 return 0;
1111} 1150}
1112 1151
@@ -1163,7 +1202,7 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
1163 } 1202 }
1164 if (r == req) { 1203 if (r == req) {
1165 /* wait until it is processed */ 1204 /* wait until it is processed */
1166 dwc3_stop_active_transfer(dwc, dep->number); 1205 dwc3_stop_active_transfer(dwc, dep->number, true);
1167 goto out1; 1206 goto out1;
1168 } 1207 }
1169 dev_err(dwc->dev, "request %p was not queued to %s\n", 1208 dev_err(dwc->dev, "request %p was not queued to %s\n",
@@ -1194,8 +1233,7 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value)
1194 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, 1233 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number,
1195 DWC3_DEPCMD_SETSTALL, &params); 1234 DWC3_DEPCMD_SETSTALL, &params);
1196 if (ret) 1235 if (ret)
1197 dev_err(dwc->dev, "failed to %s STALL on %s\n", 1236 dev_err(dwc->dev, "failed to set STALL on %s\n",
1198 value ? "set" : "clear",
1199 dep->name); 1237 dep->name);
1200 else 1238 else
1201 dep->flags |= DWC3_EP_STALL; 1239 dep->flags |= DWC3_EP_STALL;
@@ -1203,8 +1241,7 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value)
1203 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, 1241 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number,
1204 DWC3_DEPCMD_CLEARSTALL, &params); 1242 DWC3_DEPCMD_CLEARSTALL, &params);
1205 if (ret) 1243 if (ret)
1206 dev_err(dwc->dev, "failed to %s STALL on %s\n", 1244 dev_err(dwc->dev, "failed to clear STALL on %s\n",
1207 value ? "set" : "clear",
1208 dep->name); 1245 dep->name);
1209 else 1246 else
1210 dep->flags &= ~(DWC3_EP_STALL | DWC3_EP_WEDGE); 1247 dep->flags &= ~(DWC3_EP_STALL | DWC3_EP_WEDGE);
@@ -1387,7 +1424,7 @@ static int dwc3_gadget_set_selfpowered(struct usb_gadget *g,
1387 return 0; 1424 return 0;
1388} 1425}
1389 1426
1390static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on) 1427static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend)
1391{ 1428{
1392 u32 reg; 1429 u32 reg;
1393 u32 timeout = 500; 1430 u32 timeout = 500;
@@ -1402,9 +1439,17 @@ static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on)
1402 if (dwc->revision >= DWC3_REVISION_194A) 1439 if (dwc->revision >= DWC3_REVISION_194A)
1403 reg &= ~DWC3_DCTL_KEEP_CONNECT; 1440 reg &= ~DWC3_DCTL_KEEP_CONNECT;
1404 reg |= DWC3_DCTL_RUN_STOP; 1441 reg |= DWC3_DCTL_RUN_STOP;
1442
1443 if (dwc->has_hibernation)
1444 reg |= DWC3_DCTL_KEEP_CONNECT;
1445
1405 dwc->pullups_connected = true; 1446 dwc->pullups_connected = true;
1406 } else { 1447 } else {
1407 reg &= ~DWC3_DCTL_RUN_STOP; 1448 reg &= ~DWC3_DCTL_RUN_STOP;
1449
1450 if (dwc->has_hibernation && !suspend)
1451 reg &= ~DWC3_DCTL_KEEP_CONNECT;
1452
1408 dwc->pullups_connected = false; 1453 dwc->pullups_connected = false;
1409 } 1454 }
1410 1455
@@ -1442,7 +1487,7 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
1442 is_on = !!is_on; 1487 is_on = !!is_on;
1443 1488
1444 spin_lock_irqsave(&dwc->lock, flags); 1489 spin_lock_irqsave(&dwc->lock, flags);
1445 ret = dwc3_gadget_run_stop(dwc, is_on); 1490 ret = dwc3_gadget_run_stop(dwc, is_on, false);
1446 spin_unlock_irqrestore(&dwc->lock, flags); 1491 spin_unlock_irqrestore(&dwc->lock, flags);
1447 1492
1448 return ret; 1493 return ret;
@@ -1549,14 +1594,16 @@ static int dwc3_gadget_start(struct usb_gadget *g,
1549 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512); 1594 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512);
1550 1595
1551 dep = dwc->eps[0]; 1596 dep = dwc->eps[0];
1552 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false); 1597 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false,
1598 false);
1553 if (ret) { 1599 if (ret) {
1554 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 1600 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
1555 goto err2; 1601 goto err2;
1556 } 1602 }
1557 1603
1558 dep = dwc->eps[1]; 1604 dep = dwc->eps[1];
1559 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false); 1605 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false,
1606 false);
1560 if (ret) { 1607 if (ret) {
1561 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 1608 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
1562 goto err3; 1609 goto err3;
@@ -1849,15 +1896,12 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep,
1849 */ 1896 */
1850 dep->flags = DWC3_EP_PENDING_REQUEST; 1897 dep->flags = DWC3_EP_PENDING_REQUEST;
1851 } else { 1898 } else {
1852 dwc3_stop_active_transfer(dwc, dep->number); 1899 dwc3_stop_active_transfer(dwc, dep->number, true);
1853 dep->flags = DWC3_EP_ENABLED; 1900 dep->flags = DWC3_EP_ENABLED;
1854 } 1901 }
1855 return 1; 1902 return 1;
1856 } 1903 }
1857 1904
1858 if ((event->status & DEPEVT_STATUS_IOC) &&
1859 (trb->ctrl & DWC3_TRB_CTRL_IOC))
1860 return 0;
1861 return 1; 1905 return 1;
1862} 1906}
1863 1907
@@ -1999,7 +2043,25 @@ static void dwc3_disconnect_gadget(struct dwc3 *dwc)
1999 } 2043 }
2000} 2044}
2001 2045
2002static void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum) 2046static void dwc3_suspend_gadget(struct dwc3 *dwc)
2047{
2048 if (dwc->gadget_driver && dwc->gadget_driver->suspend) {
2049 spin_unlock(&dwc->lock);
2050 dwc->gadget_driver->suspend(&dwc->gadget);
2051 spin_lock(&dwc->lock);
2052 }
2053}
2054
2055static void dwc3_resume_gadget(struct dwc3 *dwc)
2056{
2057 if (dwc->gadget_driver && dwc->gadget_driver->resume) {
2058 spin_unlock(&dwc->lock);
2059 dwc->gadget_driver->resume(&dwc->gadget);
2060 spin_lock(&dwc->lock);
2061 }
2062}
2063
2064static void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum, bool force)
2003{ 2065{
2004 struct dwc3_ep *dep; 2066 struct dwc3_ep *dep;
2005 struct dwc3_gadget_ep_cmd_params params; 2067 struct dwc3_gadget_ep_cmd_params params;
@@ -2031,7 +2093,8 @@ static void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum)
2031 */ 2093 */
2032 2094
2033 cmd = DWC3_DEPCMD_ENDTRANSFER; 2095 cmd = DWC3_DEPCMD_ENDTRANSFER;
2034 cmd |= DWC3_DEPCMD_HIPRI_FORCERM | DWC3_DEPCMD_CMDIOC; 2096 cmd |= force ? DWC3_DEPCMD_HIPRI_FORCERM : 0;
2097 cmd |= DWC3_DEPCMD_CMDIOC;
2035 cmd |= DWC3_DEPCMD_PARAM(dep->resource_index); 2098 cmd |= DWC3_DEPCMD_PARAM(dep->resource_index);
2036 memset(&params, 0, sizeof(params)); 2099 memset(&params, 0, sizeof(params));
2037 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, &params); 2100 ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, &params);
@@ -2260,17 +2323,23 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
2260 reg |= DWC3_DCTL_HIRD_THRES(12); 2323 reg |= DWC3_DCTL_HIRD_THRES(12);
2261 2324
2262 dwc3_writel(dwc->regs, DWC3_DCTL, reg); 2325 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
2326 } else {
2327 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
2328 reg &= ~DWC3_DCTL_HIRD_THRES_MASK;
2329 dwc3_writel(dwc->regs, DWC3_DCTL, reg);
2263 } 2330 }
2264 2331
2265 dep = dwc->eps[0]; 2332 dep = dwc->eps[0];
2266 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true); 2333 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true,
2334 false);
2267 if (ret) { 2335 if (ret) {
2268 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 2336 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
2269 return; 2337 return;
2270 } 2338 }
2271 2339
2272 dep = dwc->eps[1]; 2340 dep = dwc->eps[1];
2273 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true); 2341 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, true,
2342 false);
2274 if (ret) { 2343 if (ret) {
2275 dev_err(dwc->dev, "failed to enable %s\n", dep->name); 2344 dev_err(dwc->dev, "failed to enable %s\n", dep->name);
2276 return; 2345 return;
@@ -2378,9 +2447,50 @@ static void dwc3_gadget_linksts_change_interrupt(struct dwc3 *dwc,
2378 2447
2379 dwc->link_state = next; 2448 dwc->link_state = next;
2380 2449
2450 switch (next) {
2451 case DWC3_LINK_STATE_U1:
2452 if (dwc->speed == USB_SPEED_SUPER)
2453 dwc3_suspend_gadget(dwc);
2454 break;
2455 case DWC3_LINK_STATE_U2:
2456 case DWC3_LINK_STATE_U3:
2457 dwc3_suspend_gadget(dwc);
2458 break;
2459 case DWC3_LINK_STATE_RESUME:
2460 dwc3_resume_gadget(dwc);
2461 break;
2462 default:
2463 /* do nothing */
2464 break;
2465 }
2466
2381 dev_vdbg(dwc->dev, "%s link %d\n", __func__, dwc->link_state); 2467 dev_vdbg(dwc->dev, "%s link %d\n", __func__, dwc->link_state);
2382} 2468}
2383 2469
2470static void dwc3_gadget_hibernation_interrupt(struct dwc3 *dwc,
2471 unsigned int evtinfo)
2472{
2473 unsigned int is_ss = evtinfo & BIT(4);
2474
2475 /**
2476 * WORKAROUND: DWC3 revison 2.20a with hibernation support
2477 * have a known issue which can cause USB CV TD.9.23 to fail
2478 * randomly.
2479 *
2480 * Because of this issue, core could generate bogus hibernation
2481 * events which SW needs to ignore.
2482 *
2483 * Refers to:
2484 *
2485 * STAR#9000546576: Device Mode Hibernation: Issue in USB 2.0
2486 * Device Fallback from SuperSpeed
2487 */
2488 if (is_ss ^ (dwc->speed == USB_SPEED_SUPER))
2489 return;
2490
2491 /* enter hibernation here */
2492}
2493
2384static void dwc3_gadget_interrupt(struct dwc3 *dwc, 2494static void dwc3_gadget_interrupt(struct dwc3 *dwc,
2385 const struct dwc3_event_devt *event) 2495 const struct dwc3_event_devt *event)
2386{ 2496{
@@ -2397,6 +2507,13 @@ static void dwc3_gadget_interrupt(struct dwc3 *dwc,
2397 case DWC3_DEVICE_EVENT_WAKEUP: 2507 case DWC3_DEVICE_EVENT_WAKEUP:
2398 dwc3_gadget_wakeup_interrupt(dwc); 2508 dwc3_gadget_wakeup_interrupt(dwc);
2399 break; 2509 break;
2510 case DWC3_DEVICE_EVENT_HIBER_REQ:
2511 if (dev_WARN_ONCE(dwc->dev, !dwc->has_hibernation,
2512 "unexpected hibernation event\n"))
2513 break;
2514
2515 dwc3_gadget_hibernation_interrupt(dwc, event->event_info);
2516 break;
2400 case DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE: 2517 case DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE:
2401 dwc3_gadget_linksts_change_interrupt(dwc, event->event_info); 2518 dwc3_gadget_linksts_change_interrupt(dwc, event->event_info);
2402 break; 2519 break;
@@ -2661,8 +2778,10 @@ void dwc3_gadget_exit(struct dwc3 *dwc)
2661 2778
2662int dwc3_gadget_prepare(struct dwc3 *dwc) 2779int dwc3_gadget_prepare(struct dwc3 *dwc)
2663{ 2780{
2664 if (dwc->pullups_connected) 2781 if (dwc->pullups_connected) {
2665 dwc3_gadget_disable_irq(dwc); 2782 dwc3_gadget_disable_irq(dwc);
2783 dwc3_gadget_run_stop(dwc, true, true);
2784 }
2666 2785
2667 return 0; 2786 return 0;
2668} 2787}
@@ -2671,7 +2790,7 @@ void dwc3_gadget_complete(struct dwc3 *dwc)
2671{ 2790{
2672 if (dwc->pullups_connected) { 2791 if (dwc->pullups_connected) {
2673 dwc3_gadget_enable_irq(dwc); 2792 dwc3_gadget_enable_irq(dwc);
2674 dwc3_gadget_run_stop(dwc, true); 2793 dwc3_gadget_run_stop(dwc, true, false);
2675 } 2794 }
2676} 2795}
2677 2796
@@ -2694,12 +2813,14 @@ int dwc3_gadget_resume(struct dwc3 *dwc)
2694 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512); 2813 dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512);
2695 2814
2696 dep = dwc->eps[0]; 2815 dep = dwc->eps[0];
2697 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false); 2816 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false,
2817 false);
2698 if (ret) 2818 if (ret)
2699 goto err0; 2819 goto err0;
2700 2820
2701 dep = dwc->eps[1]; 2821 dep = dwc->eps[1];
2702 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false); 2822 ret = __dwc3_gadget_ep_enable(dep, &dwc3_gadget_ep0_desc, NULL, false,
2823 false);
2703 if (ret) 2824 if (ret)
2704 goto err1; 2825 goto err1;
2705 2826
diff --git a/drivers/usb/dwc3/gadget.h b/drivers/usb/dwc3/gadget.h
index febe1aa7b714..a0ee75b68a80 100644
--- a/drivers/usb/dwc3/gadget.h
+++ b/drivers/usb/dwc3/gadget.h
@@ -56,12 +56,6 @@ struct dwc3;
56/* DEPXFERCFG parameter 0 */ 56/* DEPXFERCFG parameter 0 */
57#define DWC3_DEPXFERCFG_NUM_XFER_RES(n) ((n) & 0xffff) 57#define DWC3_DEPXFERCFG_NUM_XFER_RES(n) ((n) & 0xffff)
58 58
59struct dwc3_gadget_ep_cmd_params {
60 u32 param2;
61 u32 param1;
62 u32 param0;
63};
64
65/* -------------------------------------------------------------------------- */ 59/* -------------------------------------------------------------------------- */
66 60
67#define to_dwc3_request(r) (container_of(r, struct dwc3_request, request)) 61#define to_dwc3_request(r) (container_of(r, struct dwc3_request, request))
@@ -85,9 +79,6 @@ static inline void dwc3_gadget_move_request_queued(struct dwc3_request *req)
85void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, 79void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
86 int status); 80 int status);
87 81
88int dwc3_gadget_set_test_mode(struct dwc3 *dwc, int mode);
89int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state);
90
91void dwc3_ep0_interrupt(struct dwc3 *dwc, 82void dwc3_ep0_interrupt(struct dwc3 *dwc,
92 const struct dwc3_event_depevt *event); 83 const struct dwc3_event_depevt *event);
93void dwc3_ep0_out_start(struct dwc3 *dwc); 84void dwc3_ep0_out_start(struct dwc3 *dwc);
@@ -95,9 +86,6 @@ int dwc3_gadget_ep0_set_halt(struct usb_ep *ep, int value);
95int dwc3_gadget_ep0_queue(struct usb_ep *ep, struct usb_request *request, 86int dwc3_gadget_ep0_queue(struct usb_ep *ep, struct usb_request *request,
96 gfp_t gfp_flags); 87 gfp_t gfp_flags);
97int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value); 88int __dwc3_gadget_ep_set_halt(struct dwc3_ep *dep, int value);
98int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep,
99 unsigned cmd, struct dwc3_gadget_ep_cmd_params *params);
100int dwc3_send_gadget_generic_command(struct dwc3 *dwc, int cmd, u32 param);
101 89
102/** 90/**
103 * dwc3_gadget_ep_get_transfer_index - Gets transfer index from HW 91 * dwc3_gadget_ep_get_transfer_index - Gets transfer index from HW