hsotg 67 drivers/usb/dwc2/core.c int dwc2_backup_global_registers(struct dwc2_hsotg *hsotg) hsotg 71 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "%s\n", __func__); hsotg 74 drivers/usb/dwc2/core.c gr = &hsotg->gr_backup; hsotg 76 drivers/usb/dwc2/core.c gr->gotgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 77 drivers/usb/dwc2/core.c gr->gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 78 drivers/usb/dwc2/core.c gr->gahbcfg = dwc2_readl(hsotg, GAHBCFG); hsotg 79 drivers/usb/dwc2/core.c gr->gusbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 80 drivers/usb/dwc2/core.c gr->grxfsiz = dwc2_readl(hsotg, GRXFSIZ); hsotg 81 drivers/usb/dwc2/core.c gr->gnptxfsiz = dwc2_readl(hsotg, GNPTXFSIZ); hsotg 82 drivers/usb/dwc2/core.c gr->gdfifocfg = dwc2_readl(hsotg, GDFIFOCFG); hsotg 83 drivers/usb/dwc2/core.c gr->pcgcctl1 = dwc2_readl(hsotg, PCGCCTL1); hsotg 84 drivers/usb/dwc2/core.c gr->glpmcfg = dwc2_readl(hsotg, GLPMCFG); hsotg 85 drivers/usb/dwc2/core.c gr->gi2cctl = dwc2_readl(hsotg, GI2CCTL); hsotg 86 drivers/usb/dwc2/core.c gr->pcgcctl = dwc2_readl(hsotg, PCGCTL); hsotg 99 drivers/usb/dwc2/core.c int dwc2_restore_global_registers(struct dwc2_hsotg *hsotg) hsotg 103 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "%s\n", __func__); hsotg 106 drivers/usb/dwc2/core.c gr = &hsotg->gr_backup; hsotg 108 drivers/usb/dwc2/core.c dev_err(hsotg->dev, "%s: no global registers to restore\n", hsotg 114 drivers/usb/dwc2/core.c dwc2_writel(hsotg, 0xffffffff, GINTSTS); hsotg 115 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gr->gotgctl, GOTGCTL); hsotg 116 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gr->gintmsk, GINTMSK); hsotg 117 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gr->gusbcfg, GUSBCFG); hsotg 118 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gr->gahbcfg, GAHBCFG); hsotg 119 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gr->grxfsiz, GRXFSIZ); hsotg 120 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gr->gnptxfsiz, GNPTXFSIZ); hsotg 121 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gr->gdfifocfg, GDFIFOCFG); hsotg 122 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gr->pcgcctl1, PCGCCTL1); hsotg 123 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gr->glpmcfg, GLPMCFG); hsotg 124 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gr->pcgcctl, PCGCTL); hsotg 125 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gr->gi2cctl, GI2CCTL); hsotg 136 drivers/usb/dwc2/core.c int dwc2_exit_partial_power_down(struct dwc2_hsotg *hsotg, bool restore) hsotg 141 drivers/usb/dwc2/core.c if (hsotg->params.power_down != DWC2_POWER_DOWN_PARAM_PARTIAL) hsotg 144 drivers/usb/dwc2/core.c pcgcctl = dwc2_readl(hsotg, PCGCTL); hsotg 146 drivers/usb/dwc2/core.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 148 drivers/usb/dwc2/core.c pcgcctl = dwc2_readl(hsotg, PCGCTL); hsotg 150 drivers/usb/dwc2/core.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 152 drivers/usb/dwc2/core.c pcgcctl = dwc2_readl(hsotg, PCGCTL); hsotg 154 drivers/usb/dwc2/core.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 158 drivers/usb/dwc2/core.c ret = dwc2_restore_global_registers(hsotg); hsotg 160 drivers/usb/dwc2/core.c dev_err(hsotg->dev, "%s: failed to restore registers\n", hsotg 164 drivers/usb/dwc2/core.c if (dwc2_is_host_mode(hsotg)) { hsotg 165 drivers/usb/dwc2/core.c ret = dwc2_restore_host_registers(hsotg); hsotg 167 drivers/usb/dwc2/core.c dev_err(hsotg->dev, "%s: failed to restore host registers\n", hsotg 172 drivers/usb/dwc2/core.c ret = dwc2_restore_device_registers(hsotg, 0); hsotg 174 drivers/usb/dwc2/core.c dev_err(hsotg->dev, "%s: failed to restore device registers\n", hsotg 189 drivers/usb/dwc2/core.c int dwc2_enter_partial_power_down(struct dwc2_hsotg *hsotg) hsotg 194 drivers/usb/dwc2/core.c if (!hsotg->params.power_down) hsotg 198 drivers/usb/dwc2/core.c ret = dwc2_backup_global_registers(hsotg); hsotg 200 drivers/usb/dwc2/core.c dev_err(hsotg->dev, "%s: failed to backup global registers\n", hsotg 205 drivers/usb/dwc2/core.c if (dwc2_is_host_mode(hsotg)) { hsotg 206 drivers/usb/dwc2/core.c ret = dwc2_backup_host_registers(hsotg); hsotg 208 drivers/usb/dwc2/core.c dev_err(hsotg->dev, "%s: failed to backup host registers\n", hsotg 213 drivers/usb/dwc2/core.c ret = dwc2_backup_device_registers(hsotg); hsotg 215 drivers/usb/dwc2/core.c dev_err(hsotg->dev, "%s: failed to backup device registers\n", hsotg 225 drivers/usb/dwc2/core.c dwc2_writel(hsotg, 0xffffffff, GINTSTS); hsotg 228 drivers/usb/dwc2/core.c pcgcctl = dwc2_readl(hsotg, PCGCTL); hsotg 231 drivers/usb/dwc2/core.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 235 drivers/usb/dwc2/core.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 239 drivers/usb/dwc2/core.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 251 drivers/usb/dwc2/core.c static void dwc2_restore_essential_regs(struct dwc2_hsotg *hsotg, int rmode, hsotg 259 drivers/usb/dwc2/core.c gr = &hsotg->gr_backup; hsotg 260 drivers/usb/dwc2/core.c dr = &hsotg->dr_backup; hsotg 261 drivers/usb/dwc2/core.c hr = &hsotg->hr_backup; hsotg 263 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "%s: restoring essential regs\n", __func__); hsotg 275 drivers/usb/dwc2/core.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 278 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gr->gahbcfg | GAHBCFG_GLBL_INTR_EN, GAHBCFG); hsotg 281 drivers/usb/dwc2/core.c dwc2_writel(hsotg, 0xffffffff, GINTSTS); hsotg 284 drivers/usb/dwc2/core.c dwc2_writel(hsotg, GINTSTS_RESTOREDONE, GINTMSK); hsotg 287 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gr->gusbcfg, GUSBCFG); hsotg 290 drivers/usb/dwc2/core.c dwc2_writel(hsotg, hr->hcfg, HCFG); hsotg 293 drivers/usb/dwc2/core.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 297 drivers/usb/dwc2/core.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 300 drivers/usb/dwc2/core.c dwc2_writel(hsotg, dr->dcfg, DCFG); hsotg 303 drivers/usb/dwc2/core.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 307 drivers/usb/dwc2/core.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 319 drivers/usb/dwc2/core.c void dwc2_hib_restore_common(struct dwc2_hsotg *hsotg, int rem_wakeup, hsotg 325 drivers/usb/dwc2/core.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 327 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 331 drivers/usb/dwc2/core.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 333 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 337 drivers/usb/dwc2/core.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 339 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 343 drivers/usb/dwc2/core.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 345 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 352 drivers/usb/dwc2/core.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 354 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 358 drivers/usb/dwc2/core.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 360 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 364 drivers/usb/dwc2/core.c dwc2_restore_essential_regs(hsotg, rem_wakeup, is_host); hsotg 370 drivers/usb/dwc2/core.c if (dwc2_hsotg_wait_bit_set(hsotg, GINTSTS, GINTSTS_RESTOREDONE, hsotg 372 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, hsotg 376 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "restore done generated here\n"); hsotg 385 drivers/usb/dwc2/core.c static void dwc2_wait_for_mode(struct dwc2_hsotg *hsotg, hsotg 392 drivers/usb/dwc2/core.c dev_vdbg(hsotg->dev, "Waiting for %s mode\n", hsotg 400 drivers/usb/dwc2/core.c if (dwc2_is_host_mode(hsotg) == host_mode) { hsotg 401 drivers/usb/dwc2/core.c dev_vdbg(hsotg->dev, "%s mode set\n", hsotg 410 drivers/usb/dwc2/core.c dev_warn(hsotg->dev, "%s: Couldn't set %s mode\n", hsotg 425 drivers/usb/dwc2/core.c static bool dwc2_iddig_filter_enabled(struct dwc2_hsotg *hsotg) hsotg 430 drivers/usb/dwc2/core.c if (!dwc2_hw_is_otg(hsotg)) hsotg 434 drivers/usb/dwc2/core.c ghwcfg4 = dwc2_readl(hsotg, GHWCFG4); hsotg 442 drivers/usb/dwc2/core.c gsnpsid = dwc2_readl(hsotg, GSNPSID); hsotg 444 drivers/usb/dwc2/core.c u32 gotgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 461 drivers/usb/dwc2/core.c int dwc2_enter_hibernation(struct dwc2_hsotg *hsotg, int is_host) hsotg 463 drivers/usb/dwc2/core.c if (hsotg->params.power_down != DWC2_POWER_DOWN_PARAM_HIBERNATION) hsotg 467 drivers/usb/dwc2/core.c return dwc2_host_enter_hibernation(hsotg); hsotg 469 drivers/usb/dwc2/core.c return dwc2_gadget_enter_hibernation(hsotg); hsotg 482 drivers/usb/dwc2/core.c int dwc2_exit_hibernation(struct dwc2_hsotg *hsotg, int rem_wakeup, hsotg 486 drivers/usb/dwc2/core.c return dwc2_host_exit_hibernation(hsotg, rem_wakeup, reset); hsotg 488 drivers/usb/dwc2/core.c return dwc2_gadget_exit_hibernation(hsotg, rem_wakeup, reset); hsotg 495 drivers/usb/dwc2/core.c int dwc2_core_reset(struct dwc2_hsotg *hsotg, bool skip_wait) hsotg 500 drivers/usb/dwc2/core.c dev_vdbg(hsotg->dev, "%s()\n", __func__); hsotg 512 drivers/usb/dwc2/core.c if (dwc2_iddig_filter_enabled(hsotg)) { hsotg 513 drivers/usb/dwc2/core.c u32 gotgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 514 drivers/usb/dwc2/core.c u32 gusbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 523 drivers/usb/dwc2/core.c greset = dwc2_readl(hsotg, GRSTCTL); hsotg 525 drivers/usb/dwc2/core.c dwc2_writel(hsotg, greset, GRSTCTL); hsotg 527 drivers/usb/dwc2/core.c if (dwc2_hsotg_wait_bit_clear(hsotg, GRSTCTL, GRSTCTL_CSFTRST, 10000)) { hsotg 528 drivers/usb/dwc2/core.c dev_warn(hsotg->dev, "%s: HANG! Soft Reset timeout GRSTCTL GRSTCTL_CSFTRST\n", hsotg 534 drivers/usb/dwc2/core.c if (dwc2_hsotg_wait_bit_set(hsotg, GRSTCTL, GRSTCTL_AHBIDLE, 10000)) { hsotg 535 drivers/usb/dwc2/core.c dev_warn(hsotg->dev, "%s: HANG! AHB Idle timeout GRSTCTL GRSTCTL_AHBIDLE\n", hsotg 541 drivers/usb/dwc2/core.c dwc2_wait_for_mode(hsotg, true); hsotg 573 drivers/usb/dwc2/core.c void dwc2_force_mode(struct dwc2_hsotg *hsotg, bool host) hsotg 579 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "Forcing mode to %s\n", host ? "host" : "device"); hsotg 584 drivers/usb/dwc2/core.c if (!dwc2_hw_is_otg(hsotg)) hsotg 591 drivers/usb/dwc2/core.c if (WARN_ON(host && hsotg->dr_mode == USB_DR_MODE_PERIPHERAL)) hsotg 594 drivers/usb/dwc2/core.c if (WARN_ON(!host && hsotg->dr_mode == USB_DR_MODE_HOST)) hsotg 597 drivers/usb/dwc2/core.c gusbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 604 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gusbcfg, GUSBCFG); hsotg 606 drivers/usb/dwc2/core.c dwc2_wait_for_mode(hsotg, host); hsotg 621 drivers/usb/dwc2/core.c static void dwc2_clear_force_mode(struct dwc2_hsotg *hsotg) hsotg 625 drivers/usb/dwc2/core.c if (!dwc2_hw_is_otg(hsotg)) hsotg 628 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "Clearing force mode bits\n"); hsotg 630 drivers/usb/dwc2/core.c gusbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 633 drivers/usb/dwc2/core.c dwc2_writel(hsotg, gusbcfg, GUSBCFG); hsotg 635 drivers/usb/dwc2/core.c if (dwc2_iddig_filter_enabled(hsotg)) hsotg 642 drivers/usb/dwc2/core.c void dwc2_force_dr_mode(struct dwc2_hsotg *hsotg) hsotg 644 drivers/usb/dwc2/core.c switch (hsotg->dr_mode) { hsotg 650 drivers/usb/dwc2/core.c if (!dwc2_hw_is_otg(hsotg)) hsotg 655 drivers/usb/dwc2/core.c dwc2_force_mode(hsotg, false); hsotg 658 drivers/usb/dwc2/core.c dwc2_clear_force_mode(hsotg); hsotg 661 drivers/usb/dwc2/core.c dev_warn(hsotg->dev, "%s() Invalid dr_mode=%d\n", hsotg 662 drivers/usb/dwc2/core.c __func__, hsotg->dr_mode); hsotg 670 drivers/usb/dwc2/core.c void dwc2_enable_acg(struct dwc2_hsotg *hsotg) hsotg 672 drivers/usb/dwc2/core.c if (hsotg->params.acg_enable) { hsotg 673 drivers/usb/dwc2/core.c u32 pcgcctl1 = dwc2_readl(hsotg, PCGCCTL1); hsotg 675 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "Enabling Active Clock Gating\n"); hsotg 677 drivers/usb/dwc2/core.c dwc2_writel(hsotg, pcgcctl1, PCGCCTL1); hsotg 689 drivers/usb/dwc2/core.c void dwc2_dump_host_registers(struct dwc2_hsotg *hsotg) hsotg 695 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "Host Global Registers\n"); hsotg 696 drivers/usb/dwc2/core.c addr = hsotg->regs + HCFG; hsotg 697 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HCFG @0x%08lX : 0x%08X\n", hsotg 698 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HCFG)); hsotg 699 drivers/usb/dwc2/core.c addr = hsotg->regs + HFIR; hsotg 700 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HFIR @0x%08lX : 0x%08X\n", hsotg 701 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HFIR)); hsotg 702 drivers/usb/dwc2/core.c addr = hsotg->regs + HFNUM; hsotg 703 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HFNUM @0x%08lX : 0x%08X\n", hsotg 704 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HFNUM)); hsotg 705 drivers/usb/dwc2/core.c addr = hsotg->regs + HPTXSTS; hsotg 706 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HPTXSTS @0x%08lX : 0x%08X\n", hsotg 707 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HPTXSTS)); hsotg 708 drivers/usb/dwc2/core.c addr = hsotg->regs + HAINT; hsotg 709 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HAINT @0x%08lX : 0x%08X\n", hsotg 710 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HAINT)); hsotg 711 drivers/usb/dwc2/core.c addr = hsotg->regs + HAINTMSK; hsotg 712 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HAINTMSK @0x%08lX : 0x%08X\n", hsotg 713 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HAINTMSK)); hsotg 714 drivers/usb/dwc2/core.c if (hsotg->params.dma_desc_enable) { hsotg 715 drivers/usb/dwc2/core.c addr = hsotg->regs + HFLBADDR; hsotg 716 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HFLBADDR @0x%08lX : 0x%08X\n", hsotg 717 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HFLBADDR)); hsotg 720 drivers/usb/dwc2/core.c addr = hsotg->regs + HPRT0; hsotg 721 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HPRT0 @0x%08lX : 0x%08X\n", hsotg 722 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HPRT0)); hsotg 724 drivers/usb/dwc2/core.c for (i = 0; i < hsotg->params.host_channels; i++) { hsotg 725 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "Host Channel %d Specific Registers\n", i); hsotg 726 drivers/usb/dwc2/core.c addr = hsotg->regs + HCCHAR(i); hsotg 727 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HCCHAR @0x%08lX : 0x%08X\n", hsotg 728 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HCCHAR(i))); hsotg 729 drivers/usb/dwc2/core.c addr = hsotg->regs + HCSPLT(i); hsotg 730 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HCSPLT @0x%08lX : 0x%08X\n", hsotg 731 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HCSPLT(i))); hsotg 732 drivers/usb/dwc2/core.c addr = hsotg->regs + HCINT(i); hsotg 733 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HCINT @0x%08lX : 0x%08X\n", hsotg 734 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HCINT(i))); hsotg 735 drivers/usb/dwc2/core.c addr = hsotg->regs + HCINTMSK(i); hsotg 736 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HCINTMSK @0x%08lX : 0x%08X\n", hsotg 737 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HCINTMSK(i))); hsotg 738 drivers/usb/dwc2/core.c addr = hsotg->regs + HCTSIZ(i); hsotg 739 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HCTSIZ @0x%08lX : 0x%08X\n", hsotg 740 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HCTSIZ(i))); hsotg 741 drivers/usb/dwc2/core.c addr = hsotg->regs + HCDMA(i); hsotg 742 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HCDMA @0x%08lX : 0x%08X\n", hsotg 743 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HCDMA(i))); hsotg 744 drivers/usb/dwc2/core.c if (hsotg->params.dma_desc_enable) { hsotg 745 drivers/usb/dwc2/core.c addr = hsotg->regs + HCDMAB(i); hsotg 746 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HCDMAB @0x%08lX : 0x%08X\n", hsotg 747 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, hsotg 762 drivers/usb/dwc2/core.c void dwc2_dump_global_registers(struct dwc2_hsotg *hsotg) hsotg 767 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "Core Global Registers\n"); hsotg 768 drivers/usb/dwc2/core.c addr = hsotg->regs + GOTGCTL; hsotg 769 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GOTGCTL @0x%08lX : 0x%08X\n", hsotg 770 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GOTGCTL)); hsotg 771 drivers/usb/dwc2/core.c addr = hsotg->regs + GOTGINT; hsotg 772 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GOTGINT @0x%08lX : 0x%08X\n", hsotg 773 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GOTGINT)); hsotg 774 drivers/usb/dwc2/core.c addr = hsotg->regs + GAHBCFG; hsotg 775 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GAHBCFG @0x%08lX : 0x%08X\n", hsotg 776 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GAHBCFG)); hsotg 777 drivers/usb/dwc2/core.c addr = hsotg->regs + GUSBCFG; hsotg 778 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GUSBCFG @0x%08lX : 0x%08X\n", hsotg 779 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GUSBCFG)); hsotg 780 drivers/usb/dwc2/core.c addr = hsotg->regs + GRSTCTL; hsotg 781 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GRSTCTL @0x%08lX : 0x%08X\n", hsotg 782 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GRSTCTL)); hsotg 783 drivers/usb/dwc2/core.c addr = hsotg->regs + GINTSTS; hsotg 784 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GINTSTS @0x%08lX : 0x%08X\n", hsotg 785 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GINTSTS)); hsotg 786 drivers/usb/dwc2/core.c addr = hsotg->regs + GINTMSK; hsotg 787 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GINTMSK @0x%08lX : 0x%08X\n", hsotg 788 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GINTMSK)); hsotg 789 drivers/usb/dwc2/core.c addr = hsotg->regs + GRXSTSR; hsotg 790 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GRXSTSR @0x%08lX : 0x%08X\n", hsotg 791 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GRXSTSR)); hsotg 792 drivers/usb/dwc2/core.c addr = hsotg->regs + GRXFSIZ; hsotg 793 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GRXFSIZ @0x%08lX : 0x%08X\n", hsotg 794 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GRXFSIZ)); hsotg 795 drivers/usb/dwc2/core.c addr = hsotg->regs + GNPTXFSIZ; hsotg 796 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GNPTXFSIZ @0x%08lX : 0x%08X\n", hsotg 797 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GNPTXFSIZ)); hsotg 798 drivers/usb/dwc2/core.c addr = hsotg->regs + GNPTXSTS; hsotg 799 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GNPTXSTS @0x%08lX : 0x%08X\n", hsotg 800 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GNPTXSTS)); hsotg 801 drivers/usb/dwc2/core.c addr = hsotg->regs + GI2CCTL; hsotg 802 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GI2CCTL @0x%08lX : 0x%08X\n", hsotg 803 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GI2CCTL)); hsotg 804 drivers/usb/dwc2/core.c addr = hsotg->regs + GPVNDCTL; hsotg 805 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GPVNDCTL @0x%08lX : 0x%08X\n", hsotg 806 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GPVNDCTL)); hsotg 807 drivers/usb/dwc2/core.c addr = hsotg->regs + GGPIO; hsotg 808 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GGPIO @0x%08lX : 0x%08X\n", hsotg 809 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GGPIO)); hsotg 810 drivers/usb/dwc2/core.c addr = hsotg->regs + GUID; hsotg 811 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GUID @0x%08lX : 0x%08X\n", hsotg 812 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GUID)); hsotg 813 drivers/usb/dwc2/core.c addr = hsotg->regs + GSNPSID; hsotg 814 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GSNPSID @0x%08lX : 0x%08X\n", hsotg 815 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GSNPSID)); hsotg 816 drivers/usb/dwc2/core.c addr = hsotg->regs + GHWCFG1; hsotg 817 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GHWCFG1 @0x%08lX : 0x%08X\n", hsotg 818 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GHWCFG1)); hsotg 819 drivers/usb/dwc2/core.c addr = hsotg->regs + GHWCFG2; hsotg 820 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GHWCFG2 @0x%08lX : 0x%08X\n", hsotg 821 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GHWCFG2)); hsotg 822 drivers/usb/dwc2/core.c addr = hsotg->regs + GHWCFG3; hsotg 823 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GHWCFG3 @0x%08lX : 0x%08X\n", hsotg 824 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GHWCFG3)); hsotg 825 drivers/usb/dwc2/core.c addr = hsotg->regs + GHWCFG4; hsotg 826 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GHWCFG4 @0x%08lX : 0x%08X\n", hsotg 827 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GHWCFG4)); hsotg 828 drivers/usb/dwc2/core.c addr = hsotg->regs + GLPMCFG; hsotg 829 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GLPMCFG @0x%08lX : 0x%08X\n", hsotg 830 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GLPMCFG)); hsotg 831 drivers/usb/dwc2/core.c addr = hsotg->regs + GPWRDN; hsotg 832 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GPWRDN @0x%08lX : 0x%08X\n", hsotg 833 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GPWRDN)); hsotg 834 drivers/usb/dwc2/core.c addr = hsotg->regs + GDFIFOCFG; hsotg 835 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "GDFIFOCFG @0x%08lX : 0x%08X\n", hsotg 836 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, GDFIFOCFG)); hsotg 837 drivers/usb/dwc2/core.c addr = hsotg->regs + HPTXFSIZ; hsotg 838 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HPTXFSIZ @0x%08lX : 0x%08X\n", hsotg 839 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, HPTXFSIZ)); hsotg 841 drivers/usb/dwc2/core.c addr = hsotg->regs + PCGCTL; hsotg 842 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "PCGCTL @0x%08lX : 0x%08X\n", hsotg 843 drivers/usb/dwc2/core.c (unsigned long)addr, dwc2_readl(hsotg, PCGCTL)); hsotg 853 drivers/usb/dwc2/core.c void dwc2_flush_tx_fifo(struct dwc2_hsotg *hsotg, const int num) hsotg 857 drivers/usb/dwc2/core.c dev_vdbg(hsotg->dev, "Flush Tx FIFO %d\n", num); hsotg 860 drivers/usb/dwc2/core.c if (dwc2_hsotg_wait_bit_set(hsotg, GRSTCTL, GRSTCTL_AHBIDLE, 10000)) hsotg 861 drivers/usb/dwc2/core.c dev_warn(hsotg->dev, "%s: HANG! AHB Idle GRSCTL\n", hsotg 866 drivers/usb/dwc2/core.c dwc2_writel(hsotg, greset, GRSTCTL); hsotg 868 drivers/usb/dwc2/core.c if (dwc2_hsotg_wait_bit_clear(hsotg, GRSTCTL, GRSTCTL_TXFFLSH, 10000)) hsotg 869 drivers/usb/dwc2/core.c dev_warn(hsotg->dev, "%s: HANG! timeout GRSTCTL GRSTCTL_TXFFLSH\n", hsotg 881 drivers/usb/dwc2/core.c void dwc2_flush_rx_fifo(struct dwc2_hsotg *hsotg) hsotg 885 drivers/usb/dwc2/core.c dev_vdbg(hsotg->dev, "%s()\n", __func__); hsotg 888 drivers/usb/dwc2/core.c if (dwc2_hsotg_wait_bit_set(hsotg, GRSTCTL, GRSTCTL_AHBIDLE, 10000)) hsotg 889 drivers/usb/dwc2/core.c dev_warn(hsotg->dev, "%s: HANG! AHB Idle GRSCTL\n", hsotg 893 drivers/usb/dwc2/core.c dwc2_writel(hsotg, greset, GRSTCTL); hsotg 896 drivers/usb/dwc2/core.c if (dwc2_hsotg_wait_bit_clear(hsotg, GRSTCTL, GRSTCTL_RXFFLSH, 10000)) hsotg 897 drivers/usb/dwc2/core.c dev_warn(hsotg->dev, "%s: HANG! timeout GRSTCTL GRSTCTL_RXFFLSH\n", hsotg 904 drivers/usb/dwc2/core.c bool dwc2_is_controller_alive(struct dwc2_hsotg *hsotg) hsotg 906 drivers/usb/dwc2/core.c if (dwc2_readl(hsotg, GSNPSID) == 0xffffffff) hsotg 918 drivers/usb/dwc2/core.c void dwc2_enable_global_interrupts(struct dwc2_hsotg *hsotg) hsotg 920 drivers/usb/dwc2/core.c u32 ahbcfg = dwc2_readl(hsotg, GAHBCFG); hsotg 923 drivers/usb/dwc2/core.c dwc2_writel(hsotg, ahbcfg, GAHBCFG); hsotg 932 drivers/usb/dwc2/core.c void dwc2_disable_global_interrupts(struct dwc2_hsotg *hsotg) hsotg 934 drivers/usb/dwc2/core.c u32 ahbcfg = dwc2_readl(hsotg, GAHBCFG); hsotg 937 drivers/usb/dwc2/core.c dwc2_writel(hsotg, ahbcfg, GAHBCFG); hsotg 941 drivers/usb/dwc2/core.c unsigned int dwc2_op_mode(struct dwc2_hsotg *hsotg) hsotg 943 drivers/usb/dwc2/core.c u32 ghwcfg2 = dwc2_readl(hsotg, GHWCFG2); hsotg 950 drivers/usb/dwc2/core.c bool dwc2_hw_is_otg(struct dwc2_hsotg *hsotg) hsotg 952 drivers/usb/dwc2/core.c unsigned int op_mode = dwc2_op_mode(hsotg); hsotg 960 drivers/usb/dwc2/core.c bool dwc2_hw_is_host(struct dwc2_hsotg *hsotg) hsotg 962 drivers/usb/dwc2/core.c unsigned int op_mode = dwc2_op_mode(hsotg); hsotg 969 drivers/usb/dwc2/core.c bool dwc2_hw_is_device(struct dwc2_hsotg *hsotg) hsotg 971 drivers/usb/dwc2/core.c unsigned int op_mode = dwc2_op_mode(hsotg); hsotg 986 drivers/usb/dwc2/core.c int dwc2_hsotg_wait_bit_set(struct dwc2_hsotg *hsotg, u32 offset, u32 mask, hsotg 992 drivers/usb/dwc2/core.c if (dwc2_readl(hsotg, offset) & mask) hsotg 1009 drivers/usb/dwc2/core.c int dwc2_hsotg_wait_bit_clear(struct dwc2_hsotg *hsotg, u32 offset, u32 mask, hsotg 1015 drivers/usb/dwc2/core.c if (!(dwc2_readl(hsotg, offset) & mask)) hsotg 1027 drivers/usb/dwc2/core.c void dwc2_init_fs_ls_pclk_sel(struct dwc2_hsotg *hsotg) hsotg 1031 drivers/usb/dwc2/core.c if ((hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_ULPI && hsotg 1032 drivers/usb/dwc2/core.c hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED && hsotg 1033 drivers/usb/dwc2/core.c hsotg->params.ulpi_fs_ls) || hsotg 1034 drivers/usb/dwc2/core.c hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS) { hsotg 1042 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "Initializing HCFG.FSLSPClkSel to %08x\n", val); hsotg 1043 drivers/usb/dwc2/core.c hcfg = dwc2_readl(hsotg, HCFG); hsotg 1046 drivers/usb/dwc2/core.c dwc2_writel(hsotg, hcfg, HCFG); hsotg 1049 drivers/usb/dwc2/core.c static int dwc2_fs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) hsotg 1059 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "FS PHY selected\n"); hsotg 1061 drivers/usb/dwc2/core.c usbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 1064 drivers/usb/dwc2/core.c dwc2_writel(hsotg, usbcfg, GUSBCFG); hsotg 1067 drivers/usb/dwc2/core.c retval = dwc2_core_reset(hsotg, false); hsotg 1070 drivers/usb/dwc2/core.c dev_err(hsotg->dev, hsotg 1076 drivers/usb/dwc2/core.c if (hsotg->params.activate_stm_fs_transceiver) { hsotg 1077 drivers/usb/dwc2/core.c ggpio = dwc2_readl(hsotg, GGPIO); hsotg 1079 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "Activating transceiver\n"); hsotg 1085 drivers/usb/dwc2/core.c dwc2_writel(hsotg, ggpio, GGPIO); hsotg 1095 drivers/usb/dwc2/core.c if (dwc2_is_host_mode(hsotg)) hsotg 1096 drivers/usb/dwc2/core.c dwc2_init_fs_ls_pclk_sel(hsotg); hsotg 1098 drivers/usb/dwc2/core.c if (hsotg->params.i2c_enable) { hsotg 1099 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "FS PHY enabling I2C\n"); hsotg 1102 drivers/usb/dwc2/core.c usbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 1104 drivers/usb/dwc2/core.c dwc2_writel(hsotg, usbcfg, GUSBCFG); hsotg 1107 drivers/usb/dwc2/core.c i2cctl = dwc2_readl(hsotg, GI2CCTL); hsotg 1111 drivers/usb/dwc2/core.c dwc2_writel(hsotg, i2cctl, GI2CCTL); hsotg 1113 drivers/usb/dwc2/core.c dwc2_writel(hsotg, i2cctl, GI2CCTL); hsotg 1119 drivers/usb/dwc2/core.c static int dwc2_hs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) hsotg 1127 drivers/usb/dwc2/core.c usbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 1135 drivers/usb/dwc2/core.c switch (hsotg->params.phy_type) { hsotg 1138 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HS ULPI PHY selected\n"); hsotg 1141 drivers/usb/dwc2/core.c if (hsotg->params.phy_ulpi_ddr) hsotg 1145 drivers/usb/dwc2/core.c if (hsotg->params.oc_disable) hsotg 1151 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "HS UTMI+ PHY selected\n"); hsotg 1153 drivers/usb/dwc2/core.c if (hsotg->params.phy_utmi_width == 16) hsotg 1157 drivers/usb/dwc2/core.c if (dwc2_is_device_mode(hsotg)) { hsotg 1159 drivers/usb/dwc2/core.c if (hsotg->params.phy_utmi_width == 16) hsotg 1166 drivers/usb/dwc2/core.c dev_err(hsotg->dev, "FS PHY selected at HS!\n"); hsotg 1171 drivers/usb/dwc2/core.c dwc2_writel(hsotg, usbcfg, GUSBCFG); hsotg 1174 drivers/usb/dwc2/core.c retval = dwc2_core_reset(hsotg, false); hsotg 1176 drivers/usb/dwc2/core.c dev_err(hsotg->dev, hsotg 1185 drivers/usb/dwc2/core.c int dwc2_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) hsotg 1190 drivers/usb/dwc2/core.c if ((hsotg->params.speed == DWC2_SPEED_PARAM_FULL || hsotg 1191 drivers/usb/dwc2/core.c hsotg->params.speed == DWC2_SPEED_PARAM_LOW) && hsotg 1192 drivers/usb/dwc2/core.c hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS) { hsotg 1194 drivers/usb/dwc2/core.c retval = dwc2_fs_phy_init(hsotg, select_phy); hsotg 1199 drivers/usb/dwc2/core.c retval = dwc2_hs_phy_init(hsotg, select_phy); hsotg 1204 drivers/usb/dwc2/core.c if (hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_ULPI && hsotg 1205 drivers/usb/dwc2/core.c hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED && hsotg 1206 drivers/usb/dwc2/core.c hsotg->params.ulpi_fs_ls) { hsotg 1207 drivers/usb/dwc2/core.c dev_dbg(hsotg->dev, "Setting ULPI FSLS\n"); hsotg 1208 drivers/usb/dwc2/core.c usbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 1211 drivers/usb/dwc2/core.c dwc2_writel(hsotg, usbcfg, GUSBCFG); hsotg 1213 drivers/usb/dwc2/core.c usbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 1216 drivers/usb/dwc2/core.c dwc2_writel(hsotg, usbcfg, GUSBCFG); hsotg 59 drivers/usb/dwc2/core.h #define dwc2_sch_dbg(hsotg, fmt, ...) \ hsotg 61 drivers/usb/dwc2/core.h dev_name(hsotg->dev), ##__VA_ARGS__) hsotg 64 drivers/usb/dwc2/core.h #define dwc2_sch_vdbg(hsotg, fmt, ...) \ hsotg 66 drivers/usb/dwc2/core.h dev_name(hsotg->dev), ##__VA_ARGS__) hsotg 1204 drivers/usb/dwc2/core.h static inline u32 dwc2_readl(struct dwc2_hsotg *hsotg, u32 offset) hsotg 1208 drivers/usb/dwc2/core.h val = readl(hsotg->regs + offset); hsotg 1209 drivers/usb/dwc2/core.h if (hsotg->needs_byte_swap) hsotg 1215 drivers/usb/dwc2/core.h static inline void dwc2_writel(struct dwc2_hsotg *hsotg, u32 value, u32 offset) hsotg 1217 drivers/usb/dwc2/core.h if (hsotg->needs_byte_swap) hsotg 1218 drivers/usb/dwc2/core.h writel(swab32(value), hsotg->regs + offset); hsotg 1220 drivers/usb/dwc2/core.h writel(value, hsotg->regs + offset); hsotg 1223 drivers/usb/dwc2/core.h pr_info("info:: wrote %08x to %p\n", value, hsotg->regs + offset); hsotg 1227 drivers/usb/dwc2/core.h static inline void dwc2_readl_rep(struct dwc2_hsotg *hsotg, u32 offset, hsotg 1234 drivers/usb/dwc2/core.h u32 x = dwc2_readl(hsotg, offset); hsotg 1240 drivers/usb/dwc2/core.h static inline void dwc2_writel_rep(struct dwc2_hsotg *hsotg, u32 offset, hsotg 1247 drivers/usb/dwc2/core.h dwc2_writel(hsotg, *buf++, offset); hsotg 1271 drivers/usb/dwc2/core.h static inline bool dwc2_is_iot(struct dwc2_hsotg *hsotg) hsotg 1273 drivers/usb/dwc2/core.h return (hsotg->hw_params.snpsid & 0xfff00000) == 0x55300000; hsotg 1276 drivers/usb/dwc2/core.h static inline bool dwc2_is_fs_iot(struct dwc2_hsotg *hsotg) hsotg 1278 drivers/usb/dwc2/core.h return (hsotg->hw_params.snpsid & 0xffff0000) == 0x55310000; hsotg 1281 drivers/usb/dwc2/core.h static inline bool dwc2_is_hs_iot(struct dwc2_hsotg *hsotg) hsotg 1283 drivers/usb/dwc2/core.h return (hsotg->hw_params.snpsid & 0xffff0000) == 0x55320000; hsotg 1290 drivers/usb/dwc2/core.h int dwc2_core_reset(struct dwc2_hsotg *hsotg, bool skip_wait); hsotg 1291 drivers/usb/dwc2/core.h int dwc2_enter_partial_power_down(struct dwc2_hsotg *hsotg); hsotg 1292 drivers/usb/dwc2/core.h int dwc2_exit_partial_power_down(struct dwc2_hsotg *hsotg, bool restore); hsotg 1293 drivers/usb/dwc2/core.h int dwc2_enter_hibernation(struct dwc2_hsotg *hsotg, int is_host); hsotg 1294 drivers/usb/dwc2/core.h int dwc2_exit_hibernation(struct dwc2_hsotg *hsotg, int rem_wakeup, hsotg 1296 drivers/usb/dwc2/core.h void dwc2_init_fs_ls_pclk_sel(struct dwc2_hsotg *hsotg); hsotg 1297 drivers/usb/dwc2/core.h int dwc2_phy_init(struct dwc2_hsotg *hsotg, bool select_phy); hsotg 1299 drivers/usb/dwc2/core.h void dwc2_force_mode(struct dwc2_hsotg *hsotg, bool host); hsotg 1300 drivers/usb/dwc2/core.h void dwc2_force_dr_mode(struct dwc2_hsotg *hsotg); hsotg 1302 drivers/usb/dwc2/core.h bool dwc2_is_controller_alive(struct dwc2_hsotg *hsotg); hsotg 1309 drivers/usb/dwc2/core.h void dwc2_read_packet(struct dwc2_hsotg *hsotg, u8 *dest, u16 bytes); hsotg 1310 drivers/usb/dwc2/core.h void dwc2_flush_tx_fifo(struct dwc2_hsotg *hsotg, const int num); hsotg 1311 drivers/usb/dwc2/core.h void dwc2_flush_rx_fifo(struct dwc2_hsotg *hsotg); hsotg 1316 drivers/usb/dwc2/core.h void dwc2_hib_restore_common(struct dwc2_hsotg *hsotg, int rem_wakeup, hsotg 1318 drivers/usb/dwc2/core.h int dwc2_backup_global_registers(struct dwc2_hsotg *hsotg); hsotg 1319 drivers/usb/dwc2/core.h int dwc2_restore_global_registers(struct dwc2_hsotg *hsotg); hsotg 1321 drivers/usb/dwc2/core.h void dwc2_enable_acg(struct dwc2_hsotg *hsotg); hsotg 1329 drivers/usb/dwc2/core.h int dwc2_lowlevel_hw_enable(struct dwc2_hsotg *hsotg); hsotg 1330 drivers/usb/dwc2/core.h int dwc2_lowlevel_hw_disable(struct dwc2_hsotg *hsotg); hsotg 1338 drivers/usb/dwc2/core.h int dwc2_get_hwparams(struct dwc2_hsotg *hsotg); hsotg 1339 drivers/usb/dwc2/core.h int dwc2_init_params(struct dwc2_hsotg *hsotg); hsotg 1349 drivers/usb/dwc2/core.h unsigned int dwc2_op_mode(struct dwc2_hsotg *hsotg); hsotg 1350 drivers/usb/dwc2/core.h bool dwc2_hw_is_otg(struct dwc2_hsotg *hsotg); hsotg 1351 drivers/usb/dwc2/core.h bool dwc2_hw_is_host(struct dwc2_hsotg *hsotg); hsotg 1352 drivers/usb/dwc2/core.h bool dwc2_hw_is_device(struct dwc2_hsotg *hsotg); hsotg 1357 drivers/usb/dwc2/core.h static inline int dwc2_is_host_mode(struct dwc2_hsotg *hsotg) hsotg 1359 drivers/usb/dwc2/core.h return (dwc2_readl(hsotg, GINTSTS) & GINTSTS_CURMODE_HOST) != 0; hsotg 1362 drivers/usb/dwc2/core.h static inline int dwc2_is_device_mode(struct dwc2_hsotg *hsotg) hsotg 1364 drivers/usb/dwc2/core.h return (dwc2_readl(hsotg, GINTSTS) & GINTSTS_CURMODE_HOST) == 0; hsotg 1370 drivers/usb/dwc2/core.h void dwc2_dump_dev_registers(struct dwc2_hsotg *hsotg); hsotg 1371 drivers/usb/dwc2/core.h void dwc2_dump_host_registers(struct dwc2_hsotg *hsotg); hsotg 1372 drivers/usb/dwc2/core.h void dwc2_dump_global_registers(struct dwc2_hsotg *hsotg); hsotg 1377 drivers/usb/dwc2/core.h int dwc2_hsotg_remove(struct dwc2_hsotg *hsotg); hsotg 1380 drivers/usb/dwc2/core.h int dwc2_gadget_init(struct dwc2_hsotg *hsotg); hsotg 1383 drivers/usb/dwc2/core.h void dwc2_hsotg_core_connect(struct dwc2_hsotg *hsotg); hsotg 1385 drivers/usb/dwc2/core.h int dwc2_hsotg_set_test_mode(struct dwc2_hsotg *hsotg, int testmode); hsotg 1386 drivers/usb/dwc2/core.h #define dwc2_is_device_connected(hsotg) (hsotg->connected) hsotg 1387 drivers/usb/dwc2/core.h int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg); hsotg 1388 drivers/usb/dwc2/core.h int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg, int remote_wakeup); hsotg 1389 drivers/usb/dwc2/core.h int dwc2_gadget_enter_hibernation(struct dwc2_hsotg *hsotg); hsotg 1390 drivers/usb/dwc2/core.h int dwc2_gadget_exit_hibernation(struct dwc2_hsotg *hsotg, hsotg 1392 drivers/usb/dwc2/core.h int dwc2_hsotg_tx_fifo_count(struct dwc2_hsotg *hsotg); hsotg 1393 drivers/usb/dwc2/core.h int dwc2_hsotg_tx_fifo_total_depth(struct dwc2_hsotg *hsotg); hsotg 1394 drivers/usb/dwc2/core.h int dwc2_hsotg_tx_fifo_average_depth(struct dwc2_hsotg *hsotg); hsotg 1395 drivers/usb/dwc2/core.h void dwc2_gadget_init_lpm(struct dwc2_hsotg *hsotg); hsotg 1396 drivers/usb/dwc2/core.h void dwc2_gadget_program_ref_clk(struct dwc2_hsotg *hsotg); hsotg 1404 drivers/usb/dwc2/core.h static inline int dwc2_gadget_init(struct dwc2_hsotg *hsotg) hsotg 1408 drivers/usb/dwc2/core.h static inline void dwc2_hsotg_core_connect(struct dwc2_hsotg *hsotg) {} hsotg 1410 drivers/usb/dwc2/core.h static inline int dwc2_hsotg_set_test_mode(struct dwc2_hsotg *hsotg, hsotg 1413 drivers/usb/dwc2/core.h #define dwc2_is_device_connected(hsotg) (0) hsotg 1414 drivers/usb/dwc2/core.h static inline int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg) hsotg 1416 drivers/usb/dwc2/core.h static inline int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg, hsotg 1419 drivers/usb/dwc2/core.h static inline int dwc2_gadget_enter_hibernation(struct dwc2_hsotg *hsotg) hsotg 1421 drivers/usb/dwc2/core.h static inline int dwc2_gadget_exit_hibernation(struct dwc2_hsotg *hsotg, hsotg 1424 drivers/usb/dwc2/core.h static inline int dwc2_hsotg_tx_fifo_count(struct dwc2_hsotg *hsotg) hsotg 1426 drivers/usb/dwc2/core.h static inline int dwc2_hsotg_tx_fifo_total_depth(struct dwc2_hsotg *hsotg) hsotg 1428 drivers/usb/dwc2/core.h static inline int dwc2_hsotg_tx_fifo_average_depth(struct dwc2_hsotg *hsotg) hsotg 1430 drivers/usb/dwc2/core.h static inline void dwc2_gadget_init_lpm(struct dwc2_hsotg *hsotg) {} hsotg 1431 drivers/usb/dwc2/core.h static inline void dwc2_gadget_program_ref_clk(struct dwc2_hsotg *hsotg) {} hsotg 1435 drivers/usb/dwc2/core.h int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg); hsotg 1436 drivers/usb/dwc2/core.h int dwc2_hcd_get_future_frame_number(struct dwc2_hsotg *hsotg, int us); hsotg 1437 drivers/usb/dwc2/core.h void dwc2_hcd_connect(struct dwc2_hsotg *hsotg); hsotg 1438 drivers/usb/dwc2/core.h void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg, bool force); hsotg 1439 drivers/usb/dwc2/core.h void dwc2_hcd_start(struct dwc2_hsotg *hsotg); hsotg 1440 drivers/usb/dwc2/core.h int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup); hsotg 1441 drivers/usb/dwc2/core.h int dwc2_backup_host_registers(struct dwc2_hsotg *hsotg); hsotg 1442 drivers/usb/dwc2/core.h int dwc2_restore_host_registers(struct dwc2_hsotg *hsotg); hsotg 1443 drivers/usb/dwc2/core.h int dwc2_host_enter_hibernation(struct dwc2_hsotg *hsotg); hsotg 1444 drivers/usb/dwc2/core.h int dwc2_host_exit_hibernation(struct dwc2_hsotg *hsotg, hsotg 1447 drivers/usb/dwc2/core.h static inline void dwc2_host_schedule_phy_reset(struct dwc2_hsotg *hsotg) hsotg 1448 drivers/usb/dwc2/core.h { schedule_work(&hsotg->phy_reset_work); } hsotg 1450 drivers/usb/dwc2/core.h static inline int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg) hsotg 1452 drivers/usb/dwc2/core.h static inline int dwc2_hcd_get_future_frame_number(struct dwc2_hsotg *hsotg, hsotg 1455 drivers/usb/dwc2/core.h static inline void dwc2_hcd_connect(struct dwc2_hsotg *hsotg) {} hsotg 1456 drivers/usb/dwc2/core.h static inline void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg, bool force) {} hsotg 1457 drivers/usb/dwc2/core.h static inline void dwc2_hcd_start(struct dwc2_hsotg *hsotg) {} hsotg 1458 drivers/usb/dwc2/core.h static inline void dwc2_hcd_remove(struct dwc2_hsotg *hsotg) {} hsotg 1459 drivers/usb/dwc2/core.h static inline int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup) hsotg 1461 drivers/usb/dwc2/core.h static inline int dwc2_hcd_init(struct dwc2_hsotg *hsotg) hsotg 1463 drivers/usb/dwc2/core.h static inline int dwc2_backup_host_registers(struct dwc2_hsotg *hsotg) hsotg 1465 drivers/usb/dwc2/core.h static inline int dwc2_restore_host_registers(struct dwc2_hsotg *hsotg) hsotg 1467 drivers/usb/dwc2/core.h static inline int dwc2_host_enter_hibernation(struct dwc2_hsotg *hsotg) hsotg 1469 drivers/usb/dwc2/core.h static inline int dwc2_host_exit_hibernation(struct dwc2_hsotg *hsotg, hsotg 1474 drivers/usb/dwc2/core.h static inline void dwc2_host_schedule_phy_reset(struct dwc2_hsotg *hsotg) {} hsotg 57 drivers/usb/dwc2/core_intr.c static const char *dwc2_op_state_str(struct dwc2_hsotg *hsotg) hsotg 59 drivers/usb/dwc2/core_intr.c switch (hsotg->op_state) { hsotg 82 drivers/usb/dwc2/core_intr.c static void dwc2_handle_usb_port_intr(struct dwc2_hsotg *hsotg) hsotg 84 drivers/usb/dwc2/core_intr.c u32 hprt0 = dwc2_readl(hsotg, HPRT0); hsotg 88 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 97 drivers/usb/dwc2/core_intr.c static void dwc2_handle_mode_mismatch_intr(struct dwc2_hsotg *hsotg) hsotg 100 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, GINTSTS_MODEMIS, GINTSTS); hsotg 102 drivers/usb/dwc2/core_intr.c dev_warn(hsotg->dev, "Mode Mismatch Interrupt: currently in %s mode\n", hsotg 103 drivers/usb/dwc2/core_intr.c dwc2_is_host_mode(hsotg) ? "Host" : "Device"); hsotg 112 drivers/usb/dwc2/core_intr.c static void dwc2_handle_otg_intr(struct dwc2_hsotg *hsotg) hsotg 118 drivers/usb/dwc2/core_intr.c gotgint = dwc2_readl(hsotg, GOTGINT); hsotg 119 drivers/usb/dwc2/core_intr.c gotgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 120 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "++OTG Interrupt gotgint=%0x [%s]\n", gotgint, hsotg 121 drivers/usb/dwc2/core_intr.c dwc2_op_state_str(hsotg)); hsotg 124 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, hsotg 126 drivers/usb/dwc2/core_intr.c dwc2_op_state_str(hsotg)); hsotg 127 drivers/usb/dwc2/core_intr.c gotgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 129 drivers/usb/dwc2/core_intr.c if (dwc2_is_device_mode(hsotg)) hsotg 130 drivers/usb/dwc2/core_intr.c dwc2_hsotg_disconnect(hsotg); hsotg 132 drivers/usb/dwc2/core_intr.c if (hsotg->op_state == OTG_STATE_B_HOST) { hsotg 133 drivers/usb/dwc2/core_intr.c hsotg->op_state = OTG_STATE_B_PERIPHERAL; hsotg 140 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "Session End Detected\n"); hsotg 141 drivers/usb/dwc2/core_intr.c dev_err(hsotg->dev, hsotg 150 drivers/usb/dwc2/core_intr.c hsotg->lx_state = DWC2_L0; hsotg 153 drivers/usb/dwc2/core_intr.c gotgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 155 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, gotgctl, GOTGCTL); hsotg 159 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, hsotg 161 drivers/usb/dwc2/core_intr.c gotgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 163 drivers/usb/dwc2/core_intr.c if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS && hsotg 164 drivers/usb/dwc2/core_intr.c hsotg->params.i2c_enable) { hsotg 165 drivers/usb/dwc2/core_intr.c hsotg->srp_success = 1; hsotg 168 drivers/usb/dwc2/core_intr.c gotgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 170 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, gotgctl, GOTGCTL); hsotg 180 drivers/usb/dwc2/core_intr.c gotgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 185 drivers/usb/dwc2/core_intr.c if (hsotg->hw_params.snpsid >= DWC2_CORE_REV_3_00a) hsotg 188 drivers/usb/dwc2/core_intr.c if (dwc2_is_host_mode(hsotg)) { hsotg 189 drivers/usb/dwc2/core_intr.c hsotg->op_state = OTG_STATE_B_HOST; hsotg 200 drivers/usb/dwc2/core_intr.c gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 202 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, gintmsk, GINTMSK); hsotg 208 drivers/usb/dwc2/core_intr.c spin_unlock(&hsotg->lock); hsotg 211 drivers/usb/dwc2/core_intr.c dwc2_hcd_start(hsotg); hsotg 212 drivers/usb/dwc2/core_intr.c spin_lock(&hsotg->lock); hsotg 213 drivers/usb/dwc2/core_intr.c hsotg->op_state = OTG_STATE_B_HOST; hsotg 216 drivers/usb/dwc2/core_intr.c gotgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 218 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, gotgctl, GOTGCTL); hsotg 219 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "HNP Failed\n"); hsotg 220 drivers/usb/dwc2/core_intr.c dev_err(hsotg->dev, hsotg 232 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, hsotg 234 drivers/usb/dwc2/core_intr.c (dwc2_is_host_mode(hsotg) ? "Host" : "Device")); hsotg 235 drivers/usb/dwc2/core_intr.c if (dwc2_is_device_mode(hsotg)) { hsotg 236 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "a_suspend->a_peripheral (%d)\n", hsotg 237 drivers/usb/dwc2/core_intr.c hsotg->op_state); hsotg 238 drivers/usb/dwc2/core_intr.c spin_unlock(&hsotg->lock); hsotg 239 drivers/usb/dwc2/core_intr.c dwc2_hcd_disconnect(hsotg, false); hsotg 240 drivers/usb/dwc2/core_intr.c spin_lock(&hsotg->lock); hsotg 241 drivers/usb/dwc2/core_intr.c hsotg->op_state = OTG_STATE_A_PERIPHERAL; hsotg 244 drivers/usb/dwc2/core_intr.c gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 246 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, gintmsk, GINTMSK); hsotg 247 drivers/usb/dwc2/core_intr.c spin_unlock(&hsotg->lock); hsotg 248 drivers/usb/dwc2/core_intr.c dwc2_hcd_start(hsotg); hsotg 249 drivers/usb/dwc2/core_intr.c spin_lock(&hsotg->lock); hsotg 250 drivers/usb/dwc2/core_intr.c hsotg->op_state = OTG_STATE_A_HOST; hsotg 255 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, hsotg 258 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, " ++OTG Interrupt: Debounce Done++\n"); hsotg 261 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, gotgint, GOTGINT); hsotg 274 drivers/usb/dwc2/core_intr.c static void dwc2_handle_conn_id_status_change_intr(struct dwc2_hsotg *hsotg) hsotg 279 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, GINTSTS_CONIDSTSCHNG, GINTSTS); hsotg 282 drivers/usb/dwc2/core_intr.c gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 284 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, gintmsk, GINTMSK); hsotg 286 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, " ++Connector ID Status Change Interrupt++ (%s)\n", hsotg 287 drivers/usb/dwc2/core_intr.c dwc2_is_host_mode(hsotg) ? "Host" : "Device"); hsotg 294 drivers/usb/dwc2/core_intr.c if (hsotg->wq_otg) { hsotg 295 drivers/usb/dwc2/core_intr.c spin_unlock(&hsotg->lock); hsotg 296 drivers/usb/dwc2/core_intr.c queue_work(hsotg->wq_otg, &hsotg->wf_otg); hsotg 297 drivers/usb/dwc2/core_intr.c spin_lock(&hsotg->lock); hsotg 312 drivers/usb/dwc2/core_intr.c static void dwc2_handle_session_req_intr(struct dwc2_hsotg *hsotg) hsotg 317 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, GINTSTS_SESSREQINT, GINTSTS); hsotg 319 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "Session request interrupt - lx_state=%d\n", hsotg 320 drivers/usb/dwc2/core_intr.c hsotg->lx_state); hsotg 322 drivers/usb/dwc2/core_intr.c if (dwc2_is_device_mode(hsotg)) { hsotg 323 drivers/usb/dwc2/core_intr.c if (hsotg->lx_state == DWC2_L2) { hsotg 324 drivers/usb/dwc2/core_intr.c ret = dwc2_exit_partial_power_down(hsotg, true); hsotg 326 drivers/usb/dwc2/core_intr.c dev_err(hsotg->dev, hsotg 334 drivers/usb/dwc2/core_intr.c dwc2_hsotg_disconnect(hsotg); hsotg 344 drivers/usb/dwc2/core_intr.c static void dwc2_wakeup_from_lpm_l1(struct dwc2_hsotg *hsotg) hsotg 349 drivers/usb/dwc2/core_intr.c if (hsotg->lx_state != DWC2_L1) { hsotg 350 drivers/usb/dwc2/core_intr.c dev_err(hsotg->dev, "Core isn't in DWC2_L1 state\n"); hsotg 354 drivers/usb/dwc2/core_intr.c glpmcfg = dwc2_readl(hsotg, GLPMCFG); hsotg 355 drivers/usb/dwc2/core_intr.c if (dwc2_is_device_mode(hsotg)) { hsotg 356 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "Exit from L1 state\n"); hsotg 359 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, glpmcfg, GLPMCFG); hsotg 362 drivers/usb/dwc2/core_intr.c glpmcfg = dwc2_readl(hsotg, GLPMCFG); hsotg 372 drivers/usb/dwc2/core_intr.c dev_err(hsotg->dev, "Failed to exit L1 sleep state in 200us.\n"); hsotg 375 drivers/usb/dwc2/core_intr.c dwc2_gadget_init_lpm(hsotg); hsotg 378 drivers/usb/dwc2/core_intr.c dev_err(hsotg->dev, "Host side LPM is not supported.\n"); hsotg 383 drivers/usb/dwc2/core_intr.c hsotg->lx_state = DWC2_L0; hsotg 386 drivers/usb/dwc2/core_intr.c call_gadget(hsotg, resume); hsotg 396 drivers/usb/dwc2/core_intr.c static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg) hsotg 401 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, GINTSTS_WKUPINT, GINTSTS); hsotg 403 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "++Resume or Remote Wakeup Detected Interrupt++\n"); hsotg 404 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "%s lxstate = %d\n", __func__, hsotg->lx_state); hsotg 406 drivers/usb/dwc2/core_intr.c if (hsotg->lx_state == DWC2_L1) { hsotg 407 drivers/usb/dwc2/core_intr.c dwc2_wakeup_from_lpm_l1(hsotg); hsotg 411 drivers/usb/dwc2/core_intr.c if (dwc2_is_device_mode(hsotg)) { hsotg 412 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "DSTS=0x%0x\n", hsotg 413 drivers/usb/dwc2/core_intr.c dwc2_readl(hsotg, DSTS)); hsotg 414 drivers/usb/dwc2/core_intr.c if (hsotg->lx_state == DWC2_L2) { hsotg 415 drivers/usb/dwc2/core_intr.c u32 dctl = dwc2_readl(hsotg, DCTL); hsotg 419 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, dctl, DCTL); hsotg 420 drivers/usb/dwc2/core_intr.c ret = dwc2_exit_partial_power_down(hsotg, true); hsotg 422 drivers/usb/dwc2/core_intr.c dev_err(hsotg->dev, "exit power_down failed\n"); hsotg 424 drivers/usb/dwc2/core_intr.c call_gadget(hsotg, resume); hsotg 427 drivers/usb/dwc2/core_intr.c hsotg->lx_state = DWC2_L0; hsotg 429 drivers/usb/dwc2/core_intr.c if (hsotg->params.power_down) hsotg 432 drivers/usb/dwc2/core_intr.c if (hsotg->lx_state != DWC2_L1) { hsotg 433 drivers/usb/dwc2/core_intr.c u32 pcgcctl = dwc2_readl(hsotg, PCGCTL); hsotg 437 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 447 drivers/usb/dwc2/core_intr.c if (hsotg->reset_phy_on_wake) hsotg 448 drivers/usb/dwc2/core_intr.c dwc2_host_schedule_phy_reset(hsotg); hsotg 450 drivers/usb/dwc2/core_intr.c mod_timer(&hsotg->wkp_timer, hsotg 454 drivers/usb/dwc2/core_intr.c hsotg->lx_state = DWC2_L0; hsotg 463 drivers/usb/dwc2/core_intr.c static void dwc2_handle_disconnect_intr(struct dwc2_hsotg *hsotg) hsotg 465 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, GINTSTS_DISCONNINT, GINTSTS); hsotg 467 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "++Disconnect Detected Interrupt++ (%s) %s\n", hsotg 468 drivers/usb/dwc2/core_intr.c dwc2_is_host_mode(hsotg) ? "Host" : "Device", hsotg 469 drivers/usb/dwc2/core_intr.c dwc2_op_state_str(hsotg)); hsotg 471 drivers/usb/dwc2/core_intr.c if (hsotg->op_state == OTG_STATE_A_HOST) hsotg 472 drivers/usb/dwc2/core_intr.c dwc2_hcd_disconnect(hsotg, false); hsotg 483 drivers/usb/dwc2/core_intr.c static void dwc2_handle_usb_suspend_intr(struct dwc2_hsotg *hsotg) hsotg 489 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, GINTSTS_USBSUSP, GINTSTS); hsotg 491 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "USB SUSPEND\n"); hsotg 493 drivers/usb/dwc2/core_intr.c if (dwc2_is_device_mode(hsotg)) { hsotg 498 drivers/usb/dwc2/core_intr.c dsts = dwc2_readl(hsotg, DSTS); hsotg 499 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "%s: DSTS=0x%0x\n", __func__, dsts); hsotg 500 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, hsotg 503 drivers/usb/dwc2/core_intr.c hsotg->hw_params.power_optimized, hsotg 504 drivers/usb/dwc2/core_intr.c hsotg->hw_params.hibernation); hsotg 507 drivers/usb/dwc2/core_intr.c if (!dwc2_is_device_connected(hsotg)) { hsotg 508 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, hsotg 513 drivers/usb/dwc2/core_intr.c if (hsotg->hw_params.power_optimized) { hsotg 514 drivers/usb/dwc2/core_intr.c ret = dwc2_enter_partial_power_down(hsotg); hsotg 517 drivers/usb/dwc2/core_intr.c dev_err(hsotg->dev, hsotg 526 drivers/usb/dwc2/core_intr.c if (!IS_ERR_OR_NULL(hsotg->uphy)) hsotg 527 drivers/usb/dwc2/core_intr.c usb_phy_set_suspend(hsotg->uphy, true); hsotg 530 drivers/usb/dwc2/core_intr.c if (hsotg->hw_params.hibernation) { hsotg 531 drivers/usb/dwc2/core_intr.c ret = dwc2_enter_hibernation(hsotg, 0); hsotg 533 drivers/usb/dwc2/core_intr.c dev_err(hsotg->dev, hsotg 542 drivers/usb/dwc2/core_intr.c hsotg->lx_state = DWC2_L2; hsotg 545 drivers/usb/dwc2/core_intr.c call_gadget(hsotg, suspend); hsotg 548 drivers/usb/dwc2/core_intr.c if (hsotg->op_state == OTG_STATE_A_PERIPHERAL) { hsotg 549 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "a_peripheral->a_host\n"); hsotg 552 drivers/usb/dwc2/core_intr.c hsotg->lx_state = DWC2_L2; hsotg 554 drivers/usb/dwc2/core_intr.c spin_unlock(&hsotg->lock); hsotg 555 drivers/usb/dwc2/core_intr.c dwc2_hcd_start(hsotg); hsotg 556 drivers/usb/dwc2/core_intr.c spin_lock(&hsotg->lock); hsotg 557 drivers/usb/dwc2/core_intr.c hsotg->op_state = OTG_STATE_A_HOST; hsotg 568 drivers/usb/dwc2/core_intr.c static void dwc2_handle_lpm_intr(struct dwc2_hsotg *hsotg) hsotg 578 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, GINTSTS_LPMTRANRCVD, GINTSTS); hsotg 580 drivers/usb/dwc2/core_intr.c glpmcfg = dwc2_readl(hsotg, GLPMCFG); hsotg 583 drivers/usb/dwc2/core_intr.c dev_err(hsotg->dev, "Unexpected LPM interrupt\n"); hsotg 593 drivers/usb/dwc2/core_intr.c if (dwc2_is_device_mode(hsotg)) { hsotg 594 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "HIRD_THRES_EN = %d\n", hird_thres_en); hsotg 597 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "L1 with utmi_l1_suspend_n\n"); hsotg 599 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "L1 with utmi_sleep_n\n"); hsotg 601 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "Entering Sleep with L1 Gating\n"); hsotg 603 drivers/usb/dwc2/core_intr.c pcgcctl = dwc2_readl(hsotg, PCGCTL); hsotg 605 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 612 drivers/usb/dwc2/core_intr.c glpmcfg = dwc2_readl(hsotg, GLPMCFG); hsotg 616 drivers/usb/dwc2/core_intr.c hsotg->lx_state = DWC2_L1; hsotg 617 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, hsotg 621 drivers/usb/dwc2/core_intr.c call_gadget(hsotg, suspend); hsotg 635 drivers/usb/dwc2/core_intr.c static u32 dwc2_read_common_intr(struct dwc2_hsotg *hsotg) hsotg 642 drivers/usb/dwc2/core_intr.c gintsts = dwc2_readl(hsotg, GINTSTS); hsotg 643 drivers/usb/dwc2/core_intr.c gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 644 drivers/usb/dwc2/core_intr.c gahbcfg = dwc2_readl(hsotg, GAHBCFG); hsotg 648 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "gintsts=%08x gintmsk=%08x\n", hsotg 663 drivers/usb/dwc2/core_intr.c static void dwc2_handle_gpwrdn_intr(struct dwc2_hsotg *hsotg) hsotg 668 drivers/usb/dwc2/core_intr.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 670 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 672 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, hsotg 680 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "%s: GPWRDN_DISCONN_DET\n", __func__); hsotg 683 drivers/usb/dwc2/core_intr.c gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN); hsotg 685 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN); hsotg 689 drivers/usb/dwc2/core_intr.c gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN); hsotg 691 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN); hsotg 695 drivers/usb/dwc2/core_intr.c gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN); hsotg 697 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN); hsotg 701 drivers/usb/dwc2/core_intr.c gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN); hsotg 703 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN); hsotg 707 drivers/usb/dwc2/core_intr.c gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN); hsotg 709 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN); hsotg 712 drivers/usb/dwc2/core_intr.c gpwrdn_tmp = dwc2_readl(hsotg, GPWRDN); hsotg 714 drivers/usb/dwc2/core_intr.c dwc2_writel(hsotg, gpwrdn_tmp, GPWRDN); hsotg 716 drivers/usb/dwc2/core_intr.c hsotg->hibernated = 0; hsotg 719 drivers/usb/dwc2/core_intr.c hsotg->op_state = OTG_STATE_B_PERIPHERAL; hsotg 720 drivers/usb/dwc2/core_intr.c dwc2_core_init(hsotg, false); hsotg 721 drivers/usb/dwc2/core_intr.c dwc2_enable_global_interrupts(hsotg); hsotg 722 drivers/usb/dwc2/core_intr.c dwc2_hsotg_core_init_disconnected(hsotg, false); hsotg 723 drivers/usb/dwc2/core_intr.c dwc2_hsotg_core_connect(hsotg); hsotg 725 drivers/usb/dwc2/core_intr.c hsotg->op_state = OTG_STATE_A_HOST; hsotg 728 drivers/usb/dwc2/core_intr.c dwc2_core_init(hsotg, false); hsotg 729 drivers/usb/dwc2/core_intr.c dwc2_enable_global_interrupts(hsotg); hsotg 730 drivers/usb/dwc2/core_intr.c dwc2_hcd_start(hsotg); hsotg 736 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "%s: GPWRDN_LNSTSCHG\n", __func__); hsotg 737 drivers/usb/dwc2/core_intr.c if (hsotg->hw_params.hibernation && hsotg 738 drivers/usb/dwc2/core_intr.c hsotg->hibernated) { hsotg 740 drivers/usb/dwc2/core_intr.c dwc2_exit_hibernation(hsotg, 0, 0, 0); hsotg 741 drivers/usb/dwc2/core_intr.c call_gadget(hsotg, resume); hsotg 743 drivers/usb/dwc2/core_intr.c dwc2_exit_hibernation(hsotg, 1, 0, 1); hsotg 748 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "%s: GPWRDN_RST_DET\n", __func__); hsotg 750 drivers/usb/dwc2/core_intr.c dwc2_exit_hibernation(hsotg, 0, 1, 0); hsotg 754 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, "%s: GPWRDN_STS_CHGINT\n", __func__); hsotg 755 drivers/usb/dwc2/core_intr.c if (hsotg->hw_params.hibernation && hsotg 756 drivers/usb/dwc2/core_intr.c hsotg->hibernated) { hsotg 758 drivers/usb/dwc2/core_intr.c dwc2_exit_hibernation(hsotg, 0, 0, 0); hsotg 759 drivers/usb/dwc2/core_intr.c call_gadget(hsotg, resume); hsotg 761 drivers/usb/dwc2/core_intr.c dwc2_exit_hibernation(hsotg, 1, 0, 1); hsotg 782 drivers/usb/dwc2/core_intr.c struct dwc2_hsotg *hsotg = dev; hsotg 786 drivers/usb/dwc2/core_intr.c spin_lock(&hsotg->lock); hsotg 788 drivers/usb/dwc2/core_intr.c if (!dwc2_is_controller_alive(hsotg)) { hsotg 789 drivers/usb/dwc2/core_intr.c dev_warn(hsotg->dev, "Controller is dead\n"); hsotg 794 drivers/usb/dwc2/core_intr.c if (dwc2_is_device_mode(hsotg)) hsotg 795 drivers/usb/dwc2/core_intr.c hsotg->frame_number = (dwc2_readl(hsotg, DSTS) hsotg 798 drivers/usb/dwc2/core_intr.c hsotg->frame_number = (dwc2_readl(hsotg, HFNUM) hsotg 801 drivers/usb/dwc2/core_intr.c gintsts = dwc2_read_common_intr(hsotg); hsotg 806 drivers/usb/dwc2/core_intr.c if (hsotg->hibernated) { hsotg 807 drivers/usb/dwc2/core_intr.c dwc2_handle_gpwrdn_intr(hsotg); hsotg 813 drivers/usb/dwc2/core_intr.c dwc2_handle_mode_mismatch_intr(hsotg); hsotg 815 drivers/usb/dwc2/core_intr.c dwc2_handle_otg_intr(hsotg); hsotg 817 drivers/usb/dwc2/core_intr.c dwc2_handle_conn_id_status_change_intr(hsotg); hsotg 819 drivers/usb/dwc2/core_intr.c dwc2_handle_disconnect_intr(hsotg); hsotg 821 drivers/usb/dwc2/core_intr.c dwc2_handle_session_req_intr(hsotg); hsotg 823 drivers/usb/dwc2/core_intr.c dwc2_handle_wakeup_detected_intr(hsotg); hsotg 825 drivers/usb/dwc2/core_intr.c dwc2_handle_usb_suspend_intr(hsotg); hsotg 827 drivers/usb/dwc2/core_intr.c dwc2_handle_lpm_intr(hsotg); hsotg 834 drivers/usb/dwc2/core_intr.c if (dwc2_is_device_mode(hsotg)) { hsotg 835 drivers/usb/dwc2/core_intr.c dev_dbg(hsotg->dev, hsotg 837 drivers/usb/dwc2/core_intr.c dwc2_handle_usb_port_intr(hsotg); hsotg 843 drivers/usb/dwc2/core_intr.c spin_unlock(&hsotg->lock); hsotg 12 drivers/usb/dwc2/debug.h int dwc2_debugfs_init(struct dwc2_hsotg *hsotg); hsotg 13 drivers/usb/dwc2/debug.h void dwc2_debugfs_exit(struct dwc2_hsotg *hsotg); hsotg 15 drivers/usb/dwc2/debug.h static inline int dwc2_debugfs_init(struct dwc2_hsotg *hsotg) hsotg 17 drivers/usb/dwc2/debug.h static inline void dwc2_debugfs_exit(struct dwc2_hsotg *hsotg) hsotg 31 drivers/usb/dwc2/debugfs.c struct dwc2_hsotg *hsotg = s->private; hsotg 52 drivers/usb/dwc2/debugfs.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 53 drivers/usb/dwc2/debugfs.c dwc2_hsotg_set_test_mode(hsotg, testmode); hsotg 54 drivers/usb/dwc2/debugfs.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 67 drivers/usb/dwc2/debugfs.c struct dwc2_hsotg *hsotg = s->private; hsotg 71 drivers/usb/dwc2/debugfs.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 72 drivers/usb/dwc2/debugfs.c dctl = dwc2_readl(hsotg, DCTL); hsotg 75 drivers/usb/dwc2/debugfs.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 128 drivers/usb/dwc2/debugfs.c struct dwc2_hsotg *hsotg = seq->private; hsotg 132 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, DCFG), hsotg 133 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, DCTL), hsotg 134 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, DSTS)); hsotg 137 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, DIEPMSK), dwc2_readl(hsotg, DOEPMSK)); hsotg 140 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, GINTMSK), hsotg 141 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, GINTSTS)); hsotg 144 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, DAINTMSK), hsotg 145 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, DAINT)); hsotg 148 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, GNPTXSTS), hsotg 149 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, GRXSTSR)); hsotg 153 drivers/usb/dwc2/debugfs.c for (idx = 0; idx < hsotg->num_of_eps; idx++) { hsotg 156 drivers/usb/dwc2/debugfs.c in = dwc2_readl(hsotg, DIEPCTL(idx)); hsotg 157 drivers/usb/dwc2/debugfs.c out = dwc2_readl(hsotg, DOEPCTL(idx)); hsotg 162 drivers/usb/dwc2/debugfs.c in = dwc2_readl(hsotg, DIEPTSIZ(idx)); hsotg 163 drivers/usb/dwc2/debugfs.c out = dwc2_readl(hsotg, DOEPTSIZ(idx)); hsotg 185 drivers/usb/dwc2/debugfs.c struct dwc2_hsotg *hsotg = seq->private; hsotg 190 drivers/usb/dwc2/debugfs.c seq_printf(seq, "RXFIFO: Size %d\n", dwc2_readl(hsotg, GRXFSIZ)); hsotg 192 drivers/usb/dwc2/debugfs.c val = dwc2_readl(hsotg, GNPTXFSIZ); hsotg 199 drivers/usb/dwc2/debugfs.c for (idx = 1; idx < hsotg->num_of_eps; idx++) { hsotg 200 drivers/usb/dwc2/debugfs.c val = dwc2_readl(hsotg, DPTXFSIZN(idx)); hsotg 227 drivers/usb/dwc2/debugfs.c struct dwc2_hsotg *hsotg = ep->parent; hsotg 239 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, DIEPCTL(index)), hsotg 240 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, DOEPCTL(index))); hsotg 243 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, DIEPDMA(index)), hsotg 244 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, DOEPDMA(index))); hsotg 247 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, DIEPINT(index)), hsotg 248 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, DOEPINT(index))); hsotg 251 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, DIEPTSIZ(index)), hsotg 252 drivers/usb/dwc2/debugfs.c dwc2_readl(hsotg, DOEPTSIZ(index))); hsotg 261 drivers/usb/dwc2/debugfs.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 276 drivers/usb/dwc2/debugfs.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 291 drivers/usb/dwc2/debugfs.c static void dwc2_hsotg_create_debug(struct dwc2_hsotg *hsotg) hsotg 296 drivers/usb/dwc2/debugfs.c root = hsotg->debug_root; hsotg 299 drivers/usb/dwc2/debugfs.c debugfs_create_file("state", 0444, root, hsotg, &state_fops); hsotg 300 drivers/usb/dwc2/debugfs.c debugfs_create_file("testmode", 0644, root, hsotg, &testmode_fops); hsotg 301 drivers/usb/dwc2/debugfs.c debugfs_create_file("fifo", 0444, root, hsotg, &fifo_fops); hsotg 304 drivers/usb/dwc2/debugfs.c for (epidx = 0; epidx < hsotg->num_of_eps; epidx++) { hsotg 307 drivers/usb/dwc2/debugfs.c ep = hsotg->eps_out[epidx]; hsotg 312 drivers/usb/dwc2/debugfs.c for (epidx = 1; epidx < hsotg->num_of_eps; epidx++) { hsotg 315 drivers/usb/dwc2/debugfs.c ep = hsotg->eps_in[epidx]; hsotg 321 drivers/usb/dwc2/debugfs.c static inline void dwc2_hsotg_create_debug(struct dwc2_hsotg *hsotg) {} hsotg 668 drivers/usb/dwc2/debugfs.c struct dwc2_hsotg *hsotg = seq->private; hsotg 669 drivers/usb/dwc2/debugfs.c struct dwc2_core_params *p = &hsotg->params; hsotg 724 drivers/usb/dwc2/debugfs.c struct dwc2_hsotg *hsotg = seq->private; hsotg 725 drivers/usb/dwc2/debugfs.c struct dwc2_hw_params *hw = &hsotg->hw_params; hsotg 759 drivers/usb/dwc2/debugfs.c struct dwc2_hsotg *hsotg = seq->private; hsotg 762 drivers/usb/dwc2/debugfs.c device_property_read_string(hsotg->dev, "dr_mode", &dr_mode); hsotg 768 drivers/usb/dwc2/debugfs.c int dwc2_debugfs_init(struct dwc2_hsotg *hsotg) hsotg 773 drivers/usb/dwc2/debugfs.c root = debugfs_create_dir(dev_name(hsotg->dev), NULL); hsotg 774 drivers/usb/dwc2/debugfs.c hsotg->debug_root = root; hsotg 776 drivers/usb/dwc2/debugfs.c debugfs_create_file("params", 0444, root, hsotg, ¶ms_fops); hsotg 777 drivers/usb/dwc2/debugfs.c debugfs_create_file("hw_params", 0444, root, hsotg, &hw_params_fops); hsotg 778 drivers/usb/dwc2/debugfs.c debugfs_create_file("dr_mode", 0444, root, hsotg, &dr_mode_fops); hsotg 781 drivers/usb/dwc2/debugfs.c dwc2_hsotg_create_debug(hsotg); hsotg 783 drivers/usb/dwc2/debugfs.c hsotg->regset = devm_kzalloc(hsotg->dev, sizeof(*hsotg->regset), hsotg 785 drivers/usb/dwc2/debugfs.c if (!hsotg->regset) { hsotg 790 drivers/usb/dwc2/debugfs.c hsotg->regset->regs = dwc2_regs; hsotg 791 drivers/usb/dwc2/debugfs.c hsotg->regset->nregs = ARRAY_SIZE(dwc2_regs); hsotg 792 drivers/usb/dwc2/debugfs.c hsotg->regset->base = hsotg->regs; hsotg 794 drivers/usb/dwc2/debugfs.c debugfs_create_regset32("regdump", 0444, root, hsotg->regset); hsotg 798 drivers/usb/dwc2/debugfs.c debugfs_remove_recursive(hsotg->debug_root); hsotg 802 drivers/usb/dwc2/debugfs.c void dwc2_debugfs_exit(struct dwc2_hsotg *hsotg) hsotg 804 drivers/usb/dwc2/debugfs.c debugfs_remove_recursive(hsotg->debug_root); hsotg 805 drivers/usb/dwc2/debugfs.c hsotg->debug_root = NULL; hsotg 52 drivers/usb/dwc2/gadget.c static inline void dwc2_set_bit(struct dwc2_hsotg *hsotg, u32 offset, u32 val) hsotg 54 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dwc2_readl(hsotg, offset) | val, offset); hsotg 57 drivers/usb/dwc2/gadget.c static inline void dwc2_clear_bit(struct dwc2_hsotg *hsotg, u32 offset, u32 val) hsotg 59 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dwc2_readl(hsotg, offset) & ~val, offset); hsotg 62 drivers/usb/dwc2/gadget.c static inline struct dwc2_hsotg_ep *index_to_ep(struct dwc2_hsotg *hsotg, hsotg 66 drivers/usb/dwc2/gadget.c return hsotg->eps_in[ep_index]; hsotg 68 drivers/usb/dwc2/gadget.c return hsotg->eps_out[ep_index]; hsotg 72 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_dump(struct dwc2_hsotg *hsotg); hsotg 93 drivers/usb/dwc2/gadget.c static inline bool using_dma(struct dwc2_hsotg *hsotg) hsotg 95 drivers/usb/dwc2/gadget.c return hsotg->params.g_dma; hsotg 104 drivers/usb/dwc2/gadget.c static inline bool using_desc_dma(struct dwc2_hsotg *hsotg) hsotg 106 drivers/usb/dwc2/gadget.c return hsotg->params.g_dma_desc; hsotg 150 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_en_gsint(struct dwc2_hsotg *hsotg, u32 ints) hsotg 152 drivers/usb/dwc2/gadget.c u32 gsintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 158 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "gsintmsk now 0x%08x\n", new_gsintmsk); hsotg 159 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, new_gsintmsk, GINTMSK); hsotg 168 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_disable_gsint(struct dwc2_hsotg *hsotg, u32 ints) hsotg 170 drivers/usb/dwc2/gadget.c u32 gsintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 176 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, new_gsintmsk, GINTMSK); hsotg 189 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_ctrl_epint(struct dwc2_hsotg *hsotg, hsotg 201 drivers/usb/dwc2/gadget.c daint = dwc2_readl(hsotg, DAINTMSK); hsotg 206 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, daint, DAINTMSK); hsotg 215 drivers/usb/dwc2/gadget.c int dwc2_hsotg_tx_fifo_count(struct dwc2_hsotg *hsotg) hsotg 217 drivers/usb/dwc2/gadget.c if (hsotg->hw_params.en_multiple_tx_fifo) hsotg 219 drivers/usb/dwc2/gadget.c return hsotg->hw_params.num_dev_in_eps; hsotg 222 drivers/usb/dwc2/gadget.c return hsotg->hw_params.num_dev_perio_in_ep; hsotg 231 drivers/usb/dwc2/gadget.c int dwc2_hsotg_tx_fifo_total_depth(struct dwc2_hsotg *hsotg) hsotg 237 drivers/usb/dwc2/gadget.c np_tx_fifo_size = min_t(u32, hsotg->hw_params.dev_nperio_tx_fifo_size, hsotg 238 drivers/usb/dwc2/gadget.c hsotg->params.g_np_tx_fifo_size); hsotg 241 drivers/usb/dwc2/gadget.c tx_addr_max = hsotg->hw_params.total_fifo_size; hsotg 243 drivers/usb/dwc2/gadget.c addr = hsotg->params.g_rx_fifo_size + np_tx_fifo_size; hsotg 256 drivers/usb/dwc2/gadget.c static void dwc2_gadget_wkup_alert_handler(struct dwc2_hsotg *hsotg) hsotg 261 drivers/usb/dwc2/gadget.c gintsts2 = dwc2_readl(hsotg, GINTSTS2); hsotg 262 drivers/usb/dwc2/gadget.c gintmsk2 = dwc2_readl(hsotg, GINTMSK2); hsotg 265 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: Wkup_Alert_Int\n", __func__); hsotg 266 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, GINTSTS2, GINTSTS2_WKUP_ALERT_INT); hsotg 267 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DCTL, DCTL_RMTWKUPSIG); hsotg 277 drivers/usb/dwc2/gadget.c int dwc2_hsotg_tx_fifo_average_depth(struct dwc2_hsotg *hsotg) hsotg 282 drivers/usb/dwc2/gadget.c tx_fifo_depth = dwc2_hsotg_tx_fifo_total_depth(hsotg); hsotg 284 drivers/usb/dwc2/gadget.c tx_fifo_count = dwc2_hsotg_tx_fifo_count(hsotg); hsotg 296 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_init_fifo(struct dwc2_hsotg *hsotg) hsotg 303 drivers/usb/dwc2/gadget.c u32 *txfsz = hsotg->params.g_tx_fifo_size; hsotg 306 drivers/usb/dwc2/gadget.c WARN_ON(hsotg->fifo_map); hsotg 307 drivers/usb/dwc2/gadget.c hsotg->fifo_map = 0; hsotg 310 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, hsotg->params.g_rx_fifo_size, GRXFSIZ); hsotg 311 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, (hsotg->params.g_rx_fifo_size << hsotg 313 drivers/usb/dwc2/gadget.c (hsotg->params.g_np_tx_fifo_size << FIFOSIZE_DEPTH_SHIFT), hsotg 324 drivers/usb/dwc2/gadget.c addr = hsotg->params.g_rx_fifo_size + hsotg->params.g_np_tx_fifo_size; hsotg 336 drivers/usb/dwc2/gadget.c WARN_ONCE(addr + txfsz[ep] > hsotg->fifo_mem, hsotg 340 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, val, DPTXFSIZN(ep)); hsotg 341 drivers/usb/dwc2/gadget.c val = dwc2_readl(hsotg, DPTXFSIZN(ep)); hsotg 344 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, hsotg->hw_params.total_fifo_size | hsotg 352 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, GRSTCTL_TXFNUM(0x10) | GRSTCTL_TXFFLSH | hsotg 358 drivers/usb/dwc2/gadget.c val = dwc2_readl(hsotg, GRSTCTL); hsotg 364 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, hsotg 373 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "FIFOs reset, timeout at %d\n", timeout); hsotg 418 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_unmap_dma(struct dwc2_hsotg *hsotg, hsotg 424 drivers/usb/dwc2/gadget.c usb_gadget_unmap_request(&hsotg->gadget, req, hs_ep->dir_in); hsotg 435 drivers/usb/dwc2/gadget.c static int dwc2_gadget_alloc_ctrl_desc_chains(struct dwc2_hsotg *hsotg) hsotg 437 drivers/usb/dwc2/gadget.c hsotg->setup_desc[0] = hsotg 438 drivers/usb/dwc2/gadget.c dmam_alloc_coherent(hsotg->dev, hsotg 440 drivers/usb/dwc2/gadget.c &hsotg->setup_desc_dma[0], hsotg 442 drivers/usb/dwc2/gadget.c if (!hsotg->setup_desc[0]) hsotg 445 drivers/usb/dwc2/gadget.c hsotg->setup_desc[1] = hsotg 446 drivers/usb/dwc2/gadget.c dmam_alloc_coherent(hsotg->dev, hsotg 448 drivers/usb/dwc2/gadget.c &hsotg->setup_desc_dma[1], hsotg 450 drivers/usb/dwc2/gadget.c if (!hsotg->setup_desc[1]) hsotg 453 drivers/usb/dwc2/gadget.c hsotg->ctrl_in_desc = hsotg 454 drivers/usb/dwc2/gadget.c dmam_alloc_coherent(hsotg->dev, hsotg 456 drivers/usb/dwc2/gadget.c &hsotg->ctrl_in_desc_dma, hsotg 458 drivers/usb/dwc2/gadget.c if (!hsotg->ctrl_in_desc) hsotg 461 drivers/usb/dwc2/gadget.c hsotg->ctrl_out_desc = hsotg 462 drivers/usb/dwc2/gadget.c dmam_alloc_coherent(hsotg->dev, hsotg 464 drivers/usb/dwc2/gadget.c &hsotg->ctrl_out_desc_dma, hsotg 466 drivers/usb/dwc2/gadget.c if (!hsotg->ctrl_out_desc) hsotg 491 drivers/usb/dwc2/gadget.c static int dwc2_hsotg_write_fifo(struct dwc2_hsotg *hsotg, hsotg 496 drivers/usb/dwc2/gadget.c u32 gnptxsts = dwc2_readl(hsotg, GNPTXSTS); hsotg 510 drivers/usb/dwc2/gadget.c if (periodic && !hsotg->dedicated_fifos) { hsotg 511 drivers/usb/dwc2/gadget.c u32 epsize = dwc2_readl(hsotg, DIEPTSIZ(hs_ep->index)); hsotg 527 drivers/usb/dwc2/gadget.c dwc2_hsotg_en_gsint(hsotg, GINTSTS_PTXFEMP); hsotg 531 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: left=%d, load=%d, fifo=%d, size %d\n", hsotg 540 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: => can_write1=%d\n", hsotg 544 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: => can_write2=%d\n", hsotg 548 drivers/usb/dwc2/gadget.c dwc2_hsotg_en_gsint(hsotg, GINTSTS_PTXFEMP); hsotg 551 drivers/usb/dwc2/gadget.c } else if (hsotg->dedicated_fifos && hs_ep->index != 0) { hsotg 552 drivers/usb/dwc2/gadget.c can_write = dwc2_readl(hsotg, hsotg 559 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, hsotg 563 drivers/usb/dwc2/gadget.c dwc2_hsotg_en_gsint(hsotg, GINTSTS_NPTXFEMP); hsotg 573 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: GNPTXSTS=%08x, can=%d, to=%d, max_transfer %d\n", hsotg 593 drivers/usb/dwc2/gadget.c if (!hsotg->dedicated_fifos) hsotg 594 drivers/usb/dwc2/gadget.c dwc2_hsotg_en_gsint(hsotg, hsotg 622 drivers/usb/dwc2/gadget.c if (!hsotg->dedicated_fifos) hsotg 623 drivers/usb/dwc2/gadget.c dwc2_hsotg_en_gsint(hsotg, hsotg 628 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "write %d/%d, can_write %d, done %d\n", hsotg 643 drivers/usb/dwc2/gadget.c dwc2_writel_rep(hsotg, EPFIFO(hs_ep->index), data, to_write); hsotg 693 drivers/usb/dwc2/gadget.c static u32 dwc2_hsotg_read_frameno(struct dwc2_hsotg *hsotg) hsotg 697 drivers/usb/dwc2/gadget.c dsts = dwc2_readl(hsotg, DSTS); hsotg 883 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = hs_ep->parent; hsotg 897 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: desc chain full\n", __func__); hsotg 905 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: Filling ep %d, dir %s isoc desc # %d\n", hsotg 953 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = hs_ep->parent; hsotg 965 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: No requests in queue\n", __func__); hsotg 996 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, hs_ep->desc_list_dma, dma_reg); hsotg 998 drivers/usb/dwc2/gadget.c ctrl = dwc2_readl(hsotg, depctl); hsotg 1000 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, ctrl, depctl); hsotg 1013 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg, hsotg 1032 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: active request\n", __func__); hsotg 1036 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, hsotg 1047 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x, ep %d, dir %s\n", hsotg 1048 drivers/usb/dwc2/gadget.c __func__, dwc2_readl(hsotg, epctrl_reg), index, hsotg 1052 drivers/usb/dwc2/gadget.c ctrl = dwc2_readl(hsotg, epctrl_reg); hsotg 1055 drivers/usb/dwc2/gadget.c dev_warn(hsotg->dev, "%s: ep%d is stalled\n", __func__, index); hsotg 1060 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "ureq->length:%d ureq->actual:%d\n", hsotg 1063 drivers/usb/dwc2/gadget.c if (!using_desc_dma(hsotg)) hsotg 1071 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: length %d, max-req %d, r %d\n", hsotg 1108 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: %d@%d/%d, 0x%08x => 0x%08x\n", hsotg 1114 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg)) { hsotg 1131 drivers/usb/dwc2/gadget.c if (!index && hsotg->ep0_state == DWC2_EP0_DATA_OUT && hsotg 1140 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, hs_ep->desc_list_dma, dma_reg); hsotg 1142 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: %08x pad => 0x%08x\n", hsotg 1146 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, epsize, epsize_reg); hsotg 1148 drivers/usb/dwc2/gadget.c if (using_dma(hsotg) && !continuing && (length != 0)) { hsotg 1154 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, ureq->dma, dma_reg); hsotg 1156 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: %pad => 0x%08x\n", hsotg 1162 drivers/usb/dwc2/gadget.c hs_ep->target_frame = dwc2_hsotg_read_frameno(hsotg); hsotg 1173 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "ep0 state:%d\n", hsotg->ep0_state); hsotg 1176 drivers/usb/dwc2/gadget.c if (!(index == 0 && hsotg->ep0_state == DWC2_EP0_SETUP)) hsotg 1179 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl); hsotg 1180 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, ctrl, epctrl_reg); hsotg 1190 drivers/usb/dwc2/gadget.c if (dir_in && !using_dma(hsotg)) { hsotg 1194 drivers/usb/dwc2/gadget.c dwc2_hsotg_write_fifo(hsotg, hs_ep, hs_req); hsotg 1203 drivers/usb/dwc2/gadget.c if (!(dwc2_readl(hsotg, epctrl_reg) & DXEPCTL_EPENA)) hsotg 1204 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, hsotg 1206 drivers/usb/dwc2/gadget.c index, dwc2_readl(hsotg, epctrl_reg)); hsotg 1208 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: DXEPCTL=0x%08x\n", hsotg 1209 drivers/usb/dwc2/gadget.c __func__, dwc2_readl(hsotg, epctrl_reg)); hsotg 1212 drivers/usb/dwc2/gadget.c dwc2_hsotg_ctrl_epint(hsotg, hs_ep->index, hs_ep->dir_in, 1); hsotg 1227 drivers/usb/dwc2/gadget.c static int dwc2_hsotg_map_dma(struct dwc2_hsotg *hsotg, hsotg 1233 drivers/usb/dwc2/gadget.c ret = usb_gadget_map_request(&hsotg->gadget, req, hs_ep->dir_in); hsotg 1240 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: failed to map buffer %p, %d bytes\n", hsotg 1246 drivers/usb/dwc2/gadget.c static int dwc2_hsotg_handle_unaligned_buf_start(struct dwc2_hsotg *hsotg, hsotg 1253 drivers/usb/dwc2/gadget.c if (!using_dma(hsotg) || !((long)req_buf & 3)) hsotg 1258 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: %s: buf=%p length=%d\n", __func__, hsotg 1264 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, hsotg 1279 drivers/usb/dwc2/gadget.c dwc2_hsotg_handle_unaligned_buf_complete(struct dwc2_hsotg *hsotg, hsotg 1284 drivers/usb/dwc2/gadget.c if (!using_dma(hsotg) || !hs_req->saved_req_buf) hsotg 1287 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: %s: status=%d actual-length=%d\n", __func__, hsotg 1311 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = hs_ep->parent; hsotg 1313 drivers/usb/dwc2/gadget.c u32 current_frame = hsotg->frame_number; hsotg 1334 drivers/usb/dwc2/gadget.c static int dwc2_gadget_set_ep0_desc_chain(struct dwc2_hsotg *hsotg, hsotg 1337 drivers/usb/dwc2/gadget.c switch (hsotg->ep0_state) { hsotg 1340 drivers/usb/dwc2/gadget.c hs_ep->desc_list = hsotg->setup_desc[0]; hsotg 1341 drivers/usb/dwc2/gadget.c hs_ep->desc_list_dma = hsotg->setup_desc_dma[0]; hsotg 1345 drivers/usb/dwc2/gadget.c hs_ep->desc_list = hsotg->ctrl_in_desc; hsotg 1346 drivers/usb/dwc2/gadget.c hs_ep->desc_list_dma = hsotg->ctrl_in_desc_dma; hsotg 1349 drivers/usb/dwc2/gadget.c hs_ep->desc_list = hsotg->ctrl_out_desc; hsotg 1350 drivers/usb/dwc2/gadget.c hs_ep->desc_list_dma = hsotg->ctrl_out_desc_dma; hsotg 1353 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "invalid EP 0 state in queue %d\n", hsotg 1354 drivers/usb/dwc2/gadget.c hsotg->ep0_state); hsotg 1516 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = hs_ep->parent; hsotg 1518 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: ep %p, req %p\n", __func__, ep, req); hsotg 1531 drivers/usb/dwc2/gadget.c static struct dwc2_hsotg_ep *ep_from_windex(struct dwc2_hsotg *hsotg, hsotg 1541 drivers/usb/dwc2/gadget.c if (idx > hsotg->num_of_eps) hsotg 1544 drivers/usb/dwc2/gadget.c ep = index_to_ep(hsotg, idx, dir); hsotg 1558 drivers/usb/dwc2/gadget.c int dwc2_hsotg_set_test_mode(struct dwc2_hsotg *hsotg, int testmode) hsotg 1560 drivers/usb/dwc2/gadget.c int dctl = dwc2_readl(hsotg, DCTL); hsotg 1574 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dctl, DCTL); hsotg 1588 drivers/usb/dwc2/gadget.c static int dwc2_hsotg_send_reply(struct dwc2_hsotg *hsotg, hsotg 1596 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: buff %p, len %d\n", __func__, buff, length); hsotg 1599 drivers/usb/dwc2/gadget.c hsotg->ep0_reply = req; hsotg 1601 drivers/usb/dwc2/gadget.c dev_warn(hsotg->dev, "%s: cannot alloc req\n", __func__); hsotg 1605 drivers/usb/dwc2/gadget.c req->buf = hsotg->ep0_buff; hsotg 1619 drivers/usb/dwc2/gadget.c dev_warn(hsotg->dev, "%s: cannot queue req\n", __func__); hsotg 1631 drivers/usb/dwc2/gadget.c static int dwc2_hsotg_process_req_status(struct dwc2_hsotg *hsotg, hsotg 1634 drivers/usb/dwc2/gadget.c struct dwc2_hsotg_ep *ep0 = hsotg->eps_out[0]; hsotg 1640 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: USB_REQ_GET_STATUS\n", __func__); hsotg 1643 drivers/usb/dwc2/gadget.c dev_warn(hsotg->dev, "%s: direction out?\n", __func__); hsotg 1650 drivers/usb/dwc2/gadget.c status |= hsotg->remote_wakeup_allowed << hsotg 1661 drivers/usb/dwc2/gadget.c ep = ep_from_windex(hsotg, le16_to_cpu(ctrl->wIndex)); hsotg 1675 drivers/usb/dwc2/gadget.c ret = dwc2_hsotg_send_reply(hsotg, ep0, &reply, 2); hsotg 1677 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: failed to send reply\n", __func__); hsotg 1709 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = hs_ep->parent; hsotg 1716 drivers/usb/dwc2/gadget.c dwc2_hsotg_start_req(hsotg, hs_ep, hs_req, false); hsotg 1723 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: No more ISOC-IN requests\n", hsotg 1726 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: No more ISOC-OUT requests\n", hsotg 1728 drivers/usb/dwc2/gadget.c mask = dwc2_readl(hsotg, epmsk_reg); hsotg 1730 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, mask, epmsk_reg); hsotg 1739 drivers/usb/dwc2/gadget.c static int dwc2_hsotg_process_req_feature(struct dwc2_hsotg *hsotg, hsotg 1742 drivers/usb/dwc2/gadget.c struct dwc2_hsotg_ep *ep0 = hsotg->eps_out[0]; hsotg 1752 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: %s_FEATURE\n", hsotg 1764 drivers/usb/dwc2/gadget.c hsotg->remote_wakeup_allowed = 1; hsotg 1766 drivers/usb/dwc2/gadget.c hsotg->remote_wakeup_allowed = 0; hsotg 1775 drivers/usb/dwc2/gadget.c hsotg->test_mode = wIndex >> 8; hsotg 1781 drivers/usb/dwc2/gadget.c ret = dwc2_hsotg_send_reply(hsotg, ep0, NULL, 0); hsotg 1783 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, hsotg 1790 drivers/usb/dwc2/gadget.c ep = ep_from_windex(hsotg, wIndex); hsotg 1792 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: no endpoint for 0x%04x\n", hsotg 1803 drivers/usb/dwc2/gadget.c ret = dwc2_hsotg_send_reply(hsotg, ep0, NULL, 0); hsotg 1805 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, hsotg 1825 drivers/usb/dwc2/gadget.c spin_unlock(&hsotg->lock); hsotg 1828 drivers/usb/dwc2/gadget.c spin_lock(&hsotg->lock); hsotg 1849 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_enqueue_setup(struct dwc2_hsotg *hsotg); hsotg 1857 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_stall_ep0(struct dwc2_hsotg *hsotg) hsotg 1859 drivers/usb/dwc2/gadget.c struct dwc2_hsotg_ep *ep0 = hsotg->eps_out[0]; hsotg 1863 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "ep0 stall (dir=%d)\n", ep0->dir_in); hsotg 1871 drivers/usb/dwc2/gadget.c ctrl = dwc2_readl(hsotg, reg); hsotg 1874 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, ctrl, reg); hsotg 1876 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, hsotg 1878 drivers/usb/dwc2/gadget.c ctrl, reg, dwc2_readl(hsotg, reg)); hsotg 1884 drivers/usb/dwc2/gadget.c dwc2_hsotg_enqueue_setup(hsotg); hsotg 1896 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_process_control(struct dwc2_hsotg *hsotg, hsotg 1899 drivers/usb/dwc2/gadget.c struct dwc2_hsotg_ep *ep0 = hsotg->eps_out[0]; hsotg 1903 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, hsotg 1910 drivers/usb/dwc2/gadget.c hsotg->ep0_state = DWC2_EP0_STATUS_IN; hsotg 1913 drivers/usb/dwc2/gadget.c hsotg->ep0_state = DWC2_EP0_DATA_IN; hsotg 1916 drivers/usb/dwc2/gadget.c hsotg->ep0_state = DWC2_EP0_DATA_OUT; hsotg 1922 drivers/usb/dwc2/gadget.c hsotg->connected = 1; hsotg 1923 drivers/usb/dwc2/gadget.c dcfg = dwc2_readl(hsotg, DCFG); hsotg 1927 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dcfg, DCFG); hsotg 1929 drivers/usb/dwc2/gadget.c dev_info(hsotg->dev, "new address %d\n", ctrl->wValue); hsotg 1931 drivers/usb/dwc2/gadget.c ret = dwc2_hsotg_send_reply(hsotg, ep0, NULL, 0); hsotg 1935 drivers/usb/dwc2/gadget.c ret = dwc2_hsotg_process_req_status(hsotg, ctrl); hsotg 1940 drivers/usb/dwc2/gadget.c ret = dwc2_hsotg_process_req_feature(hsotg, ctrl); hsotg 1947 drivers/usb/dwc2/gadget.c if (ret == 0 && hsotg->driver) { hsotg 1948 drivers/usb/dwc2/gadget.c spin_unlock(&hsotg->lock); hsotg 1949 drivers/usb/dwc2/gadget.c ret = hsotg->driver->setup(&hsotg->gadget, ctrl); hsotg 1950 drivers/usb/dwc2/gadget.c spin_lock(&hsotg->lock); hsotg 1952 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "driver->setup() ret %d\n", ret); hsotg 1955 drivers/usb/dwc2/gadget.c hsotg->delayed_status = false; hsotg 1957 drivers/usb/dwc2/gadget.c hsotg->delayed_status = true; hsotg 1965 drivers/usb/dwc2/gadget.c dwc2_hsotg_stall_ep0(hsotg); hsotg 1980 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = hs_ep->parent; hsotg 1983 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: failed %d\n", __func__, req->status); hsotg 1987 drivers/usb/dwc2/gadget.c spin_lock(&hsotg->lock); hsotg 1989 drivers/usb/dwc2/gadget.c dwc2_hsotg_enqueue_setup(hsotg); hsotg 1991 drivers/usb/dwc2/gadget.c dwc2_hsotg_process_control(hsotg, req->buf); hsotg 1992 drivers/usb/dwc2/gadget.c spin_unlock(&hsotg->lock); hsotg 2002 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_enqueue_setup(struct dwc2_hsotg *hsotg) hsotg 2004 drivers/usb/dwc2/gadget.c struct usb_request *req = hsotg->ctrl_req; hsotg 2008 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: queueing setup request\n", __func__); hsotg 2012 drivers/usb/dwc2/gadget.c req->buf = hsotg->ctrl_buff; hsotg 2016 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s already queued???\n", __func__); hsotg 2020 drivers/usb/dwc2/gadget.c hsotg->eps_out[0]->dir_in = 0; hsotg 2021 drivers/usb/dwc2/gadget.c hsotg->eps_out[0]->send_zlp = 0; hsotg 2022 drivers/usb/dwc2/gadget.c hsotg->ep0_state = DWC2_EP0_SETUP; hsotg 2024 drivers/usb/dwc2/gadget.c ret = dwc2_hsotg_ep_queue(&hsotg->eps_out[0]->ep, req, GFP_ATOMIC); hsotg 2026 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: failed queue (%d)\n", __func__, ret); hsotg 2034 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_program_zlp(struct dwc2_hsotg *hsotg, hsotg 2043 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "Sending zero-length packet on ep%d\n", hsotg 2046 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "Receiving zero-length packet on ep%d\n", hsotg 2048 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg)) { hsotg 2053 drivers/usb/dwc2/gadget.c dwc2_gadget_set_ep0_desc_chain(hsotg, hs_ep); hsotg 2057 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, DXEPTSIZ_MC(1) | DXEPTSIZ_PKTCNT(1) | hsotg 2062 drivers/usb/dwc2/gadget.c ctrl = dwc2_readl(hsotg, epctl_reg); hsotg 2066 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, ctrl, epctl_reg); hsotg 2082 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_complete_request(struct dwc2_hsotg *hsotg, hsotg 2088 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: nothing to complete?\n", __func__); hsotg 2092 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "complete: ep %p %s, req %p, %d => %p\n", hsotg 2103 drivers/usb/dwc2/gadget.c if (using_dma(hsotg)) hsotg 2104 drivers/usb/dwc2/gadget.c dwc2_hsotg_unmap_dma(hsotg, hs_ep, hs_req); hsotg 2106 drivers/usb/dwc2/gadget.c dwc2_hsotg_handle_unaligned_buf_complete(hsotg, hs_ep, hs_req); hsotg 2117 drivers/usb/dwc2/gadget.c spin_unlock(&hsotg->lock); hsotg 2119 drivers/usb/dwc2/gadget.c spin_lock(&hsotg->lock); hsotg 2123 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg) && hs_ep->isochronous) hsotg 2147 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = hs_ep->parent; hsotg 2161 drivers/usb/dwc2/gadget.c dev_warn(hsotg->dev, "%s: ISOC EP queue empty\n", __func__); hsotg 2186 drivers/usb/dwc2/gadget.c dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, 0); hsotg 2206 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = hs_ep->parent; hsotg 2209 drivers/usb/dwc2/gadget.c dwc2_flush_rx_fifo(hsotg); hsotg 2210 drivers/usb/dwc2/gadget.c dwc2_hsotg_complete_request(hsotg, hs_ep, get_ep_head(hs_ep), 0); hsotg 2227 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_rx_data(struct dwc2_hsotg *hsotg, int ep_idx, int size) hsotg 2229 drivers/usb/dwc2/gadget.c struct dwc2_hsotg_ep *hs_ep = hsotg->eps_out[ep_idx]; hsotg 2236 drivers/usb/dwc2/gadget.c u32 epctl = dwc2_readl(hsotg, DOEPCTL(ep_idx)); hsotg 2239 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, hsotg 2245 drivers/usb/dwc2/gadget.c (void)dwc2_readl(hsotg, EPFIFO(ep_idx)); hsotg 2254 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: read %d/%d, done %d/%d\n", hsotg 2275 drivers/usb/dwc2/gadget.c dwc2_readl_rep(hsotg, EPFIFO(ep_idx), hsotg 2291 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_ep0_zlp(struct dwc2_hsotg *hsotg, bool dir_in) hsotg 2294 drivers/usb/dwc2/gadget.c hsotg->eps_out[0]->dir_in = dir_in; hsotg 2295 drivers/usb/dwc2/gadget.c hsotg->ep0_state = dir_in ? DWC2_EP0_STATUS_IN : DWC2_EP0_STATUS_OUT; hsotg 2297 drivers/usb/dwc2/gadget.c dwc2_hsotg_program_zlp(hsotg, hsotg->eps_out[0]); hsotg 2300 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_change_ep_iso_parity(struct dwc2_hsotg *hsotg, hsotg 2305 drivers/usb/dwc2/gadget.c ctrl = dwc2_readl(hsotg, epctl_reg); hsotg 2310 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, ctrl, epctl_reg); hsotg 2322 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = hs_ep->parent; hsotg 2336 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "descriptor %d closed with %x\n", hsotg 2353 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_handle_outdone(struct dwc2_hsotg *hsotg, int epnum) hsotg 2355 drivers/usb/dwc2/gadget.c u32 epsize = dwc2_readl(hsotg, DOEPTSIZ(epnum)); hsotg 2356 drivers/usb/dwc2/gadget.c struct dwc2_hsotg_ep *hs_ep = hsotg->eps_out[epnum]; hsotg 2363 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: no request active\n", __func__); hsotg 2367 drivers/usb/dwc2/gadget.c if (epnum == 0 && hsotg->ep0_state == DWC2_EP0_STATUS_OUT) { hsotg 2368 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "zlp packet received\n"); hsotg 2369 drivers/usb/dwc2/gadget.c dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, 0); hsotg 2370 drivers/usb/dwc2/gadget.c dwc2_hsotg_enqueue_setup(hsotg); hsotg 2374 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg)) hsotg 2377 drivers/usb/dwc2/gadget.c if (using_dma(hsotg)) { hsotg 2397 drivers/usb/dwc2/gadget.c dwc2_hsotg_start_req(hsotg, hs_ep, hs_req, true); hsotg 2402 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: got %d/%d (short not ok) => error\n", hsotg 2412 drivers/usb/dwc2/gadget.c if (!using_desc_dma(hsotg) && epnum == 0 && hsotg 2413 drivers/usb/dwc2/gadget.c hsotg->ep0_state == DWC2_EP0_DATA_OUT) { hsotg 2415 drivers/usb/dwc2/gadget.c if (!hsotg->delayed_status) hsotg 2416 drivers/usb/dwc2/gadget.c dwc2_hsotg_ep0_zlp(hsotg, true); hsotg 2423 drivers/usb/dwc2/gadget.c if (!using_dma(hsotg)) { hsotg 2425 drivers/usb/dwc2/gadget.c dwc2_hsotg_change_ep_iso_parity(hsotg, DOEPCTL(epnum)); hsotg 2431 drivers/usb/dwc2/gadget.c if (!using_desc_dma(hsotg) && hs_ep->isochronous) hsotg 2432 drivers/usb/dwc2/gadget.c req->frame_number = hsotg->frame_number; hsotg 2434 drivers/usb/dwc2/gadget.c dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, result); hsotg 2453 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_handle_rx(struct dwc2_hsotg *hsotg) hsotg 2455 drivers/usb/dwc2/gadget.c u32 grxstsr = dwc2_readl(hsotg, GRXSTSP); hsotg 2458 drivers/usb/dwc2/gadget.c WARN_ON(using_dma(hsotg)); hsotg 2466 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: GRXSTSP=0x%08x (%d@%d)\n", hsotg 2471 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "GLOBALOUTNAK\n"); hsotg 2475 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "OutDone (Frame=0x%08x)\n", hsotg 2476 drivers/usb/dwc2/gadget.c dwc2_hsotg_read_frameno(hsotg)); hsotg 2478 drivers/usb/dwc2/gadget.c if (!using_dma(hsotg)) hsotg 2479 drivers/usb/dwc2/gadget.c dwc2_hsotg_handle_outdone(hsotg, epnum); hsotg 2483 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, hsotg 2485 drivers/usb/dwc2/gadget.c dwc2_hsotg_read_frameno(hsotg), hsotg 2486 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DOEPCTL(0))); hsotg 2492 drivers/usb/dwc2/gadget.c if (hsotg->ep0_state == DWC2_EP0_SETUP) hsotg 2493 drivers/usb/dwc2/gadget.c dwc2_hsotg_handle_outdone(hsotg, epnum); hsotg 2497 drivers/usb/dwc2/gadget.c dwc2_hsotg_rx_data(hsotg, epnum, size); hsotg 2501 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, hsotg 2503 drivers/usb/dwc2/gadget.c dwc2_hsotg_read_frameno(hsotg), hsotg 2504 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DOEPCTL(0))); hsotg 2506 drivers/usb/dwc2/gadget.c WARN_ON(hsotg->ep0_state != DWC2_EP0_SETUP); hsotg 2508 drivers/usb/dwc2/gadget.c dwc2_hsotg_rx_data(hsotg, epnum, size); hsotg 2512 drivers/usb/dwc2/gadget.c dev_warn(hsotg->dev, "%s: unknown status %08x\n", hsotg 2515 drivers/usb/dwc2/gadget.c dwc2_hsotg_dump(hsotg); hsotg 2553 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_set_ep_maxpacket(struct dwc2_hsotg *hsotg, hsotg 2560 drivers/usb/dwc2/gadget.c hs_ep = index_to_ep(hsotg, ep, dir_in); hsotg 2583 drivers/usb/dwc2/gadget.c reg = dwc2_readl(hsotg, DIEPCTL(ep)); hsotg 2586 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, reg, DIEPCTL(ep)); hsotg 2588 drivers/usb/dwc2/gadget.c reg = dwc2_readl(hsotg, DOEPCTL(ep)); hsotg 2591 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, reg, DOEPCTL(ep)); hsotg 2597 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "ep%d: bad mps of %d\n", ep, mps); hsotg 2605 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_txfifo_flush(struct dwc2_hsotg *hsotg, unsigned int idx) hsotg 2607 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, GRSTCTL_TXFNUM(idx) | GRSTCTL_TXFFLSH, hsotg 2611 drivers/usb/dwc2/gadget.c if (dwc2_hsotg_wait_bit_clear(hsotg, GRSTCTL, GRSTCTL_TXFFLSH, 100)) hsotg 2612 drivers/usb/dwc2/gadget.c dev_warn(hsotg->dev, "%s: timeout flushing fifo GRSTCTL_TXFFLSH\n", hsotg 2624 drivers/usb/dwc2/gadget.c static int dwc2_hsotg_trytx(struct dwc2_hsotg *hsotg, hsotg 2635 drivers/usb/dwc2/gadget.c dwc2_hsotg_ctrl_epint(hsotg, hs_ep->index, hsotg 2641 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "trying to write more for ep%d\n", hsotg 2643 drivers/usb/dwc2/gadget.c return dwc2_hsotg_write_fifo(hsotg, hs_ep, hs_req); hsotg 2657 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_complete_in(struct dwc2_hsotg *hsotg, hsotg 2661 drivers/usb/dwc2/gadget.c u32 epsize = dwc2_readl(hsotg, DIEPTSIZ(hs_ep->index)); hsotg 2665 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "XferCompl but no req\n"); hsotg 2670 drivers/usb/dwc2/gadget.c if (hs_ep->index == 0 && hsotg->ep0_state == DWC2_EP0_STATUS_IN) { hsotg 2671 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "zlp packet sent\n"); hsotg 2679 drivers/usb/dwc2/gadget.c dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, 0); hsotg 2680 drivers/usb/dwc2/gadget.c if (hsotg->test_mode) { hsotg 2683 drivers/usb/dwc2/gadget.c ret = dwc2_hsotg_set_test_mode(hsotg, hsotg->test_mode); hsotg 2685 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "Invalid Test #%d\n", hsotg 2686 drivers/usb/dwc2/gadget.c hsotg->test_mode); hsotg 2687 drivers/usb/dwc2/gadget.c dwc2_hsotg_stall_ep0(hsotg); hsotg 2691 drivers/usb/dwc2/gadget.c dwc2_hsotg_enqueue_setup(hsotg); hsotg 2704 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg)) { hsotg 2707 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "error parsing DDMA results %d\n", hsotg 2717 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: adjusting size done %d => %d\n", hsotg 2721 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "req->length:%d req->actual:%d req->zero:%d\n", hsotg 2725 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s trying more for req...\n", __func__); hsotg 2726 drivers/usb/dwc2/gadget.c dwc2_hsotg_start_req(hsotg, hs_ep, hs_req, true); hsotg 2732 drivers/usb/dwc2/gadget.c dwc2_hsotg_program_zlp(hsotg, hs_ep); hsotg 2738 drivers/usb/dwc2/gadget.c if (hs_ep->index == 0 && hsotg->ep0_state == DWC2_EP0_DATA_IN) { hsotg 2740 drivers/usb/dwc2/gadget.c dwc2_hsotg_ep0_zlp(hsotg, false); hsotg 2744 drivers/usb/dwc2/gadget.c dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, 0); hsotg 2756 drivers/usb/dwc2/gadget.c static u32 dwc2_gadget_read_ep_interrupts(struct dwc2_hsotg *hsotg, hsotg 2765 drivers/usb/dwc2/gadget.c mask = dwc2_readl(hsotg, epmsk_reg); hsotg 2766 drivers/usb/dwc2/gadget.c diepempmsk = dwc2_readl(hsotg, DIEPEMPMSK); hsotg 2770 drivers/usb/dwc2/gadget.c ints = dwc2_readl(hsotg, epint_reg); hsotg 2790 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = hs_ep->parent; hsotg 2795 drivers/usb/dwc2/gadget.c int dctl = dwc2_readl(hsotg, DCTL); hsotg 2797 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: EPDisbld\n", __func__); hsotg 2800 drivers/usb/dwc2/gadget.c int epctl = dwc2_readl(hsotg, epctl_reg); hsotg 2802 drivers/usb/dwc2/gadget.c dwc2_hsotg_txfifo_flush(hsotg, hs_ep->fifo_index); hsotg 2805 drivers/usb/dwc2/gadget.c dwc2_hsotg_complete_in(hsotg, hs_ep); hsotg 2810 drivers/usb/dwc2/gadget.c int dctl = dwc2_readl(hsotg, DCTL); hsotg 2813 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dctl, DCTL); hsotg 2820 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dctl, DCTL); hsotg 2827 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: complete_ep 0x%p, ep->queue empty!\n", hsotg 2835 drivers/usb/dwc2/gadget.c dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, hsotg 2839 drivers/usb/dwc2/gadget.c hsotg->frame_number = dwc2_hsotg_read_frameno(hsotg); hsotg 2858 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = ep->parent; hsotg 2865 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg)) { hsotg 2868 drivers/usb/dwc2/gadget.c ep->target_frame = hsotg->frame_number; hsotg 2878 drivers/usb/dwc2/gadget.c ep->target_frame = hsotg->frame_number; hsotg 2881 drivers/usb/dwc2/gadget.c ctrl = dwc2_readl(hsotg, DOEPCTL(ep->index)); hsotg 2887 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, ctrl, DOEPCTL(ep->index)); hsotg 2891 drivers/usb/dwc2/gadget.c doepmsk = dwc2_readl(hsotg, DOEPMSK); hsotg 2893 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, doepmsk, DOEPMSK); hsotg 2912 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = hs_ep->parent; hsotg 2920 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg)) { hsotg 2921 drivers/usb/dwc2/gadget.c hs_ep->target_frame = hsotg->frame_number; hsotg 2927 drivers/usb/dwc2/gadget.c if (hsotg->params.service_interval) { hsotg 2944 drivers/usb/dwc2/gadget.c hs_ep->target_frame = hsotg->frame_number; hsotg 2946 drivers/usb/dwc2/gadget.c u32 ctrl = dwc2_readl(hsotg, hsotg 2953 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, ctrl, DIEPCTL(hs_ep->index)); hsotg 2956 drivers/usb/dwc2/gadget.c dwc2_hsotg_complete_request(hsotg, hs_ep, hsotg 2960 drivers/usb/dwc2/gadget.c if (!using_desc_dma(hsotg)) hsotg 2972 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_epint(struct dwc2_hsotg *hsotg, unsigned int idx, hsotg 2975 drivers/usb/dwc2/gadget.c struct dwc2_hsotg_ep *hs_ep = index_to_ep(hsotg, idx, dir_in); hsotg 2982 drivers/usb/dwc2/gadget.c ints = dwc2_gadget_read_ep_interrupts(hsotg, idx, dir_in); hsotg 2983 drivers/usb/dwc2/gadget.c ctrl = dwc2_readl(hsotg, epctl_reg); hsotg 2986 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, ints, epint_reg); hsotg 2989 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s:Interrupt for unconfigured ep%d(%s)\n", hsotg 2994 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: ep%d(%s) DxEPINT=0x%08x\n", hsotg 3007 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg) && idx == 0 && !hs_ep->dir_in && hsotg 3008 drivers/usb/dwc2/gadget.c hsotg->ep0_state == DWC2_EP0_SETUP && !(ints & DXEPINT_SETUP)) hsotg 3012 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, hsotg 3014 drivers/usb/dwc2/gadget.c __func__, dwc2_readl(hsotg, epctl_reg), hsotg 3015 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, epsiz_reg)); hsotg 3018 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg) && hs_ep->isochronous) { hsotg 3031 drivers/usb/dwc2/gadget.c dwc2_hsotg_complete_in(hsotg, hs_ep); hsotg 3036 drivers/usb/dwc2/gadget.c dwc2_hsotg_enqueue_setup(hsotg); hsotg 3037 drivers/usb/dwc2/gadget.c } else if (using_dma(hsotg)) { hsotg 3045 drivers/usb/dwc2/gadget.c dwc2_hsotg_handle_outdone(hsotg, idx); hsotg 3059 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: AHBErr\n", __func__); hsotg 3062 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: Setup/Timeout\n", __func__); hsotg 3064 drivers/usb/dwc2/gadget.c if (using_dma(hsotg) && idx == 0) { hsotg 3075 drivers/usb/dwc2/gadget.c dwc2_hsotg_handle_outdone(hsotg, 0); hsotg 3080 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: StsPhseRcvd\n", __func__); hsotg 3083 drivers/usb/dwc2/gadget.c if (hsotg->ep0_state == DWC2_EP0_DATA_OUT) { hsotg 3085 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg)) { hsotg 3086 drivers/usb/dwc2/gadget.c if (!hsotg->delayed_status) hsotg 3087 drivers/usb/dwc2/gadget.c dwc2_hsotg_ep0_zlp(hsotg, true); hsotg 3096 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DIEPCTL(0), hsotg 3104 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: B2BSetup/INEPNakEff\n", __func__); hsotg 3107 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: BNA interrupt\n", __func__); hsotg 3115 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: ep%d: INTknTXFEmpMsk\n", hsotg 3121 drivers/usb/dwc2/gadget.c dev_warn(hsotg->dev, "%s: ep%d: INTknEP\n", hsotg 3126 drivers/usb/dwc2/gadget.c if (hsotg->dedicated_fifos && hsotg 3128 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: ep%d: TxFIFOEmpty\n", hsotg 3130 drivers/usb/dwc2/gadget.c if (!using_dma(hsotg)) hsotg 3131 drivers/usb/dwc2/gadget.c dwc2_hsotg_trytx(hsotg, hs_ep); hsotg 3143 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_irq_enumdone(struct dwc2_hsotg *hsotg) hsotg 3145 drivers/usb/dwc2/gadget.c u32 dsts = dwc2_readl(hsotg, DSTS); hsotg 3154 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "EnumDone (DSTS=0x%08x)\n", dsts); hsotg 3166 drivers/usb/dwc2/gadget.c hsotg->gadget.speed = USB_SPEED_FULL; hsotg 3172 drivers/usb/dwc2/gadget.c hsotg->gadget.speed = USB_SPEED_HIGH; hsotg 3178 drivers/usb/dwc2/gadget.c hsotg->gadget.speed = USB_SPEED_LOW; hsotg 3188 drivers/usb/dwc2/gadget.c dev_info(hsotg->dev, "new device is %s\n", hsotg 3189 drivers/usb/dwc2/gadget.c usb_speed_string(hsotg->gadget.speed)); hsotg 3199 drivers/usb/dwc2/gadget.c dwc2_hsotg_set_ep_maxpacket(hsotg, 0, ep0_mps, 0, 1); hsotg 3200 drivers/usb/dwc2/gadget.c dwc2_hsotg_set_ep_maxpacket(hsotg, 0, ep0_mps, 0, 0); hsotg 3201 drivers/usb/dwc2/gadget.c for (i = 1; i < hsotg->num_of_eps; i++) { hsotg 3202 drivers/usb/dwc2/gadget.c if (hsotg->eps_in[i]) hsotg 3203 drivers/usb/dwc2/gadget.c dwc2_hsotg_set_ep_maxpacket(hsotg, i, ep_mps, hsotg 3205 drivers/usb/dwc2/gadget.c if (hsotg->eps_out[i]) hsotg 3206 drivers/usb/dwc2/gadget.c dwc2_hsotg_set_ep_maxpacket(hsotg, i, ep_mps, hsotg 3213 drivers/usb/dwc2/gadget.c dwc2_hsotg_enqueue_setup(hsotg); hsotg 3215 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n", hsotg 3216 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DIEPCTL0), hsotg 3217 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DOEPCTL0)); hsotg 3229 drivers/usb/dwc2/gadget.c static void kill_all_requests(struct dwc2_hsotg *hsotg, hsotg 3240 drivers/usb/dwc2/gadget.c dwc2_hsotg_complete_request(hsotg, ep, req, result); hsotg 3243 drivers/usb/dwc2/gadget.c if (!hsotg->dedicated_fifos) hsotg 3245 drivers/usb/dwc2/gadget.c size = (dwc2_readl(hsotg, DTXFSTS(ep->fifo_index)) & 0xffff) * 4; hsotg 3247 drivers/usb/dwc2/gadget.c dwc2_hsotg_txfifo_flush(hsotg, ep->fifo_index); hsotg 3258 drivers/usb/dwc2/gadget.c void dwc2_hsotg_disconnect(struct dwc2_hsotg *hsotg) hsotg 3262 drivers/usb/dwc2/gadget.c if (!hsotg->connected) hsotg 3265 drivers/usb/dwc2/gadget.c hsotg->connected = 0; hsotg 3266 drivers/usb/dwc2/gadget.c hsotg->test_mode = 0; hsotg 3269 drivers/usb/dwc2/gadget.c for (ep = 0; ep < hsotg->num_of_eps; ep++) { hsotg 3270 drivers/usb/dwc2/gadget.c if (hsotg->eps_in[ep]) hsotg 3271 drivers/usb/dwc2/gadget.c kill_all_requests(hsotg, hsotg->eps_in[ep], hsotg 3273 drivers/usb/dwc2/gadget.c if (hsotg->eps_out[ep]) hsotg 3274 drivers/usb/dwc2/gadget.c kill_all_requests(hsotg, hsotg->eps_out[ep], hsotg 3278 drivers/usb/dwc2/gadget.c call_gadget(hsotg, disconnect); hsotg 3279 drivers/usb/dwc2/gadget.c hsotg->lx_state = DWC2_L3; hsotg 3281 drivers/usb/dwc2/gadget.c usb_gadget_set_state(&hsotg->gadget, USB_STATE_NOTATTACHED); hsotg 3289 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_irq_fifoempty(struct dwc2_hsotg *hsotg, bool periodic) hsotg 3295 drivers/usb/dwc2/gadget.c for (epno = 0; epno < hsotg->num_of_eps; epno++) { hsotg 3296 drivers/usb/dwc2/gadget.c ep = index_to_ep(hsotg, epno, 1); hsotg 3308 drivers/usb/dwc2/gadget.c ret = dwc2_hsotg_trytx(hsotg, ep); hsotg 3327 drivers/usb/dwc2/gadget.c void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg, hsotg 3337 drivers/usb/dwc2/gadget.c kill_all_requests(hsotg, hsotg->eps_out[0], -ECONNRESET); hsotg 3340 drivers/usb/dwc2/gadget.c if (dwc2_core_reset(hsotg, true)) hsotg 3344 drivers/usb/dwc2/gadget.c for (ep = 1; ep < hsotg->num_of_eps; ep++) { hsotg 3345 drivers/usb/dwc2/gadget.c if (hsotg->eps_in[ep]) hsotg 3346 drivers/usb/dwc2/gadget.c dwc2_hsotg_ep_disable(&hsotg->eps_in[ep]->ep); hsotg 3347 drivers/usb/dwc2/gadget.c if (hsotg->eps_out[ep]) hsotg 3348 drivers/usb/dwc2/gadget.c dwc2_hsotg_ep_disable(&hsotg->eps_out[ep]->ep); hsotg 3358 drivers/usb/dwc2/gadget.c usbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 3364 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, usbcfg, GUSBCFG); hsotg 3366 drivers/usb/dwc2/gadget.c dwc2_phy_init(hsotg, true); hsotg 3368 drivers/usb/dwc2/gadget.c dwc2_hsotg_init_fifo(hsotg); hsotg 3371 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DCTL, DCTL_SFTDISCON); hsotg 3375 drivers/usb/dwc2/gadget.c switch (hsotg->params.speed) { hsotg 3380 drivers/usb/dwc2/gadget.c if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS) hsotg 3389 drivers/usb/dwc2/gadget.c if (hsotg->params.ipg_isoc_en) hsotg 3392 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dcfg, DCFG); hsotg 3395 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, 0xffffffff, GOTGINT); hsotg 3398 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, 0xffffffff, GINTSTS); hsotg 3406 drivers/usb/dwc2/gadget.c if (!using_desc_dma(hsotg)) hsotg 3409 drivers/usb/dwc2/gadget.c if (!hsotg->params.external_id_pin_ctl) hsotg 3412 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, intmsk, GINTMSK); hsotg 3414 drivers/usb/dwc2/gadget.c if (using_dma(hsotg)) { hsotg 3415 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, GAHBCFG_GLBL_INTR_EN | GAHBCFG_DMA_EN | hsotg 3416 drivers/usb/dwc2/gadget.c hsotg->params.ahbcfg, hsotg 3420 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg)) hsotg 3421 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DCFG, DCFG_DESCDMA_EN); hsotg 3424 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, ((hsotg->dedicated_fifos) ? hsotg 3436 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, ((hsotg->dedicated_fifos && !using_dma(hsotg)) ? hsotg 3446 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, (using_dma(hsotg) ? (DIEPMSK_XFERCOMPLMSK | hsotg 3453 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg)) { hsotg 3454 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DOEPMSK, DOEPMSK_BNAMSK); hsotg 3455 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DIEPMSK, DIEPMSK_BNAININTRMSK); hsotg 3459 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg) && hsotg->params.service_interval) hsotg 3460 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DCTL, DCTL_SERVICE_INTERVAL_SUPPORTED); hsotg 3462 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, 0, DAINTMSK); hsotg 3464 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n", hsotg 3465 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DIEPCTL0), hsotg 3466 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DOEPCTL0)); hsotg 3469 drivers/usb/dwc2/gadget.c dwc2_hsotg_en_gsint(hsotg, GINTSTS_OEPINT | GINTSTS_IEPINT); hsotg 3476 drivers/usb/dwc2/gadget.c if (!using_dma(hsotg)) hsotg 3477 drivers/usb/dwc2/gadget.c dwc2_hsotg_en_gsint(hsotg, GINTSTS_RXFLVL); hsotg 3480 drivers/usb/dwc2/gadget.c dwc2_hsotg_ctrl_epint(hsotg, 0, 0, 1); hsotg 3481 drivers/usb/dwc2/gadget.c dwc2_hsotg_ctrl_epint(hsotg, 0, 1, 1); hsotg 3484 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DCTL, DCTL_PWRONPRGDONE); hsotg 3486 drivers/usb/dwc2/gadget.c dwc2_clear_bit(hsotg, DCTL, DCTL_PWRONPRGDONE); hsotg 3489 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "DCTL=0x%08x\n", dwc2_readl(hsotg, DCTL)); hsotg 3497 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, DXEPTSIZ_MC(1) | DXEPTSIZ_PKTCNT(1) | hsotg 3500 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dwc2_hsotg_ep0_mps(hsotg->eps_out[0]->ep.maxpacket) | hsotg 3506 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dwc2_hsotg_ep0_mps(hsotg->eps_out[0]->ep.maxpacket) | hsotg 3513 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DCTL, val); hsotg 3516 drivers/usb/dwc2/gadget.c dwc2_gadget_init_lpm(hsotg); hsotg 3519 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg) && hsotg->params.service_interval) hsotg 3520 drivers/usb/dwc2/gadget.c dwc2_gadget_program_ref_clk(hsotg); hsotg 3525 drivers/usb/dwc2/gadget.c hsotg->lx_state = DWC2_L0; hsotg 3527 drivers/usb/dwc2/gadget.c dwc2_hsotg_enqueue_setup(hsotg); hsotg 3529 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n", hsotg 3530 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DIEPCTL0), hsotg 3531 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DOEPCTL0)); hsotg 3534 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_core_disconnect(struct dwc2_hsotg *hsotg) hsotg 3537 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DCTL, DCTL_SFTDISCON); hsotg 3540 drivers/usb/dwc2/gadget.c void dwc2_hsotg_core_connect(struct dwc2_hsotg *hsotg) hsotg 3543 drivers/usb/dwc2/gadget.c dwc2_clear_bit(hsotg, DCTL, DCTL_SFTDISCON); hsotg 3559 drivers/usb/dwc2/gadget.c static void dwc2_gadget_handle_incomplete_isoc_in(struct dwc2_hsotg *hsotg) hsotg 3566 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "Incomplete isoc in interrupt received:\n"); hsotg 3568 drivers/usb/dwc2/gadget.c daintmsk = dwc2_readl(hsotg, DAINTMSK); hsotg 3570 drivers/usb/dwc2/gadget.c for (idx = 1; idx < hsotg->num_of_eps; idx++) { hsotg 3571 drivers/usb/dwc2/gadget.c hs_ep = hsotg->eps_in[idx]; hsotg 3576 drivers/usb/dwc2/gadget.c epctrl = dwc2_readl(hsotg, DIEPCTL(idx)); hsotg 3581 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, epctrl, DIEPCTL(idx)); hsotg 3586 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, GINTSTS_INCOMPL_SOIN, GINTSTS); hsotg 3602 drivers/usb/dwc2/gadget.c static void dwc2_gadget_handle_incomplete_isoc_out(struct dwc2_hsotg *hsotg) hsotg 3611 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: GINTSTS_INCOMPL_SOOUT\n", __func__); hsotg 3613 drivers/usb/dwc2/gadget.c daintmsk = dwc2_readl(hsotg, DAINTMSK); hsotg 3616 drivers/usb/dwc2/gadget.c for (idx = 1; idx < hsotg->num_of_eps; idx++) { hsotg 3617 drivers/usb/dwc2/gadget.c hs_ep = hsotg->eps_out[idx]; hsotg 3622 drivers/usb/dwc2/gadget.c epctrl = dwc2_readl(hsotg, DOEPCTL(idx)); hsotg 3626 drivers/usb/dwc2/gadget.c gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 3628 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, gintmsk, GINTMSK); hsotg 3630 drivers/usb/dwc2/gadget.c gintsts = dwc2_readl(hsotg, GINTSTS); hsotg 3632 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DCTL, DCTL_SGOUTNAK); hsotg 3639 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, GINTSTS_INCOMPL_SOOUT, GINTSTS); hsotg 3649 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = pw; hsotg 3654 drivers/usb/dwc2/gadget.c if (!dwc2_is_device_mode(hsotg)) hsotg 3657 drivers/usb/dwc2/gadget.c spin_lock(&hsotg->lock); hsotg 3659 drivers/usb/dwc2/gadget.c gintsts = dwc2_readl(hsotg, GINTSTS); hsotg 3660 drivers/usb/dwc2/gadget.c gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 3662 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: %08x %08x (%08x) retry %d\n", hsotg 3668 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: USBRstDet\n", __func__); hsotg 3670 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, GINTSTS_RESETDET, GINTSTS); hsotg 3673 drivers/usb/dwc2/gadget.c if (hsotg->lx_state == DWC2_L2) { hsotg 3674 drivers/usb/dwc2/gadget.c dwc2_exit_partial_power_down(hsotg, true); hsotg 3675 drivers/usb/dwc2/gadget.c hsotg->lx_state = DWC2_L0; hsotg 3680 drivers/usb/dwc2/gadget.c u32 usb_status = dwc2_readl(hsotg, GOTGCTL); hsotg 3681 drivers/usb/dwc2/gadget.c u32 connected = hsotg->connected; hsotg 3683 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: USBRst\n", __func__); hsotg 3684 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "GNPTXSTS=%08x\n", hsotg 3685 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, GNPTXSTS)); hsotg 3687 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, GINTSTS_USBRST, GINTSTS); hsotg 3690 drivers/usb/dwc2/gadget.c dwc2_hsotg_disconnect(hsotg); hsotg 3693 drivers/usb/dwc2/gadget.c dwc2_clear_bit(hsotg, DCFG, DCFG_DEVADDR_MASK); hsotg 3696 drivers/usb/dwc2/gadget.c dwc2_hsotg_core_init_disconnected(hsotg, true); hsotg 3700 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, GINTSTS_ENUMDONE, GINTSTS); hsotg 3702 drivers/usb/dwc2/gadget.c dwc2_hsotg_irq_enumdone(hsotg); hsotg 3706 drivers/usb/dwc2/gadget.c u32 daint = dwc2_readl(hsotg, DAINT); hsotg 3707 drivers/usb/dwc2/gadget.c u32 daintmsk = dwc2_readl(hsotg, DAINTMSK); hsotg 3715 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: daint=%08x\n", __func__, daint); hsotg 3717 drivers/usb/dwc2/gadget.c for (ep = 0; ep < hsotg->num_of_eps && daint_out; hsotg 3720 drivers/usb/dwc2/gadget.c dwc2_hsotg_epint(hsotg, ep, 0); hsotg 3723 drivers/usb/dwc2/gadget.c for (ep = 0; ep < hsotg->num_of_eps && daint_in; hsotg 3726 drivers/usb/dwc2/gadget.c dwc2_hsotg_epint(hsotg, ep, 1); hsotg 3733 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "NPTxFEmp\n"); hsotg 3741 drivers/usb/dwc2/gadget.c dwc2_hsotg_disable_gsint(hsotg, GINTSTS_NPTXFEMP); hsotg 3742 drivers/usb/dwc2/gadget.c dwc2_hsotg_irq_fifoempty(hsotg, false); hsotg 3746 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "PTxFEmp\n"); hsotg 3750 drivers/usb/dwc2/gadget.c dwc2_hsotg_disable_gsint(hsotg, GINTSTS_PTXFEMP); hsotg 3751 drivers/usb/dwc2/gadget.c dwc2_hsotg_irq_fifoempty(hsotg, true); hsotg 3761 drivers/usb/dwc2/gadget.c dwc2_hsotg_handle_rx(hsotg); hsotg 3765 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "GINTSTS_ErlySusp\n"); hsotg 3766 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, GINTSTS_ERLYSUSP, GINTSTS); hsotg 3782 drivers/usb/dwc2/gadget.c daintmsk = dwc2_readl(hsotg, DAINTMSK); hsotg 3785 drivers/usb/dwc2/gadget.c gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 3787 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, gintmsk, GINTMSK); hsotg 3789 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "GOUTNakEff triggered\n"); hsotg 3790 drivers/usb/dwc2/gadget.c for (idx = 1; idx < hsotg->num_of_eps; idx++) { hsotg 3791 drivers/usb/dwc2/gadget.c hs_ep = hsotg->eps_out[idx]; hsotg 3796 drivers/usb/dwc2/gadget.c epctrl = dwc2_readl(hsotg, DOEPCTL(idx)); hsotg 3801 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, epctrl, DOEPCTL(idx)); hsotg 3809 drivers/usb/dwc2/gadget.c dev_info(hsotg->dev, "GINNakEff triggered\n"); hsotg 3811 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DCTL, DCTL_CGNPINNAK); hsotg 3813 drivers/usb/dwc2/gadget.c dwc2_hsotg_dump(hsotg); hsotg 3817 drivers/usb/dwc2/gadget.c dwc2_gadget_handle_incomplete_isoc_in(hsotg); hsotg 3820 drivers/usb/dwc2/gadget.c dwc2_gadget_handle_incomplete_isoc_out(hsotg); hsotg 3831 drivers/usb/dwc2/gadget.c if (hsotg->params.service_interval) hsotg 3832 drivers/usb/dwc2/gadget.c dwc2_gadget_wkup_alert_handler(hsotg); hsotg 3834 drivers/usb/dwc2/gadget.c spin_unlock(&hsotg->lock); hsotg 3839 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg, hsotg 3850 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: stopping transfer on %s\n", __func__, hsotg 3854 drivers/usb/dwc2/gadget.c if (hsotg->dedicated_fifos || hs_ep->periodic) { hsotg 3855 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, epctrl_reg, DXEPCTL_SNAK); hsotg 3857 drivers/usb/dwc2/gadget.c if (dwc2_hsotg_wait_bit_set(hsotg, epint_reg, hsotg 3859 drivers/usb/dwc2/gadget.c dev_warn(hsotg->dev, hsotg 3863 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DCTL, DCTL_SGNPINNAK); hsotg 3865 drivers/usb/dwc2/gadget.c if (dwc2_hsotg_wait_bit_set(hsotg, GINTSTS, hsotg 3867 drivers/usb/dwc2/gadget.c dev_warn(hsotg->dev, hsotg 3872 drivers/usb/dwc2/gadget.c if (!(dwc2_readl(hsotg, GINTSTS) & GINTSTS_GOUTNAKEFF)) hsotg 3873 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DCTL, DCTL_SGOUTNAK); hsotg 3876 drivers/usb/dwc2/gadget.c if (dwc2_hsotg_wait_bit_set(hsotg, GINTSTS, hsotg 3878 drivers/usb/dwc2/gadget.c dev_warn(hsotg->dev, "%s: timeout GINTSTS.GOUTNAKEFF\n", hsotg 3883 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, epctrl_reg, DXEPCTL_EPDIS | DXEPCTL_SNAK); hsotg 3886 drivers/usb/dwc2/gadget.c if (dwc2_hsotg_wait_bit_set(hsotg, epint_reg, DXEPINT_EPDISBLD, 100)) hsotg 3887 drivers/usb/dwc2/gadget.c dev_warn(hsotg->dev, hsotg 3891 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, epint_reg, DXEPINT_EPDISBLD); hsotg 3896 drivers/usb/dwc2/gadget.c if (hsotg->dedicated_fifos || hs_ep->periodic) hsotg 3902 drivers/usb/dwc2/gadget.c dwc2_flush_tx_fifo(hsotg, fifo_index); hsotg 3905 drivers/usb/dwc2/gadget.c if (!hsotg->dedicated_fifos && !hs_ep->periodic) hsotg 3906 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DCTL, DCTL_CGNPINNAK); hsotg 3910 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DCTL, DCTL_CGOUTNAK); hsotg 3925 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = hs_ep->parent; hsotg 3939 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, hsotg 3946 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: called for EP 0\n", __func__); hsotg 3952 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: direction mismatch!\n", __func__); hsotg 3961 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg) && ep_type == USB_ENDPOINT_XFER_ISOC && hsotg 3963 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, hsotg 3969 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg) && ep_type == USB_ENDPOINT_XFER_ISOC && hsotg 3971 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, hsotg 3979 drivers/usb/dwc2/gadget.c epctrl = dwc2_readl(hsotg, epctrl_reg); hsotg 3981 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: read DxEPCTL=0x%08x from 0x%08x\n", hsotg 3984 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg) && ep_type == USB_ENDPOINT_XFER_ISOC) hsotg 3990 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg) && !hs_ep->desc_list) { hsotg 3991 drivers/usb/dwc2/gadget.c hs_ep->desc_list = dmam_alloc_coherent(hsotg->dev, hsotg 4000 drivers/usb/dwc2/gadget.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4012 drivers/usb/dwc2/gadget.c dwc2_hsotg_set_ep_maxpacket(hsotg, hs_ep->index, mps, mc, dir_in); hsotg 4031 drivers/usb/dwc2/gadget.c mask = dwc2_readl(hsotg, DIEPMSK); hsotg 4033 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, mask, DIEPMSK); hsotg 4035 drivers/usb/dwc2/gadget.c mask = dwc2_readl(hsotg, DOEPMSK); hsotg 4037 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, mask, DOEPMSK); hsotg 4049 drivers/usb/dwc2/gadget.c if (hsotg->gadget.speed == USB_SPEED_HIGH) hsotg 4064 drivers/usb/dwc2/gadget.c if (dir_in && hsotg->dedicated_fifos) { hsotg 4065 drivers/usb/dwc2/gadget.c unsigned fifo_count = dwc2_hsotg_tx_fifo_count(hsotg); hsotg 4071 drivers/usb/dwc2/gadget.c if (hsotg->fifo_map & (1 << i)) hsotg 4073 drivers/usb/dwc2/gadget.c val = dwc2_readl(hsotg, DPTXFSIZN(i)); hsotg 4084 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, hsotg 4090 drivers/usb/dwc2/gadget.c hsotg->fifo_map |= 1 << fifo_index; hsotg 4106 drivers/usb/dwc2/gadget.c if (hsotg->gadget.speed == USB_SPEED_FULL && hsotg 4112 drivers/usb/dwc2/gadget.c u32 gsnpsid = dwc2_readl(hsotg, GSNPSID); hsotg 4121 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: write DxEPCTL=0x%08x\n", hsotg 4124 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, epctrl, epctrl_reg); hsotg 4125 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: read DxEPCTL=0x%08x\n", hsotg 4126 drivers/usb/dwc2/gadget.c __func__, dwc2_readl(hsotg, epctrl_reg)); hsotg 4129 drivers/usb/dwc2/gadget.c dwc2_hsotg_ctrl_epint(hsotg, index, dir_in, 1); hsotg 4132 drivers/usb/dwc2/gadget.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4135 drivers/usb/dwc2/gadget.c if (ret && using_desc_dma(hsotg) && hs_ep->desc_list) { hsotg 4136 drivers/usb/dwc2/gadget.c dmam_free_coherent(hsotg->dev, desc_num * hsotg 4152 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = hs_ep->parent; hsotg 4158 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s(ep %p)\n", __func__, ep); hsotg 4160 drivers/usb/dwc2/gadget.c if (ep == &hsotg->eps_out[0]->ep) { hsotg 4161 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: called for ep0\n", __func__); hsotg 4165 drivers/usb/dwc2/gadget.c if (hsotg->op_state != OTG_STATE_B_PERIPHERAL) { hsotg 4166 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: called in host mode?\n", __func__); hsotg 4172 drivers/usb/dwc2/gadget.c ctrl = dwc2_readl(hsotg, epctrl_reg); hsotg 4175 drivers/usb/dwc2/gadget.c dwc2_hsotg_ep_stop_xfr(hsotg, hs_ep); hsotg 4181 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl); hsotg 4182 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, ctrl, epctrl_reg); hsotg 4185 drivers/usb/dwc2/gadget.c dwc2_hsotg_ctrl_epint(hsotg, hs_ep->index, hs_ep->dir_in, 0); hsotg 4188 drivers/usb/dwc2/gadget.c kill_all_requests(hsotg, hs_ep, -ESHUTDOWN); hsotg 4190 drivers/usb/dwc2/gadget.c hsotg->fifo_map &= ~(1 << hs_ep->fifo_index); hsotg 4200 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = hs_ep->parent; hsotg 4204 drivers/usb/dwc2/gadget.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4206 drivers/usb/dwc2/gadget.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4370 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_init(struct dwc2_hsotg *hsotg) hsotg 4374 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, DIEPMSK_TIMEOUTMSK | DIEPMSK_AHBERRMSK | hsotg 4378 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, DOEPMSK_SETUPMSK | DOEPMSK_AHBERRMSK | hsotg 4382 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, 0, DAINTMSK); hsotg 4385 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, DCTL, DCTL_SFTDISCON); hsotg 4389 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "GRXFSIZ=0x%08x, GNPTXFSIZ=0x%08x\n", hsotg 4390 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, GRXFSIZ), hsotg 4391 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, GNPTXFSIZ)); hsotg 4393 drivers/usb/dwc2/gadget.c dwc2_hsotg_init_fifo(hsotg); hsotg 4395 drivers/usb/dwc2/gadget.c if (using_dma(hsotg)) hsotg 4396 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, GAHBCFG, GAHBCFG_DMA_EN); hsotg 4410 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = to_hsotg(gadget); hsotg 4414 drivers/usb/dwc2/gadget.c if (!hsotg) { hsotg 4420 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: no driver\n", __func__); hsotg 4425 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: bad speed\n", __func__); hsotg 4428 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: missing entry points\n", __func__); hsotg 4432 drivers/usb/dwc2/gadget.c WARN_ON(hsotg->driver); hsotg 4435 drivers/usb/dwc2/gadget.c hsotg->driver = driver; hsotg 4436 drivers/usb/dwc2/gadget.c hsotg->gadget.dev.of_node = hsotg->dev->of_node; hsotg 4437 drivers/usb/dwc2/gadget.c hsotg->gadget.speed = USB_SPEED_UNKNOWN; hsotg 4439 drivers/usb/dwc2/gadget.c if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) { hsotg 4440 drivers/usb/dwc2/gadget.c ret = dwc2_lowlevel_hw_enable(hsotg); hsotg 4445 drivers/usb/dwc2/gadget.c if (!IS_ERR_OR_NULL(hsotg->uphy)) hsotg 4446 drivers/usb/dwc2/gadget.c otg_set_peripheral(hsotg->uphy->otg, &hsotg->gadget); hsotg 4448 drivers/usb/dwc2/gadget.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4449 drivers/usb/dwc2/gadget.c if (dwc2_hw_is_device(hsotg)) { hsotg 4450 drivers/usb/dwc2/gadget.c dwc2_hsotg_init(hsotg); hsotg 4451 drivers/usb/dwc2/gadget.c dwc2_hsotg_core_init_disconnected(hsotg, false); hsotg 4454 drivers/usb/dwc2/gadget.c hsotg->enabled = 0; hsotg 4455 drivers/usb/dwc2/gadget.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4457 drivers/usb/dwc2/gadget.c gadget->sg_supported = using_desc_dma(hsotg); hsotg 4458 drivers/usb/dwc2/gadget.c dev_info(hsotg->dev, "bound driver %s\n", driver->driver.name); hsotg 4463 drivers/usb/dwc2/gadget.c hsotg->driver = NULL; hsotg 4475 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = to_hsotg(gadget); hsotg 4479 drivers/usb/dwc2/gadget.c if (!hsotg) hsotg 4483 drivers/usb/dwc2/gadget.c for (ep = 1; ep < hsotg->num_of_eps; ep++) { hsotg 4484 drivers/usb/dwc2/gadget.c if (hsotg->eps_in[ep]) hsotg 4485 drivers/usb/dwc2/gadget.c dwc2_hsotg_ep_disable_lock(&hsotg->eps_in[ep]->ep); hsotg 4486 drivers/usb/dwc2/gadget.c if (hsotg->eps_out[ep]) hsotg 4487 drivers/usb/dwc2/gadget.c dwc2_hsotg_ep_disable_lock(&hsotg->eps_out[ep]->ep); hsotg 4490 drivers/usb/dwc2/gadget.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4492 drivers/usb/dwc2/gadget.c hsotg->driver = NULL; hsotg 4493 drivers/usb/dwc2/gadget.c hsotg->gadget.speed = USB_SPEED_UNKNOWN; hsotg 4494 drivers/usb/dwc2/gadget.c hsotg->enabled = 0; hsotg 4496 drivers/usb/dwc2/gadget.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4498 drivers/usb/dwc2/gadget.c if (!IS_ERR_OR_NULL(hsotg->uphy)) hsotg 4499 drivers/usb/dwc2/gadget.c otg_set_peripheral(hsotg->uphy->otg, NULL); hsotg 4501 drivers/usb/dwc2/gadget.c if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) hsotg 4502 drivers/usb/dwc2/gadget.c dwc2_lowlevel_hw_disable(hsotg); hsotg 4527 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = to_hsotg(gadget); hsotg 4530 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: is_on: %d op_state: %d\n", __func__, is_on, hsotg 4531 drivers/usb/dwc2/gadget.c hsotg->op_state); hsotg 4534 drivers/usb/dwc2/gadget.c if (hsotg->op_state != OTG_STATE_B_PERIPHERAL) { hsotg 4535 drivers/usb/dwc2/gadget.c hsotg->enabled = is_on; hsotg 4539 drivers/usb/dwc2/gadget.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4541 drivers/usb/dwc2/gadget.c hsotg->enabled = 1; hsotg 4542 drivers/usb/dwc2/gadget.c dwc2_hsotg_core_init_disconnected(hsotg, false); hsotg 4544 drivers/usb/dwc2/gadget.c dwc2_enable_acg(hsotg); hsotg 4545 drivers/usb/dwc2/gadget.c dwc2_hsotg_core_connect(hsotg); hsotg 4547 drivers/usb/dwc2/gadget.c dwc2_hsotg_core_disconnect(hsotg); hsotg 4548 drivers/usb/dwc2/gadget.c dwc2_hsotg_disconnect(hsotg); hsotg 4549 drivers/usb/dwc2/gadget.c hsotg->enabled = 0; hsotg 4552 drivers/usb/dwc2/gadget.c hsotg->gadget.speed = USB_SPEED_UNKNOWN; hsotg 4553 drivers/usb/dwc2/gadget.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4560 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = to_hsotg(gadget); hsotg 4563 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s: is_active: %d\n", __func__, is_active); hsotg 4564 drivers/usb/dwc2/gadget.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4570 drivers/usb/dwc2/gadget.c if (hsotg->lx_state == DWC2_L2) hsotg 4571 drivers/usb/dwc2/gadget.c dwc2_exit_partial_power_down(hsotg, false); hsotg 4574 drivers/usb/dwc2/gadget.c hsotg->op_state = OTG_STATE_B_PERIPHERAL; hsotg 4576 drivers/usb/dwc2/gadget.c dwc2_hsotg_core_init_disconnected(hsotg, false); hsotg 4577 drivers/usb/dwc2/gadget.c if (hsotg->enabled) { hsotg 4579 drivers/usb/dwc2/gadget.c dwc2_enable_acg(hsotg); hsotg 4580 drivers/usb/dwc2/gadget.c dwc2_hsotg_core_connect(hsotg); hsotg 4583 drivers/usb/dwc2/gadget.c dwc2_hsotg_core_disconnect(hsotg); hsotg 4584 drivers/usb/dwc2/gadget.c dwc2_hsotg_disconnect(hsotg); hsotg 4587 drivers/usb/dwc2/gadget.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4600 drivers/usb/dwc2/gadget.c struct dwc2_hsotg *hsotg = to_hsotg(gadget); hsotg 4602 drivers/usb/dwc2/gadget.c if (IS_ERR_OR_NULL(hsotg->uphy)) hsotg 4604 drivers/usb/dwc2/gadget.c return usb_phy_set_power(hsotg->uphy, mA); hsotg 4627 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_initep(struct dwc2_hsotg *hsotg, hsotg 4651 drivers/usb/dwc2/gadget.c list_add_tail(&hs_ep->ep.ep_list, &hsotg->gadget.ep_list); hsotg 4653 drivers/usb/dwc2/gadget.c hs_ep->parent = hsotg; hsotg 4656 drivers/usb/dwc2/gadget.c if (hsotg->params.speed == DWC2_SPEED_PARAM_LOW) hsotg 4666 drivers/usb/dwc2/gadget.c if (hsotg->params.speed != DWC2_SPEED_PARAM_LOW) { hsotg 4683 drivers/usb/dwc2/gadget.c if (using_dma(hsotg)) { hsotg 4687 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, next, DIEPCTL(epnum)); hsotg 4689 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, next, DOEPCTL(epnum)); hsotg 4699 drivers/usb/dwc2/gadget.c static int dwc2_hsotg_hw_cfg(struct dwc2_hsotg *hsotg) hsotg 4707 drivers/usb/dwc2/gadget.c hsotg->num_of_eps = hsotg->hw_params.num_dev_ep; hsotg 4710 drivers/usb/dwc2/gadget.c hsotg->num_of_eps++; hsotg 4712 drivers/usb/dwc2/gadget.c hsotg->eps_in[0] = devm_kzalloc(hsotg->dev, hsotg 4715 drivers/usb/dwc2/gadget.c if (!hsotg->eps_in[0]) hsotg 4718 drivers/usb/dwc2/gadget.c hsotg->eps_out[0] = hsotg->eps_in[0]; hsotg 4720 drivers/usb/dwc2/gadget.c cfg = hsotg->hw_params.dev_ep_dirs; hsotg 4721 drivers/usb/dwc2/gadget.c for (i = 1, cfg >>= 2; i < hsotg->num_of_eps; i++, cfg >>= 2) { hsotg 4725 drivers/usb/dwc2/gadget.c hsotg->eps_in[i] = devm_kzalloc(hsotg->dev, hsotg 4727 drivers/usb/dwc2/gadget.c if (!hsotg->eps_in[i]) hsotg 4732 drivers/usb/dwc2/gadget.c hsotg->eps_out[i] = devm_kzalloc(hsotg->dev, hsotg 4734 drivers/usb/dwc2/gadget.c if (!hsotg->eps_out[i]) hsotg 4739 drivers/usb/dwc2/gadget.c hsotg->fifo_mem = hsotg->hw_params.total_fifo_size; hsotg 4740 drivers/usb/dwc2/gadget.c hsotg->dedicated_fifos = hsotg->hw_params.en_multiple_tx_fifo; hsotg 4742 drivers/usb/dwc2/gadget.c dev_info(hsotg->dev, "EPs: %d, %s fifos, %d entries in SPRAM\n", hsotg 4743 drivers/usb/dwc2/gadget.c hsotg->num_of_eps, hsotg 4744 drivers/usb/dwc2/gadget.c hsotg->dedicated_fifos ? "dedicated" : "shared", hsotg 4745 drivers/usb/dwc2/gadget.c hsotg->fifo_mem); hsotg 4754 drivers/usb/dwc2/gadget.c static void dwc2_hsotg_dump(struct dwc2_hsotg *hsotg) hsotg 4757 drivers/usb/dwc2/gadget.c struct device *dev = hsotg->dev; hsotg 4762 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DCFG), dwc2_readl(hsotg, DCTL), hsotg 4763 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DIEPMSK)); hsotg 4766 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, GAHBCFG), dwc2_readl(hsotg, GHWCFG1)); hsotg 4769 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, GRXFSIZ), dwc2_readl(hsotg, GNPTXFSIZ)); hsotg 4773 drivers/usb/dwc2/gadget.c for (idx = 1; idx < hsotg->num_of_eps; idx++) { hsotg 4774 drivers/usb/dwc2/gadget.c val = dwc2_readl(hsotg, DPTXFSIZN(idx)); hsotg 4780 drivers/usb/dwc2/gadget.c for (idx = 0; idx < hsotg->num_of_eps; idx++) { hsotg 4783 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DIEPCTL(idx)), hsotg 4784 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DIEPTSIZ(idx)), hsotg 4785 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DIEPDMA(idx))); hsotg 4787 drivers/usb/dwc2/gadget.c val = dwc2_readl(hsotg, DOEPCTL(idx)); hsotg 4790 drivers/usb/dwc2/gadget.c idx, dwc2_readl(hsotg, DOEPCTL(idx)), hsotg 4791 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DOEPTSIZ(idx)), hsotg 4792 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DOEPDMA(idx))); hsotg 4796 drivers/usb/dwc2/gadget.c dwc2_readl(hsotg, DVBUSDIS), dwc2_readl(hsotg, DVBUSPULSE)); hsotg 4805 drivers/usb/dwc2/gadget.c int dwc2_gadget_init(struct dwc2_hsotg *hsotg) hsotg 4807 drivers/usb/dwc2/gadget.c struct device *dev = hsotg->dev; hsotg 4813 drivers/usb/dwc2/gadget.c hsotg->params.g_np_tx_fifo_size); hsotg 4814 drivers/usb/dwc2/gadget.c dev_dbg(dev, "RXFIFO size: %d\n", hsotg->params.g_rx_fifo_size); hsotg 4816 drivers/usb/dwc2/gadget.c hsotg->gadget.max_speed = USB_SPEED_HIGH; hsotg 4817 drivers/usb/dwc2/gadget.c hsotg->gadget.ops = &dwc2_hsotg_gadget_ops; hsotg 4818 drivers/usb/dwc2/gadget.c hsotg->gadget.name = dev_name(dev); hsotg 4819 drivers/usb/dwc2/gadget.c hsotg->remote_wakeup_allowed = 0; hsotg 4821 drivers/usb/dwc2/gadget.c if (hsotg->params.lpm) hsotg 4822 drivers/usb/dwc2/gadget.c hsotg->gadget.lpm_capable = true; hsotg 4824 drivers/usb/dwc2/gadget.c if (hsotg->dr_mode == USB_DR_MODE_OTG) hsotg 4825 drivers/usb/dwc2/gadget.c hsotg->gadget.is_otg = 1; hsotg 4826 drivers/usb/dwc2/gadget.c else if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) hsotg 4827 drivers/usb/dwc2/gadget.c hsotg->op_state = OTG_STATE_B_PERIPHERAL; hsotg 4829 drivers/usb/dwc2/gadget.c ret = dwc2_hsotg_hw_cfg(hsotg); hsotg 4831 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "Hardware configuration failed: %d\n", ret); hsotg 4835 drivers/usb/dwc2/gadget.c hsotg->ctrl_buff = devm_kzalloc(hsotg->dev, hsotg 4837 drivers/usb/dwc2/gadget.c if (!hsotg->ctrl_buff) hsotg 4840 drivers/usb/dwc2/gadget.c hsotg->ep0_buff = devm_kzalloc(hsotg->dev, hsotg 4842 drivers/usb/dwc2/gadget.c if (!hsotg->ep0_buff) hsotg 4845 drivers/usb/dwc2/gadget.c if (using_desc_dma(hsotg)) { hsotg 4846 drivers/usb/dwc2/gadget.c ret = dwc2_gadget_alloc_ctrl_desc_chains(hsotg); hsotg 4851 drivers/usb/dwc2/gadget.c ret = devm_request_irq(hsotg->dev, hsotg->irq, dwc2_hsotg_irq, hsotg 4852 drivers/usb/dwc2/gadget.c IRQF_SHARED, dev_name(hsotg->dev), hsotg); hsotg 4860 drivers/usb/dwc2/gadget.c if (hsotg->num_of_eps == 0) { hsotg 4867 drivers/usb/dwc2/gadget.c INIT_LIST_HEAD(&hsotg->gadget.ep_list); hsotg 4868 drivers/usb/dwc2/gadget.c hsotg->gadget.ep0 = &hsotg->eps_out[0]->ep; hsotg 4872 drivers/usb/dwc2/gadget.c hsotg->ctrl_req = dwc2_hsotg_ep_alloc_request(&hsotg->eps_out[0]->ep, hsotg 4874 drivers/usb/dwc2/gadget.c if (!hsotg->ctrl_req) { hsotg 4880 drivers/usb/dwc2/gadget.c for (epnum = 0; epnum < hsotg->num_of_eps; epnum++) { hsotg 4881 drivers/usb/dwc2/gadget.c if (hsotg->eps_in[epnum]) hsotg 4882 drivers/usb/dwc2/gadget.c dwc2_hsotg_initep(hsotg, hsotg->eps_in[epnum], hsotg 4884 drivers/usb/dwc2/gadget.c if (hsotg->eps_out[epnum]) hsotg 4885 drivers/usb/dwc2/gadget.c dwc2_hsotg_initep(hsotg, hsotg->eps_out[epnum], hsotg 4889 drivers/usb/dwc2/gadget.c ret = usb_add_gadget_udc(dev, &hsotg->gadget); hsotg 4891 drivers/usb/dwc2/gadget.c dwc2_hsotg_ep_free_request(&hsotg->eps_out[0]->ep, hsotg 4892 drivers/usb/dwc2/gadget.c hsotg->ctrl_req); hsotg 4895 drivers/usb/dwc2/gadget.c dwc2_hsotg_dump(hsotg); hsotg 4905 drivers/usb/dwc2/gadget.c int dwc2_hsotg_remove(struct dwc2_hsotg *hsotg) hsotg 4907 drivers/usb/dwc2/gadget.c usb_del_gadget_udc(&hsotg->gadget); hsotg 4908 drivers/usb/dwc2/gadget.c dwc2_hsotg_ep_free_request(&hsotg->eps_out[0]->ep, hsotg->ctrl_req); hsotg 4913 drivers/usb/dwc2/gadget.c int dwc2_hsotg_suspend(struct dwc2_hsotg *hsotg) hsotg 4917 drivers/usb/dwc2/gadget.c if (hsotg->lx_state != DWC2_L0) hsotg 4920 drivers/usb/dwc2/gadget.c if (hsotg->driver) { hsotg 4923 drivers/usb/dwc2/gadget.c dev_info(hsotg->dev, "suspending usb gadget %s\n", hsotg 4924 drivers/usb/dwc2/gadget.c hsotg->driver->driver.name); hsotg 4926 drivers/usb/dwc2/gadget.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4927 drivers/usb/dwc2/gadget.c if (hsotg->enabled) hsotg 4928 drivers/usb/dwc2/gadget.c dwc2_hsotg_core_disconnect(hsotg); hsotg 4929 drivers/usb/dwc2/gadget.c dwc2_hsotg_disconnect(hsotg); hsotg 4930 drivers/usb/dwc2/gadget.c hsotg->gadget.speed = USB_SPEED_UNKNOWN; hsotg 4931 drivers/usb/dwc2/gadget.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4933 drivers/usb/dwc2/gadget.c for (ep = 0; ep < hsotg->num_of_eps; ep++) { hsotg 4934 drivers/usb/dwc2/gadget.c if (hsotg->eps_in[ep]) hsotg 4935 drivers/usb/dwc2/gadget.c dwc2_hsotg_ep_disable_lock(&hsotg->eps_in[ep]->ep); hsotg 4936 drivers/usb/dwc2/gadget.c if (hsotg->eps_out[ep]) hsotg 4937 drivers/usb/dwc2/gadget.c dwc2_hsotg_ep_disable_lock(&hsotg->eps_out[ep]->ep); hsotg 4944 drivers/usb/dwc2/gadget.c int dwc2_hsotg_resume(struct dwc2_hsotg *hsotg) hsotg 4948 drivers/usb/dwc2/gadget.c if (hsotg->lx_state == DWC2_L2) hsotg 4951 drivers/usb/dwc2/gadget.c if (hsotg->driver) { hsotg 4952 drivers/usb/dwc2/gadget.c dev_info(hsotg->dev, "resuming usb gadget %s\n", hsotg 4953 drivers/usb/dwc2/gadget.c hsotg->driver->driver.name); hsotg 4955 drivers/usb/dwc2/gadget.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4956 drivers/usb/dwc2/gadget.c dwc2_hsotg_core_init_disconnected(hsotg, false); hsotg 4957 drivers/usb/dwc2/gadget.c if (hsotg->enabled) { hsotg 4959 drivers/usb/dwc2/gadget.c dwc2_enable_acg(hsotg); hsotg 4960 drivers/usb/dwc2/gadget.c dwc2_hsotg_core_connect(hsotg); hsotg 4962 drivers/usb/dwc2/gadget.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4975 drivers/usb/dwc2/gadget.c int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg) hsotg 4980 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s\n", __func__); hsotg 4983 drivers/usb/dwc2/gadget.c dr = &hsotg->dr_backup; hsotg 4985 drivers/usb/dwc2/gadget.c dr->dcfg = dwc2_readl(hsotg, DCFG); hsotg 4986 drivers/usb/dwc2/gadget.c dr->dctl = dwc2_readl(hsotg, DCTL); hsotg 4987 drivers/usb/dwc2/gadget.c dr->daintmsk = dwc2_readl(hsotg, DAINTMSK); hsotg 4988 drivers/usb/dwc2/gadget.c dr->diepmsk = dwc2_readl(hsotg, DIEPMSK); hsotg 4989 drivers/usb/dwc2/gadget.c dr->doepmsk = dwc2_readl(hsotg, DOEPMSK); hsotg 4991 drivers/usb/dwc2/gadget.c for (i = 0; i < hsotg->num_of_eps; i++) { hsotg 4993 drivers/usb/dwc2/gadget.c dr->diepctl[i] = dwc2_readl(hsotg, DIEPCTL(i)); hsotg 5001 drivers/usb/dwc2/gadget.c dr->dieptsiz[i] = dwc2_readl(hsotg, DIEPTSIZ(i)); hsotg 5002 drivers/usb/dwc2/gadget.c dr->diepdma[i] = dwc2_readl(hsotg, DIEPDMA(i)); hsotg 5005 drivers/usb/dwc2/gadget.c dr->doepctl[i] = dwc2_readl(hsotg, DOEPCTL(i)); hsotg 5013 drivers/usb/dwc2/gadget.c dr->doeptsiz[i] = dwc2_readl(hsotg, DOEPTSIZ(i)); hsotg 5014 drivers/usb/dwc2/gadget.c dr->doepdma[i] = dwc2_readl(hsotg, DOEPDMA(i)); hsotg 5015 drivers/usb/dwc2/gadget.c dr->dtxfsiz[i] = dwc2_readl(hsotg, DPTXFSIZN(i)); hsotg 5031 drivers/usb/dwc2/gadget.c int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg, int remote_wakeup) hsotg 5036 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "%s\n", __func__); hsotg 5039 drivers/usb/dwc2/gadget.c dr = &hsotg->dr_backup; hsotg 5041 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: no device registers to restore\n", hsotg 5048 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->dctl, DCTL); hsotg 5050 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->daintmsk, DAINTMSK); hsotg 5051 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->diepmsk, DIEPMSK); hsotg 5052 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->doepmsk, DOEPMSK); hsotg 5054 drivers/usb/dwc2/gadget.c for (i = 0; i < hsotg->num_of_eps; i++) { hsotg 5056 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->dieptsiz[i], DIEPTSIZ(i)); hsotg 5057 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->diepdma[i], DIEPDMA(i)); hsotg 5058 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->doeptsiz[i], DOEPTSIZ(i)); hsotg 5064 drivers/usb/dwc2/gadget.c if (hsotg->params.g_dma_desc && hsotg 5066 drivers/usb/dwc2/gadget.c dr->diepdma[i] = hsotg->eps_in[i]->desc_list_dma; hsotg 5067 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->dtxfsiz[i], DPTXFSIZN(i)); hsotg 5068 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->diepctl[i], DIEPCTL(i)); hsotg 5070 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->doeptsiz[i], DOEPTSIZ(i)); hsotg 5076 drivers/usb/dwc2/gadget.c if (hsotg->params.g_dma_desc && hsotg 5078 drivers/usb/dwc2/gadget.c dr->doepdma[i] = hsotg->eps_out[i]->desc_list_dma; hsotg 5079 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->doepdma[i], DOEPDMA(i)); hsotg 5080 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->doepctl[i], DOEPCTL(i)); hsotg 5092 drivers/usb/dwc2/gadget.c void dwc2_gadget_init_lpm(struct dwc2_hsotg *hsotg) hsotg 5096 drivers/usb/dwc2/gadget.c if (!hsotg->params.lpm) hsotg 5100 drivers/usb/dwc2/gadget.c val |= hsotg->params.hird_threshold_en ? GLPMCFG_HIRD_THRES_EN : 0; hsotg 5101 drivers/usb/dwc2/gadget.c val |= hsotg->params.lpm_clock_gating ? GLPMCFG_ENBLSLPM : 0; hsotg 5102 drivers/usb/dwc2/gadget.c val |= hsotg->params.hird_threshold << GLPMCFG_HIRD_THRES_SHIFT; hsotg 5103 drivers/usb/dwc2/gadget.c val |= hsotg->params.besl ? GLPMCFG_ENBESL : 0; hsotg 5106 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, val, GLPMCFG); hsotg 5107 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "GLPMCFG=0x%08x\n", dwc2_readl(hsotg, GLPMCFG)); hsotg 5110 drivers/usb/dwc2/gadget.c if (hsotg->params.service_interval) hsotg 5111 drivers/usb/dwc2/gadget.c dwc2_set_bit(hsotg, GINTMSK2, GINTMSK2_WKUP_ALERT_INT_MSK); hsotg 5120 drivers/usb/dwc2/gadget.c void dwc2_gadget_program_ref_clk(struct dwc2_hsotg *hsotg) hsotg 5125 drivers/usb/dwc2/gadget.c val |= hsotg->params.ref_clk_per << GREFCLK_REFCLKPER_SHIFT; hsotg 5126 drivers/usb/dwc2/gadget.c val |= hsotg->params.sof_cnt_wkup_alert << hsotg 5129 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, val, GREFCLK); hsotg 5130 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "GREFCLK=0x%08x\n", dwc2_readl(hsotg, GREFCLK)); hsotg 5140 drivers/usb/dwc2/gadget.c int dwc2_gadget_enter_hibernation(struct dwc2_hsotg *hsotg) hsotg 5146 drivers/usb/dwc2/gadget.c hsotg->lx_state = DWC2_L2; hsotg 5147 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "Start of hibernation completed\n"); hsotg 5148 drivers/usb/dwc2/gadget.c ret = dwc2_backup_global_registers(hsotg); hsotg 5150 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: failed to backup global registers\n", hsotg 5154 drivers/usb/dwc2/gadget.c ret = dwc2_backup_device_registers(hsotg); hsotg 5156 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: failed to backup device registers\n", hsotg 5163 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5167 drivers/usb/dwc2/gadget.c hsotg->hibernated = 1; hsotg 5170 drivers/usb/dwc2/gadget.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5172 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5176 drivers/usb/dwc2/gadget.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5180 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5184 drivers/usb/dwc2/gadget.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5186 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5190 drivers/usb/dwc2/gadget.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5192 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5196 drivers/usb/dwc2/gadget.c hsotg->gr_backup.gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5197 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "Hibernation completed\n"); hsotg 5213 drivers/usb/dwc2/gadget.c int dwc2_gadget_exit_hibernation(struct dwc2_hsotg *hsotg, hsotg 5223 drivers/usb/dwc2/gadget.c gr = &hsotg->gr_backup; hsotg 5224 drivers/usb/dwc2/gadget.c dr = &hsotg->dr_backup; hsotg 5226 drivers/usb/dwc2/gadget.c if (!hsotg->hibernated) { hsotg 5227 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "Already exited from Hibernation\n"); hsotg 5230 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, hsotg 5234 drivers/usb/dwc2/gadget.c dwc2_hib_restore_common(hsotg, rem_wakeup, 0); hsotg 5238 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, 0xffffffff, GINTSTS); hsotg 5242 drivers/usb/dwc2/gadget.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5244 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5248 drivers/usb/dwc2/gadget.c pcgcctl = dwc2_readl(hsotg, PCGCTL); hsotg 5250 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 5254 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, gr->gusbcfg, GUSBCFG); hsotg 5255 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->dcfg, DCFG); hsotg 5256 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->dctl, DCTL); hsotg 5259 drivers/usb/dwc2/gadget.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5261 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5266 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dr->dctl | DCTL_RMTWKUPSIG, DCTL); hsotg 5270 drivers/usb/dwc2/gadget.c dctl = dwc2_readl(hsotg, DCTL); hsotg 5272 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dctl, DCTL); hsotg 5277 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, 0xffffffff, GINTSTS); hsotg 5280 drivers/usb/dwc2/gadget.c ret = dwc2_restore_global_registers(hsotg); hsotg 5282 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: failed to restore registers\n", hsotg 5288 drivers/usb/dwc2/gadget.c ret = dwc2_restore_device_registers(hsotg, rem_wakeup); hsotg 5290 drivers/usb/dwc2/gadget.c dev_err(hsotg->dev, "%s: failed to restore device registers\n", hsotg 5297 drivers/usb/dwc2/gadget.c dctl = dwc2_readl(hsotg, DCTL); hsotg 5299 drivers/usb/dwc2/gadget.c dwc2_writel(hsotg, dctl, DCTL); hsotg 5302 drivers/usb/dwc2/gadget.c hsotg->hibernated = 0; hsotg 5303 drivers/usb/dwc2/gadget.c hsotg->lx_state = DWC2_L0; hsotg 5304 drivers/usb/dwc2/gadget.c dev_dbg(hsotg->dev, "Hibernation recovery completes here\n"); hsotg 59 drivers/usb/dwc2/hcd.c static void dwc2_port_resume(struct dwc2_hsotg *hsotg); hsotg 73 drivers/usb/dwc2/hcd.c static void dwc2_enable_common_interrupts(struct dwc2_hsotg *hsotg) hsotg 78 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, 0xffffffff, GOTGINT); hsotg 81 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, 0xffffffff, GINTSTS); hsotg 86 drivers/usb/dwc2/hcd.c if (!hsotg->params.host_dma) hsotg 88 drivers/usb/dwc2/hcd.c if (!hsotg->params.external_id_pin_ctl) hsotg 94 drivers/usb/dwc2/hcd.c if (dwc2_is_device_mode(hsotg) && hsotg->params.lpm) hsotg 97 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, intmsk, GINTMSK); hsotg 100 drivers/usb/dwc2/hcd.c static int dwc2_gahbcfg_init(struct dwc2_hsotg *hsotg) hsotg 102 drivers/usb/dwc2/hcd.c u32 ahbcfg = dwc2_readl(hsotg, GAHBCFG); hsotg 104 drivers/usb/dwc2/hcd.c switch (hsotg->hw_params.arch) { hsotg 106 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "External DMA Mode not supported\n"); hsotg 110 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "Internal DMA Mode\n"); hsotg 111 drivers/usb/dwc2/hcd.c if (hsotg->params.ahbcfg != -1) { hsotg 113 drivers/usb/dwc2/hcd.c ahbcfg |= hsotg->params.ahbcfg & hsotg 120 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "Slave Only Mode\n"); hsotg 124 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma) hsotg 127 drivers/usb/dwc2/hcd.c hsotg->params.dma_desc_enable = false; hsotg 129 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, ahbcfg, GAHBCFG); hsotg 134 drivers/usb/dwc2/hcd.c static void dwc2_gusbcfg_init(struct dwc2_hsotg *hsotg) hsotg 138 drivers/usb/dwc2/hcd.c usbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 141 drivers/usb/dwc2/hcd.c switch (hsotg->hw_params.op_mode) { hsotg 143 drivers/usb/dwc2/hcd.c if (hsotg->params.otg_cap == hsotg 146 drivers/usb/dwc2/hcd.c if (hsotg->params.otg_cap != hsotg 154 drivers/usb/dwc2/hcd.c if (hsotg->params.otg_cap != hsotg 166 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, usbcfg, GUSBCFG); hsotg 169 drivers/usb/dwc2/hcd.c static int dwc2_vbus_supply_init(struct dwc2_hsotg *hsotg) hsotg 171 drivers/usb/dwc2/hcd.c if (hsotg->vbus_supply) hsotg 172 drivers/usb/dwc2/hcd.c return regulator_enable(hsotg->vbus_supply); hsotg 177 drivers/usb/dwc2/hcd.c static int dwc2_vbus_supply_exit(struct dwc2_hsotg *hsotg) hsotg 179 drivers/usb/dwc2/hcd.c if (hsotg->vbus_supply) hsotg 180 drivers/usb/dwc2/hcd.c return regulator_disable(hsotg->vbus_supply); hsotg 190 drivers/usb/dwc2/hcd.c static void dwc2_enable_host_interrupts(struct dwc2_hsotg *hsotg) hsotg 194 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "%s()\n", __func__); hsotg 197 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, 0, GINTMSK); hsotg 198 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, 0, HAINTMSK); hsotg 201 drivers/usb/dwc2/hcd.c dwc2_enable_common_interrupts(hsotg); hsotg 204 drivers/usb/dwc2/hcd.c intmsk = dwc2_readl(hsotg, GINTMSK); hsotg 206 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, intmsk, GINTMSK); hsotg 214 drivers/usb/dwc2/hcd.c static void dwc2_disable_host_interrupts(struct dwc2_hsotg *hsotg) hsotg 216 drivers/usb/dwc2/hcd.c u32 intmsk = dwc2_readl(hsotg, GINTMSK); hsotg 221 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, intmsk, GINTMSK); hsotg 231 drivers/usb/dwc2/hcd.c static void dwc2_calculate_dynamic_fifo(struct dwc2_hsotg *hsotg) hsotg 233 drivers/usb/dwc2/hcd.c struct dwc2_core_params *params = &hsotg->params; hsotg 234 drivers/usb/dwc2/hcd.c struct dwc2_hw_params *hw = &hsotg->hw_params; hsotg 287 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "invalid fifo sizes\n"); hsotg 290 drivers/usb/dwc2/hcd.c static void dwc2_config_fifos(struct dwc2_hsotg *hsotg) hsotg 292 drivers/usb/dwc2/hcd.c struct dwc2_core_params *params = &hsotg->params; hsotg 298 drivers/usb/dwc2/hcd.c dwc2_calculate_dynamic_fifo(hsotg); hsotg 301 drivers/usb/dwc2/hcd.c grxfsiz = dwc2_readl(hsotg, GRXFSIZ); hsotg 302 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "initial grxfsiz=%08x\n", grxfsiz); hsotg 306 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, grxfsiz, GRXFSIZ); hsotg 307 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "new grxfsiz=%08x\n", hsotg 308 drivers/usb/dwc2/hcd.c dwc2_readl(hsotg, GRXFSIZ)); hsotg 311 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "initial gnptxfsiz=%08x\n", hsotg 312 drivers/usb/dwc2/hcd.c dwc2_readl(hsotg, GNPTXFSIZ)); hsotg 317 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, nptxfsiz, GNPTXFSIZ); hsotg 318 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "new gnptxfsiz=%08x\n", hsotg 319 drivers/usb/dwc2/hcd.c dwc2_readl(hsotg, GNPTXFSIZ)); hsotg 322 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "initial hptxfsiz=%08x\n", hsotg 323 drivers/usb/dwc2/hcd.c dwc2_readl(hsotg, HPTXFSIZ)); hsotg 329 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hptxfsiz, HPTXFSIZ); hsotg 330 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "new hptxfsiz=%08x\n", hsotg 331 drivers/usb/dwc2/hcd.c dwc2_readl(hsotg, HPTXFSIZ)); hsotg 333 drivers/usb/dwc2/hcd.c if (hsotg->params.en_multiple_tx_fifo && hsotg 334 drivers/usb/dwc2/hcd.c hsotg->hw_params.snpsid >= DWC2_CORE_REV_2_91a) { hsotg 340 drivers/usb/dwc2/hcd.c dfifocfg = dwc2_readl(hsotg, GDFIFOCFG); hsotg 347 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, dfifocfg, GDFIFOCFG); hsotg 361 drivers/usb/dwc2/hcd.c u32 dwc2_calc_frame_interval(struct dwc2_hsotg *hsotg) hsotg 367 drivers/usb/dwc2/hcd.c usbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 368 drivers/usb/dwc2/hcd.c hprt0 = dwc2_readl(hsotg, HPRT0); hsotg 373 drivers/usb/dwc2/hcd.c if ((usbcfg & GUSBCFG_PHYSEL) && hsotg->hw_params.fs_phy_type == hsotg 386 drivers/usb/dwc2/hcd.c hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_SHARED_UTMI) hsotg 389 drivers/usb/dwc2/hcd.c hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED) hsotg 408 drivers/usb/dwc2/hcd.c void dwc2_read_packet(struct dwc2_hsotg *hsotg, u8 *dest, u16 bytes) hsotg 420 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "%s(%p,%p,%d)\n", __func__, hsotg, dest, bytes); hsotg 423 drivers/usb/dwc2/hcd.c *data_buf = dwc2_readl(hsotg, HCFIFO(0)); hsotg 437 drivers/usb/dwc2/hcd.c static void dwc2_dump_channel_info(struct dwc2_hsotg *hsotg, hsotg 441 drivers/usb/dwc2/hcd.c int num_channels = hsotg->params.host_channels; hsotg 452 drivers/usb/dwc2/hcd.c hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num)); hsotg 453 drivers/usb/dwc2/hcd.c hcsplt = dwc2_readl(hsotg, HCSPLT(chan->hc_num)); hsotg 454 drivers/usb/dwc2/hcd.c hctsiz = dwc2_readl(hsotg, HCTSIZ(chan->hc_num)); hsotg 455 drivers/usb/dwc2/hcd.c hc_dma = dwc2_readl(hsotg, HCDMA(chan->hc_num)); hsotg 457 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " Assigned to channel %p:\n", chan); hsotg 458 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " hcchar 0x%08x, hcsplt 0x%08x\n", hsotg 460 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " hctsiz 0x%08x, hc_dma 0x%08x\n", hsotg 462 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " dev_addr: %d, ep_num: %d, ep_is_in: %d\n", hsotg 464 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " ep_type: %d\n", chan->ep_type); hsotg 465 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " max_packet: %d\n", chan->max_packet); hsotg 466 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " data_pid_start: %d\n", chan->data_pid_start); hsotg 467 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " xfer_started: %d\n", chan->xfer_started); hsotg 468 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " halt_status: %d\n", chan->halt_status); hsotg 469 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " xfer_buf: %p\n", chan->xfer_buf); hsotg 470 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " xfer_dma: %08lx\n", hsotg 472 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " xfer_len: %d\n", chan->xfer_len); hsotg 473 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " qh: %p\n", chan->qh); hsotg 474 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " NP inactive sched:\n"); hsotg 475 drivers/usb/dwc2/hcd.c list_for_each_entry(qh, &hsotg->non_periodic_sched_inactive, hsotg 477 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " %p\n", qh); hsotg 478 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " NP waiting sched:\n"); hsotg 479 drivers/usb/dwc2/hcd.c list_for_each_entry(qh, &hsotg->non_periodic_sched_waiting, hsotg 481 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " %p\n", qh); hsotg 482 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " NP active sched:\n"); hsotg 483 drivers/usb/dwc2/hcd.c list_for_each_entry(qh, &hsotg->non_periodic_sched_active, hsotg 485 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " %p\n", qh); hsotg 486 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " Channels:\n"); hsotg 488 drivers/usb/dwc2/hcd.c struct dwc2_host_chan *chan = hsotg->hc_ptr_array[i]; hsotg 490 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " %2d: %p\n", i, chan); hsotg 497 drivers/usb/dwc2/hcd.c static void dwc2_host_start(struct dwc2_hsotg *hsotg) hsotg 499 drivers/usb/dwc2/hcd.c struct usb_hcd *hcd = dwc2_hsotg_to_hcd(hsotg); hsotg 501 drivers/usb/dwc2/hcd.c hcd->self.is_b_host = dwc2_hcd_is_b_host(hsotg); hsotg 505 drivers/usb/dwc2/hcd.c static void dwc2_host_disconnect(struct dwc2_hsotg *hsotg) hsotg 507 drivers/usb/dwc2/hcd.c struct usb_hcd *hcd = dwc2_hsotg_to_hcd(hsotg); hsotg 512 drivers/usb/dwc2/hcd.c static void dwc2_host_hub_info(struct dwc2_hsotg *hsotg, void *context, hsotg 530 drivers/usb/dwc2/hcd.c static void dwc2_hc_enable_slave_ints(struct dwc2_hsotg *hsotg, hsotg 538 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "control/bulk\n"); hsotg 566 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "intr\n"); hsotg 588 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "isoc\n"); hsotg 599 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "## Unknown EP type ##\n"); hsotg 603 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcintmsk, HCINTMSK(chan->hc_num)); hsotg 605 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk); hsotg 608 drivers/usb/dwc2/hcd.c static void dwc2_hc_enable_dma_ints(struct dwc2_hsotg *hsotg, hsotg 617 drivers/usb/dwc2/hcd.c if (!hsotg->params.dma_desc_enable) { hsotg 619 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "desc DMA disabled\n"); hsotg 623 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "desc DMA enabled\n"); hsotg 631 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "setting ACK\n"); hsotg 640 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcintmsk, HCINTMSK(chan->hc_num)); hsotg 642 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk); hsotg 645 drivers/usb/dwc2/hcd.c static void dwc2_hc_enable_ints(struct dwc2_hsotg *hsotg, hsotg 650 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma) { hsotg 652 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "DMA enabled\n"); hsotg 653 drivers/usb/dwc2/hcd.c dwc2_hc_enable_dma_ints(hsotg, chan); hsotg 656 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "DMA disabled\n"); hsotg 657 drivers/usb/dwc2/hcd.c dwc2_hc_enable_slave_ints(hsotg, chan); hsotg 661 drivers/usb/dwc2/hcd.c intmsk = dwc2_readl(hsotg, HAINTMSK); hsotg 663 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, intmsk, HAINTMSK); hsotg 665 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "set HAINTMSK to %08x\n", intmsk); hsotg 668 drivers/usb/dwc2/hcd.c intmsk = dwc2_readl(hsotg, GINTMSK); hsotg 670 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, intmsk, GINTMSK); hsotg 672 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "set GINTMSK to %08x\n", intmsk); hsotg 686 drivers/usb/dwc2/hcd.c static void dwc2_hc_init(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan) hsotg 694 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "%s()\n", __func__); hsotg 699 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcintmsk, HCINT(hc_num)); hsotg 702 drivers/usb/dwc2/hcd.c dwc2_hc_enable_ints(hsotg, chan); hsotg 716 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcchar, HCCHAR(hc_num)); hsotg 718 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "set HCCHAR(%d) to %08x\n", hsotg 721 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "%s: Channel %d\n", hsotg 723 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Dev Addr: %d\n", hsotg 725 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Ep Num: %d\n", hsotg 727 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Is In: %d\n", hsotg 729 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Is Low Speed: %d\n", hsotg 731 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Ep Type: %d\n", hsotg 733 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Max Pkt: %d\n", hsotg 740 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, hsotg 753 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " comp split %d\n", hsotg 755 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " xact pos %d\n", hsotg 757 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " hub addr %d\n", hsotg 759 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " hub port %d\n", hsotg 761 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " is_in %d\n", hsotg 763 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Max Pkt %d\n", hsotg 765 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " xferlen %d\n", hsotg 770 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcsplt, HCSPLT(hc_num)); hsotg 801 drivers/usb/dwc2/hcd.c void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan, hsotg 807 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "%s()\n", __func__); hsotg 815 drivers/usb/dwc2/hcd.c if ((hsotg->params.g_dma && !hsotg->params.g_dma_desc) || hsotg 816 drivers/usb/dwc2/hcd.c hsotg->hw_params.arch == GHWCFG2_EXT_DMA_ARCH) { hsotg 820 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "%s() Channel can't be halted\n", hsotg 827 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "!!! halt_status = %d !!!\n", halt_status); hsotg 839 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "dequeue/error\n"); hsotg 840 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcintmsk, HCINTMSK(chan->hc_num)); hsotg 847 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, ~hcintmsk, HCINT(chan->hc_num)); hsotg 856 drivers/usb/dwc2/hcd.c hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num)); hsotg 878 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, hsotg 884 drivers/usb/dwc2/hcd.c hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num)); hsotg 888 drivers/usb/dwc2/hcd.c if (!hsotg->params.dma_desc_enable) { hsotg 890 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "desc DMA disabled\n"); hsotg 894 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "desc DMA enabled\n"); hsotg 898 drivers/usb/dwc2/hcd.c if (!hsotg->params.host_dma) { hsotg 900 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "DMA not enabled\n"); hsotg 906 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "control/bulk\n"); hsotg 907 drivers/usb/dwc2/hcd.c nptxsts = dwc2_readl(hsotg, GNPTXSTS); hsotg 909 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "Disabling channel\n"); hsotg 914 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "isoc/intr\n"); hsotg 915 drivers/usb/dwc2/hcd.c hptxsts = dwc2_readl(hsotg, HPTXSTS); hsotg 917 drivers/usb/dwc2/hcd.c hsotg->queuing_high_bandwidth) { hsotg 919 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "Disabling channel\n"); hsotg 925 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "DMA enabled\n"); hsotg 928 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcchar, HCCHAR(chan->hc_num)); hsotg 933 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "Channel enabled\n"); hsotg 938 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "Channel disabled\n"); hsotg 943 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, hsotg 945 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " hcchar: 0x%08x\n", hsotg 947 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " halt_pending: %d\n", hsotg 949 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " halt_on_queue: %d\n", hsotg 951 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " halt_status: %d\n", hsotg 965 drivers/usb/dwc2/hcd.c void dwc2_hc_cleanup(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan) hsotg 977 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, 0, HCINTMSK(chan->hc_num)); hsotg 980 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcintmsk, HCINT(chan->hc_num)); hsotg 993 drivers/usb/dwc2/hcd.c static void dwc2_hc_set_even_odd_frame(struct dwc2_hsotg *hsotg, hsotg 1034 drivers/usb/dwc2/hcd.c fifo_space = (dwc2_readl(hsotg, HPTXSTS) & hsotg 1037 drivers/usb/dwc2/hcd.c (hsotg->params.host_perio_tx_fifo_size - hsotg 1053 drivers/usb/dwc2/hcd.c frame_number = dwc2_hcd_get_future_frame_number(hsotg, xfer_us); hsotg 1066 drivers/usb/dwc2/hcd.c dwc2_sch_vdbg(hsotg, hsotg 1128 drivers/usb/dwc2/hcd.c static void dwc2_hc_write_packet(struct dwc2_hsotg *hsotg, hsotg 1138 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "%s()\n", __func__); hsotg 1151 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, *data_buf, HCFIFO(chan->hc_num)); hsotg 1157 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, data, HCFIFO(chan->hc_num)); hsotg 1174 drivers/usb/dwc2/hcd.c static void dwc2_hc_do_ping(struct dwc2_hsotg *hsotg, hsotg 1181 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, hsotg 1186 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hctsiz, HCTSIZ(chan->hc_num)); hsotg 1188 drivers/usb/dwc2/hcd.c hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num)); hsotg 1191 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcchar, HCCHAR(chan->hc_num)); hsotg 1227 drivers/usb/dwc2/hcd.c static void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg, hsotg 1230 drivers/usb/dwc2/hcd.c u32 max_hc_xfer_size = hsotg->params.max_transfer_size; hsotg 1231 drivers/usb/dwc2/hcd.c u16 max_hc_pkt_count = hsotg->params.max_packet_count; hsotg 1238 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "%s()\n", __func__); hsotg 1241 drivers/usb/dwc2/hcd.c if (!hsotg->params.host_dma) { hsotg 1243 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "ping, no DMA\n"); hsotg 1244 drivers/usb/dwc2/hcd.c dwc2_hc_do_ping(hsotg, chan); hsotg 1250 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "ping, DMA\n"); hsotg 1257 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "split\n"); hsotg 1282 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "no split\n"); hsotg 1351 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hctsiz, HCTSIZ(chan->hc_num)); hsotg 1353 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "Wrote %08x to HCTSIZ(%d)\n", hsotg 1356 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, hsotg 1358 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Xfer Size: %d\n", hsotg 1361 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Num Pkts: %d\n", hsotg 1364 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Start PID: %d\n", hsotg 1369 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma) { hsotg 1374 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "align_buf\n"); hsotg 1379 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, (u32)dma_addr, HCDMA(chan->hc_num)); hsotg 1382 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "Wrote %08lx to HCDMA(%d)\n", hsotg 1388 drivers/usb/dwc2/hcd.c u32 hcsplt = dwc2_readl(hsotg, HCSPLT(chan->hc_num)); hsotg 1391 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcsplt, HCSPLT(chan->hc_num)); hsotg 1394 drivers/usb/dwc2/hcd.c hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num)); hsotg 1397 drivers/usb/dwc2/hcd.c dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar); hsotg 1400 drivers/usb/dwc2/hcd.c dev_warn(hsotg->dev, hsotg 1409 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Multi Cnt: %d\n", hsotg 1413 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcchar, HCCHAR(chan->hc_num)); hsotg 1415 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar, hsotg 1421 drivers/usb/dwc2/hcd.c if (!hsotg->params.host_dma && hsotg 1424 drivers/usb/dwc2/hcd.c dwc2_hc_write_packet(hsotg, chan); hsotg 1441 drivers/usb/dwc2/hcd.c void dwc2_hc_start_transfer_ddma(struct dwc2_hsotg *hsotg, hsotg 1464 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, hsotg 1466 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Start PID: %d\n", hsotg 1468 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " NTD: %d\n", chan->ntd - 1); hsotg 1471 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hctsiz, HCTSIZ(chan->hc_num)); hsotg 1473 drivers/usb/dwc2/hcd.c dma_sync_single_for_device(hsotg->dev, chan->desc_list_addr, hsotg 1476 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, chan->desc_list_addr, HCDMA(chan->hc_num)); hsotg 1479 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "Wrote %pad to HCDMA(%d)\n", hsotg 1482 drivers/usb/dwc2/hcd.c hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num)); hsotg 1488 drivers/usb/dwc2/hcd.c dev_warn(hsotg->dev, hsotg 1497 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Multi Cnt: %d\n", hsotg 1501 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcchar, HCCHAR(chan->hc_num)); hsotg 1503 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar, hsotg 1530 drivers/usb/dwc2/hcd.c static int dwc2_hc_continue_transfer(struct dwc2_hsotg *hsotg, hsotg 1534 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, hsotg 1558 drivers/usb/dwc2/hcd.c u32 hcchar = dwc2_readl(hsotg, HCCHAR(chan->hc_num)); hsotg 1560 drivers/usb/dwc2/hcd.c dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar); hsotg 1564 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " IN xfer: hcchar = 0x%08x\n", hsotg 1566 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcchar, HCCHAR(chan->hc_num)); hsotg 1576 drivers/usb/dwc2/hcd.c u32 hcchar = dwc2_readl(hsotg, hsotg 1579 drivers/usb/dwc2/hcd.c dwc2_hc_set_even_odd_frame(hsotg, chan, hsotg 1584 drivers/usb/dwc2/hcd.c dwc2_hc_write_packet(hsotg, chan); hsotg 1604 drivers/usb/dwc2/hcd.c static void dwc2_kill_urbs_in_qh_list(struct dwc2_hsotg *hsotg, hsotg 1613 drivers/usb/dwc2/hcd.c dwc2_host_complete(hsotg, qtd, -ECONNRESET); hsotg 1614 drivers/usb/dwc2/hcd.c dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh); hsotg 1619 drivers/usb/dwc2/hcd.c static void dwc2_qh_list_free(struct dwc2_hsotg *hsotg, hsotg 1630 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 1633 drivers/usb/dwc2/hcd.c dwc2_kill_urbs_in_qh_list(hsotg, qh_list); hsotg 1636 drivers/usb/dwc2/hcd.c dwc2_hcd_qh_unlink(hsotg, qh); hsotg 1641 drivers/usb/dwc2/hcd.c dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh); hsotg 1646 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 1647 drivers/usb/dwc2/hcd.c dwc2_hcd_qh_free(hsotg, qh); hsotg 1648 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 1651 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 1662 drivers/usb/dwc2/hcd.c static void dwc2_kill_all_urbs(struct dwc2_hsotg *hsotg) hsotg 1664 drivers/usb/dwc2/hcd.c dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->non_periodic_sched_inactive); hsotg 1665 drivers/usb/dwc2/hcd.c dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->non_periodic_sched_waiting); hsotg 1666 drivers/usb/dwc2/hcd.c dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->non_periodic_sched_active); hsotg 1667 drivers/usb/dwc2/hcd.c dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->periodic_sched_inactive); hsotg 1668 drivers/usb/dwc2/hcd.c dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->periodic_sched_ready); hsotg 1669 drivers/usb/dwc2/hcd.c dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->periodic_sched_assigned); hsotg 1670 drivers/usb/dwc2/hcd.c dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->periodic_sched_queued); hsotg 1678 drivers/usb/dwc2/hcd.c void dwc2_hcd_start(struct dwc2_hsotg *hsotg) hsotg 1682 drivers/usb/dwc2/hcd.c if (hsotg->op_state == OTG_STATE_B_HOST) { hsotg 1688 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 1690 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 1693 drivers/usb/dwc2/hcd.c queue_delayed_work(hsotg->wq_otg, &hsotg->start_work, hsotg 1698 drivers/usb/dwc2/hcd.c static void dwc2_hcd_cleanup_channels(struct dwc2_hsotg *hsotg) hsotg 1700 drivers/usb/dwc2/hcd.c int num_channels = hsotg->params.host_channels; hsotg 1705 drivers/usb/dwc2/hcd.c if (!hsotg->params.host_dma) { hsotg 1708 drivers/usb/dwc2/hcd.c channel = hsotg->hc_ptr_array[i]; hsotg 1711 drivers/usb/dwc2/hcd.c hcchar = dwc2_readl(hsotg, HCCHAR(i)); hsotg 1715 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcchar, HCCHAR(i)); hsotg 1721 drivers/usb/dwc2/hcd.c channel = hsotg->hc_ptr_array[i]; hsotg 1724 drivers/usb/dwc2/hcd.c hcchar = dwc2_readl(hsotg, HCCHAR(i)); hsotg 1728 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcchar, HCCHAR(i)); hsotg 1731 drivers/usb/dwc2/hcd.c dwc2_hc_cleanup(hsotg, channel); hsotg 1732 drivers/usb/dwc2/hcd.c list_add_tail(&channel->hc_list_entry, &hsotg->free_hc_list); hsotg 1741 drivers/usb/dwc2/hcd.c if (hsotg->params.uframe_sched) { hsotg 1742 drivers/usb/dwc2/hcd.c hsotg->available_host_channels = hsotg 1743 drivers/usb/dwc2/hcd.c hsotg->params.host_channels; hsotg 1745 drivers/usb/dwc2/hcd.c hsotg->non_periodic_channels = 0; hsotg 1746 drivers/usb/dwc2/hcd.c hsotg->periodic_channels = 0; hsotg 1757 drivers/usb/dwc2/hcd.c void dwc2_hcd_connect(struct dwc2_hsotg *hsotg) hsotg 1759 drivers/usb/dwc2/hcd.c if (hsotg->lx_state != DWC2_L0) hsotg 1760 drivers/usb/dwc2/hcd.c usb_hcd_resume_root_hub(hsotg->priv); hsotg 1762 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_connect_status_change = 1; hsotg 1763 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_connect_status = 1; hsotg 1774 drivers/usb/dwc2/hcd.c void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg, bool force) hsotg 1780 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_connect_status_change = 1; hsotg 1781 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_connect_status = 0; hsotg 1788 drivers/usb/dwc2/hcd.c intr = dwc2_readl(hsotg, GINTMSK); hsotg 1790 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, intr, GINTMSK); hsotg 1792 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, intr, GINTSTS); hsotg 1799 drivers/usb/dwc2/hcd.c if (dwc2_is_device_mode(hsotg)) { hsotg 1800 drivers/usb/dwc2/hcd.c if (hsotg->op_state != OTG_STATE_A_SUSPEND) { hsotg 1801 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "Disconnect: PortPower off\n"); hsotg 1802 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, 0, HPRT0); hsotg 1805 drivers/usb/dwc2/hcd.c dwc2_disable_host_interrupts(hsotg); hsotg 1809 drivers/usb/dwc2/hcd.c dwc2_kill_all_urbs(hsotg); hsotg 1811 drivers/usb/dwc2/hcd.c if (dwc2_is_host_mode(hsotg)) hsotg 1813 drivers/usb/dwc2/hcd.c dwc2_hcd_cleanup_channels(hsotg); hsotg 1815 drivers/usb/dwc2/hcd.c dwc2_host_disconnect(hsotg); hsotg 1830 drivers/usb/dwc2/hcd.c hprt0 = dwc2_readl(hsotg, HPRT0); hsotg 1832 drivers/usb/dwc2/hcd.c dwc2_hcd_connect(hsotg); hsotg 1841 drivers/usb/dwc2/hcd.c static void dwc2_hcd_rem_wakeup(struct dwc2_hsotg *hsotg) hsotg 1843 drivers/usb/dwc2/hcd.c if (hsotg->bus_suspended) { hsotg 1844 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_suspend_change = 1; hsotg 1845 drivers/usb/dwc2/hcd.c usb_hcd_resume_root_hub(hsotg->priv); hsotg 1848 drivers/usb/dwc2/hcd.c if (hsotg->lx_state == DWC2_L1) hsotg 1849 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_l1_change = 1; hsotg 1859 drivers/usb/dwc2/hcd.c void dwc2_hcd_stop(struct dwc2_hsotg *hsotg) hsotg 1861 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "DWC OTG HCD STOP\n"); hsotg 1870 drivers/usb/dwc2/hcd.c dwc2_disable_host_interrupts(hsotg); hsotg 1873 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "PortPower off\n"); hsotg 1874 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, 0, HPRT0); hsotg 1878 drivers/usb/dwc2/hcd.c static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg, hsotg 1886 drivers/usb/dwc2/hcd.c if (!hsotg->flags.b.port_connect_status) { hsotg 1888 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "Not connected\n"); hsotg 1892 drivers/usb/dwc2/hcd.c dev_speed = dwc2_host_get_speed(hsotg, urb->priv); hsotg 1896 drivers/usb/dwc2/hcd.c (hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED) && hsotg 1897 drivers/usb/dwc2/hcd.c (hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI)) { hsotg 1898 drivers/usb/dwc2/hcd.c u32 hprt0 = dwc2_readl(hsotg, HPRT0); hsotg 1909 drivers/usb/dwc2/hcd.c retval = dwc2_hcd_qtd_add(hsotg, qtd, qh); hsotg 1911 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 1917 drivers/usb/dwc2/hcd.c intr_mask = dwc2_readl(hsotg, GINTMSK); hsotg 1929 drivers/usb/dwc2/hcd.c tr_type = dwc2_hcd_select_transactions(hsotg); hsotg 1931 drivers/usb/dwc2/hcd.c dwc2_hcd_queue_transactions(hsotg, tr_type); hsotg 1938 drivers/usb/dwc2/hcd.c static int dwc2_hcd_urb_dequeue(struct dwc2_hsotg *hsotg, hsotg 1946 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "## Urb QTD is NULL ##\n"); hsotg 1952 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "## Urb QTD QH is NULL ##\n"); hsotg 1959 drivers/usb/dwc2/hcd.c dwc2_dump_channel_info(hsotg, qh->channel); hsotg 1962 drivers/usb/dwc2/hcd.c if (hsotg->flags.b.port_connect_status) hsotg 1970 drivers/usb/dwc2/hcd.c dwc2_hc_halt(hsotg, qh->channel, hsotg 1978 drivers/usb/dwc2/hcd.c if (!hsotg->params.dma_desc_enable) { hsotg 1981 drivers/usb/dwc2/hcd.c dwc2_hcd_qtd_unlink_and_free(hsotg, urb_qtd, qh); hsotg 1983 drivers/usb/dwc2/hcd.c dwc2_hcd_qh_deactivate(hsotg, qh, 0); hsotg 1986 drivers/usb/dwc2/hcd.c dwc2_hcd_qh_unlink(hsotg, qh); hsotg 1989 drivers/usb/dwc2/hcd.c dwc2_hcd_qtd_unlink_and_free(hsotg, urb_qtd, qh); hsotg 1996 drivers/usb/dwc2/hcd.c static int dwc2_hcd_endpoint_disable(struct dwc2_hsotg *hsotg, hsotg 2004 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 2014 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 2020 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 2022 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 2030 drivers/usb/dwc2/hcd.c dwc2_hcd_qh_unlink(hsotg, qh); hsotg 2034 drivers/usb/dwc2/hcd.c dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh); hsotg 2041 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 2043 drivers/usb/dwc2/hcd.c dwc2_hcd_qh_free(hsotg, qh); hsotg 2049 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 2055 drivers/usb/dwc2/hcd.c static int dwc2_hcd_endpoint_reset(struct dwc2_hsotg *hsotg, hsotg 2075 drivers/usb/dwc2/hcd.c int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup) hsotg 2080 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg); hsotg 2082 drivers/usb/dwc2/hcd.c usbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 2086 drivers/usb/dwc2/hcd.c if (hsotg->params.phy_ulpi_ext_vbus) hsotg 2091 drivers/usb/dwc2/hcd.c if (hsotg->params.ts_dline) hsotg 2094 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, usbcfg, GUSBCFG); hsotg 2104 drivers/usb/dwc2/hcd.c retval = dwc2_core_reset(hsotg, false); hsotg 2106 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "%s(): Reset failed, aborting\n", hsotg 2115 drivers/usb/dwc2/hcd.c retval = dwc2_phy_init(hsotg, initial_setup); hsotg 2120 drivers/usb/dwc2/hcd.c retval = dwc2_gahbcfg_init(hsotg); hsotg 2125 drivers/usb/dwc2/hcd.c dwc2_gusbcfg_init(hsotg); hsotg 2128 drivers/usb/dwc2/hcd.c otgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 2130 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, otgctl, GOTGCTL); hsotg 2133 drivers/usb/dwc2/hcd.c hsotg->srp_success = 0; hsotg 2136 drivers/usb/dwc2/hcd.c dwc2_enable_common_interrupts(hsotg); hsotg 2142 drivers/usb/dwc2/hcd.c if (dwc2_is_host_mode(hsotg)) { hsotg 2143 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "Host Mode\n"); hsotg 2144 drivers/usb/dwc2/hcd.c hsotg->op_state = OTG_STATE_A_HOST; hsotg 2146 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "Device Mode\n"); hsotg 2147 drivers/usb/dwc2/hcd.c hsotg->op_state = OTG_STATE_B_PERIPHERAL; hsotg 2163 drivers/usb/dwc2/hcd.c static void dwc2_core_host_init(struct dwc2_hsotg *hsotg) hsotg 2167 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg); hsotg 2177 drivers/usb/dwc2/hcd.c usbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 2179 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, usbcfg, GUSBCFG); hsotg 2182 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, 0, PCGCTL); hsotg 2185 drivers/usb/dwc2/hcd.c dwc2_init_fs_ls_pclk_sel(hsotg); hsotg 2186 drivers/usb/dwc2/hcd.c if (hsotg->params.speed == DWC2_SPEED_PARAM_FULL || hsotg 2187 drivers/usb/dwc2/hcd.c hsotg->params.speed == DWC2_SPEED_PARAM_LOW) { hsotg 2188 drivers/usb/dwc2/hcd.c hcfg = dwc2_readl(hsotg, HCFG); hsotg 2190 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcfg, HCFG); hsotg 2198 drivers/usb/dwc2/hcd.c if (hsotg->params.reload_ctl) { hsotg 2199 drivers/usb/dwc2/hcd.c hfir = dwc2_readl(hsotg, HFIR); hsotg 2201 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hfir, HFIR); hsotg 2204 drivers/usb/dwc2/hcd.c if (hsotg->params.dma_desc_enable) { hsotg 2205 drivers/usb/dwc2/hcd.c u32 op_mode = hsotg->hw_params.op_mode; hsotg 2207 drivers/usb/dwc2/hcd.c if (hsotg->hw_params.snpsid < DWC2_CORE_REV_2_90a || hsotg 2208 drivers/usb/dwc2/hcd.c !hsotg->hw_params.dma_desc_enable || hsotg 2212 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 2214 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 2216 drivers/usb/dwc2/hcd.c hsotg->params.dma_desc_enable = false; hsotg 2218 drivers/usb/dwc2/hcd.c hcfg = dwc2_readl(hsotg, HCFG); hsotg 2220 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcfg, HCFG); hsotg 2225 drivers/usb/dwc2/hcd.c dwc2_config_fifos(hsotg); hsotg 2229 drivers/usb/dwc2/hcd.c otgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 2231 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, otgctl, GOTGCTL); hsotg 2234 drivers/usb/dwc2/hcd.c dwc2_flush_tx_fifo(hsotg, 0x10 /* all TX FIFOs */); hsotg 2235 drivers/usb/dwc2/hcd.c dwc2_flush_rx_fifo(hsotg); hsotg 2238 drivers/usb/dwc2/hcd.c otgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 2240 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, otgctl, GOTGCTL); hsotg 2242 drivers/usb/dwc2/hcd.c if (!hsotg->params.dma_desc_enable) { hsotg 2247 drivers/usb/dwc2/hcd.c num_channels = hsotg->params.host_channels; hsotg 2249 drivers/usb/dwc2/hcd.c hcchar = dwc2_readl(hsotg, HCCHAR(i)); hsotg 2254 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcchar, HCCHAR(i)); hsotg 2260 drivers/usb/dwc2/hcd.c hcchar = dwc2_readl(hsotg, HCCHAR(i)); hsotg 2264 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcchar, HCCHAR(i)); hsotg 2265 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "%s: Halt channel %d\n", hsotg 2268 drivers/usb/dwc2/hcd.c if (dwc2_hsotg_wait_bit_clear(hsotg, HCCHAR(i), hsotg 2271 drivers/usb/dwc2/hcd.c dev_warn(hsotg->dev, hsotg 2280 drivers/usb/dwc2/hcd.c dwc2_enable_acg(hsotg); hsotg 2283 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "Init: Port Power? op_state=%d\n", hsotg->op_state); hsotg 2284 drivers/usb/dwc2/hcd.c if (hsotg->op_state == OTG_STATE_A_HOST) { hsotg 2285 drivers/usb/dwc2/hcd.c u32 hprt0 = dwc2_read_hprt0(hsotg); hsotg 2287 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "Init: Power Port (%d)\n", hsotg 2291 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 2295 drivers/usb/dwc2/hcd.c dwc2_enable_host_interrupts(hsotg); hsotg 2303 drivers/usb/dwc2/hcd.c static void dwc2_hcd_reinit(struct dwc2_hsotg *hsotg) hsotg 2309 drivers/usb/dwc2/hcd.c hsotg->flags.d32 = 0; hsotg 2310 drivers/usb/dwc2/hcd.c hsotg->non_periodic_qh_ptr = &hsotg->non_periodic_sched_active; hsotg 2312 drivers/usb/dwc2/hcd.c if (hsotg->params.uframe_sched) { hsotg 2313 drivers/usb/dwc2/hcd.c hsotg->available_host_channels = hsotg 2314 drivers/usb/dwc2/hcd.c hsotg->params.host_channels; hsotg 2316 drivers/usb/dwc2/hcd.c hsotg->non_periodic_channels = 0; hsotg 2317 drivers/usb/dwc2/hcd.c hsotg->periodic_channels = 0; hsotg 2324 drivers/usb/dwc2/hcd.c list_for_each_entry_safe(chan, chan_tmp, &hsotg->free_hc_list, hsotg 2328 drivers/usb/dwc2/hcd.c num_channels = hsotg->params.host_channels; hsotg 2330 drivers/usb/dwc2/hcd.c chan = hsotg->hc_ptr_array[i]; hsotg 2331 drivers/usb/dwc2/hcd.c list_add_tail(&chan->hc_list_entry, &hsotg->free_hc_list); hsotg 2332 drivers/usb/dwc2/hcd.c dwc2_hc_cleanup(hsotg, chan); hsotg 2336 drivers/usb/dwc2/hcd.c dwc2_core_host_init(hsotg); hsotg 2339 drivers/usb/dwc2/hcd.c static void dwc2_hc_init_split(struct dwc2_hsotg *hsotg, hsotg 2348 drivers/usb/dwc2/hcd.c dwc2_host_hub_info(hsotg, urb->priv, &hub_addr, &hub_port); hsotg 2353 drivers/usb/dwc2/hcd.c static void dwc2_hc_init_xfer(struct dwc2_hsotg *hsotg, hsotg 2366 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Control setup transaction\n"); hsotg 2370 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma) hsotg 2378 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Control data transaction\n"); hsotg 2387 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Control status transaction\n"); hsotg 2397 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma) hsotg 2398 drivers/usb/dwc2/hcd.c chan->xfer_dma = hsotg->status_buf_dma; hsotg 2400 drivers/usb/dwc2/hcd.c chan->xfer_buf = hsotg->status_buf; hsotg 2415 drivers/usb/dwc2/hcd.c if (hsotg->params.dma_desc_enable) hsotg 2421 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma) { hsotg 2443 drivers/usb/dwc2/hcd.c static int dwc2_alloc_split_dma_aligned_buf(struct dwc2_hsotg *hsotg, hsotg 2447 drivers/usb/dwc2/hcd.c if (!hsotg->unaligned_cache || hsotg 2452 drivers/usb/dwc2/hcd.c qh->dw_align_buf = kmem_cache_alloc(hsotg->unaligned_cache, hsotg 2458 drivers/usb/dwc2/hcd.c qh->dw_align_buf_dma = dma_map_single(hsotg->dev, qh->dw_align_buf, hsotg 2462 drivers/usb/dwc2/hcd.c if (dma_mapping_error(hsotg->dev, qh->dw_align_buf_dma)) { hsotg 2463 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "can't map align_buf\n"); hsotg 2578 drivers/usb/dwc2/hcd.c static int dwc2_assign_and_init_hc(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 2585 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "%s(%p,%p)\n", __func__, hsotg, qh); hsotg 2588 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "No QTDs in QH list\n"); hsotg 2592 drivers/usb/dwc2/hcd.c if (list_empty(&hsotg->free_hc_list)) { hsotg 2593 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "No free channel to assign\n"); hsotg 2597 drivers/usb/dwc2/hcd.c chan = list_first_entry(&hsotg->free_hc_list, struct dwc2_host_chan, hsotg 2644 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma) hsotg 2654 drivers/usb/dwc2/hcd.c dwc2_hc_init_split(hsotg, chan, qtd, urb); hsotg 2659 drivers/usb/dwc2/hcd.c dwc2_hc_init_xfer(hsotg, chan, qtd); hsotg 2662 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma && qh->do_split && hsotg 2664 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "Non-aligned buffer\n"); hsotg 2665 drivers/usb/dwc2/hcd.c if (dwc2_alloc_split_dma_aligned_buf(hsotg, qh, chan)) { hsotg 2666 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 2672 drivers/usb/dwc2/hcd.c &hsotg->free_hc_list); hsotg 2682 drivers/usb/dwc2/hcd.c WARN_ON_ONCE(hsotg->params.host_dma && hsotg 2695 drivers/usb/dwc2/hcd.c if (hsotg->params.dma_desc_enable) { hsotg 2700 drivers/usb/dwc2/hcd.c dwc2_hc_init(hsotg, chan); hsotg 2716 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg) hsotg 2724 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Select Transactions\n"); hsotg 2728 drivers/usb/dwc2/hcd.c qh_ptr = hsotg->periodic_sched_ready.next; hsotg 2729 drivers/usb/dwc2/hcd.c while (qh_ptr != &hsotg->periodic_sched_ready) { hsotg 2730 drivers/usb/dwc2/hcd.c if (list_empty(&hsotg->free_hc_list)) hsotg 2732 drivers/usb/dwc2/hcd.c if (hsotg->params.uframe_sched) { hsotg 2733 drivers/usb/dwc2/hcd.c if (hsotg->available_host_channels <= 1) hsotg 2735 drivers/usb/dwc2/hcd.c hsotg->available_host_channels--; hsotg 2738 drivers/usb/dwc2/hcd.c if (dwc2_assign_and_init_hc(hsotg, qh)) hsotg 2747 drivers/usb/dwc2/hcd.c &hsotg->periodic_sched_assigned); hsotg 2756 drivers/usb/dwc2/hcd.c num_channels = hsotg->params.host_channels; hsotg 2757 drivers/usb/dwc2/hcd.c qh_ptr = hsotg->non_periodic_sched_inactive.next; hsotg 2758 drivers/usb/dwc2/hcd.c while (qh_ptr != &hsotg->non_periodic_sched_inactive) { hsotg 2759 drivers/usb/dwc2/hcd.c if (!hsotg->params.uframe_sched && hsotg 2760 drivers/usb/dwc2/hcd.c hsotg->non_periodic_channels >= num_channels - hsotg 2761 drivers/usb/dwc2/hcd.c hsotg->periodic_channels) hsotg 2763 drivers/usb/dwc2/hcd.c if (list_empty(&hsotg->free_hc_list)) hsotg 2766 drivers/usb/dwc2/hcd.c if (hsotg->params.uframe_sched) { hsotg 2767 drivers/usb/dwc2/hcd.c if (hsotg->available_host_channels < 1) hsotg 2769 drivers/usb/dwc2/hcd.c hsotg->available_host_channels--; hsotg 2772 drivers/usb/dwc2/hcd.c if (dwc2_assign_and_init_hc(hsotg, qh)) hsotg 2781 drivers/usb/dwc2/hcd.c &hsotg->non_periodic_sched_active); hsotg 2788 drivers/usb/dwc2/hcd.c if (!hsotg->params.uframe_sched) hsotg 2789 drivers/usb/dwc2/hcd.c hsotg->non_periodic_channels++; hsotg 2816 drivers/usb/dwc2/hcd.c static int dwc2_queue_transaction(struct dwc2_hsotg *hsotg, hsotg 2825 drivers/usb/dwc2/hcd.c &hsotg->split_order); hsotg 2827 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma) { hsotg 2828 drivers/usb/dwc2/hcd.c if (hsotg->params.dma_desc_enable) { hsotg 2831 drivers/usb/dwc2/hcd.c dwc2_hcd_start_xfer_ddma(hsotg, chan->qh); hsotg 2835 drivers/usb/dwc2/hcd.c dwc2_hc_start_transfer(hsotg, chan); hsotg 2841 drivers/usb/dwc2/hcd.c dwc2_hc_halt(hsotg, chan, chan->halt_status); hsotg 2844 drivers/usb/dwc2/hcd.c dwc2_hc_start_transfer(hsotg, chan); hsotg 2849 drivers/usb/dwc2/hcd.c dwc2_hc_start_transfer(hsotg, chan); hsotg 2852 drivers/usb/dwc2/hcd.c retval = dwc2_hc_continue_transfer(hsotg, chan); hsotg 2859 drivers/usb/dwc2/hcd.c dwc2_hc_start_transfer(hsotg, chan); hsotg 2862 drivers/usb/dwc2/hcd.c retval = dwc2_hc_continue_transfer(hsotg, chan); hsotg 2878 drivers/usb/dwc2/hcd.c static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg) hsotg 2891 drivers/usb/dwc2/hcd.c if (list_empty(&hsotg->periodic_sched_assigned)) hsotg 2895 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "Queue periodic transactions\n"); hsotg 2897 drivers/usb/dwc2/hcd.c tx_status = dwc2_readl(hsotg, HPTXSTS); hsotg 2904 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " P Tx Req Queue Space Avail (before queue): %d\n", hsotg 2906 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " P Tx FIFO Space Avail (before queue): %d\n", hsotg 2910 drivers/usb/dwc2/hcd.c qh_ptr = hsotg->periodic_sched_assigned.next; hsotg 2911 drivers/usb/dwc2/hcd.c while (qh_ptr != &hsotg->periodic_sched_assigned) { hsotg 2912 drivers/usb/dwc2/hcd.c tx_status = dwc2_readl(hsotg, HPTXSTS); hsotg 2937 drivers/usb/dwc2/hcd.c if (!hsotg->params.host_dma && hsotg 2939 drivers/usb/dwc2/hcd.c hsotg->queuing_high_bandwidth = 1; hsotg 2943 drivers/usb/dwc2/hcd.c status = dwc2_queue_transaction(hsotg, qh->channel, fspcavail); hsotg 2956 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma || status == 0 || hsotg 2964 drivers/usb/dwc2/hcd.c &hsotg->periodic_sched_queued); hsotg 2967 drivers/usb/dwc2/hcd.c hsotg->queuing_high_bandwidth = 0; hsotg 2973 drivers/usb/dwc2/hcd.c (!hsotg->params.host_dma && hsotg 2974 drivers/usb/dwc2/hcd.c !list_empty(&hsotg->periodic_sched_assigned))) { hsotg 2982 drivers/usb/dwc2/hcd.c gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 2985 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gintmsk, GINTMSK); hsotg 2995 drivers/usb/dwc2/hcd.c gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 2998 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gintmsk, GINTMSK); hsotg 3012 drivers/usb/dwc2/hcd.c static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg) hsotg 3025 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "Queue non-periodic transactions\n"); hsotg 3027 drivers/usb/dwc2/hcd.c tx_status = dwc2_readl(hsotg, GNPTXSTS); hsotg 3032 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " NP Tx Req Queue Space Avail (before queue): %d\n", hsotg 3034 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " NP Tx FIFO Space Avail (before queue): %d\n", hsotg 3041 drivers/usb/dwc2/hcd.c if (hsotg->non_periodic_qh_ptr == &hsotg->non_periodic_sched_active) hsotg 3042 drivers/usb/dwc2/hcd.c hsotg->non_periodic_qh_ptr = hsotg->non_periodic_qh_ptr->next; hsotg 3043 drivers/usb/dwc2/hcd.c orig_qh_ptr = hsotg->non_periodic_qh_ptr; hsotg 3050 drivers/usb/dwc2/hcd.c tx_status = dwc2_readl(hsotg, GNPTXSTS); hsotg 3053 drivers/usb/dwc2/hcd.c if (!hsotg->params.host_dma && qspcavail == 0) { hsotg 3058 drivers/usb/dwc2/hcd.c qh = list_entry(hsotg->non_periodic_qh_ptr, struct dwc2_qh, hsotg 3069 drivers/usb/dwc2/hcd.c status = dwc2_queue_transaction(hsotg, qh->channel, fspcavail); hsotg 3079 drivers/usb/dwc2/hcd.c hsotg->non_periodic_qh_ptr = hsotg->non_periodic_qh_ptr->next; hsotg 3080 drivers/usb/dwc2/hcd.c if (hsotg->non_periodic_qh_ptr == hsotg 3081 drivers/usb/dwc2/hcd.c &hsotg->non_periodic_sched_active) hsotg 3082 drivers/usb/dwc2/hcd.c hsotg->non_periodic_qh_ptr = hsotg 3083 drivers/usb/dwc2/hcd.c hsotg->non_periodic_qh_ptr->next; hsotg 3084 drivers/usb/dwc2/hcd.c } while (hsotg->non_periodic_qh_ptr != orig_qh_ptr); hsotg 3086 drivers/usb/dwc2/hcd.c if (!hsotg->params.host_dma) { hsotg 3087 drivers/usb/dwc2/hcd.c tx_status = dwc2_readl(hsotg, GNPTXSTS); hsotg 3092 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, hsotg 3095 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, hsotg 3107 drivers/usb/dwc2/hcd.c gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 3109 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gintmsk, GINTMSK); hsotg 3118 drivers/usb/dwc2/hcd.c gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 3120 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gintmsk, GINTMSK); hsotg 3136 drivers/usb/dwc2/hcd.c void dwc2_hcd_queue_transactions(struct dwc2_hsotg *hsotg, hsotg 3140 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "Queue Transactions\n"); hsotg 3145 drivers/usb/dwc2/hcd.c dwc2_process_periodic_channels(hsotg); hsotg 3150 drivers/usb/dwc2/hcd.c if (!list_empty(&hsotg->non_periodic_sched_active)) { hsotg 3151 drivers/usb/dwc2/hcd.c dwc2_process_non_periodic_channels(hsotg); hsotg 3157 drivers/usb/dwc2/hcd.c u32 gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 3160 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gintmsk, GINTMSK); hsotg 3167 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = container_of(work, struct dwc2_hsotg, hsotg 3173 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "%s()\n", __func__); hsotg 3175 drivers/usb/dwc2/hcd.c gotgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 3176 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "gotgctl=%0x\n", gotgctl); hsotg 3177 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "gotgctl.b.conidsts=%d\n", hsotg 3182 drivers/usb/dwc2/hcd.c dwc2_vbus_supply_exit(hsotg); hsotg 3184 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "connId B\n"); hsotg 3185 drivers/usb/dwc2/hcd.c if (hsotg->bus_suspended) { hsotg 3186 drivers/usb/dwc2/hcd.c dev_info(hsotg->dev, hsotg 3188 drivers/usb/dwc2/hcd.c dwc2_port_resume(hsotg); hsotg 3190 drivers/usb/dwc2/hcd.c while (!dwc2_is_device_mode(hsotg)) { hsotg 3191 drivers/usb/dwc2/hcd.c dev_info(hsotg->dev, hsotg 3193 drivers/usb/dwc2/hcd.c dwc2_is_host_mode(hsotg) ? "Host" : hsotg 3201 drivers/usb/dwc2/hcd.c gotgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 3208 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 3210 drivers/usb/dwc2/hcd.c hsotg->op_state = OTG_STATE_B_PERIPHERAL; hsotg 3211 drivers/usb/dwc2/hcd.c dwc2_core_init(hsotg, false); hsotg 3212 drivers/usb/dwc2/hcd.c dwc2_enable_global_interrupts(hsotg); hsotg 3213 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 3214 drivers/usb/dwc2/hcd.c dwc2_hsotg_core_init_disconnected(hsotg, false); hsotg 3215 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 3217 drivers/usb/dwc2/hcd.c dwc2_enable_acg(hsotg); hsotg 3218 drivers/usb/dwc2/hcd.c dwc2_hsotg_core_connect(hsotg); hsotg 3222 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "connId A\n"); hsotg 3223 drivers/usb/dwc2/hcd.c while (!dwc2_is_host_mode(hsotg)) { hsotg 3224 drivers/usb/dwc2/hcd.c dev_info(hsotg->dev, "Waiting for Host Mode, Mode=%s\n", hsotg 3225 drivers/usb/dwc2/hcd.c dwc2_is_host_mode(hsotg) ? hsotg 3232 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 3235 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 3236 drivers/usb/dwc2/hcd.c dwc2_hsotg_disconnect(hsotg); hsotg 3237 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 3239 drivers/usb/dwc2/hcd.c hsotg->op_state = OTG_STATE_A_HOST; hsotg 3241 drivers/usb/dwc2/hcd.c dwc2_core_init(hsotg, false); hsotg 3242 drivers/usb/dwc2/hcd.c dwc2_enable_global_interrupts(hsotg); hsotg 3243 drivers/usb/dwc2/hcd.c dwc2_hcd_start(hsotg); hsotg 3249 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = from_timer(hsotg, t, wkp_timer); hsotg 3252 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "%s()\n", __func__); hsotg 3258 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 3259 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "Resume: HPRT0=%0x\n", hprt0); hsotg 3261 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 3262 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "Clear Resume: HPRT0=%0x\n", hsotg 3263 drivers/usb/dwc2/hcd.c dwc2_readl(hsotg, HPRT0)); hsotg 3265 drivers/usb/dwc2/hcd.c dwc2_hcd_rem_wakeup(hsotg); hsotg 3266 drivers/usb/dwc2/hcd.c hsotg->bus_suspended = false; hsotg 3269 drivers/usb/dwc2/hcd.c hsotg->lx_state = DWC2_L0; hsotg 3272 drivers/usb/dwc2/hcd.c static int dwc2_host_is_b_hnp_enabled(struct dwc2_hsotg *hsotg) hsotg 3274 drivers/usb/dwc2/hcd.c struct usb_hcd *hcd = dwc2_hsotg_to_hcd(hsotg); hsotg 3280 drivers/usb/dwc2/hcd.c static void dwc2_port_suspend(struct dwc2_hsotg *hsotg, u16 windex) hsotg 3287 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "%s()\n", __func__); hsotg 3289 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 3291 drivers/usb/dwc2/hcd.c if (windex == hsotg->otg_port && dwc2_host_is_b_hnp_enabled(hsotg)) { hsotg 3292 drivers/usb/dwc2/hcd.c gotgctl = dwc2_readl(hsotg, GOTGCTL); hsotg 3294 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gotgctl, GOTGCTL); hsotg 3295 drivers/usb/dwc2/hcd.c hsotg->op_state = OTG_STATE_A_SUSPEND; hsotg 3298 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 3300 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 3302 drivers/usb/dwc2/hcd.c hsotg->bus_suspended = true; hsotg 3308 drivers/usb/dwc2/hcd.c if (!hsotg->params.power_down) { hsotg 3310 drivers/usb/dwc2/hcd.c pcgctl = dwc2_readl(hsotg, PCGCTL); hsotg 3312 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, pcgctl, PCGCTL); hsotg 3317 drivers/usb/dwc2/hcd.c if (dwc2_host_is_b_hnp_enabled(hsotg)) { hsotg 3318 drivers/usb/dwc2/hcd.c pcgctl = dwc2_readl(hsotg, PCGCTL); hsotg 3320 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, pcgctl, PCGCTL); hsotg 3322 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 3326 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 3331 drivers/usb/dwc2/hcd.c static void dwc2_port_resume(struct dwc2_hsotg *hsotg) hsotg 3337 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 3343 drivers/usb/dwc2/hcd.c if (!hsotg->params.power_down) { hsotg 3344 drivers/usb/dwc2/hcd.c pcgctl = dwc2_readl(hsotg, PCGCTL); hsotg 3346 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, pcgctl, PCGCTL); hsotg 3347 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 3349 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 3352 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 3355 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 3356 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 3360 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 3361 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 3363 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 3364 drivers/usb/dwc2/hcd.c hsotg->bus_suspended = false; hsotg 3365 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 3369 drivers/usb/dwc2/hcd.c static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq, hsotg 3382 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "ClearHubFeature %1xh\n", wvalue); hsotg 3392 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 3404 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3406 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 3408 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 3412 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3415 drivers/usb/dwc2/hcd.c if (hsotg->bus_suspended) { hsotg 3416 drivers/usb/dwc2/hcd.c if (hsotg->hibernated) hsotg 3417 drivers/usb/dwc2/hcd.c dwc2_exit_hibernation(hsotg, 0, 0, 1); hsotg 3419 drivers/usb/dwc2/hcd.c dwc2_port_resume(hsotg); hsotg 3424 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3426 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 3429 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 3431 drivers/usb/dwc2/hcd.c dwc2_vbus_supply_exit(hsotg); hsotg 3435 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3444 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3446 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_connect_status_change = 0; hsotg 3451 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3453 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_reset_change = 0; hsotg 3461 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3463 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_enable_change = 0; hsotg 3472 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3474 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_suspend_change = 0; hsotg 3478 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3480 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_l1_change = 0; hsotg 3484 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3486 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_over_current_change = 0; hsotg 3491 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 3498 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "GetHubDescriptor\n"); hsotg 3513 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "GetHubStatus\n"); hsotg 3518 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, hsotg 3520 drivers/usb/dwc2/hcd.c hsotg->flags.d32); hsotg 3525 drivers/usb/dwc2/hcd.c if (hsotg->flags.b.port_connect_status_change) hsotg 3527 drivers/usb/dwc2/hcd.c if (hsotg->flags.b.port_enable_change) hsotg 3529 drivers/usb/dwc2/hcd.c if (hsotg->flags.b.port_suspend_change) hsotg 3531 drivers/usb/dwc2/hcd.c if (hsotg->flags.b.port_l1_change) hsotg 3533 drivers/usb/dwc2/hcd.c if (hsotg->flags.b.port_reset_change) hsotg 3535 drivers/usb/dwc2/hcd.c if (hsotg->flags.b.port_over_current_change) { hsotg 3536 drivers/usb/dwc2/hcd.c dev_warn(hsotg->dev, "Overcurrent change detected\n"); hsotg 3540 drivers/usb/dwc2/hcd.c if (!hsotg->flags.b.port_connect_status) { hsotg 3552 drivers/usb/dwc2/hcd.c hprt0 = dwc2_readl(hsotg, HPRT0); hsotg 3553 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " HPRT0: 0x%08x\n", hprt0); hsotg 3578 drivers/usb/dwc2/hcd.c if (hsotg->params.dma_desc_fs_enable) { hsotg 3583 drivers/usb/dwc2/hcd.c if (hsotg->new_connection && hsotg 3591 drivers/usb/dwc2/hcd.c dev_info(hsotg->dev, "Enabling descriptor DMA mode\n"); hsotg 3592 drivers/usb/dwc2/hcd.c hsotg->params.dma_desc_enable = true; hsotg 3593 drivers/usb/dwc2/hcd.c hcfg = dwc2_readl(hsotg, HCFG); hsotg 3595 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hcfg, HCFG); hsotg 3596 drivers/usb/dwc2/hcd.c hsotg->new_connection = false; hsotg 3600 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "port_status=%08x\n", port_status); hsotg 3605 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "SetHubFeature\n"); hsotg 3610 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "SetPortFeature\n"); hsotg 3614 drivers/usb/dwc2/hcd.c if (!hsotg->flags.b.port_connect_status) { hsotg 3627 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3629 drivers/usb/dwc2/hcd.c if (windex != hsotg->otg_port) hsotg 3631 drivers/usb/dwc2/hcd.c if (hsotg->params.power_down == 2) hsotg 3632 drivers/usb/dwc2/hcd.c dwc2_enter_hibernation(hsotg, 1); hsotg 3634 drivers/usb/dwc2/hcd.c dwc2_port_suspend(hsotg, windex); hsotg 3638 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3640 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 3643 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 3645 drivers/usb/dwc2/hcd.c dwc2_vbus_supply_init(hsotg); hsotg 3649 drivers/usb/dwc2/hcd.c if (hsotg->params.power_down == 2 && hsotg 3650 drivers/usb/dwc2/hcd.c hsotg->hibernated) hsotg 3651 drivers/usb/dwc2/hcd.c dwc2_exit_hibernation(hsotg, 0, 1, 1); hsotg 3652 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 3653 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3655 drivers/usb/dwc2/hcd.c pcgctl = dwc2_readl(hsotg, PCGCTL); hsotg 3657 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, pcgctl, PCGCTL); hsotg 3659 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, 0, PCGCTL); hsotg 3661 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 3671 drivers/usb/dwc2/hcd.c if (!dwc2_hcd_is_b_host(hsotg)) { hsotg 3673 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3675 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 3677 drivers/usb/dwc2/hcd.c dwc2_vbus_supply_init(hsotg); hsotg 3683 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 3684 drivers/usb/dwc2/hcd.c hsotg->lx_state = DWC2_L0; /* Now back to On state */ hsotg 3688 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3694 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 3695 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3699 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 3704 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 3714 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3723 drivers/usb/dwc2/hcd.c static int dwc2_hcd_is_status_changed(struct dwc2_hsotg *hsotg, int port) hsotg 3730 drivers/usb/dwc2/hcd.c retval = (hsotg->flags.b.port_connect_status_change || hsotg 3731 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_reset_change || hsotg 3732 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_enable_change || hsotg 3733 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_suspend_change || hsotg 3734 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_over_current_change); hsotg 3737 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3739 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " port_connect_status_change: %d\n", hsotg 3740 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_connect_status_change); hsotg 3741 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " port_reset_change: %d\n", hsotg 3742 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_reset_change); hsotg 3743 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " port_enable_change: %d\n", hsotg 3744 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_enable_change); hsotg 3745 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " port_suspend_change: %d\n", hsotg 3746 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_suspend_change); hsotg 3747 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " port_over_current_change: %d\n", hsotg 3748 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_over_current_change); hsotg 3754 drivers/usb/dwc2/hcd.c int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg) hsotg 3756 drivers/usb/dwc2/hcd.c u32 hfnum = dwc2_readl(hsotg, HFNUM); hsotg 3759 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "DWC OTG HCD GET FRAME NUMBER %d\n", hsotg 3765 drivers/usb/dwc2/hcd.c int dwc2_hcd_get_future_frame_number(struct dwc2_hsotg *hsotg, int us) hsotg 3767 drivers/usb/dwc2/hcd.c u32 hprt = dwc2_readl(hsotg, HPRT0); hsotg 3768 drivers/usb/dwc2/hcd.c u32 hfir = dwc2_readl(hsotg, HFIR); hsotg 3769 drivers/usb/dwc2/hcd.c u32 hfnum = dwc2_readl(hsotg, HFNUM); hsotg 3794 drivers/usb/dwc2/hcd.c int dwc2_hcd_is_b_host(struct dwc2_hsotg *hsotg) hsotg 3796 drivers/usb/dwc2/hcd.c return hsotg->op_state == OTG_STATE_B_HOST; hsotg 3799 drivers/usb/dwc2/hcd.c static struct dwc2_hcd_urb *dwc2_hcd_urb_alloc(struct dwc2_hsotg *hsotg, hsotg 3811 drivers/usb/dwc2/hcd.c static void dwc2_hcd_urb_set_pipeinfo(struct dwc2_hsotg *hsotg, hsotg 3819 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, hsotg 3834 drivers/usb/dwc2/hcd.c void dwc2_hcd_dump_state(struct dwc2_hsotg *hsotg) hsotg 3845 drivers/usb/dwc2/hcd.c num_channels = hsotg->params.host_channels; hsotg 3846 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "\n"); hsotg 3847 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3849 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "HCD State:\n"); hsotg 3850 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " Num channels: %d\n", num_channels); hsotg 3853 drivers/usb/dwc2/hcd.c chan = hsotg->hc_ptr_array[i]; hsotg 3854 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " Channel %d:\n", i); hsotg 3855 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3858 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " speed: %d\n", chan->speed); hsotg 3859 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " ep_type: %d\n", chan->ep_type); hsotg 3860 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " max_packet: %d\n", chan->max_packet); hsotg 3861 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " data_pid_start: %d\n", hsotg 3863 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " multi_count: %d\n", chan->multi_count); hsotg 3864 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " xfer_started: %d\n", hsotg 3866 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " xfer_buf: %p\n", chan->xfer_buf); hsotg 3867 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " xfer_dma: %08lx\n", hsotg 3869 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " xfer_len: %d\n", chan->xfer_len); hsotg 3870 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " xfer_count: %d\n", chan->xfer_count); hsotg 3871 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " halt_on_queue: %d\n", hsotg 3873 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " halt_pending: %d\n", hsotg 3875 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " halt_status: %d\n", chan->halt_status); hsotg 3876 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " do_split: %d\n", chan->do_split); hsotg 3877 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " complete_split: %d\n", hsotg 3879 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " hub_addr: %d\n", chan->hub_addr); hsotg 3880 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " hub_port: %d\n", chan->hub_port); hsotg 3881 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " xact_pos: %d\n", chan->xact_pos); hsotg 3882 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " requests: %d\n", chan->requests); hsotg 3883 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " qh: %p\n", chan->qh); hsotg 3888 drivers/usb/dwc2/hcd.c hfnum = dwc2_readl(hsotg, HFNUM); hsotg 3889 drivers/usb/dwc2/hcd.c hcchar = dwc2_readl(hsotg, HCCHAR(i)); hsotg 3890 drivers/usb/dwc2/hcd.c hctsiz = dwc2_readl(hsotg, HCTSIZ(i)); hsotg 3891 drivers/usb/dwc2/hcd.c hcint = dwc2_readl(hsotg, HCINT(i)); hsotg 3892 drivers/usb/dwc2/hcd.c hcintmsk = dwc2_readl(hsotg, HCINTMSK(i)); hsotg 3893 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " hfnum: 0x%08x\n", hfnum); hsotg 3894 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " hcchar: 0x%08x\n", hcchar); hsotg 3895 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " hctsiz: 0x%08x\n", hctsiz); hsotg 3896 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " hcint: 0x%08x\n", hcint); hsotg 3897 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " hcintmsk: 0x%08x\n", hcintmsk); hsotg 3907 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " URB Info:\n"); hsotg 3908 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " qtd: %p, urb: %p\n", hsotg 3911 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3917 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3921 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3924 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3927 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3930 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " actual_length: %d\n", hsotg 3936 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " non_periodic_channels: %d\n", hsotg 3937 drivers/usb/dwc2/hcd.c hsotg->non_periodic_channels); hsotg 3938 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " periodic_channels: %d\n", hsotg 3939 drivers/usb/dwc2/hcd.c hsotg->periodic_channels); hsotg 3940 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " periodic_usecs: %d\n", hsotg->periodic_usecs); hsotg 3941 drivers/usb/dwc2/hcd.c np_tx_status = dwc2_readl(hsotg, GNPTXSTS); hsotg 3942 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " NP Tx Req Queue Space Avail: %d\n", hsotg 3944 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " NP Tx FIFO Space Avail: %d\n", hsotg 3946 drivers/usb/dwc2/hcd.c p_tx_status = dwc2_readl(hsotg, HPTXSTS); hsotg 3947 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " P Tx Req Queue Space Avail: %d\n", hsotg 3949 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " P Tx FIFO Space Avail: %d\n", hsotg 3951 drivers/usb/dwc2/hcd.c dwc2_dump_global_registers(hsotg); hsotg 3952 drivers/usb/dwc2/hcd.c dwc2_dump_host_registers(hsotg); hsotg 3953 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 3955 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "\n"); hsotg 3960 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg; hsotg 3969 drivers/usb/dwc2/hcd.c return p->hsotg; hsotg 3992 drivers/usb/dwc2/hcd.c struct dwc2_tt *dwc2_host_get_tt_info(struct dwc2_hsotg *hsotg, void *context, hsotg 4040 drivers/usb/dwc2/hcd.c void dwc2_host_put_tt_info(struct dwc2_hsotg *hsotg, struct dwc2_tt *dwc_tt) hsotg 4055 drivers/usb/dwc2/hcd.c int dwc2_host_get_speed(struct dwc2_hsotg *hsotg, void *context) hsotg 4094 drivers/usb/dwc2/hcd.c void dwc2_host_complete(struct dwc2_hsotg *hsotg, struct dwc2_qtd *qtd, hsotg 4101 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "## %s: qtd is NULL ##\n", __func__); hsotg 4106 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "## %s: qtd->urb is NULL ##\n", __func__); hsotg 4112 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "## %s: urb->priv is NULL ##\n", __func__); hsotg 4119 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, hsotg 4139 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " ISO Desc %d status %d\n", hsotg 4155 drivers/usb/dwc2/hcd.c dwc2_free_bus_bandwidth(dwc2_hsotg_to_hcd(hsotg), hsotg 4156 drivers/usb/dwc2/hcd.c dwc2_hcd_get_ep_bandwidth(hsotg, ep), hsotg 4160 drivers/usb/dwc2/hcd.c usb_hcd_unlink_urb_from_ep(dwc2_hsotg_to_hcd(hsotg), urb); hsotg 4165 drivers/usb/dwc2/hcd.c usb_hcd_giveback_urb(dwc2_hsotg_to_hcd(hsotg), urb, status); hsotg 4173 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = container_of(work, struct dwc2_hsotg, hsotg 4176 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "%s() %p\n", __func__, hsotg); hsotg 4177 drivers/usb/dwc2/hcd.c dwc2_host_start(hsotg); hsotg 4185 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = container_of(work, struct dwc2_hsotg, hsotg 4190 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "USB RESET function called\n"); hsotg 4192 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4194 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 4196 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 4197 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_reset_change = 1; hsotg 4199 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4204 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = container_of(work, struct dwc2_hsotg, hsotg 4208 drivers/usb/dwc2/hcd.c ret = phy_reset(hsotg->phy); hsotg 4210 drivers/usb/dwc2/hcd.c dev_warn(hsotg->dev, "PHY reset failed\n"); hsotg 4226 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4232 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "DWC OTG HCD START\n"); hsotg 4234 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4235 drivers/usb/dwc2/hcd.c hsotg->lx_state = DWC2_L0; hsotg 4239 drivers/usb/dwc2/hcd.c if (dwc2_is_device_mode(hsotg)) { hsotg 4240 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4244 drivers/usb/dwc2/hcd.c dwc2_hcd_reinit(hsotg); hsotg 4246 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 4250 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4251 drivers/usb/dwc2/hcd.c ret = dwc2_vbus_supply_init(hsotg); hsotg 4254 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4259 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "DWC OTG HCD Has Root Hub\n"); hsotg 4264 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4275 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4280 drivers/usb/dwc2/hcd.c dwc2_disable_host_interrupts(hsotg); hsotg 4285 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4286 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 4288 drivers/usb/dwc2/hcd.c dwc2_hcd_disconnect(hsotg, true); hsotg 4289 drivers/usb/dwc2/hcd.c dwc2_hcd_stop(hsotg); hsotg 4290 drivers/usb/dwc2/hcd.c hsotg->lx_state = DWC2_L3; hsotg 4293 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4297 drivers/usb/dwc2/hcd.c dwc2_vbus_supply_exit(hsotg); hsotg 4304 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4310 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4312 drivers/usb/dwc2/hcd.c if (dwc2_is_device_mode(hsotg)) hsotg 4315 drivers/usb/dwc2/hcd.c if (hsotg->lx_state != DWC2_L0) hsotg 4321 drivers/usb/dwc2/hcd.c if (hsotg->op_state == OTG_STATE_B_PERIPHERAL) hsotg 4324 drivers/usb/dwc2/hcd.c if (hsotg->params.power_down > DWC2_POWER_DOWN_PARAM_PARTIAL) hsotg 4331 drivers/usb/dwc2/hcd.c if (!hsotg->bus_suspended) { hsotg 4332 drivers/usb/dwc2/hcd.c hprt0 = dwc2_read_hprt0(hsotg); hsotg 4335 drivers/usb/dwc2/hcd.c if (hsotg->params.power_down == DWC2_POWER_DOWN_PARAM_PARTIAL) hsotg 4337 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 4339 drivers/usb/dwc2/hcd.c if (hsotg->params.power_down == DWC2_POWER_DOWN_PARAM_PARTIAL) { hsotg 4340 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4341 drivers/usb/dwc2/hcd.c dwc2_vbus_supply_exit(hsotg); hsotg 4342 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4344 drivers/usb/dwc2/hcd.c pcgctl = readl(hsotg->regs + PCGCTL); hsotg 4346 drivers/usb/dwc2/hcd.c writel(pcgctl, hsotg->regs + PCGCTL); hsotg 4350 drivers/usb/dwc2/hcd.c if (hsotg->params.power_down == DWC2_POWER_DOWN_PARAM_PARTIAL) { hsotg 4352 drivers/usb/dwc2/hcd.c ret = dwc2_enter_partial_power_down(hsotg); hsotg 4355 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 4365 drivers/usb/dwc2/hcd.c if (!IS_ERR_OR_NULL(hsotg->uphy)) { hsotg 4366 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4367 drivers/usb/dwc2/hcd.c usb_phy_set_suspend(hsotg->uphy, true); hsotg 4368 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4372 drivers/usb/dwc2/hcd.c hsotg->lx_state = DWC2_L2; hsotg 4374 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4381 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4386 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4388 drivers/usb/dwc2/hcd.c if (dwc2_is_device_mode(hsotg)) hsotg 4391 drivers/usb/dwc2/hcd.c if (hsotg->lx_state != DWC2_L2) hsotg 4394 drivers/usb/dwc2/hcd.c if (hsotg->params.power_down > DWC2_POWER_DOWN_PARAM_PARTIAL) { hsotg 4395 drivers/usb/dwc2/hcd.c hsotg->lx_state = DWC2_L0; hsotg 4404 drivers/usb/dwc2/hcd.c if (!IS_ERR_OR_NULL(hsotg->uphy)) { hsotg 4405 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4406 drivers/usb/dwc2/hcd.c usb_phy_set_suspend(hsotg->uphy, false); hsotg 4407 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4410 drivers/usb/dwc2/hcd.c if (hsotg->params.power_down == DWC2_POWER_DOWN_PARAM_PARTIAL) { hsotg 4419 drivers/usb/dwc2/hcd.c ret = dwc2_exit_partial_power_down(hsotg, true); hsotg 4421 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "exit partial_power_down failed\n"); hsotg 4423 drivers/usb/dwc2/hcd.c pcgctl = readl(hsotg->regs + PCGCTL); hsotg 4425 drivers/usb/dwc2/hcd.c writel(pcgctl, hsotg->regs + PCGCTL); hsotg 4428 drivers/usb/dwc2/hcd.c hsotg->lx_state = DWC2_L0; hsotg 4430 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4432 drivers/usb/dwc2/hcd.c if (hsotg->bus_suspended) { hsotg 4433 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4434 drivers/usb/dwc2/hcd.c hsotg->flags.b.port_suspend_change = 1; hsotg 4435 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4436 drivers/usb/dwc2/hcd.c dwc2_port_resume(hsotg); hsotg 4438 drivers/usb/dwc2/hcd.c if (hsotg->params.power_down == DWC2_POWER_DOWN_PARAM_PARTIAL) { hsotg 4439 drivers/usb/dwc2/hcd.c dwc2_vbus_supply_init(hsotg); hsotg 4449 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, HPRT0_PWR | HPRT0_CONNDET | hsotg 4457 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4465 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4467 drivers/usb/dwc2/hcd.c return dwc2_hcd_get_frame_number(hsotg); hsotg 4474 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4478 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "%s, urb %p\n", fn_name, urb); hsotg 4479 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Device address: %d\n", hsotg 4481 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Endpoint: %d, %s\n", hsotg 4500 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Endpoint type: %s %s (%s)\n", pipetype, hsotg 4519 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Speed: %s\n", speed); hsotg 4520 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Max packet size: %d (%d mult)\n", hsotg 4524 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Data buffer length: %d\n", hsotg 4526 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Transfer buffer: %p, Transfer DMA: %08lx\n", hsotg 4528 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Setup buffer: %p, Setup DMA: %08lx\n", hsotg 4530 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " Interval: %d\n", urb->interval); hsotg 4536 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " ISO Desc %d:\n", i); hsotg 4537 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, " offset: %d, length %d\n", hsotg 4553 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4568 drivers/usb/dwc2/hcd.c dev_vdbg(hsotg->dev, "DWC OTG HCD URB Enqueue\n"); hsotg 4577 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4578 drivers/usb/dwc2/hcd.c if (!dwc2_hcd_is_bandwidth_allocated(hsotg, ep)) hsotg 4580 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4598 drivers/usb/dwc2/hcd.c dwc2_urb = dwc2_hcd_urb_alloc(hsotg, urb->number_of_packets, hsotg 4603 drivers/usb/dwc2/hcd.c dwc2_hcd_urb_set_pipeinfo(hsotg, dwc2_urb, usb_pipedevice(urb->pipe), hsotg 4613 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 4645 drivers/usb/dwc2/hcd.c qh = dwc2_hcd_qh_create(hsotg, dwc2_urb, mem_flags); hsotg 4660 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4665 drivers/usb/dwc2/hcd.c retval = dwc2_hcd_urb_enqueue(hsotg, dwc2_urb, qh, qtd); hsotg 4671 drivers/usb/dwc2/hcd.c dwc2_hcd_get_ep_bandwidth(hsotg, ep), hsotg 4675 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4685 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4693 drivers/usb/dwc2/hcd.c dwc2_hcd_qh_unlink(hsotg, qh); hsotg 4697 drivers/usb/dwc2/hcd.c dwc2_hcd_qtd_unlink_and_free(hsotg, qtd2, qh); hsotg 4698 drivers/usb/dwc2/hcd.c dwc2_hcd_qh_free(hsotg, qh); hsotg 4712 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4716 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "DWC OTG HCD URB Dequeue\n"); hsotg 4719 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4726 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "## urb->hcpriv is NULL ##\n"); hsotg 4730 drivers/usb/dwc2/hcd.c rc = dwc2_hcd_urb_dequeue(hsotg, urb->hcpriv); hsotg 4738 drivers/usb/dwc2/hcd.c spin_unlock(&hsotg->lock); hsotg 4740 drivers/usb/dwc2/hcd.c spin_lock(&hsotg->lock); hsotg 4742 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "Called usb_hcd_giveback_urb()\n"); hsotg 4743 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, " urb->status = %d\n", urb->status); hsotg 4745 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4758 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4760 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 4763 drivers/usb/dwc2/hcd.c dwc2_hcd_endpoint_disable(hsotg, ep, 250); hsotg 4774 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4777 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 4781 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4782 drivers/usb/dwc2/hcd.c dwc2_hcd_endpoint_reset(hsotg, ep); hsotg 4783 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4795 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4797 drivers/usb/dwc2/hcd.c return dwc2_handle_hcd_intr(hsotg); hsotg 4808 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4810 drivers/usb/dwc2/hcd.c buf[0] = dwc2_hcd_is_status_changed(hsotg, 1) << 1; hsotg 4827 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4835 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 4838 drivers/usb/dwc2/hcd.c if (hsotg->flags.b.port_connect_status) hsotg 4839 drivers/usb/dwc2/hcd.c dwc2_hcd_queue_transactions(hsotg, DWC2_TRANSACTION_ALL); hsotg 4841 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 4850 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4852 drivers/usb/dwc2/hcd.c if (hsotg->params.speed == speed) hsotg 4855 drivers/usb/dwc2/hcd.c hsotg->params.speed = speed; hsotg 4856 drivers/usb/dwc2/hcd.c queue_work(hsotg->wq_otg, &hsotg->wf_otg); hsotg 4861 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4863 drivers/usb/dwc2/hcd.c if (!hsotg->params.change_speed_quirk) hsotg 4871 drivers/usb/dwc2/hcd.c dev_info(hsotg->dev, "Set speed to default high-speed\n"); hsotg 4878 drivers/usb/dwc2/hcd.c struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd); hsotg 4880 drivers/usb/dwc2/hcd.c if (!hsotg->params.change_speed_quirk) hsotg 4884 drivers/usb/dwc2/hcd.c dev_info(hsotg->dev, "Set speed to high-speed\n"); hsotg 4892 drivers/usb/dwc2/hcd.c dev_info(hsotg->dev, "Set speed to full-speed\n"); hsotg 4930 drivers/usb/dwc2/hcd.c static void dwc2_hcd_free(struct dwc2_hsotg *hsotg) hsotg 4936 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "DWC OTG HCD FREE\n"); hsotg 4939 drivers/usb/dwc2/hcd.c dwc2_qh_list_free(hsotg, &hsotg->non_periodic_sched_inactive); hsotg 4940 drivers/usb/dwc2/hcd.c dwc2_qh_list_free(hsotg, &hsotg->non_periodic_sched_waiting); hsotg 4941 drivers/usb/dwc2/hcd.c dwc2_qh_list_free(hsotg, &hsotg->non_periodic_sched_active); hsotg 4942 drivers/usb/dwc2/hcd.c dwc2_qh_list_free(hsotg, &hsotg->periodic_sched_inactive); hsotg 4943 drivers/usb/dwc2/hcd.c dwc2_qh_list_free(hsotg, &hsotg->periodic_sched_ready); hsotg 4944 drivers/usb/dwc2/hcd.c dwc2_qh_list_free(hsotg, &hsotg->periodic_sched_assigned); hsotg 4945 drivers/usb/dwc2/hcd.c dwc2_qh_list_free(hsotg, &hsotg->periodic_sched_queued); hsotg 4949 drivers/usb/dwc2/hcd.c struct dwc2_host_chan *chan = hsotg->hc_ptr_array[i]; hsotg 4952 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "HCD Free channel #%i, chan=%p\n", hsotg 4954 drivers/usb/dwc2/hcd.c hsotg->hc_ptr_array[i] = NULL; hsotg 4959 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma) { hsotg 4960 drivers/usb/dwc2/hcd.c if (hsotg->status_buf) { hsotg 4961 drivers/usb/dwc2/hcd.c dma_free_coherent(hsotg->dev, DWC2_HCD_STATUS_BUF_SIZE, hsotg 4962 drivers/usb/dwc2/hcd.c hsotg->status_buf, hsotg 4963 drivers/usb/dwc2/hcd.c hsotg->status_buf_dma); hsotg 4964 drivers/usb/dwc2/hcd.c hsotg->status_buf = NULL; hsotg 4967 drivers/usb/dwc2/hcd.c kfree(hsotg->status_buf); hsotg 4968 drivers/usb/dwc2/hcd.c hsotg->status_buf = NULL; hsotg 4971 drivers/usb/dwc2/hcd.c ahbcfg = dwc2_readl(hsotg, GAHBCFG); hsotg 4975 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, ahbcfg, GAHBCFG); hsotg 4976 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, 0, GINTMSK); hsotg 4978 drivers/usb/dwc2/hcd.c if (hsotg->hw_params.snpsid >= DWC2_CORE_REV_3_00a) { hsotg 4979 drivers/usb/dwc2/hcd.c dctl = dwc2_readl(hsotg, DCTL); hsotg 4981 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, dctl, DCTL); hsotg 4984 drivers/usb/dwc2/hcd.c if (hsotg->wq_otg) { hsotg 4985 drivers/usb/dwc2/hcd.c if (!cancel_work_sync(&hsotg->wf_otg)) hsotg 4986 drivers/usb/dwc2/hcd.c flush_workqueue(hsotg->wq_otg); hsotg 4987 drivers/usb/dwc2/hcd.c destroy_workqueue(hsotg->wq_otg); hsotg 4990 drivers/usb/dwc2/hcd.c cancel_work_sync(&hsotg->phy_reset_work); hsotg 4992 drivers/usb/dwc2/hcd.c del_timer(&hsotg->wkp_timer); hsotg 4995 drivers/usb/dwc2/hcd.c static void dwc2_hcd_release(struct dwc2_hsotg *hsotg) hsotg 4998 drivers/usb/dwc2/hcd.c dwc2_disable_host_interrupts(hsotg); hsotg 5000 drivers/usb/dwc2/hcd.c dwc2_hcd_free(hsotg); hsotg 5009 drivers/usb/dwc2/hcd.c int dwc2_hcd_init(struct dwc2_hsotg *hsotg) hsotg 5011 drivers/usb/dwc2/hcd.c struct platform_device *pdev = to_platform_device(hsotg->dev); hsotg 5022 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "DWC OTG HCD INIT\n"); hsotg 5026 drivers/usb/dwc2/hcd.c hcfg = dwc2_readl(hsotg, HCFG); hsotg 5027 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "hcfg=%08x\n", hcfg); hsotg 5030 drivers/usb/dwc2/hcd.c hsotg->frame_num_array = kcalloc(FRAME_NUM_ARRAY_SIZE, hsotg 5031 drivers/usb/dwc2/hcd.c sizeof(*hsotg->frame_num_array), hsotg 5033 drivers/usb/dwc2/hcd.c if (!hsotg->frame_num_array) hsotg 5035 drivers/usb/dwc2/hcd.c hsotg->last_frame_num_array = hsotg 5037 drivers/usb/dwc2/hcd.c sizeof(*hsotg->last_frame_num_array), GFP_KERNEL); hsotg 5038 drivers/usb/dwc2/hcd.c if (!hsotg->last_frame_num_array) hsotg 5041 drivers/usb/dwc2/hcd.c hsotg->last_frame_num = HFNUM_MAX_FRNUM; hsotg 5044 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma && hsotg 5045 drivers/usb/dwc2/hcd.c !hsotg->dev->dma_mask) { hsotg 5046 drivers/usb/dwc2/hcd.c dev_warn(hsotg->dev, hsotg 5048 drivers/usb/dwc2/hcd.c hsotg->params.host_dma = false; hsotg 5049 drivers/usb/dwc2/hcd.c hsotg->params.dma_desc_enable = false; hsotg 5053 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma) { hsotg 5054 drivers/usb/dwc2/hcd.c if (dma_set_mask(hsotg->dev, DMA_BIT_MASK(32)) < 0) hsotg 5055 drivers/usb/dwc2/hcd.c dev_warn(hsotg->dev, "can't set DMA mask\n"); hsotg 5056 drivers/usb/dwc2/hcd.c if (dma_set_coherent_mask(hsotg->dev, DMA_BIT_MASK(32)) < 0) hsotg 5057 drivers/usb/dwc2/hcd.c dev_warn(hsotg->dev, "can't set coherent DMA mask\n"); hsotg 5060 drivers/usb/dwc2/hcd.c if (hsotg->params.change_speed_quirk) { hsotg 5065 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma) hsotg 5068 drivers/usb/dwc2/hcd.c hcd = usb_create_hcd(&dwc2_hc_driver, hsotg->dev, dev_name(hsotg->dev)); hsotg 5078 drivers/usb/dwc2/hcd.c ((struct wrapper_priv_data *)&hcd->hcd_priv)->hsotg = hsotg; hsotg 5079 drivers/usb/dwc2/hcd.c hsotg->priv = hcd; hsotg 5085 drivers/usb/dwc2/hcd.c dwc2_disable_global_interrupts(hsotg); hsotg 5088 drivers/usb/dwc2/hcd.c retval = dwc2_core_init(hsotg, true); hsotg 5094 drivers/usb/dwc2/hcd.c hsotg->wq_otg = alloc_ordered_workqueue("dwc2", 0); hsotg 5095 drivers/usb/dwc2/hcd.c if (!hsotg->wq_otg) { hsotg 5096 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "Failed to create workqueue\n"); hsotg 5099 drivers/usb/dwc2/hcd.c INIT_WORK(&hsotg->wf_otg, dwc2_conn_id_status_change); hsotg 5101 drivers/usb/dwc2/hcd.c timer_setup(&hsotg->wkp_timer, dwc2_wakeup_detected, 0); hsotg 5104 drivers/usb/dwc2/hcd.c INIT_LIST_HEAD(&hsotg->non_periodic_sched_inactive); hsotg 5105 drivers/usb/dwc2/hcd.c INIT_LIST_HEAD(&hsotg->non_periodic_sched_waiting); hsotg 5106 drivers/usb/dwc2/hcd.c INIT_LIST_HEAD(&hsotg->non_periodic_sched_active); hsotg 5109 drivers/usb/dwc2/hcd.c INIT_LIST_HEAD(&hsotg->periodic_sched_inactive); hsotg 5110 drivers/usb/dwc2/hcd.c INIT_LIST_HEAD(&hsotg->periodic_sched_ready); hsotg 5111 drivers/usb/dwc2/hcd.c INIT_LIST_HEAD(&hsotg->periodic_sched_assigned); hsotg 5112 drivers/usb/dwc2/hcd.c INIT_LIST_HEAD(&hsotg->periodic_sched_queued); hsotg 5114 drivers/usb/dwc2/hcd.c INIT_LIST_HEAD(&hsotg->split_order); hsotg 5120 drivers/usb/dwc2/hcd.c INIT_LIST_HEAD(&hsotg->free_hc_list); hsotg 5121 drivers/usb/dwc2/hcd.c num_channels = hsotg->params.host_channels; hsotg 5122 drivers/usb/dwc2/hcd.c memset(&hsotg->hc_ptr_array[0], 0, sizeof(hsotg->hc_ptr_array)); hsotg 5130 drivers/usb/dwc2/hcd.c hsotg->hc_ptr_array[i] = channel; hsotg 5134 drivers/usb/dwc2/hcd.c INIT_DELAYED_WORK(&hsotg->start_work, dwc2_hcd_start_func); hsotg 5135 drivers/usb/dwc2/hcd.c INIT_DELAYED_WORK(&hsotg->reset_work, dwc2_hcd_reset_func); hsotg 5136 drivers/usb/dwc2/hcd.c INIT_WORK(&hsotg->phy_reset_work, dwc2_hcd_phy_reset_func); hsotg 5144 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma) hsotg 5145 drivers/usb/dwc2/hcd.c hsotg->status_buf = dma_alloc_coherent(hsotg->dev, hsotg 5147 drivers/usb/dwc2/hcd.c &hsotg->status_buf_dma, GFP_KERNEL); hsotg 5149 drivers/usb/dwc2/hcd.c hsotg->status_buf = kzalloc(DWC2_HCD_STATUS_BUF_SIZE, hsotg 5152 drivers/usb/dwc2/hcd.c if (!hsotg->status_buf) hsotg 5160 drivers/usb/dwc2/hcd.c if (hsotg->params.dma_desc_enable || hsotg 5161 drivers/usb/dwc2/hcd.c hsotg->params.dma_desc_fs_enable) { hsotg 5162 drivers/usb/dwc2/hcd.c hsotg->desc_gen_cache = kmem_cache_create("dwc2-gen-desc", hsotg 5166 drivers/usb/dwc2/hcd.c if (!hsotg->desc_gen_cache) { hsotg 5167 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 5174 drivers/usb/dwc2/hcd.c hsotg->params.dma_desc_enable = false; hsotg 5175 drivers/usb/dwc2/hcd.c hsotg->params.dma_desc_fs_enable = false; hsotg 5178 drivers/usb/dwc2/hcd.c hsotg->desc_hsisoc_cache = kmem_cache_create("dwc2-hsisoc-desc", hsotg 5181 drivers/usb/dwc2/hcd.c if (!hsotg->desc_hsisoc_cache) { hsotg 5182 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 5185 drivers/usb/dwc2/hcd.c kmem_cache_destroy(hsotg->desc_gen_cache); hsotg 5191 drivers/usb/dwc2/hcd.c hsotg->params.dma_desc_enable = false; hsotg 5192 drivers/usb/dwc2/hcd.c hsotg->params.dma_desc_fs_enable = false; hsotg 5196 drivers/usb/dwc2/hcd.c if (hsotg->params.host_dma) { hsotg 5201 drivers/usb/dwc2/hcd.c hsotg->unaligned_cache = kmem_cache_create("dwc2-unaligned-dma", hsotg 5204 drivers/usb/dwc2/hcd.c if (!hsotg->unaligned_cache) hsotg 5205 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, hsotg 5209 drivers/usb/dwc2/hcd.c hsotg->otg_port = 1; hsotg 5210 drivers/usb/dwc2/hcd.c hsotg->frame_list = NULL; hsotg 5211 drivers/usb/dwc2/hcd.c hsotg->frame_list_dma = 0; hsotg 5212 drivers/usb/dwc2/hcd.c hsotg->periodic_qh_count = 0; hsotg 5215 drivers/usb/dwc2/hcd.c hsotg->lx_state = DWC2_L3; hsotg 5217 drivers/usb/dwc2/hcd.c hcd->self.otg_port = hsotg->otg_port; hsotg 5222 drivers/usb/dwc2/hcd.c if (!IS_ERR_OR_NULL(hsotg->uphy)) hsotg 5223 drivers/usb/dwc2/hcd.c otg_set_host(hsotg->uphy->otg, &hcd->self); hsotg 5230 drivers/usb/dwc2/hcd.c retval = usb_add_hcd(hcd, hsotg->irq, IRQF_SHARED); hsotg 5236 drivers/usb/dwc2/hcd.c dwc2_hcd_dump_state(hsotg); hsotg 5238 drivers/usb/dwc2/hcd.c dwc2_enable_global_interrupts(hsotg); hsotg 5243 drivers/usb/dwc2/hcd.c kmem_cache_destroy(hsotg->unaligned_cache); hsotg 5244 drivers/usb/dwc2/hcd.c kmem_cache_destroy(hsotg->desc_hsisoc_cache); hsotg 5245 drivers/usb/dwc2/hcd.c kmem_cache_destroy(hsotg->desc_gen_cache); hsotg 5247 drivers/usb/dwc2/hcd.c dwc2_hcd_release(hsotg); hsotg 5253 drivers/usb/dwc2/hcd.c kfree(hsotg->last_frame_num_array); hsotg 5254 drivers/usb/dwc2/hcd.c kfree(hsotg->frame_num_array); hsotg 5257 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "%s() FAILED, returning %d\n", __func__, retval); hsotg 5265 drivers/usb/dwc2/hcd.c void dwc2_hcd_remove(struct dwc2_hsotg *hsotg) hsotg 5269 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "DWC OTG HCD REMOVE\n"); hsotg 5271 drivers/usb/dwc2/hcd.c hcd = dwc2_hsotg_to_hcd(hsotg); hsotg 5272 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "hsotg->hcd = %p\n", hcd); hsotg 5275 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "%s: dwc2_hsotg_to_hcd(hsotg) NULL!\n", hsotg 5280 drivers/usb/dwc2/hcd.c if (!IS_ERR_OR_NULL(hsotg->uphy)) hsotg 5281 drivers/usb/dwc2/hcd.c otg_set_host(hsotg->uphy->otg, NULL); hsotg 5284 drivers/usb/dwc2/hcd.c hsotg->priv = NULL; hsotg 5286 drivers/usb/dwc2/hcd.c kmem_cache_destroy(hsotg->unaligned_cache); hsotg 5287 drivers/usb/dwc2/hcd.c kmem_cache_destroy(hsotg->desc_hsisoc_cache); hsotg 5288 drivers/usb/dwc2/hcd.c kmem_cache_destroy(hsotg->desc_gen_cache); hsotg 5290 drivers/usb/dwc2/hcd.c dwc2_hcd_release(hsotg); hsotg 5294 drivers/usb/dwc2/hcd.c kfree(hsotg->last_frame_num_array); hsotg 5295 drivers/usb/dwc2/hcd.c kfree(hsotg->frame_num_array); hsotg 5306 drivers/usb/dwc2/hcd.c int dwc2_backup_host_registers(struct dwc2_hsotg *hsotg) hsotg 5311 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "%s\n", __func__); hsotg 5314 drivers/usb/dwc2/hcd.c hr = &hsotg->hr_backup; hsotg 5315 drivers/usb/dwc2/hcd.c hr->hcfg = dwc2_readl(hsotg, HCFG); hsotg 5316 drivers/usb/dwc2/hcd.c hr->haintmsk = dwc2_readl(hsotg, HAINTMSK); hsotg 5317 drivers/usb/dwc2/hcd.c for (i = 0; i < hsotg->params.host_channels; ++i) hsotg 5318 drivers/usb/dwc2/hcd.c hr->hcintmsk[i] = dwc2_readl(hsotg, HCINTMSK(i)); hsotg 5320 drivers/usb/dwc2/hcd.c hr->hprt0 = dwc2_read_hprt0(hsotg); hsotg 5321 drivers/usb/dwc2/hcd.c hr->hfir = dwc2_readl(hsotg, HFIR); hsotg 5322 drivers/usb/dwc2/hcd.c hr->hptxfsiz = dwc2_readl(hsotg, HPTXFSIZ); hsotg 5335 drivers/usb/dwc2/hcd.c int dwc2_restore_host_registers(struct dwc2_hsotg *hsotg) hsotg 5340 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "%s\n", __func__); hsotg 5343 drivers/usb/dwc2/hcd.c hr = &hsotg->hr_backup; hsotg 5345 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "%s: no host registers to restore\n", hsotg 5351 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hr->hcfg, HCFG); hsotg 5352 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hr->haintmsk, HAINTMSK); hsotg 5354 drivers/usb/dwc2/hcd.c for (i = 0; i < hsotg->params.host_channels; ++i) hsotg 5355 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hr->hcintmsk[i], HCINTMSK(i)); hsotg 5357 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hr->hprt0, HPRT0); hsotg 5358 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hr->hfir, HFIR); hsotg 5359 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hr->hptxfsiz, HPTXFSIZ); hsotg 5360 drivers/usb/dwc2/hcd.c hsotg->frame_number = 0; hsotg 5370 drivers/usb/dwc2/hcd.c int dwc2_host_enter_hibernation(struct dwc2_hsotg *hsotg) hsotg 5379 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "Preparing host for hibernation\n"); hsotg 5380 drivers/usb/dwc2/hcd.c ret = dwc2_backup_global_registers(hsotg); hsotg 5382 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "%s: failed to backup global registers\n", hsotg 5386 drivers/usb/dwc2/hcd.c ret = dwc2_backup_host_registers(hsotg); hsotg 5388 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "%s: failed to backup host registers\n", hsotg 5394 drivers/usb/dwc2/hcd.c hprt0 = dwc2_readl(hsotg, HPRT0); hsotg 5397 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 5400 drivers/usb/dwc2/hcd.c if (dwc2_hsotg_wait_bit_set(hsotg, HPRT0, HPRT0_SUSP, 3000)) hsotg 5401 drivers/usb/dwc2/hcd.c dev_warn(hsotg->dev, "Suspend wasn't generated\n"); hsotg 5407 drivers/usb/dwc2/hcd.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 5408 drivers/usb/dwc2/hcd.c hsotg->lx_state = DWC2_L2; hsotg 5410 drivers/usb/dwc2/hcd.c gusbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 5414 drivers/usb/dwc2/hcd.c pcgcctl = dwc2_readl(hsotg, PCGCTL); hsotg 5416 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 5419 drivers/usb/dwc2/hcd.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5421 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5425 drivers/usb/dwc2/hcd.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5427 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5430 drivers/usb/dwc2/hcd.c pcgcctl = dwc2_readl(hsotg, PCGCTL); hsotg 5432 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, pcgcctl, PCGCTL); hsotg 5437 drivers/usb/dwc2/hcd.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5439 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5443 drivers/usb/dwc2/hcd.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5447 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5451 drivers/usb/dwc2/hcd.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5453 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5457 drivers/usb/dwc2/hcd.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5459 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5461 drivers/usb/dwc2/hcd.c hsotg->hibernated = 1; hsotg 5462 drivers/usb/dwc2/hcd.c hsotg->bus_suspended = 1; hsotg 5463 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "Host hibernation completed\n"); hsotg 5464 drivers/usb/dwc2/hcd.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 5480 drivers/usb/dwc2/hcd.c int dwc2_host_exit_hibernation(struct dwc2_hsotg *hsotg, int rem_wakeup, hsotg 5489 drivers/usb/dwc2/hcd.c gr = &hsotg->gr_backup; hsotg 5490 drivers/usb/dwc2/hcd.c hr = &hsotg->hr_backup; hsotg 5492 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, hsotg 5496 drivers/usb/dwc2/hcd.c dwc2_hib_restore_common(hsotg, rem_wakeup, 1); hsotg 5497 drivers/usb/dwc2/hcd.c hsotg->hibernated = 0; hsotg 5507 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, 0xffffffff, GINTSTS); hsotg 5510 drivers/usb/dwc2/hcd.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5512 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5516 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gr->gusbcfg, GUSBCFG); hsotg 5517 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hr->hcfg, HCFG); hsotg 5520 drivers/usb/dwc2/hcd.c gpwrdn = dwc2_readl(hsotg, GPWRDN); hsotg 5522 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, gpwrdn, GPWRDN); hsotg 5529 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 5538 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 5543 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 5546 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 5551 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 5554 drivers/usb/dwc2/hcd.c hprt0 = dwc2_readl(hsotg, HPRT0); hsotg 5558 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, hprt0, HPRT0); hsotg 5560 drivers/usb/dwc2/hcd.c hprt0 = dwc2_readl(hsotg, HPRT0); hsotg 5563 drivers/usb/dwc2/hcd.c dwc2_writel(hsotg, 0xffffffff, GINTSTS); hsotg 5566 drivers/usb/dwc2/hcd.c ret = dwc2_restore_global_registers(hsotg); hsotg 5568 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "%s: failed to restore registers\n", hsotg 5574 drivers/usb/dwc2/hcd.c ret = dwc2_restore_host_registers(hsotg); hsotg 5576 drivers/usb/dwc2/hcd.c dev_err(hsotg->dev, "%s: failed to restore host registers\n", hsotg 5581 drivers/usb/dwc2/hcd.c dwc2_hcd_rem_wakeup(hsotg); hsotg 5583 drivers/usb/dwc2/hcd.c hsotg->hibernated = 0; hsotg 5584 drivers/usb/dwc2/hcd.c hsotg->bus_suspended = 0; hsotg 5585 drivers/usb/dwc2/hcd.c hsotg->lx_state = DWC2_L0; hsotg 5586 drivers/usb/dwc2/hcd.c dev_dbg(hsotg->dev, "Host hibernation restore complete\n"); hsotg 341 drivers/usb/dwc2/hcd.h struct dwc2_hsotg *hsotg; hsotg 453 drivers/usb/dwc2/hcd.h struct dwc2_hsotg *hsotg; hsotg 458 drivers/usb/dwc2/hcd.h u32 dwc2_calc_frame_interval(struct dwc2_hsotg *hsotg); hsotg 461 drivers/usb/dwc2/hcd.h static inline struct usb_hcd *dwc2_hsotg_to_hcd(struct dwc2_hsotg *hsotg) hsotg 463 drivers/usb/dwc2/hcd.h return (struct usb_hcd *)hsotg->priv; hsotg 473 drivers/usb/dwc2/hcd.h static inline void disable_hc_int(struct dwc2_hsotg *hsotg, int chnum, u32 intr) hsotg 475 drivers/usb/dwc2/hcd.h u32 mask = dwc2_readl(hsotg, HCINTMSK(chnum)); hsotg 478 drivers/usb/dwc2/hcd.h dwc2_writel(hsotg, mask, HCINTMSK(chnum)); hsotg 481 drivers/usb/dwc2/hcd.h void dwc2_hc_cleanup(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan); hsotg 482 drivers/usb/dwc2/hcd.h void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan, hsotg 484 drivers/usb/dwc2/hcd.h void dwc2_hc_start_transfer_ddma(struct dwc2_hsotg *hsotg, hsotg 491 drivers/usb/dwc2/hcd.h static inline u32 dwc2_read_hprt0(struct dwc2_hsotg *hsotg) hsotg 493 drivers/usb/dwc2/hcd.h u32 hprt0 = dwc2_readl(hsotg, HPRT0); hsotg 554 drivers/usb/dwc2/hcd.h int dwc2_hcd_init(struct dwc2_hsotg *hsotg); hsotg 555 drivers/usb/dwc2/hcd.h void dwc2_hcd_remove(struct dwc2_hsotg *hsotg); hsotg 559 drivers/usb/dwc2/hcd.h struct dwc2_hsotg *hsotg); hsotg 560 drivers/usb/dwc2/hcd.h void dwc2_hcd_queue_transactions(struct dwc2_hsotg *hsotg, hsotg 565 drivers/usb/dwc2/hcd.h struct dwc2_qh *dwc2_hcd_qh_create(struct dwc2_hsotg *hsotg, hsotg 568 drivers/usb/dwc2/hcd.h void dwc2_hcd_qh_free(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh); hsotg 569 drivers/usb/dwc2/hcd.h int dwc2_hcd_qh_add(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh); hsotg 570 drivers/usb/dwc2/hcd.h void dwc2_hcd_qh_unlink(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh); hsotg 571 drivers/usb/dwc2/hcd.h void dwc2_hcd_qh_deactivate(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh, hsotg 575 drivers/usb/dwc2/hcd.h int dwc2_hcd_qtd_add(struct dwc2_hsotg *hsotg, struct dwc2_qtd *qtd, hsotg 579 drivers/usb/dwc2/hcd.h static inline void dwc2_hcd_qtd_unlink_and_free(struct dwc2_hsotg *hsotg, hsotg 588 drivers/usb/dwc2/hcd.h void dwc2_hcd_start_xfer_ddma(struct dwc2_hsotg *hsotg, hsotg 590 drivers/usb/dwc2/hcd.h void dwc2_hcd_complete_xfer_ddma(struct dwc2_hsotg *hsotg, hsotg 594 drivers/usb/dwc2/hcd.h int dwc2_hcd_qh_init_ddma(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh, hsotg 596 drivers/usb/dwc2/hcd.h void dwc2_hcd_qh_free_ddma(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh); hsotg 692 drivers/usb/dwc2/hcd.h static inline u32 dwc2_read_core_intr(struct dwc2_hsotg *hsotg) hsotg 694 drivers/usb/dwc2/hcd.h return dwc2_readl(hsotg, GINTSTS) & hsotg 695 drivers/usb/dwc2/hcd.h dwc2_readl(hsotg, GINTMSK); hsotg 734 drivers/usb/dwc2/hcd.h static inline int dwc2_hcd_is_bandwidth_allocated(struct dwc2_hsotg *hsotg, hsotg 745 drivers/usb/dwc2/hcd.h static inline u16 dwc2_hcd_get_ep_bandwidth(struct dwc2_hsotg *hsotg, hsotg 758 drivers/usb/dwc2/hcd.h void dwc2_hcd_save_data_toggle(struct dwc2_hsotg *hsotg, hsotg 772 drivers/usb/dwc2/hcd.h irqreturn_t dwc2_handle_hcd_intr(struct dwc2_hsotg *hsotg); hsotg 779 drivers/usb/dwc2/hcd.h void dwc2_hcd_stop(struct dwc2_hsotg *hsotg); hsotg 787 drivers/usb/dwc2/hcd.h int dwc2_hcd_is_b_host(struct dwc2_hsotg *hsotg); hsotg 797 drivers/usb/dwc2/hcd.h void dwc2_hcd_dump_state(struct dwc2_hsotg *hsotg); hsotg 806 drivers/usb/dwc2/hcd.h struct dwc2_tt *dwc2_host_get_tt_info(struct dwc2_hsotg *hsotg, hsotg 810 drivers/usb/dwc2/hcd.h void dwc2_host_put_tt_info(struct dwc2_hsotg *hsotg, hsotg 812 drivers/usb/dwc2/hcd.h int dwc2_host_get_speed(struct dwc2_hsotg *hsotg, void *context); hsotg 813 drivers/usb/dwc2/hcd.h void dwc2_host_complete(struct dwc2_hsotg *hsotg, struct dwc2_qtd *qtd, hsotg 88 drivers/usb/dwc2/hcd_ddma.c static int dwc2_desc_list_alloc(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh, hsotg 95 drivers/usb/dwc2/hcd_ddma.c desc_cache = hsotg->desc_hsisoc_cache; hsotg 97 drivers/usb/dwc2/hcd_ddma.c desc_cache = hsotg->desc_gen_cache; hsotg 106 drivers/usb/dwc2/hcd_ddma.c qh->desc_list_dma = dma_map_single(hsotg->dev, qh->desc_list, hsotg 112 drivers/usb/dwc2/hcd_ddma.c dma_unmap_single(hsotg->dev, qh->desc_list_dma, hsotg 123 drivers/usb/dwc2/hcd_ddma.c static void dwc2_desc_list_free(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 129 drivers/usb/dwc2/hcd_ddma.c desc_cache = hsotg->desc_hsisoc_cache; hsotg 131 drivers/usb/dwc2/hcd_ddma.c desc_cache = hsotg->desc_gen_cache; hsotg 134 drivers/usb/dwc2/hcd_ddma.c dma_unmap_single(hsotg->dev, qh->desc_list_dma, hsotg 144 drivers/usb/dwc2/hcd_ddma.c static int dwc2_frame_list_alloc(struct dwc2_hsotg *hsotg, gfp_t mem_flags) hsotg 146 drivers/usb/dwc2/hcd_ddma.c if (hsotg->frame_list) hsotg 149 drivers/usb/dwc2/hcd_ddma.c hsotg->frame_list_sz = 4 * FRLISTEN_64_SIZE; hsotg 150 drivers/usb/dwc2/hcd_ddma.c hsotg->frame_list = kzalloc(hsotg->frame_list_sz, GFP_ATOMIC | GFP_DMA); hsotg 151 drivers/usb/dwc2/hcd_ddma.c if (!hsotg->frame_list) hsotg 154 drivers/usb/dwc2/hcd_ddma.c hsotg->frame_list_dma = dma_map_single(hsotg->dev, hsotg->frame_list, hsotg 155 drivers/usb/dwc2/hcd_ddma.c hsotg->frame_list_sz, hsotg 161 drivers/usb/dwc2/hcd_ddma.c static void dwc2_frame_list_free(struct dwc2_hsotg *hsotg) hsotg 165 drivers/usb/dwc2/hcd_ddma.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 167 drivers/usb/dwc2/hcd_ddma.c if (!hsotg->frame_list) { hsotg 168 drivers/usb/dwc2/hcd_ddma.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 172 drivers/usb/dwc2/hcd_ddma.c dma_unmap_single(hsotg->dev, hsotg->frame_list_dma, hsotg 173 drivers/usb/dwc2/hcd_ddma.c hsotg->frame_list_sz, DMA_FROM_DEVICE); hsotg 175 drivers/usb/dwc2/hcd_ddma.c kfree(hsotg->frame_list); hsotg 176 drivers/usb/dwc2/hcd_ddma.c hsotg->frame_list = NULL; hsotg 178 drivers/usb/dwc2/hcd_ddma.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 181 drivers/usb/dwc2/hcd_ddma.c static void dwc2_per_sched_enable(struct dwc2_hsotg *hsotg, u32 fr_list_en) hsotg 186 drivers/usb/dwc2/hcd_ddma.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 188 drivers/usb/dwc2/hcd_ddma.c hcfg = dwc2_readl(hsotg, HCFG); hsotg 191 drivers/usb/dwc2/hcd_ddma.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 195 drivers/usb/dwc2/hcd_ddma.c dwc2_writel(hsotg, hsotg->frame_list_dma, HFLBADDR); hsotg 199 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, "Enabling Periodic schedule\n"); hsotg 200 drivers/usb/dwc2/hcd_ddma.c dwc2_writel(hsotg, hcfg, HCFG); hsotg 202 drivers/usb/dwc2/hcd_ddma.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 205 drivers/usb/dwc2/hcd_ddma.c static void dwc2_per_sched_disable(struct dwc2_hsotg *hsotg) hsotg 210 drivers/usb/dwc2/hcd_ddma.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 212 drivers/usb/dwc2/hcd_ddma.c hcfg = dwc2_readl(hsotg, HCFG); hsotg 215 drivers/usb/dwc2/hcd_ddma.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 220 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, "Disabling Periodic schedule\n"); hsotg 221 drivers/usb/dwc2/hcd_ddma.c dwc2_writel(hsotg, hcfg, HCFG); hsotg 223 drivers/usb/dwc2/hcd_ddma.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 230 drivers/usb/dwc2/hcd_ddma.c static void dwc2_update_frame_list(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh, hsotg 236 drivers/usb/dwc2/hcd_ddma.c if (!hsotg) { hsotg 237 drivers/usb/dwc2/hcd_ddma.c pr_err("hsotg = %p\n", hsotg); hsotg 242 drivers/usb/dwc2/hcd_ddma.c dev_err(hsotg->dev, "qh->channel = %p\n", qh->channel); hsotg 246 drivers/usb/dwc2/hcd_ddma.c if (!hsotg->frame_list) { hsotg 247 drivers/usb/dwc2/hcd_ddma.c dev_err(hsotg->dev, "hsotg->frame_list = %p\n", hsotg 248 drivers/usb/dwc2/hcd_ddma.c hsotg->frame_list); hsotg 262 drivers/usb/dwc2/hcd_ddma.c hsotg->frame_list[j] |= 1 << chan->hc_num; hsotg 264 drivers/usb/dwc2/hcd_ddma.c hsotg->frame_list[j] &= ~(1 << chan->hc_num); hsotg 272 drivers/usb/dwc2/hcd_ddma.c dma_sync_single_for_device(hsotg->dev, hsotg 273 drivers/usb/dwc2/hcd_ddma.c hsotg->frame_list_dma, hsotg 274 drivers/usb/dwc2/hcd_ddma.c hsotg->frame_list_sz, hsotg 294 drivers/usb/dwc2/hcd_ddma.c static void dwc2_release_channel_ddma(struct dwc2_hsotg *hsotg, hsotg 300 drivers/usb/dwc2/hcd_ddma.c if (hsotg->params.uframe_sched) hsotg 301 drivers/usb/dwc2/hcd_ddma.c hsotg->available_host_channels++; hsotg 303 drivers/usb/dwc2/hcd_ddma.c hsotg->non_periodic_channels--; hsotg 305 drivers/usb/dwc2/hcd_ddma.c dwc2_update_frame_list(hsotg, qh, 0); hsotg 306 drivers/usb/dwc2/hcd_ddma.c hsotg->available_host_channels++; hsotg 316 drivers/usb/dwc2/hcd_ddma.c dwc2_hc_cleanup(hsotg, chan); hsotg 317 drivers/usb/dwc2/hcd_ddma.c list_add_tail(&chan->hc_list_entry, &hsotg->free_hc_list); hsotg 342 drivers/usb/dwc2/hcd_ddma.c int dwc2_hcd_qh_init_ddma(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh, hsotg 348 drivers/usb/dwc2/hcd_ddma.c dev_err(hsotg->dev, hsotg 354 drivers/usb/dwc2/hcd_ddma.c retval = dwc2_desc_list_alloc(hsotg, qh, mem_flags); hsotg 360 drivers/usb/dwc2/hcd_ddma.c if (!hsotg->frame_list) { hsotg 361 drivers/usb/dwc2/hcd_ddma.c retval = dwc2_frame_list_alloc(hsotg, mem_flags); hsotg 365 drivers/usb/dwc2/hcd_ddma.c dwc2_per_sched_enable(hsotg, HCFG_FRLISTEN_64); hsotg 373 drivers/usb/dwc2/hcd_ddma.c dwc2_desc_list_free(hsotg, qh); hsotg 388 drivers/usb/dwc2/hcd_ddma.c void dwc2_hcd_qh_free_ddma(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 392 drivers/usb/dwc2/hcd_ddma.c dwc2_desc_list_free(hsotg, qh); hsotg 401 drivers/usb/dwc2/hcd_ddma.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 403 drivers/usb/dwc2/hcd_ddma.c dwc2_release_channel_ddma(hsotg, qh); hsotg 404 drivers/usb/dwc2/hcd_ddma.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 408 drivers/usb/dwc2/hcd_ddma.c (hsotg->params.uframe_sched || hsotg 409 drivers/usb/dwc2/hcd_ddma.c !hsotg->periodic_channels) && hsotg->frame_list) { hsotg 410 drivers/usb/dwc2/hcd_ddma.c dwc2_per_sched_disable(hsotg); hsotg 411 drivers/usb/dwc2/hcd_ddma.c dwc2_frame_list_free(hsotg); hsotg 428 drivers/usb/dwc2/hcd_ddma.c static u16 dwc2_calc_starting_frame(struct dwc2_hsotg *hsotg, hsotg 433 drivers/usb/dwc2/hcd_ddma.c hsotg->frame_number = dwc2_hcd_get_frame_number(hsotg); hsotg 462 drivers/usb/dwc2/hcd_ddma.c if (dwc2_micro_frame_num(hsotg->frame_number) >= 5) { hsotg 464 drivers/usb/dwc2/hcd_ddma.c frame = dwc2_frame_num_inc(hsotg->frame_number, hsotg 468 drivers/usb/dwc2/hcd_ddma.c frame = dwc2_frame_num_inc(hsotg->frame_number, hsotg 480 drivers/usb/dwc2/hcd_ddma.c frame = dwc2_frame_num_inc(hsotg->frame_number, 2); hsotg 490 drivers/usb/dwc2/hcd_ddma.c static u16 dwc2_recalc_initial_desc_idx(struct dwc2_hsotg *hsotg, hsotg 514 drivers/usb/dwc2/hcd_ddma.c frame = dwc2_calc_starting_frame(hsotg, qh, &skip_frames); hsotg 525 drivers/usb/dwc2/hcd_ddma.c qh->next_active_frame = dwc2_calc_starting_frame(hsotg, qh, hsotg 541 drivers/usb/dwc2/hcd_ddma.c static void dwc2_fill_host_isoc_dma_desc(struct dwc2_hsotg *hsotg, hsotg 573 drivers/usb/dwc2/hcd_ddma.c dma_sync_single_for_device(hsotg->dev, hsotg 580 drivers/usb/dwc2/hcd_ddma.c static void dwc2_init_isoc_dma_desc(struct dwc2_hsotg *hsotg, hsotg 591 drivers/usb/dwc2/hcd_ddma.c hsotg->frame_number = dwc2_hcd_get_frame_number(hsotg); hsotg 592 drivers/usb/dwc2/hcd_ddma.c cur_idx = dwc2_frame_list_idx(hsotg->frame_number); hsotg 604 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, hsotg 631 drivers/usb/dwc2/hcd_ddma.c dwc2_fill_host_isoc_dma_desc(hsotg, qtd, qh, hsotg 647 drivers/usb/dwc2/hcd_ddma.c dma_sync_single_for_device(hsotg->dev, hsotg 681 drivers/usb/dwc2/hcd_ddma.c dma_sync_single_for_device(hsotg->dev, hsotg 689 drivers/usb/dwc2/hcd_ddma.c static void dwc2_fill_host_dma_desc(struct dwc2_hsotg *hsotg, hsotg 723 drivers/usb/dwc2/hcd_ddma.c dma_sync_single_for_device(hsotg->dev, hsotg 741 drivers/usb/dwc2/hcd_ddma.c static void dwc2_init_non_isoc_dma_desc(struct dwc2_hsotg *hsotg, hsotg 748 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, "%s(): qh=%p dma=%08lx len=%d\n", __func__, qh, hsotg 759 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, "qtd=%p\n", qtd); hsotg 767 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, "buf=%08lx len=%d\n", hsotg 775 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, hsotg 779 drivers/usb/dwc2/hcd_ddma.c dma_sync_single_for_device(hsotg->dev, hsotg 786 drivers/usb/dwc2/hcd_ddma.c dwc2_fill_host_dma_desc(hsotg, chan, qtd, qh, n_desc); hsotg 787 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, hsotg 797 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, "n_desc=%d\n", n_desc); hsotg 808 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, "set IOC/EOL/A bits in desc %d (%p)\n", hsotg 810 drivers/usb/dwc2/hcd_ddma.c dma_sync_single_for_device(hsotg->dev, hsotg 817 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, "set A bit in desc 0 (%p)\n", hsotg 819 drivers/usb/dwc2/hcd_ddma.c dma_sync_single_for_device(hsotg->dev, hsotg 847 drivers/usb/dwc2/hcd_ddma.c void dwc2_hcd_start_xfer_ddma(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 856 drivers/usb/dwc2/hcd_ddma.c dwc2_init_non_isoc_dma_desc(hsotg, qh); hsotg 857 drivers/usb/dwc2/hcd_ddma.c dwc2_hc_start_transfer_ddma(hsotg, chan); hsotg 860 drivers/usb/dwc2/hcd_ddma.c dwc2_init_non_isoc_dma_desc(hsotg, qh); hsotg 861 drivers/usb/dwc2/hcd_ddma.c dwc2_update_frame_list(hsotg, qh, 1); hsotg 862 drivers/usb/dwc2/hcd_ddma.c dwc2_hc_start_transfer_ddma(hsotg, chan); hsotg 866 drivers/usb/dwc2/hcd_ddma.c skip_frames = dwc2_recalc_initial_desc_idx(hsotg, qh); hsotg 867 drivers/usb/dwc2/hcd_ddma.c dwc2_init_isoc_dma_desc(hsotg, qh, skip_frames); hsotg 870 drivers/usb/dwc2/hcd_ddma.c dwc2_update_frame_list(hsotg, qh, 1); hsotg 880 drivers/usb/dwc2/hcd_ddma.c dwc2_hc_start_transfer_ddma(hsotg, chan); hsotg 892 drivers/usb/dwc2/hcd_ddma.c static int dwc2_cmpl_host_isoc_dma_desc(struct dwc2_hsotg *hsotg, hsotg 905 drivers/usb/dwc2/hcd_ddma.c dma_sync_single_for_cpu(hsotg->dev, qh->desc_list_dma + (idx * hsotg 938 drivers/usb/dwc2/hcd_ddma.c dwc2_host_complete(hsotg, qtd, 0); hsotg 939 drivers/usb/dwc2/hcd_ddma.c dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh); hsotg 961 drivers/usb/dwc2/hcd_ddma.c static void dwc2_complete_isoc_xfer_ddma(struct dwc2_hsotg *hsotg, hsotg 1003 drivers/usb/dwc2/hcd_ddma.c dwc2_host_complete(hsotg, qtd, err); hsotg 1006 drivers/usb/dwc2/hcd_ddma.c dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh); hsotg 1022 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, hsotg 1032 drivers/usb/dwc2/hcd_ddma.c rc = dwc2_cmpl_host_isoc_dma_desc(hsotg, chan, qtd, qh, hsotg 1050 drivers/usb/dwc2/hcd_ddma.c cur_idx = dwc2_frame_list_idx(hsotg->frame_number); hsotg 1067 drivers/usb/dwc2/hcd_ddma.c static int dwc2_update_non_isoc_urb_state_ddma(struct dwc2_hsotg *hsotg, hsotg 1081 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, "remain=%d dwc2_urb=%p\n", remain, urb); hsotg 1084 drivers/usb/dwc2/hcd_ddma.c dev_err(hsotg->dev, "EIO\n"); hsotg 1092 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, "Stall\n"); hsotg 1096 drivers/usb/dwc2/hcd_ddma.c dev_err(hsotg->dev, "Babble\n"); hsotg 1100 drivers/usb/dwc2/hcd_ddma.c dev_err(hsotg->dev, "XactErr\n"); hsotg 1104 drivers/usb/dwc2/hcd_ddma.c dev_err(hsotg->dev, hsotg 1113 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, hsotg 1138 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, "length=%d actual=%d\n", urb->length, hsotg 1149 drivers/usb/dwc2/hcd_ddma.c static int dwc2_process_non_isoc_desc(struct dwc2_hsotg *hsotg, hsotg 1162 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, "%s()\n", __func__); hsotg 1167 drivers/usb/dwc2/hcd_ddma.c dma_sync_single_for_cpu(hsotg->dev, hsotg 1175 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, hsotg 1178 drivers/usb/dwc2/hcd_ddma.c failed = dwc2_update_non_isoc_urb_state_ddma(hsotg, chan, qtd, dma_desc, hsotg 1182 drivers/usb/dwc2/hcd_ddma.c dwc2_host_complete(hsotg, qtd, urb->status); hsotg 1183 drivers/usb/dwc2/hcd_ddma.c dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh); hsotg 1184 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, "failed=%1x xfer_done=%1x\n", hsotg 1196 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, hsotg 1202 drivers/usb/dwc2/hcd_ddma.c dev_vdbg(hsotg->dev, hsotg 1209 drivers/usb/dwc2/hcd_ddma.c dwc2_hcd_save_data_toggle(hsotg, chan, chnum, hsotg 1221 drivers/usb/dwc2/hcd_ddma.c static void dwc2_complete_non_isoc_xfer_ddma(struct dwc2_hsotg *hsotg, hsotg 1247 drivers/usb/dwc2/hcd_ddma.c if (dwc2_process_non_isoc_desc(hsotg, chan, chnum, qtd, hsotg 1267 drivers/usb/dwc2/hcd_ddma.c dwc2_hcd_save_data_toggle(hsotg, chan, chnum, NULL); hsotg 1299 drivers/usb/dwc2/hcd_ddma.c void dwc2_hcd_complete_xfer_ddma(struct dwc2_hsotg *hsotg, hsotg 1308 drivers/usb/dwc2/hcd_ddma.c dwc2_complete_isoc_xfer_ddma(hsotg, chan, halt_status); hsotg 1322 drivers/usb/dwc2/hcd_ddma.c dwc2_host_complete(hsotg, qtd, hsotg 1324 drivers/usb/dwc2/hcd_ddma.c dwc2_hcd_qtd_unlink_and_free(hsotg, hsotg 1330 drivers/usb/dwc2/hcd_ddma.c dwc2_hc_halt(hsotg, chan, halt_status); hsotg 1331 drivers/usb/dwc2/hcd_ddma.c dwc2_release_channel_ddma(hsotg, qh); hsotg 1332 drivers/usb/dwc2/hcd_ddma.c dwc2_hcd_qh_unlink(hsotg, qh); hsotg 1336 drivers/usb/dwc2/hcd_ddma.c &hsotg->periodic_sched_assigned); hsotg 1353 drivers/usb/dwc2/hcd_ddma.c dwc2_complete_non_isoc_xfer_ddma(hsotg, chan, chnum, hsotg 1355 drivers/usb/dwc2/hcd_ddma.c dwc2_release_channel_ddma(hsotg, qh); hsotg 1356 drivers/usb/dwc2/hcd_ddma.c dwc2_hcd_qh_unlink(hsotg, qh); hsotg 1363 drivers/usb/dwc2/hcd_ddma.c dwc2_hcd_qh_add(hsotg, qh); hsotg 1367 drivers/usb/dwc2/hcd_ddma.c tr_type = dwc2_hcd_select_transactions(hsotg); hsotg 1375 drivers/usb/dwc2/hcd_ddma.c dwc2_hcd_queue_transactions(hsotg, tr_type); hsotg 63 drivers/usb/dwc2/hcd_intr.c static void dwc2_track_missed_sofs(struct dwc2_hsotg *hsotg) hsotg 65 drivers/usb/dwc2/hcd_intr.c u16 curr_frame_number = hsotg->frame_number; hsotg 66 drivers/usb/dwc2/hcd_intr.c u16 expected = dwc2_frame_num_inc(hsotg->last_frame_num, 1); hsotg 69 drivers/usb/dwc2/hcd_intr.c dwc2_sch_vdbg(hsotg, "MISSED SOF %04x != %04x\n", hsotg 73 drivers/usb/dwc2/hcd_intr.c if (hsotg->frame_num_idx < FRAME_NUM_ARRAY_SIZE) { hsotg 75 drivers/usb/dwc2/hcd_intr.c hsotg->frame_num_array[hsotg->frame_num_idx] = hsotg 77 drivers/usb/dwc2/hcd_intr.c hsotg->last_frame_num_array[hsotg->frame_num_idx] = hsotg 78 drivers/usb/dwc2/hcd_intr.c hsotg->last_frame_num; hsotg 79 drivers/usb/dwc2/hcd_intr.c hsotg->frame_num_idx++; hsotg 81 drivers/usb/dwc2/hcd_intr.c } else if (!hsotg->dumped_frame_num_array) { hsotg 84 drivers/usb/dwc2/hcd_intr.c dev_info(hsotg->dev, "Frame Last Frame\n"); hsotg 85 drivers/usb/dwc2/hcd_intr.c dev_info(hsotg->dev, "----- ----------\n"); hsotg 87 drivers/usb/dwc2/hcd_intr.c dev_info(hsotg->dev, "0x%04x 0x%04x\n", hsotg 88 drivers/usb/dwc2/hcd_intr.c hsotg->frame_num_array[i], hsotg 89 drivers/usb/dwc2/hcd_intr.c hsotg->last_frame_num_array[i]); hsotg 91 drivers/usb/dwc2/hcd_intr.c hsotg->dumped_frame_num_array = 1; hsotg 94 drivers/usb/dwc2/hcd_intr.c hsotg->last_frame_num = curr_frame_number; hsotg 97 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_handle_tt_clear(struct dwc2_hsotg *hsotg, hsotg 101 drivers/usb/dwc2/hcd_intr.c struct usb_device *root_hub = dwc2_hsotg_to_hcd(hsotg)->self.root_hub; hsotg 140 drivers/usb/dwc2/hcd_intr.c static void dwc2_sof_intr(struct dwc2_hsotg *hsotg) hsotg 147 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, GINTSTS_SOF, GINTSTS); hsotg 150 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "--Start of Frame Interrupt--\n"); hsotg 153 drivers/usb/dwc2/hcd_intr.c hsotg->frame_number = dwc2_hcd_get_frame_number(hsotg); hsotg 155 drivers/usb/dwc2/hcd_intr.c dwc2_track_missed_sofs(hsotg); hsotg 158 drivers/usb/dwc2/hcd_intr.c qh_entry = hsotg->periodic_sched_inactive.next; hsotg 159 drivers/usb/dwc2/hcd_intr.c while (qh_entry != &hsotg->periodic_sched_inactive) { hsotg 163 drivers/usb/dwc2/hcd_intr.c hsotg->frame_number)) { hsotg 164 drivers/usb/dwc2/hcd_intr.c dwc2_sch_vdbg(hsotg, "QH=%p ready fn=%04x, nxt=%04x\n", hsotg 165 drivers/usb/dwc2/hcd_intr.c qh, hsotg->frame_number, hsotg 173 drivers/usb/dwc2/hcd_intr.c &hsotg->periodic_sched_ready); hsotg 176 drivers/usb/dwc2/hcd_intr.c tr_type = dwc2_hcd_select_transactions(hsotg); hsotg 178 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_queue_transactions(hsotg, tr_type); hsotg 186 drivers/usb/dwc2/hcd_intr.c static void dwc2_rx_fifo_level_intr(struct dwc2_hsotg *hsotg) hsotg 192 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "--RxFIFO Level Interrupt--\n"); hsotg 194 drivers/usb/dwc2/hcd_intr.c grxsts = dwc2_readl(hsotg, GRXSTSP); hsotg 196 drivers/usb/dwc2/hcd_intr.c chan = hsotg->hc_ptr_array[chnum]; hsotg 198 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, "Unable to get corresponding channel\n"); hsotg 208 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " Ch num = %d\n", chnum); hsotg 209 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " Count = %d\n", bcnt); hsotg 210 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " DPID = %d, chan.dpid = %d\n", dpid, hsotg 212 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " PStatus = %d\n", pktsts); hsotg 219 drivers/usb/dwc2/hcd_intr.c dwc2_read_packet(hsotg, chan->xfer_buf, bcnt); hsotg 232 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, hsotg 244 drivers/usb/dwc2/hcd_intr.c static void dwc2_np_tx_fifo_empty_intr(struct dwc2_hsotg *hsotg) hsotg 246 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "--Non-Periodic TxFIFO Empty Interrupt--\n"); hsotg 247 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_queue_transactions(hsotg, DWC2_TRANSACTION_NON_PERIODIC); hsotg 256 drivers/usb/dwc2/hcd_intr.c static void dwc2_perio_tx_fifo_empty_intr(struct dwc2_hsotg *hsotg) hsotg 259 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "--Periodic TxFIFO Empty Interrupt--\n"); hsotg 260 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_queue_transactions(hsotg, DWC2_TRANSACTION_PERIODIC); hsotg 263 drivers/usb/dwc2/hcd_intr.c static void dwc2_hprt0_enable(struct dwc2_hsotg *hsotg, u32 hprt0, hsotg 266 drivers/usb/dwc2/hcd_intr.c struct dwc2_core_params *params = &hsotg->params; hsotg 274 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "%s(%p)\n", __func__, hsotg); hsotg 277 drivers/usb/dwc2/hcd_intr.c hfir = dwc2_readl(hsotg, HFIR); hsotg 279 drivers/usb/dwc2/hcd_intr.c hfir |= dwc2_calc_frame_interval(hsotg) << HFIR_FRINT_SHIFT & hsotg 281 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, hfir, HFIR); hsotg 286 drivers/usb/dwc2/hcd_intr.c hsotg->flags.b.port_reset_change = 1; hsotg 290 drivers/usb/dwc2/hcd_intr.c usbcfg = dwc2_readl(hsotg, GUSBCFG); hsotg 298 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, usbcfg, GUSBCFG); hsotg 302 drivers/usb/dwc2/hcd_intr.c hcfg = dwc2_readl(hsotg, HCFG); hsotg 309 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 315 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, hcfg, HCFG); hsotg 320 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 326 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, hcfg, HCFG); hsotg 334 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, usbcfg, GUSBCFG); hsotg 341 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, *hprt0_modify, HPRT0); hsotg 342 drivers/usb/dwc2/hcd_intr.c queue_delayed_work(hsotg->wq_otg, &hsotg->reset_work, hsotg 346 drivers/usb/dwc2/hcd_intr.c hsotg->flags.b.port_reset_change = 1; hsotg 355 drivers/usb/dwc2/hcd_intr.c static void dwc2_port_intr(struct dwc2_hsotg *hsotg) hsotg 360 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "--Port Interrupt--\n"); hsotg 362 drivers/usb/dwc2/hcd_intr.c hprt0 = dwc2_readl(hsotg, HPRT0); hsotg 377 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, hprt0_modify | HPRT0_CONNDET, HPRT0); hsotg 379 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 382 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_connect(hsotg); hsotg 395 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, hprt0_modify | HPRT0_ENACHG, HPRT0); hsotg 396 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 400 drivers/usb/dwc2/hcd_intr.c hsotg->new_connection = true; hsotg 401 drivers/usb/dwc2/hcd_intr.c dwc2_hprt0_enable(hsotg, hprt0, &hprt0_modify); hsotg 403 drivers/usb/dwc2/hcd_intr.c hsotg->flags.b.port_enable_change = 1; hsotg 404 drivers/usb/dwc2/hcd_intr.c if (hsotg->params.dma_desc_fs_enable) { hsotg 407 drivers/usb/dwc2/hcd_intr.c hsotg->params.dma_desc_enable = false; hsotg 408 drivers/usb/dwc2/hcd_intr.c hsotg->new_connection = false; hsotg 409 drivers/usb/dwc2/hcd_intr.c hcfg = dwc2_readl(hsotg, HCFG); hsotg 411 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, hcfg, HCFG); hsotg 418 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, hprt0_modify | HPRT0_OVRCURRCHG, hsotg 420 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 423 drivers/usb/dwc2/hcd_intr.c hsotg->flags.b.port_over_current_change = 1; hsotg 436 drivers/usb/dwc2/hcd_intr.c static u32 dwc2_get_actual_xfer_length(struct dwc2_hsotg *hsotg, hsotg 444 drivers/usb/dwc2/hcd_intr.c hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum)); hsotg 490 drivers/usb/dwc2/hcd_intr.c static int dwc2_update_urb_state(struct dwc2_hsotg *hsotg, hsotg 498 drivers/usb/dwc2/hcd_intr.c int xfer_length = dwc2_get_actual_xfer_length(hsotg, chan, chnum, qtd, hsotg 503 drivers/usb/dwc2/hcd_intr.c dev_warn(hsotg->dev, "%s(): trimming xfer length\n", __func__); hsotg 507 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "urb->actual_length=%d xfer_length=%d\n", hsotg 521 drivers/usb/dwc2/hcd_intr.c hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum)); hsotg 522 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n", hsotg 524 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " chan->xfer_len %d\n", chan->xfer_len); hsotg 525 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " hctsiz.xfersize %d\n", hsotg 527 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " urb->transfer_buffer_length %d\n", urb->length); hsotg 528 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " urb->actual_length %d\n", urb->actual_length); hsotg 529 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " short_read %d, xfer_done %d\n", short_read, hsotg 540 drivers/usb/dwc2/hcd_intr.c void dwc2_hcd_save_data_toggle(struct dwc2_hsotg *hsotg, hsotg 544 drivers/usb/dwc2/hcd_intr.c u32 hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum)); hsotg 585 drivers/usb/dwc2/hcd_intr.c struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan, hsotg 600 drivers/usb/dwc2/hcd_intr.c frame_desc->actual_length = dwc2_get_actual_xfer_length(hsotg, hsotg 619 drivers/usb/dwc2/hcd_intr.c frame_desc->actual_length = dwc2_get_actual_xfer_length(hsotg, hsotg 625 drivers/usb/dwc2/hcd_intr.c hsotg->params.host_dma) { hsotg 632 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, "Unhandled halt_status (%d)\n", hsotg 642 drivers/usb/dwc2/hcd_intr.c dwc2_host_complete(hsotg, qtd, 0); hsotg 658 drivers/usb/dwc2/hcd_intr.c static void dwc2_deactivate_qh(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh, hsotg 665 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " %s(%p,%p,%d)\n", __func__, hsotg 666 drivers/usb/dwc2/hcd_intr.c hsotg, qh, free_qtd); hsotg 669 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, "## QTD list empty ##\n"); hsotg 682 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh); hsotg 688 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_qh_deactivate(hsotg, qh, continue_split); hsotg 704 drivers/usb/dwc2/hcd_intr.c static void dwc2_release_channel(struct dwc2_hsotg *hsotg, hsotg 714 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " %s: channel %d, halt_status %d\n", hsotg 728 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 731 drivers/usb/dwc2/hcd_intr.c dwc2_host_complete(hsotg, qtd, -EPROTO); hsotg 742 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " Complete URB with I/O error\n"); hsotg 744 drivers/usb/dwc2/hcd_intr.c dwc2_host_complete(hsotg, qtd, -EIO); hsotg 751 drivers/usb/dwc2/hcd_intr.c dwc2_deactivate_qh(hsotg, chan->qh, free_qtd); hsotg 761 drivers/usb/dwc2/hcd_intr.c dwc2_hc_cleanup(hsotg, chan); hsotg 762 drivers/usb/dwc2/hcd_intr.c list_add_tail(&chan->hc_list_entry, &hsotg->free_hc_list); hsotg 764 drivers/usb/dwc2/hcd_intr.c if (hsotg->params.uframe_sched) { hsotg 765 drivers/usb/dwc2/hcd_intr.c hsotg->available_host_channels++; hsotg 770 drivers/usb/dwc2/hcd_intr.c hsotg->non_periodic_channels--; hsotg 783 drivers/usb/dwc2/hcd_intr.c haintmsk = dwc2_readl(hsotg, HAINTMSK); hsotg 785 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, haintmsk, HAINTMSK); hsotg 788 drivers/usb/dwc2/hcd_intr.c tr_type = dwc2_hcd_select_transactions(hsotg); hsotg 790 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_queue_transactions(hsotg, tr_type); hsotg 803 drivers/usb/dwc2/hcd_intr.c static void dwc2_halt_channel(struct dwc2_hsotg *hsotg, hsotg 808 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "%s()\n", __func__); hsotg 810 drivers/usb/dwc2/hcd_intr.c if (hsotg->params.host_dma) { hsotg 812 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "DMA enabled\n"); hsotg 813 drivers/usb/dwc2/hcd_intr.c dwc2_release_channel(hsotg, chan, qtd, halt_status); hsotg 818 drivers/usb/dwc2/hcd_intr.c dwc2_hc_halt(hsotg, chan, halt_status); hsotg 823 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "Halt on queue\n"); hsotg 826 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "control/bulk\n"); hsotg 832 drivers/usb/dwc2/hcd_intr.c gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 834 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, gintmsk, GINTMSK); hsotg 836 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "isoc/intr\n"); hsotg 844 drivers/usb/dwc2/hcd_intr.c &hsotg->periodic_sched_assigned); hsotg 851 drivers/usb/dwc2/hcd_intr.c gintmsk = dwc2_readl(hsotg, GINTMSK); hsotg 853 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, gintmsk, GINTMSK); hsotg 863 drivers/usb/dwc2/hcd_intr.c static void dwc2_complete_non_periodic_xfer(struct dwc2_hsotg *hsotg, hsotg 868 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "%s()\n", __func__); hsotg 878 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "got NYET\n"); hsotg 898 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, halt_status); hsotg 904 drivers/usb/dwc2/hcd_intr.c dwc2_release_channel(hsotg, chan, qtd, halt_status); hsotg 913 drivers/usb/dwc2/hcd_intr.c static void dwc2_complete_periodic_xfer(struct dwc2_hsotg *hsotg, hsotg 918 drivers/usb/dwc2/hcd_intr.c u32 hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum)); hsotg 924 drivers/usb/dwc2/hcd_intr.c dwc2_release_channel(hsotg, chan, qtd, halt_status); hsotg 927 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, halt_status); hsotg 930 drivers/usb/dwc2/hcd_intr.c static int dwc2_xfercomp_isoc_split_in(struct dwc2_hsotg *hsotg, hsotg 943 drivers/usb/dwc2/hcd_intr.c len = dwc2_get_actual_xfer_length(hsotg, chan, chnum, qtd, hsotg 953 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "non-aligned buffer\n"); hsotg 954 drivers/usb/dwc2/hcd_intr.c dma_unmap_single(hsotg->dev, chan->qh->dw_align_buf_dma, hsotg 962 drivers/usb/dwc2/hcd_intr.c hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum)); hsotg 973 drivers/usb/dwc2/hcd_intr.c dwc2_host_complete(hsotg, qtd, 0); hsotg 974 drivers/usb/dwc2/hcd_intr.c dwc2_release_channel(hsotg, chan, qtd, hsotg 977 drivers/usb/dwc2/hcd_intr.c dwc2_release_channel(hsotg, chan, qtd, hsotg 988 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_xfercomp_intr(struct dwc2_hsotg *hsotg, hsotg 998 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 1007 drivers/usb/dwc2/hcd_intr.c if (hsotg->params.dma_desc_enable) { hsotg 1008 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_complete_xfer_ddma(hsotg, chan, chnum, halt_status); hsotg 1018 drivers/usb/dwc2/hcd_intr.c hsotg->params.host_dma) { hsotg 1020 drivers/usb/dwc2/hcd_intr.c dwc2_xfercomp_isoc_split_in(hsotg, chan, chnum, hsotg 1037 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 1042 drivers/usb/dwc2/hcd_intr.c urb_xfer_done = dwc2_update_urb_state(hsotg, chan, hsotg 1046 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 1049 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_save_data_toggle(hsotg, chan, chnum, hsotg 1055 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " Control transfer complete\n"); hsotg 1058 drivers/usb/dwc2/hcd_intr.c dwc2_host_complete(hsotg, qtd, urb->status); hsotg 1063 drivers/usb/dwc2/hcd_intr.c dwc2_complete_non_periodic_xfer(hsotg, chan, chnum, qtd, hsotg 1067 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " Bulk transfer complete\n"); hsotg 1068 drivers/usb/dwc2/hcd_intr.c urb_xfer_done = dwc2_update_urb_state(hsotg, chan, chnum, urb, hsotg 1071 drivers/usb/dwc2/hcd_intr.c dwc2_host_complete(hsotg, qtd, urb->status); hsotg 1077 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); hsotg 1078 drivers/usb/dwc2/hcd_intr.c dwc2_complete_non_periodic_xfer(hsotg, chan, chnum, qtd, hsotg 1082 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " Interrupt transfer complete\n"); hsotg 1083 drivers/usb/dwc2/hcd_intr.c urb_xfer_done = dwc2_update_urb_state(hsotg, chan, chnum, urb, hsotg 1091 drivers/usb/dwc2/hcd_intr.c dwc2_host_complete(hsotg, qtd, urb->status); hsotg 1097 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); hsotg 1098 drivers/usb/dwc2/hcd_intr.c dwc2_complete_periodic_xfer(hsotg, chan, chnum, qtd, hsotg 1103 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " Isochronous transfer complete\n"); hsotg 1105 drivers/usb/dwc2/hcd_intr.c halt_status = dwc2_update_isoc_urb_state(hsotg, chan, hsotg 1108 drivers/usb/dwc2/hcd_intr.c dwc2_complete_periodic_xfer(hsotg, chan, chnum, qtd, hsotg 1114 drivers/usb/dwc2/hcd_intr.c disable_hc_int(hsotg, chnum, HCINTMSK_XFERCOMPL); hsotg 1121 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_stall_intr(struct dwc2_hsotg *hsotg, hsotg 1128 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, "--Host Channel %d Interrupt: STALL Received--\n", hsotg 1131 drivers/usb/dwc2/hcd_intr.c if (hsotg->params.dma_desc_enable) { hsotg 1132 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_complete_xfer_ddma(hsotg, chan, chnum, hsotg 1143 drivers/usb/dwc2/hcd_intr.c dwc2_host_complete(hsotg, qtd, -EPIPE); hsotg 1147 drivers/usb/dwc2/hcd_intr.c dwc2_host_complete(hsotg, qtd, -EPIPE); hsotg 1159 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_STALL); hsotg 1162 drivers/usb/dwc2/hcd_intr.c disable_hc_int(hsotg, chnum, HCINTMSK_STALL); hsotg 1171 drivers/usb/dwc2/hcd_intr.c static void dwc2_update_urb_state_abn(struct dwc2_hsotg *hsotg, hsotg 1177 drivers/usb/dwc2/hcd_intr.c u32 xfer_length = dwc2_get_actual_xfer_length(hsotg, chan, chnum, hsotg 1182 drivers/usb/dwc2/hcd_intr.c dev_warn(hsotg->dev, "%s(): trimming xfer length\n", __func__); hsotg 1188 drivers/usb/dwc2/hcd_intr.c hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum)); hsotg 1189 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n", hsotg 1191 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " chan->start_pkt_count %d\n", hsotg 1193 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " hctsiz.pktcnt %d\n", hsotg 1195 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " chan->max_packet %d\n", chan->max_packet); hsotg 1196 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " bytes_transferred %d\n", hsotg 1198 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " urb->actual_length %d\n", hsotg 1200 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, " urb->transfer_buffer_length %d\n", hsotg 1208 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_nak_intr(struct dwc2_hsotg *hsotg, hsotg 1213 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, "%s: qtd is NULL\n", __func__); hsotg 1218 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, "%s: qtd->urb is NULL\n", __func__); hsotg 1223 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "--Host Channel %d Interrupt: NAK Received--\n", hsotg 1253 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NAK); hsotg 1260 drivers/usb/dwc2/hcd_intr.c if (hsotg->params.host_dma && chan->ep_is_in) { hsotg 1279 drivers/usb/dwc2/hcd_intr.c dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, hsotg 1281 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); hsotg 1292 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NAK); hsotg 1296 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NAK); hsotg 1300 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, "NACK interrupt for ISOC transfer\n"); hsotg 1305 drivers/usb/dwc2/hcd_intr.c disable_hc_int(hsotg, chnum, HCINTMSK_NAK); hsotg 1313 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_ack_intr(struct dwc2_hsotg *hsotg, hsotg 1320 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "--Host Channel %d Interrupt: ACK Received--\n", hsotg 1331 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_ACK); hsotg 1374 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_ACK); hsotg 1382 drivers/usb/dwc2/hcd_intr.c disable_hc_int(hsotg, chnum, HCINTMSK_ACK); hsotg 1392 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_nyet_intr(struct dwc2_hsotg *hsotg, hsotg 1397 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "--Host Channel %d Interrupt: NYET Received--\n", hsotg 1406 drivers/usb/dwc2/hcd_intr.c hsotg->params.host_dma) { hsotg 1412 drivers/usb/dwc2/hcd_intr.c dwc2_host_complete(hsotg, qtd, 0); hsotg 1413 drivers/usb/dwc2/hcd_intr.c dwc2_release_channel(hsotg, chan, qtd, hsotg 1416 drivers/usb/dwc2/hcd_intr.c dwc2_release_channel(hsotg, chan, qtd, hsotg 1427 drivers/usb/dwc2/hcd_intr.c if (!hsotg->params.uframe_sched) { hsotg 1428 drivers/usb/dwc2/hcd_intr.c int frnum = dwc2_hcd_get_frame_number(hsotg); hsotg 1484 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, hsotg 1491 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NYET); hsotg 1498 drivers/usb/dwc2/hcd_intr.c dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, qtd, hsotg 1500 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); hsotg 1506 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NYET); hsotg 1509 drivers/usb/dwc2/hcd_intr.c disable_hc_int(hsotg, chnum, HCINTMSK_NYET); hsotg 1516 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_babble_intr(struct dwc2_hsotg *hsotg, hsotg 1520 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, "--Host Channel %d Interrupt: Babble Error--\n", hsotg 1523 drivers/usb/dwc2/hcd_intr.c dwc2_hc_handle_tt_clear(hsotg, chan, qtd); hsotg 1525 drivers/usb/dwc2/hcd_intr.c if (hsotg->params.dma_desc_enable) { hsotg 1526 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_complete_xfer_ddma(hsotg, chan, chnum, hsotg 1532 drivers/usb/dwc2/hcd_intr.c dwc2_host_complete(hsotg, qtd, -EOVERFLOW); hsotg 1533 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_BABBLE_ERR); hsotg 1537 drivers/usb/dwc2/hcd_intr.c halt_status = dwc2_update_isoc_urb_state(hsotg, chan, chnum, hsotg 1539 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, halt_status); hsotg 1543 drivers/usb/dwc2/hcd_intr.c disable_hc_int(hsotg, chnum, HCINTMSK_BBLERR); hsotg 1550 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_ahberr_intr(struct dwc2_hsotg *hsotg, hsotg 1561 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, "--Host Channel %d Interrupt: AHB Error--\n", hsotg 1567 drivers/usb/dwc2/hcd_intr.c dwc2_hc_handle_tt_clear(hsotg, chan, qtd); hsotg 1569 drivers/usb/dwc2/hcd_intr.c hcchar = dwc2_readl(hsotg, HCCHAR(chnum)); hsotg 1570 drivers/usb/dwc2/hcd_intr.c hcsplt = dwc2_readl(hsotg, HCSPLT(chnum)); hsotg 1571 drivers/usb/dwc2/hcd_intr.c hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum)); hsotg 1572 drivers/usb/dwc2/hcd_intr.c hc_dma = dwc2_readl(hsotg, HCDMA(chnum)); hsotg 1574 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, "AHB ERROR, Channel %d\n", chnum); hsotg 1575 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, " hcchar 0x%08x, hcsplt 0x%08x\n", hcchar, hcsplt); hsotg 1576 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, " hctsiz 0x%08x, hc_dma 0x%08x\n", hctsiz, hc_dma); hsotg 1577 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, " Device address: %d\n", hsotg 1579 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, " Endpoint: %d, %s\n", hsotg 1601 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, " Endpoint type: %s\n", pipetype); hsotg 1618 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, " Speed: %s\n", speed); hsotg 1620 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, " Max packet size: %d (mult %d)\n", hsotg 1623 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, " Data buffer length: %d\n", urb->length); hsotg 1624 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, " Transfer buffer: %p, Transfer DMA: %08lx\n", hsotg 1626 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, " Setup buffer: %p, Setup DMA: %08lx\n", hsotg 1628 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, " Interval: %d\n", urb->interval); hsotg 1631 drivers/usb/dwc2/hcd_intr.c if (hsotg->params.dma_desc_enable) { hsotg 1632 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_complete_xfer_ddma(hsotg, chan, chnum, hsotg 1637 drivers/usb/dwc2/hcd_intr.c dwc2_host_complete(hsotg, qtd, -EIO); hsotg 1644 drivers/usb/dwc2/hcd_intr.c dwc2_hc_halt(hsotg, chan, DWC2_HC_XFER_AHB_ERR); hsotg 1647 drivers/usb/dwc2/hcd_intr.c disable_hc_int(hsotg, chnum, HCINTMSK_AHBERR); hsotg 1654 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_xacterr_intr(struct dwc2_hsotg *hsotg, hsotg 1658 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, hsotg 1661 drivers/usb/dwc2/hcd_intr.c dwc2_hc_handle_tt_clear(hsotg, chan, qtd); hsotg 1663 drivers/usb/dwc2/hcd_intr.c if (hsotg->params.dma_desc_enable) { hsotg 1664 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_complete_xfer_ddma(hsotg, chan, chnum, hsotg 1674 drivers/usb/dwc2/hcd_intr.c dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, hsotg 1676 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); hsotg 1685 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_XACT_ERR); hsotg 1691 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_XACT_ERR); hsotg 1697 drivers/usb/dwc2/hcd_intr.c halt_status = dwc2_update_isoc_urb_state(hsotg, chan, hsotg 1699 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, halt_status); hsotg 1705 drivers/usb/dwc2/hcd_intr.c disable_hc_int(hsotg, chnum, HCINTMSK_XACTERR); hsotg 1712 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_frmovrun_intr(struct dwc2_hsotg *hsotg, hsotg 1719 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, "--Host Channel %d Interrupt: Frame Overrun--\n", hsotg 1722 drivers/usb/dwc2/hcd_intr.c dwc2_hc_handle_tt_clear(hsotg, chan, qtd); hsotg 1729 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_FRAME_OVERRUN); hsotg 1732 drivers/usb/dwc2/hcd_intr.c halt_status = dwc2_update_isoc_urb_state(hsotg, chan, chnum, hsotg 1734 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, halt_status); hsotg 1738 drivers/usb/dwc2/hcd_intr.c disable_hc_int(hsotg, chnum, HCINTMSK_FRMOVRUN); hsotg 1745 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_datatglerr_intr(struct dwc2_hsotg *hsotg, hsotg 1749 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, hsotg 1755 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, hsotg 1759 drivers/usb/dwc2/hcd_intr.c dwc2_hc_handle_tt_clear(hsotg, chan, qtd); hsotg 1760 drivers/usb/dwc2/hcd_intr.c disable_hc_int(hsotg, chnum, HCINTMSK_DATATGLERR); hsotg 1770 drivers/usb/dwc2/hcd_intr.c static bool dwc2_halt_status_ok(struct dwc2_hsotg *hsotg, hsotg 1785 drivers/usb/dwc2/hcd_intr.c hcchar = dwc2_readl(hsotg, HCCHAR(chnum)); hsotg 1786 drivers/usb/dwc2/hcd_intr.c hctsiz = dwc2_readl(hsotg, HCTSIZ(chnum)); hsotg 1787 drivers/usb/dwc2/hcd_intr.c hcintmsk = dwc2_readl(hsotg, HCINTMSK(chnum)); hsotg 1788 drivers/usb/dwc2/hcd_intr.c hcsplt = dwc2_readl(hsotg, HCSPLT(chnum)); hsotg 1789 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, hsotg 1792 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, hsotg 1795 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, hsotg 1799 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, "qtd->complete_split %d\n", hsotg 1801 drivers/usb/dwc2/hcd_intr.c dev_warn(hsotg->dev, hsotg 1812 drivers/usb/dwc2/hcd_intr.c hcchar = dwc2_readl(hsotg, HCCHAR(chnum)); hsotg 1814 drivers/usb/dwc2/hcd_intr.c dev_warn(hsotg->dev, hsotg 1818 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, chan->halt_status); hsotg 1830 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_chhltd_intr_dma(struct dwc2_hsotg *hsotg, hsotg 1838 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 1846 drivers/usb/dwc2/hcd_intr.c if (hsotg->hw_params.snpsid >= DWC2_CORE_REV_2_71a) { hsotg 1856 drivers/usb/dwc2/hcd_intr.c !hsotg->params.dma_desc_enable)) { hsotg 1857 drivers/usb/dwc2/hcd_intr.c if (hsotg->params.dma_desc_enable) hsotg 1858 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_complete_xfer_ddma(hsotg, chan, chnum, hsotg 1867 drivers/usb/dwc2/hcd_intr.c dwc2_release_channel(hsotg, chan, qtd, hsotg 1872 drivers/usb/dwc2/hcd_intr.c hcintmsk = dwc2_readl(hsotg, HCINTMSK(chnum)); hsotg 1883 drivers/usb/dwc2/hcd_intr.c dwc2_hc_ack_intr(hsotg, chan, chnum, qtd); hsotg 1884 drivers/usb/dwc2/hcd_intr.c dwc2_hc_xfercomp_intr(hsotg, chan, chnum, qtd); hsotg 1886 drivers/usb/dwc2/hcd_intr.c dwc2_hc_stall_intr(hsotg, chan, chnum, qtd); hsotg 1888 drivers/usb/dwc2/hcd_intr.c !hsotg->params.dma_desc_enable) { hsotg 1892 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 1896 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 1906 drivers/usb/dwc2/hcd_intr.c dwc2_hc_xacterr_intr(hsotg, chan, chnum, qtd); hsotg 1908 drivers/usb/dwc2/hcd_intr.c hsotg->params.dma_desc_enable) { hsotg 1909 drivers/usb/dwc2/hcd_intr.c dwc2_hc_xacterr_intr(hsotg, chan, chnum, qtd); hsotg 1911 drivers/usb/dwc2/hcd_intr.c hsotg->params.dma_desc_enable) { hsotg 1912 drivers/usb/dwc2/hcd_intr.c dwc2_hc_ahberr_intr(hsotg, chan, chnum, qtd); hsotg 1914 drivers/usb/dwc2/hcd_intr.c dwc2_hc_babble_intr(hsotg, chan, chnum, qtd); hsotg 1916 drivers/usb/dwc2/hcd_intr.c dwc2_hc_frmovrun_intr(hsotg, chan, chnum, qtd); hsotg 1925 drivers/usb/dwc2/hcd_intr.c dwc2_hc_nyet_intr(hsotg, chan, chnum, qtd); hsotg 1935 drivers/usb/dwc2/hcd_intr.c dwc2_hc_nak_intr(hsotg, chan, chnum, qtd); hsotg 1945 drivers/usb/dwc2/hcd_intr.c dwc2_hc_ack_intr(hsotg, chan, chnum, qtd); hsotg 1955 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, hsotg 1958 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, hsotg 1961 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, hsotg 1964 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, hsotg 1967 drivers/usb/dwc2/hcd_intr.c dwc2_readl(hsotg, GINTSTS)); hsotg 1972 drivers/usb/dwc2/hcd_intr.c dev_info(hsotg->dev, hsotg 1978 drivers/usb/dwc2/hcd_intr.c dwc2_update_urb_state_abn(hsotg, chan, chnum, qtd->urb, hsotg 1980 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_save_data_toggle(hsotg, chan, chnum, qtd); hsotg 1981 drivers/usb/dwc2/hcd_intr.c dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_XACT_ERR); hsotg 1996 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_chhltd_intr(struct dwc2_hsotg *hsotg, hsotg 2001 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "--Host Channel %d Interrupt: Channel Halted--\n", hsotg 2004 drivers/usb/dwc2/hcd_intr.c if (hsotg->params.host_dma) { hsotg 2005 drivers/usb/dwc2/hcd_intr.c dwc2_hc_chhltd_intr_dma(hsotg, chan, chnum, qtd); hsotg 2007 drivers/usb/dwc2/hcd_intr.c if (!dwc2_halt_status_ok(hsotg, chan, chnum, qtd)) hsotg 2009 drivers/usb/dwc2/hcd_intr.c dwc2_release_channel(hsotg, chan, qtd, chan->halt_status); hsotg 2032 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum) hsotg 2038 drivers/usb/dwc2/hcd_intr.c chan = hsotg->hc_ptr_array[chnum]; hsotg 2040 drivers/usb/dwc2/hcd_intr.c hcint = dwc2_readl(hsotg, HCINT(chnum)); hsotg 2041 drivers/usb/dwc2/hcd_intr.c hcintmsk = dwc2_readl(hsotg, HCINTMSK(chnum)); hsotg 2043 drivers/usb/dwc2/hcd_intr.c dev_err(hsotg->dev, "## hc_ptr_array for channel is NULL ##\n"); hsotg 2044 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, hcint, HCINT(chnum)); hsotg 2049 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "--Host Channel Interrupt--, Channel %d\n", hsotg 2051 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 2056 drivers/usb/dwc2/hcd_intr.c dwc2_writel(hsotg, hcint, HCINT(chnum)); hsotg 2063 drivers/usb/dwc2/hcd_intr.c dev_warn(hsotg->dev, "Interrupt on disabled channel\n"); hsotg 2081 drivers/usb/dwc2/hcd_intr.c if (hsotg->params.dma_desc_enable) hsotg 2082 drivers/usb/dwc2/hcd_intr.c dwc2_hcd_complete_xfer_ddma(hsotg, chan, chnum, hsotg 2085 drivers/usb/dwc2/hcd_intr.c dwc2_release_channel(hsotg, chan, NULL, hsotg 2095 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, "## no QTD queued for channel %d ##\n", hsotg 2097 drivers/usb/dwc2/hcd_intr.c dev_dbg(hsotg->dev, hsotg 2101 drivers/usb/dwc2/hcd_intr.c disable_hc_int(hsotg, chnum, HCINTMSK_CHHLTD); hsotg 2109 drivers/usb/dwc2/hcd_intr.c if (!hsotg->params.host_dma) { hsotg 2115 drivers/usb/dwc2/hcd_intr.c dwc2_hc_xfercomp_intr(hsotg, chan, chnum, qtd); hsotg 2125 drivers/usb/dwc2/hcd_intr.c dwc2_hc_chhltd_intr(hsotg, chan, chnum, qtd); hsotg 2130 drivers/usb/dwc2/hcd_intr.c dwc2_hc_ahberr_intr(hsotg, chan, chnum, qtd); hsotg 2135 drivers/usb/dwc2/hcd_intr.c dwc2_hc_stall_intr(hsotg, chan, chnum, qtd); hsotg 2140 drivers/usb/dwc2/hcd_intr.c dwc2_hc_nak_intr(hsotg, chan, chnum, qtd); hsotg 2145 drivers/usb/dwc2/hcd_intr.c dwc2_hc_ack_intr(hsotg, chan, chnum, qtd); hsotg 2150 drivers/usb/dwc2/hcd_intr.c dwc2_hc_nyet_intr(hsotg, chan, chnum, qtd); hsotg 2155 drivers/usb/dwc2/hcd_intr.c dwc2_hc_xacterr_intr(hsotg, chan, chnum, qtd); hsotg 2160 drivers/usb/dwc2/hcd_intr.c dwc2_hc_babble_intr(hsotg, chan, chnum, qtd); hsotg 2165 drivers/usb/dwc2/hcd_intr.c dwc2_hc_frmovrun_intr(hsotg, chan, chnum, qtd); hsotg 2170 drivers/usb/dwc2/hcd_intr.c dwc2_hc_datatglerr_intr(hsotg, chan, chnum, qtd); hsotg 2185 drivers/usb/dwc2/hcd_intr.c static void dwc2_hc_intr(struct dwc2_hsotg *hsotg) hsotg 2191 drivers/usb/dwc2/hcd_intr.c haint = dwc2_readl(hsotg, HAINT); hsotg 2193 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "%s()\n", __func__); hsotg 2195 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, "HAINT=%08x\n", haint); hsotg 2204 drivers/usb/dwc2/hcd_intr.c list_for_each_entry_safe(chan, chan_tmp, &hsotg->split_order, hsotg 2209 drivers/usb/dwc2/hcd_intr.c dwc2_hc_n_intr(hsotg, hc_num); hsotg 2214 drivers/usb/dwc2/hcd_intr.c for (i = 0; i < hsotg->params.host_channels; i++) { hsotg 2216 drivers/usb/dwc2/hcd_intr.c dwc2_hc_n_intr(hsotg, i); hsotg 2221 drivers/usb/dwc2/hcd_intr.c irqreturn_t dwc2_handle_hcd_intr(struct dwc2_hsotg *hsotg) hsotg 2226 drivers/usb/dwc2/hcd_intr.c if (!dwc2_is_controller_alive(hsotg)) { hsotg 2227 drivers/usb/dwc2/hcd_intr.c dev_warn(hsotg->dev, "Controller is dead\n"); hsotg 2231 drivers/usb/dwc2/hcd_intr.c spin_lock(&hsotg->lock); hsotg 2234 drivers/usb/dwc2/hcd_intr.c if (dwc2_is_host_mode(hsotg)) { hsotg 2235 drivers/usb/dwc2/hcd_intr.c gintsts = dwc2_read_core_intr(hsotg); hsotg 2237 drivers/usb/dwc2/hcd_intr.c spin_unlock(&hsotg->lock); hsotg 2253 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 2258 drivers/usb/dwc2/hcd_intr.c dwc2_sof_intr(hsotg); hsotg 2260 drivers/usb/dwc2/hcd_intr.c dwc2_rx_fifo_level_intr(hsotg); hsotg 2262 drivers/usb/dwc2/hcd_intr.c dwc2_np_tx_fifo_empty_intr(hsotg); hsotg 2264 drivers/usb/dwc2/hcd_intr.c dwc2_port_intr(hsotg); hsotg 2266 drivers/usb/dwc2/hcd_intr.c dwc2_hc_intr(hsotg); hsotg 2268 drivers/usb/dwc2/hcd_intr.c dwc2_perio_tx_fifo_empty_intr(hsotg); hsotg 2271 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 2273 drivers/usb/dwc2/hcd_intr.c dev_vdbg(hsotg->dev, hsotg 2275 drivers/usb/dwc2/hcd_intr.c dwc2_readl(hsotg, GINTSTS), hsotg 2276 drivers/usb/dwc2/hcd_intr.c dwc2_readl(hsotg, GINTMSK)); hsotg 2280 drivers/usb/dwc2/hcd_intr.c spin_unlock(&hsotg->lock); hsotg 72 drivers/usb/dwc2/hcd_queue.c static int dwc2_periodic_channel_available(struct dwc2_hsotg *hsotg) hsotg 82 drivers/usb/dwc2/hcd_queue.c num_channels = hsotg->params.host_channels; hsotg 83 drivers/usb/dwc2/hcd_queue.c if ((hsotg->periodic_channels + hsotg->non_periodic_channels < hsotg 84 drivers/usb/dwc2/hcd_queue.c num_channels) && (hsotg->periodic_channels < num_channels - 1)) { hsotg 87 drivers/usb/dwc2/hcd_queue.c dev_dbg(hsotg->dev, hsotg 90 drivers/usb/dwc2/hcd_queue.c hsotg->periodic_channels, hsotg->non_periodic_channels); hsotg 109 drivers/usb/dwc2/hcd_queue.c static int dwc2_check_periodic_bandwidth(struct dwc2_hsotg *hsotg, hsotg 131 drivers/usb/dwc2/hcd_queue.c if (hsotg->periodic_usecs > max_claimed_usecs) { hsotg 132 drivers/usb/dwc2/hcd_queue.c dev_err(hsotg->dev, hsotg 134 drivers/usb/dwc2/hcd_queue.c __func__, hsotg->periodic_usecs, qh->host_us); hsotg 374 drivers/usb/dwc2/hcd_queue.c static unsigned long *dwc2_get_ls_map(struct dwc2_hsotg *hsotg, hsotg 492 drivers/usb/dwc2/hcd_queue.c struct dwc2_hsotg *hsotg; hsotg 506 drivers/usb/dwc2/hcd_queue.c dwc2_sch_dbg(print_data->hsotg, "QH=%p ...%s\n", print_data->qh, str); hsotg 515 drivers/usb/dwc2/hcd_queue.c static void dwc2_qh_schedule_print(struct dwc2_hsotg *hsotg, hsotg 518 drivers/usb/dwc2/hcd_queue.c struct dwc2_qh_print_data print_data = { hsotg, qh }; hsotg 528 drivers/usb/dwc2/hcd_queue.c unsigned long *map = dwc2_get_ls_map(hsotg, qh); hsotg 530 drivers/usb/dwc2/hcd_queue.c dwc2_sch_dbg(hsotg, "QH=%p LS/FS trans: %d=>%d us @ %d us", hsotg 536 drivers/usb/dwc2/hcd_queue.c dwc2_sch_dbg(hsotg, hsotg 552 drivers/usb/dwc2/hcd_queue.c dwc2_sch_dbg(hsotg, hsotg 557 drivers/usb/dwc2/hcd_queue.c dwc2_sch_dbg(hsotg, "QH=%p Whole high speed map now:\n", qh); hsotg 558 drivers/usb/dwc2/hcd_queue.c pmap_print(hsotg->hs_periodic_bitmap, hsotg 565 drivers/usb/dwc2/hcd_queue.c static inline void dwc2_qh_schedule_print(struct dwc2_hsotg *hsotg, hsotg 584 drivers/usb/dwc2/hcd_queue.c static int dwc2_ls_pmap_schedule(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh, hsotg 588 drivers/usb/dwc2/hcd_queue.c unsigned long *map = dwc2_get_ls_map(hsotg, qh); hsotg 623 drivers/usb/dwc2/hcd_queue.c static void dwc2_ls_pmap_unschedule(struct dwc2_hsotg *hsotg, hsotg 627 drivers/usb/dwc2/hcd_queue.c unsigned long *map = dwc2_get_ls_map(hsotg, qh); hsotg 658 drivers/usb/dwc2/hcd_queue.c static int dwc2_hs_pmap_schedule(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh, hsotg 664 drivers/usb/dwc2/hcd_queue.c us = pmap_schedule(hsotg->hs_periodic_bitmap, hsotg 684 drivers/usb/dwc2/hcd_queue.c static void dwc2_hs_pmap_unschedule(struct dwc2_hsotg *hsotg, hsotg 689 drivers/usb/dwc2/hcd_queue.c pmap_unschedule(hsotg->hs_periodic_bitmap, hsotg 708 drivers/usb/dwc2/hcd_queue.c static int dwc2_uframe_schedule_split(struct dwc2_hsotg *hsotg, hsotg 749 drivers/usb/dwc2/hcd_queue.c err = dwc2_ls_pmap_schedule(hsotg, qh, ls_search_slice); hsotg 784 drivers/usb/dwc2/hcd_queue.c dwc2_ls_pmap_unschedule(hsotg, qh); hsotg 857 drivers/usb/dwc2/hcd_queue.c dwc2_sch_dbg(hsotg, hsotg 861 drivers/usb/dwc2/hcd_queue.c dwc2_ls_pmap_unschedule(hsotg, qh); hsotg 956 drivers/usb/dwc2/hcd_queue.c err = dwc2_hs_pmap_schedule(hsotg, qh, true, i); hsotg 966 drivers/usb/dwc2/hcd_queue.c dwc2_hs_pmap_unschedule(hsotg, qh, i); hsotg 969 drivers/usb/dwc2/hcd_queue.c dwc2_ls_pmap_unschedule(hsotg, qh); hsotg 990 drivers/usb/dwc2/hcd_queue.c static int dwc2_uframe_schedule_hs(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 1001 drivers/usb/dwc2/hcd_queue.c return dwc2_hs_pmap_schedule(hsotg, qh, false, 0); hsotg 1013 drivers/usb/dwc2/hcd_queue.c static int dwc2_uframe_schedule_ls(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 1021 drivers/usb/dwc2/hcd_queue.c return dwc2_ls_pmap_schedule(hsotg, qh, 0); hsotg 1033 drivers/usb/dwc2/hcd_queue.c static int dwc2_uframe_schedule(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 1038 drivers/usb/dwc2/hcd_queue.c ret = dwc2_uframe_schedule_hs(hsotg, qh); hsotg 1040 drivers/usb/dwc2/hcd_queue.c ret = dwc2_uframe_schedule_ls(hsotg, qh); hsotg 1042 drivers/usb/dwc2/hcd_queue.c ret = dwc2_uframe_schedule_split(hsotg, qh); hsotg 1045 drivers/usb/dwc2/hcd_queue.c dwc2_sch_dbg(hsotg, "QH=%p Failed to schedule %d\n", qh, ret); hsotg 1047 drivers/usb/dwc2/hcd_queue.c dwc2_qh_schedule_print(hsotg, qh); hsotg 1058 drivers/usb/dwc2/hcd_queue.c static void dwc2_uframe_unschedule(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 1063 drivers/usb/dwc2/hcd_queue.c dwc2_hs_pmap_unschedule(hsotg, qh, i); hsotg 1066 drivers/usb/dwc2/hcd_queue.c dwc2_ls_pmap_unschedule(hsotg, qh); hsotg 1068 drivers/usb/dwc2/hcd_queue.c dwc2_sch_dbg(hsotg, "QH=%p Unscheduled\n", qh); hsotg 1086 drivers/usb/dwc2/hcd_queue.c static void dwc2_pick_first_frame(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 1098 drivers/usb/dwc2/hcd_queue.c frame_number = dwc2_hcd_get_frame_number(hsotg); hsotg 1112 drivers/usb/dwc2/hcd_queue.c if (!hsotg->params.uframe_sched) { hsotg 1186 drivers/usb/dwc2/hcd_queue.c dwc2_sch_vdbg(hsotg, "QH=%p First fn=%04x nxt=%04x\n", hsotg 1201 drivers/usb/dwc2/hcd_queue.c static int dwc2_do_reserve(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 1205 drivers/usb/dwc2/hcd_queue.c if (hsotg->params.uframe_sched) { hsotg 1206 drivers/usb/dwc2/hcd_queue.c status = dwc2_uframe_schedule(hsotg, qh); hsotg 1208 drivers/usb/dwc2/hcd_queue.c status = dwc2_periodic_channel_available(hsotg); hsotg 1210 drivers/usb/dwc2/hcd_queue.c dev_info(hsotg->dev, hsotg 1216 drivers/usb/dwc2/hcd_queue.c status = dwc2_check_periodic_bandwidth(hsotg, qh); hsotg 1220 drivers/usb/dwc2/hcd_queue.c dev_dbg(hsotg->dev, hsotg 1226 drivers/usb/dwc2/hcd_queue.c if (!hsotg->params.uframe_sched) hsotg 1228 drivers/usb/dwc2/hcd_queue.c hsotg->periodic_channels++; hsotg 1231 drivers/usb/dwc2/hcd_queue.c hsotg->periodic_usecs += qh->host_us; hsotg 1233 drivers/usb/dwc2/hcd_queue.c dwc2_pick_first_frame(hsotg, qh); hsotg 1247 drivers/usb/dwc2/hcd_queue.c static void dwc2_do_unreserve(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 1249 drivers/usb/dwc2/hcd_queue.c assert_spin_locked(&hsotg->lock); hsotg 1260 drivers/usb/dwc2/hcd_queue.c hsotg->periodic_usecs -= qh->host_us; hsotg 1262 drivers/usb/dwc2/hcd_queue.c if (hsotg->params.uframe_sched) { hsotg 1263 drivers/usb/dwc2/hcd_queue.c dwc2_uframe_unschedule(hsotg, qh); hsotg 1266 drivers/usb/dwc2/hcd_queue.c hsotg->periodic_channels--; hsotg 1285 drivers/usb/dwc2/hcd_queue.c struct dwc2_hsotg *hsotg = qh->hsotg; hsotg 1297 drivers/usb/dwc2/hcd_queue.c while (!spin_trylock_irqsave(&hsotg->lock, flags)) { hsotg 1313 drivers/usb/dwc2/hcd_queue.c dwc2_do_unreserve(hsotg, qh); hsotg 1315 drivers/usb/dwc2/hcd_queue.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 1328 drivers/usb/dwc2/hcd_queue.c static int dwc2_check_max_xfer_size(struct dwc2_hsotg *hsotg, hsotg 1336 drivers/usb/dwc2/hcd_queue.c max_channel_xfer_size = hsotg->params.max_transfer_size; hsotg 1339 drivers/usb/dwc2/hcd_queue.c dev_err(hsotg->dev, hsotg 1358 drivers/usb/dwc2/hcd_queue.c static int dwc2_schedule_periodic(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 1362 drivers/usb/dwc2/hcd_queue.c status = dwc2_check_max_xfer_size(hsotg, qh); hsotg 1364 drivers/usb/dwc2/hcd_queue.c dev_dbg(hsotg->dev, hsotg 1382 drivers/usb/dwc2/hcd_queue.c status = dwc2_do_reserve(hsotg, qh); hsotg 1393 drivers/usb/dwc2/hcd_queue.c hsotg->frame_number)) hsotg 1394 drivers/usb/dwc2/hcd_queue.c dwc2_pick_first_frame(hsotg, qh); hsotg 1399 drivers/usb/dwc2/hcd_queue.c if (hsotg->params.dma_desc_enable) hsotg 1401 drivers/usb/dwc2/hcd_queue.c list_add_tail(&qh->qh_list_entry, &hsotg->periodic_sched_ready); hsotg 1405 drivers/usb/dwc2/hcd_queue.c &hsotg->periodic_sched_inactive); hsotg 1417 drivers/usb/dwc2/hcd_queue.c static void dwc2_deschedule_periodic(struct dwc2_hsotg *hsotg, hsotg 1422 drivers/usb/dwc2/hcd_queue.c assert_spin_locked(&hsotg->lock); hsotg 1473 drivers/usb/dwc2/hcd_queue.c struct dwc2_hsotg *hsotg = qh->hsotg; hsotg 1476 drivers/usb/dwc2/hcd_queue.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 1488 drivers/usb/dwc2/hcd_queue.c &hsotg->non_periodic_sched_inactive); hsotg 1490 drivers/usb/dwc2/hcd_queue.c tr_type = dwc2_hcd_select_transactions(hsotg); hsotg 1492 drivers/usb/dwc2/hcd_queue.c dwc2_hcd_queue_transactions(hsotg, tr_type); hsotg 1495 drivers/usb/dwc2/hcd_queue.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 1508 drivers/usb/dwc2/hcd_queue.c static void dwc2_qh_init(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh, hsotg 1511 drivers/usb/dwc2/hcd_queue.c int dev_speed = dwc2_host_get_speed(hsotg, urb->priv); hsotg 1516 drivers/usb/dwc2/hcd_queue.c u32 hprt = dwc2_readl(hsotg, HPRT0); hsotg 1526 drivers/usb/dwc2/hcd_queue.c qh->hsotg = hsotg; hsotg 1545 drivers/usb/dwc2/hcd_queue.c struct dwc2_tt *dwc_tt = dwc2_host_get_tt_info(hsotg, urb->priv, hsotg 1617 drivers/usb/dwc2/hcd_queue.c dwc2_sch_dbg(hsotg, "QH=%p Init %s, %s speed, %d bytes:\n", qh, type, hsotg 1619 drivers/usb/dwc2/hcd_queue.c dwc2_sch_dbg(hsotg, "QH=%p ...addr=%d, ep=%d, %s\n", qh, hsotg 1624 drivers/usb/dwc2/hcd_queue.c dwc2_sch_dbg(hsotg, hsotg 1627 drivers/usb/dwc2/hcd_queue.c dwc2_sch_dbg(hsotg, "QH=%p ...interval: host=%d, device=%d\n", hsotg 1630 drivers/usb/dwc2/hcd_queue.c dwc2_sch_dbg(hsotg, "QH=%p ...low speed schedule=%p\n", hsotg 1631 drivers/usb/dwc2/hcd_queue.c qh, dwc2_get_ls_map(hsotg, qh)); hsotg 1645 drivers/usb/dwc2/hcd_queue.c struct dwc2_qh *dwc2_hcd_qh_create(struct dwc2_hsotg *hsotg, hsotg 1659 drivers/usb/dwc2/hcd_queue.c dwc2_qh_init(hsotg, qh, urb, mem_flags); hsotg 1661 drivers/usb/dwc2/hcd_queue.c if (hsotg->params.dma_desc_enable && hsotg 1662 drivers/usb/dwc2/hcd_queue.c dwc2_hcd_qh_init_ddma(hsotg, qh, mem_flags) < 0) { hsotg 1663 drivers/usb/dwc2/hcd_queue.c dwc2_hcd_qh_free(hsotg, qh); hsotg 1681 drivers/usb/dwc2/hcd_queue.c void dwc2_hcd_qh_free(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 1687 drivers/usb/dwc2/hcd_queue.c spin_lock_irqsave(&hsotg->lock, flags); hsotg 1688 drivers/usb/dwc2/hcd_queue.c dwc2_do_unreserve(hsotg, qh); hsotg 1689 drivers/usb/dwc2/hcd_queue.c spin_unlock_irqrestore(&hsotg->lock, flags); hsotg 1701 drivers/usb/dwc2/hcd_queue.c dwc2_host_put_tt_info(hsotg, qh->dwc_tt); hsotg 1704 drivers/usb/dwc2/hcd_queue.c dwc2_hcd_qh_free_ddma(hsotg, qh); hsotg 1705 drivers/usb/dwc2/hcd_queue.c else if (hsotg->unaligned_cache && qh->dw_align_buf) hsotg 1706 drivers/usb/dwc2/hcd_queue.c kmem_cache_free(hsotg->unaligned_cache, qh->dw_align_buf); hsotg 1721 drivers/usb/dwc2/hcd_queue.c int dwc2_hcd_qh_add(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 1728 drivers/usb/dwc2/hcd_queue.c dev_vdbg(hsotg->dev, "%s()\n", __func__); hsotg 1737 drivers/usb/dwc2/hcd_queue.c qh->start_active_frame = hsotg->frame_number; hsotg 1742 drivers/usb/dwc2/hcd_queue.c &hsotg->non_periodic_sched_waiting); hsotg 1748 drivers/usb/dwc2/hcd_queue.c &hsotg->non_periodic_sched_inactive); hsotg 1753 drivers/usb/dwc2/hcd_queue.c status = dwc2_schedule_periodic(hsotg, qh); hsotg 1756 drivers/usb/dwc2/hcd_queue.c if (!hsotg->periodic_qh_count) { hsotg 1757 drivers/usb/dwc2/hcd_queue.c intr_mask = dwc2_readl(hsotg, GINTMSK); hsotg 1759 drivers/usb/dwc2/hcd_queue.c dwc2_writel(hsotg, intr_mask, GINTMSK); hsotg 1761 drivers/usb/dwc2/hcd_queue.c hsotg->periodic_qh_count++; hsotg 1773 drivers/usb/dwc2/hcd_queue.c void dwc2_hcd_qh_unlink(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh) hsotg 1777 drivers/usb/dwc2/hcd_queue.c dev_vdbg(hsotg->dev, "%s()\n", __func__); hsotg 1787 drivers/usb/dwc2/hcd_queue.c if (hsotg->non_periodic_qh_ptr == &qh->qh_list_entry) hsotg 1788 drivers/usb/dwc2/hcd_queue.c hsotg->non_periodic_qh_ptr = hsotg 1789 drivers/usb/dwc2/hcd_queue.c hsotg->non_periodic_qh_ptr->next; hsotg 1794 drivers/usb/dwc2/hcd_queue.c dwc2_deschedule_periodic(hsotg, qh); hsotg 1795 drivers/usb/dwc2/hcd_queue.c hsotg->periodic_qh_count--; hsotg 1796 drivers/usb/dwc2/hcd_queue.c if (!hsotg->periodic_qh_count && hsotg 1797 drivers/usb/dwc2/hcd_queue.c !hsotg->params.dma_desc_enable) { hsotg 1798 drivers/usb/dwc2/hcd_queue.c intr_mask = dwc2_readl(hsotg, GINTMSK); hsotg 1800 drivers/usb/dwc2/hcd_queue.c dwc2_writel(hsotg, intr_mask, GINTMSK); hsotg 1823 drivers/usb/dwc2/hcd_queue.c static int dwc2_next_for_periodic_split(struct dwc2_hsotg *hsotg, hsotg 1886 drivers/usb/dwc2/hcd_queue.c static int dwc2_next_periodic_start(struct dwc2_hsotg *hsotg, hsotg 1977 drivers/usb/dwc2/hcd_queue.c void dwc2_hcd_qh_deactivate(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh, hsotg 1985 drivers/usb/dwc2/hcd_queue.c dev_vdbg(hsotg->dev, "%s()\n", __func__); hsotg 1988 drivers/usb/dwc2/hcd_queue.c dwc2_hcd_qh_unlink(hsotg, qh); hsotg 1991 drivers/usb/dwc2/hcd_queue.c dwc2_hcd_qh_add(hsotg, qh); hsotg 2001 drivers/usb/dwc2/hcd_queue.c frame_number = dwc2_hcd_get_frame_number(hsotg); hsotg 2004 drivers/usb/dwc2/hcd_queue.c missed = dwc2_next_for_periodic_split(hsotg, qh, frame_number); hsotg 2006 drivers/usb/dwc2/hcd_queue.c missed = dwc2_next_periodic_start(hsotg, qh, frame_number); hsotg 2008 drivers/usb/dwc2/hcd_queue.c dwc2_sch_vdbg(hsotg, hsotg 2016 drivers/usb/dwc2/hcd_queue.c dwc2_hcd_qh_unlink(hsotg, qh); hsotg 2027 drivers/usb/dwc2/hcd_queue.c if (dwc2_frame_num_le(qh->next_active_frame, hsotg->frame_number)) hsotg 2029 drivers/usb/dwc2/hcd_queue.c &hsotg->periodic_sched_ready); hsotg 2032 drivers/usb/dwc2/hcd_queue.c &hsotg->periodic_sched_inactive); hsotg 2078 drivers/usb/dwc2/hcd_queue.c int dwc2_hcd_qtd_add(struct dwc2_hsotg *hsotg, struct dwc2_qtd *qtd, hsotg 2084 drivers/usb/dwc2/hcd_queue.c dev_err(hsotg->dev, "%s: Invalid QH\n", __func__); hsotg 2089 drivers/usb/dwc2/hcd_queue.c retval = dwc2_hcd_qh_add(hsotg, qh); hsotg 42 drivers/usb/dwc2/params.c static void dwc2_set_bcm_params(struct dwc2_hsotg *hsotg) hsotg 44 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 52 drivers/usb/dwc2/params.c static void dwc2_set_his_params(struct dwc2_hsotg *hsotg) hsotg 54 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 74 drivers/usb/dwc2/params.c static void dwc2_set_s3c6400_params(struct dwc2_hsotg *hsotg) hsotg 76 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 82 drivers/usb/dwc2/params.c static void dwc2_set_rk_params(struct dwc2_hsotg *hsotg) hsotg 84 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 95 drivers/usb/dwc2/params.c static void dwc2_set_ltq_params(struct dwc2_hsotg *hsotg) hsotg 97 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 109 drivers/usb/dwc2/params.c static void dwc2_set_amlogic_params(struct dwc2_hsotg *hsotg) hsotg 111 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 125 drivers/usb/dwc2/params.c static void dwc2_set_amlogic_g12a_params(struct dwc2_hsotg *hsotg) hsotg 127 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 135 drivers/usb/dwc2/params.c static void dwc2_set_amcc_params(struct dwc2_hsotg *hsotg) hsotg 137 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 142 drivers/usb/dwc2/params.c static void dwc2_set_stm32f4x9_fsotg_params(struct dwc2_hsotg *hsotg) hsotg 144 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 157 drivers/usb/dwc2/params.c static void dwc2_set_stm32f7_hsotg_params(struct dwc2_hsotg *hsotg) hsotg 159 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 193 drivers/usb/dwc2/params.c static void dwc2_set_param_otg_cap(struct dwc2_hsotg *hsotg) hsotg 197 drivers/usb/dwc2/params.c switch (hsotg->hw_params.op_mode) { hsotg 211 drivers/usb/dwc2/params.c hsotg->params.otg_cap = val; hsotg 214 drivers/usb/dwc2/params.c static void dwc2_set_param_phy_type(struct dwc2_hsotg *hsotg) hsotg 217 drivers/usb/dwc2/params.c u32 hs_phy_type = hsotg->hw_params.hs_phy_type; hsotg 228 drivers/usb/dwc2/params.c if (dwc2_is_fs_iot(hsotg)) hsotg 229 drivers/usb/dwc2/params.c hsotg->params.phy_type = DWC2_PHY_TYPE_PARAM_FS; hsotg 231 drivers/usb/dwc2/params.c hsotg->params.phy_type = val; hsotg 234 drivers/usb/dwc2/params.c static void dwc2_set_param_speed(struct dwc2_hsotg *hsotg) hsotg 238 drivers/usb/dwc2/params.c val = hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS ? hsotg 241 drivers/usb/dwc2/params.c if (dwc2_is_fs_iot(hsotg)) hsotg 244 drivers/usb/dwc2/params.c if (dwc2_is_hs_iot(hsotg)) hsotg 247 drivers/usb/dwc2/params.c hsotg->params.speed = val; hsotg 250 drivers/usb/dwc2/params.c static void dwc2_set_param_phy_utmi_width(struct dwc2_hsotg *hsotg) hsotg 254 drivers/usb/dwc2/params.c val = (hsotg->hw_params.utmi_phy_data_width == hsotg 257 drivers/usb/dwc2/params.c if (hsotg->phy) { hsotg 262 drivers/usb/dwc2/params.c if (phy_get_bus_width(hsotg->phy) == 8) hsotg 266 drivers/usb/dwc2/params.c hsotg->params.phy_utmi_width = val; hsotg 269 drivers/usb/dwc2/params.c static void dwc2_set_param_tx_fifo_sizes(struct dwc2_hsotg *hsotg) hsotg 271 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 276 drivers/usb/dwc2/params.c fifo_count = dwc2_hsotg_tx_fifo_count(hsotg); hsotg 279 drivers/usb/dwc2/params.c depth_average = dwc2_hsotg_tx_fifo_average_depth(hsotg); hsotg 284 drivers/usb/dwc2/params.c static void dwc2_set_param_power_down(struct dwc2_hsotg *hsotg) hsotg 288 drivers/usb/dwc2/params.c if (hsotg->hw_params.hibernation) hsotg 290 drivers/usb/dwc2/params.c else if (hsotg->hw_params.power_optimized) hsotg 295 drivers/usb/dwc2/params.c hsotg->params.power_down = val; hsotg 298 drivers/usb/dwc2/params.c static void dwc2_set_param_lpm(struct dwc2_hsotg *hsotg) hsotg 300 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 302 drivers/usb/dwc2/params.c p->lpm = hsotg->hw_params.lpm_mode; hsotg 322 drivers/usb/dwc2/params.c static void dwc2_set_default_params(struct dwc2_hsotg *hsotg) hsotg 324 drivers/usb/dwc2/params.c struct dwc2_hw_params *hw = &hsotg->hw_params; hsotg 325 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 328 drivers/usb/dwc2/params.c dwc2_set_param_otg_cap(hsotg); hsotg 329 drivers/usb/dwc2/params.c dwc2_set_param_phy_type(hsotg); hsotg 330 drivers/usb/dwc2/params.c dwc2_set_param_speed(hsotg); hsotg 331 drivers/usb/dwc2/params.c dwc2_set_param_phy_utmi_width(hsotg); hsotg 332 drivers/usb/dwc2/params.c dwc2_set_param_power_down(hsotg); hsotg 333 drivers/usb/dwc2/params.c dwc2_set_param_lpm(hsotg); hsotg 354 drivers/usb/dwc2/params.c if ((hsotg->dr_mode == USB_DR_MODE_HOST) || hsotg 355 drivers/usb/dwc2/params.c (hsotg->dr_mode == USB_DR_MODE_OTG)) { hsotg 367 drivers/usb/dwc2/params.c if ((hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) || hsotg 368 drivers/usb/dwc2/params.c (hsotg->dr_mode == USB_DR_MODE_OTG)) { hsotg 383 drivers/usb/dwc2/params.c dwc2_set_param_tx_fifo_sizes(hsotg); hsotg 394 drivers/usb/dwc2/params.c static void dwc2_get_device_properties(struct dwc2_hsotg *hsotg) hsotg 396 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 399 drivers/usb/dwc2/params.c if ((hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) || hsotg 400 drivers/usb/dwc2/params.c (hsotg->dr_mode == USB_DR_MODE_OTG)) { hsotg 401 drivers/usb/dwc2/params.c device_property_read_u32(hsotg->dev, "g-rx-fifo-size", hsotg 404 drivers/usb/dwc2/params.c device_property_read_u32(hsotg->dev, "g-np-tx-fifo-size", hsotg 407 drivers/usb/dwc2/params.c num = device_property_count_u32(hsotg->dev, "g-tx-fifo-size"); hsotg 412 drivers/usb/dwc2/params.c device_property_read_u32_array(hsotg->dev, hsotg 419 drivers/usb/dwc2/params.c if (of_find_property(hsotg->dev->of_node, "disable-over-current", NULL)) hsotg 423 drivers/usb/dwc2/params.c static void dwc2_check_param_otg_cap(struct dwc2_hsotg *hsotg) hsotg 427 drivers/usb/dwc2/params.c switch (hsotg->params.otg_cap) { hsotg 429 drivers/usb/dwc2/params.c if (hsotg->hw_params.op_mode != GHWCFG2_OP_MODE_HNP_SRP_CAPABLE) hsotg 433 drivers/usb/dwc2/params.c switch (hsotg->hw_params.op_mode) { hsotg 453 drivers/usb/dwc2/params.c dwc2_set_param_otg_cap(hsotg); hsotg 456 drivers/usb/dwc2/params.c static void dwc2_check_param_phy_type(struct dwc2_hsotg *hsotg) hsotg 462 drivers/usb/dwc2/params.c hs_phy_type = hsotg->hw_params.hs_phy_type; hsotg 463 drivers/usb/dwc2/params.c fs_phy_type = hsotg->hw_params.fs_phy_type; hsotg 465 drivers/usb/dwc2/params.c switch (hsotg->params.phy_type) { hsotg 485 drivers/usb/dwc2/params.c dwc2_set_param_phy_type(hsotg); hsotg 488 drivers/usb/dwc2/params.c static void dwc2_check_param_speed(struct dwc2_hsotg *hsotg) hsotg 491 drivers/usb/dwc2/params.c int phy_type = hsotg->params.phy_type; hsotg 492 drivers/usb/dwc2/params.c int speed = hsotg->params.speed; hsotg 496 drivers/usb/dwc2/params.c if ((hsotg->params.speed == DWC2_SPEED_PARAM_HIGH) && hsotg 509 drivers/usb/dwc2/params.c dwc2_set_param_speed(hsotg); hsotg 512 drivers/usb/dwc2/params.c static void dwc2_check_param_phy_utmi_width(struct dwc2_hsotg *hsotg) hsotg 515 drivers/usb/dwc2/params.c int param = hsotg->params.phy_utmi_width; hsotg 516 drivers/usb/dwc2/params.c int width = hsotg->hw_params.utmi_phy_data_width; hsotg 531 drivers/usb/dwc2/params.c dwc2_set_param_phy_utmi_width(hsotg); hsotg 534 drivers/usb/dwc2/params.c static void dwc2_check_param_power_down(struct dwc2_hsotg *hsotg) hsotg 536 drivers/usb/dwc2/params.c int param = hsotg->params.power_down; hsotg 542 drivers/usb/dwc2/params.c if (hsotg->hw_params.power_optimized) hsotg 544 drivers/usb/dwc2/params.c dev_dbg(hsotg->dev, hsotg 549 drivers/usb/dwc2/params.c if (hsotg->hw_params.hibernation) hsotg 551 drivers/usb/dwc2/params.c dev_dbg(hsotg->dev, hsotg 556 drivers/usb/dwc2/params.c dev_err(hsotg->dev, hsotg 563 drivers/usb/dwc2/params.c hsotg->params.power_down = param; hsotg 566 drivers/usb/dwc2/params.c static void dwc2_check_param_tx_fifo_sizes(struct dwc2_hsotg *hsotg) hsotg 574 drivers/usb/dwc2/params.c fifo_count = dwc2_hsotg_tx_fifo_count(hsotg); hsotg 575 drivers/usb/dwc2/params.c min = hsotg->hw_params.en_multiple_tx_fifo ? 16 : 4; hsotg 578 drivers/usb/dwc2/params.c total += hsotg->params.g_tx_fifo_size[fifo]; hsotg 580 drivers/usb/dwc2/params.c if (total > dwc2_hsotg_tx_fifo_total_depth(hsotg) || !total) { hsotg 581 drivers/usb/dwc2/params.c dev_warn(hsotg->dev, "%s: Invalid parameter g-tx-fifo-size, setting to default average\n", hsotg 583 drivers/usb/dwc2/params.c dwc2_set_param_tx_fifo_sizes(hsotg); hsotg 587 drivers/usb/dwc2/params.c dptxfszn = hsotg->hw_params.g_tx_fifo_size[fifo]; hsotg 589 drivers/usb/dwc2/params.c if (hsotg->params.g_tx_fifo_size[fifo] < min || hsotg 590 drivers/usb/dwc2/params.c hsotg->params.g_tx_fifo_size[fifo] > dptxfszn) { hsotg 591 drivers/usb/dwc2/params.c dev_warn(hsotg->dev, "%s: Invalid parameter g_tx_fifo_size[%d]=%d\n", hsotg 593 drivers/usb/dwc2/params.c hsotg->params.g_tx_fifo_size[fifo]); hsotg 594 drivers/usb/dwc2/params.c hsotg->params.g_tx_fifo_size[fifo] = dptxfszn; hsotg 600 drivers/usb/dwc2/params.c if ((int)(hsotg->params._param) < (_min) || \ hsotg 601 drivers/usb/dwc2/params.c (hsotg->params._param) > (_max)) { \ hsotg 602 drivers/usb/dwc2/params.c dev_warn(hsotg->dev, "%s: Invalid parameter %s=%d\n", \ hsotg 603 drivers/usb/dwc2/params.c __func__, #_param, hsotg->params._param); \ hsotg 604 drivers/usb/dwc2/params.c hsotg->params._param = (_def); \ hsotg 609 drivers/usb/dwc2/params.c if (hsotg->params._param && !(_check)) { \ hsotg 610 drivers/usb/dwc2/params.c dev_warn(hsotg->dev, "%s: Invalid parameter %s=%d\n", \ hsotg 611 drivers/usb/dwc2/params.c __func__, #_param, hsotg->params._param); \ hsotg 612 drivers/usb/dwc2/params.c hsotg->params._param = false; \ hsotg 616 drivers/usb/dwc2/params.c static void dwc2_check_params(struct dwc2_hsotg *hsotg) hsotg 618 drivers/usb/dwc2/params.c struct dwc2_hw_params *hw = &hsotg->hw_params; hsotg 619 drivers/usb/dwc2/params.c struct dwc2_core_params *p = &hsotg->params; hsotg 622 drivers/usb/dwc2/params.c dwc2_check_param_otg_cap(hsotg); hsotg 623 drivers/usb/dwc2/params.c dwc2_check_param_phy_type(hsotg); hsotg 624 drivers/usb/dwc2/params.c dwc2_check_param_speed(hsotg); hsotg 625 drivers/usb/dwc2/params.c dwc2_check_param_phy_utmi_width(hsotg); hsotg 626 drivers/usb/dwc2/params.c dwc2_check_param_power_down(hsotg); hsotg 632 drivers/usb/dwc2/params.c CHECK_BOOL(reload_ctl, (hsotg->hw_params.snpsid > DWC2_CORE_REV_2_92a)); hsotg 633 drivers/usb/dwc2/params.c CHECK_BOOL(lpm, (hsotg->hw_params.snpsid >= DWC2_CORE_REV_2_80a)); hsotg 635 drivers/usb/dwc2/params.c CHECK_BOOL(lpm_clock_gating, hsotg->params.lpm); hsotg 636 drivers/usb/dwc2/params.c CHECK_BOOL(besl, hsotg->params.lpm); hsotg 637 drivers/usb/dwc2/params.c CHECK_BOOL(besl, (hsotg->hw_params.snpsid >= DWC2_CORE_REV_3_00a)); hsotg 638 drivers/usb/dwc2/params.c CHECK_BOOL(hird_threshold_en, hsotg->params.lpm); hsotg 639 drivers/usb/dwc2/params.c CHECK_RANGE(hird_threshold, 0, hsotg->params.besl ? 12 : 7, 0); hsotg 648 drivers/usb/dwc2/params.c if ((hsotg->dr_mode == USB_DR_MODE_HOST) || hsotg 649 drivers/usb/dwc2/params.c (hsotg->dr_mode == USB_DR_MODE_OTG)) { hsotg 669 drivers/usb/dwc2/params.c if ((hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) || hsotg 670 drivers/usb/dwc2/params.c (hsotg->dr_mode == USB_DR_MODE_OTG)) { hsotg 679 drivers/usb/dwc2/params.c dwc2_check_param_tx_fifo_sizes(hsotg); hsotg 688 drivers/usb/dwc2/params.c static void dwc2_get_host_hwparams(struct dwc2_hsotg *hsotg) hsotg 690 drivers/usb/dwc2/params.c struct dwc2_hw_params *hw = &hsotg->hw_params; hsotg 694 drivers/usb/dwc2/params.c if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) hsotg 697 drivers/usb/dwc2/params.c dwc2_force_mode(hsotg, true); hsotg 699 drivers/usb/dwc2/params.c gnptxfsiz = dwc2_readl(hsotg, GNPTXFSIZ); hsotg 700 drivers/usb/dwc2/params.c hptxfsiz = dwc2_readl(hsotg, HPTXFSIZ); hsotg 713 drivers/usb/dwc2/params.c static void dwc2_get_dev_hwparams(struct dwc2_hsotg *hsotg) hsotg 715 drivers/usb/dwc2/params.c struct dwc2_hw_params *hw = &hsotg->hw_params; hsotg 719 drivers/usb/dwc2/params.c if (hsotg->dr_mode == USB_DR_MODE_HOST) hsotg 722 drivers/usb/dwc2/params.c dwc2_force_mode(hsotg, false); hsotg 724 drivers/usb/dwc2/params.c gnptxfsiz = dwc2_readl(hsotg, GNPTXFSIZ); hsotg 726 drivers/usb/dwc2/params.c fifo_count = dwc2_hsotg_tx_fifo_count(hsotg); hsotg 730 drivers/usb/dwc2/params.c (dwc2_readl(hsotg, DPTXFSIZN(fifo)) & hsotg 745 drivers/usb/dwc2/params.c int dwc2_get_hwparams(struct dwc2_hsotg *hsotg) hsotg 747 drivers/usb/dwc2/params.c struct dwc2_hw_params *hw = &hsotg->hw_params; hsotg 758 drivers/usb/dwc2/params.c hw->snpsid = dwc2_readl(hsotg, GSNPSID); hsotg 762 drivers/usb/dwc2/params.c dev_err(hsotg->dev, "Bad value for GSNPSID: 0x%08x\n", hsotg 767 drivers/usb/dwc2/params.c dev_dbg(hsotg->dev, "Core Release: %1x.%1x%1x%1x (snpsid=%x)\n", hsotg 771 drivers/usb/dwc2/params.c hwcfg1 = dwc2_readl(hsotg, GHWCFG1); hsotg 772 drivers/usb/dwc2/params.c hwcfg2 = dwc2_readl(hsotg, GHWCFG2); hsotg 773 drivers/usb/dwc2/params.c hwcfg3 = dwc2_readl(hsotg, GHWCFG3); hsotg 774 drivers/usb/dwc2/params.c hwcfg4 = dwc2_readl(hsotg, GHWCFG4); hsotg 775 drivers/usb/dwc2/params.c grxfsiz = dwc2_readl(hsotg, GRXFSIZ); hsotg 840 drivers/usb/dwc2/params.c dwc2_get_host_hwparams(hsotg); hsotg 841 drivers/usb/dwc2/params.c dwc2_get_dev_hwparams(hsotg); hsotg 846 drivers/usb/dwc2/params.c int dwc2_init_params(struct dwc2_hsotg *hsotg) hsotg 851 drivers/usb/dwc2/params.c dwc2_set_default_params(hsotg); hsotg 852 drivers/usb/dwc2/params.c dwc2_get_device_properties(hsotg); hsotg 854 drivers/usb/dwc2/params.c match = of_match_device(dwc2_of_match_table, hsotg->dev); hsotg 857 drivers/usb/dwc2/params.c set_params(hsotg); hsotg 860 drivers/usb/dwc2/params.c dwc2_check_params(hsotg); hsotg 82 drivers/usb/dwc2/platform.c static int dwc2_get_dr_mode(struct dwc2_hsotg *hsotg) hsotg 86 drivers/usb/dwc2/platform.c hsotg->dr_mode = usb_get_dr_mode(hsotg->dev); hsotg 87 drivers/usb/dwc2/platform.c if (hsotg->dr_mode == USB_DR_MODE_UNKNOWN) hsotg 88 drivers/usb/dwc2/platform.c hsotg->dr_mode = USB_DR_MODE_OTG; hsotg 90 drivers/usb/dwc2/platform.c mode = hsotg->dr_mode; hsotg 92 drivers/usb/dwc2/platform.c if (dwc2_hw_is_device(hsotg)) { hsotg 94 drivers/usb/dwc2/platform.c dev_err(hsotg->dev, hsotg 99 drivers/usb/dwc2/platform.c } else if (dwc2_hw_is_host(hsotg)) { hsotg 101 drivers/usb/dwc2/platform.c dev_err(hsotg->dev, hsotg 113 drivers/usb/dwc2/platform.c if (mode != hsotg->dr_mode) { hsotg 114 drivers/usb/dwc2/platform.c dev_warn(hsotg->dev, hsotg 118 drivers/usb/dwc2/platform.c hsotg->dr_mode = mode; hsotg 124 drivers/usb/dwc2/platform.c static int __dwc2_lowlevel_hw_enable(struct dwc2_hsotg *hsotg) hsotg 126 drivers/usb/dwc2/platform.c struct platform_device *pdev = to_platform_device(hsotg->dev); hsotg 129 drivers/usb/dwc2/platform.c ret = regulator_bulk_enable(ARRAY_SIZE(hsotg->supplies), hsotg 130 drivers/usb/dwc2/platform.c hsotg->supplies); hsotg 134 drivers/usb/dwc2/platform.c if (hsotg->clk) { hsotg 135 drivers/usb/dwc2/platform.c ret = clk_prepare_enable(hsotg->clk); hsotg 140 drivers/usb/dwc2/platform.c if (hsotg->uphy) { hsotg 141 drivers/usb/dwc2/platform.c ret = usb_phy_init(hsotg->uphy); hsotg 142 drivers/usb/dwc2/platform.c } else if (hsotg->plat && hsotg->plat->phy_init) { hsotg 143 drivers/usb/dwc2/platform.c ret = hsotg->plat->phy_init(pdev, hsotg->plat->phy_type); hsotg 145 drivers/usb/dwc2/platform.c ret = phy_power_on(hsotg->phy); hsotg 147 drivers/usb/dwc2/platform.c ret = phy_init(hsotg->phy); hsotg 160 drivers/usb/dwc2/platform.c int dwc2_lowlevel_hw_enable(struct dwc2_hsotg *hsotg) hsotg 162 drivers/usb/dwc2/platform.c int ret = __dwc2_lowlevel_hw_enable(hsotg); hsotg 165 drivers/usb/dwc2/platform.c hsotg->ll_hw_enabled = true; hsotg 169 drivers/usb/dwc2/platform.c static int __dwc2_lowlevel_hw_disable(struct dwc2_hsotg *hsotg) hsotg 171 drivers/usb/dwc2/platform.c struct platform_device *pdev = to_platform_device(hsotg->dev); hsotg 174 drivers/usb/dwc2/platform.c if (hsotg->uphy) { hsotg 175 drivers/usb/dwc2/platform.c usb_phy_shutdown(hsotg->uphy); hsotg 176 drivers/usb/dwc2/platform.c } else if (hsotg->plat && hsotg->plat->phy_exit) { hsotg 177 drivers/usb/dwc2/platform.c ret = hsotg->plat->phy_exit(pdev, hsotg->plat->phy_type); hsotg 179 drivers/usb/dwc2/platform.c ret = phy_exit(hsotg->phy); hsotg 181 drivers/usb/dwc2/platform.c ret = phy_power_off(hsotg->phy); hsotg 186 drivers/usb/dwc2/platform.c if (hsotg->clk) hsotg 187 drivers/usb/dwc2/platform.c clk_disable_unprepare(hsotg->clk); hsotg 189 drivers/usb/dwc2/platform.c ret = regulator_bulk_disable(ARRAY_SIZE(hsotg->supplies), hsotg 190 drivers/usb/dwc2/platform.c hsotg->supplies); hsotg 202 drivers/usb/dwc2/platform.c int dwc2_lowlevel_hw_disable(struct dwc2_hsotg *hsotg) hsotg 204 drivers/usb/dwc2/platform.c int ret = __dwc2_lowlevel_hw_disable(hsotg); hsotg 207 drivers/usb/dwc2/platform.c hsotg->ll_hw_enabled = false; hsotg 211 drivers/usb/dwc2/platform.c static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg) hsotg 215 drivers/usb/dwc2/platform.c hsotg->reset = devm_reset_control_get_optional(hsotg->dev, "dwc2"); hsotg 216 drivers/usb/dwc2/platform.c if (IS_ERR(hsotg->reset)) { hsotg 217 drivers/usb/dwc2/platform.c ret = PTR_ERR(hsotg->reset); hsotg 218 drivers/usb/dwc2/platform.c dev_err(hsotg->dev, "error getting reset control %d\n", ret); hsotg 222 drivers/usb/dwc2/platform.c reset_control_deassert(hsotg->reset); hsotg 224 drivers/usb/dwc2/platform.c hsotg->reset_ecc = devm_reset_control_get_optional(hsotg->dev, "dwc2-ecc"); hsotg 225 drivers/usb/dwc2/platform.c if (IS_ERR(hsotg->reset_ecc)) { hsotg 226 drivers/usb/dwc2/platform.c ret = PTR_ERR(hsotg->reset_ecc); hsotg 227 drivers/usb/dwc2/platform.c dev_err(hsotg->dev, "error getting reset control for ecc %d\n", ret); hsotg 231 drivers/usb/dwc2/platform.c reset_control_deassert(hsotg->reset_ecc); hsotg 237 drivers/usb/dwc2/platform.c hsotg->phy = devm_phy_get(hsotg->dev, "usb2-phy"); hsotg 238 drivers/usb/dwc2/platform.c if (IS_ERR(hsotg->phy)) { hsotg 239 drivers/usb/dwc2/platform.c ret = PTR_ERR(hsotg->phy); hsotg 243 drivers/usb/dwc2/platform.c hsotg->phy = NULL; hsotg 248 drivers/usb/dwc2/platform.c dev_err(hsotg->dev, "error getting phy %d\n", ret); hsotg 253 drivers/usb/dwc2/platform.c if (!hsotg->phy) { hsotg 254 drivers/usb/dwc2/platform.c hsotg->uphy = devm_usb_get_phy(hsotg->dev, USB_PHY_TYPE_USB2); hsotg 255 drivers/usb/dwc2/platform.c if (IS_ERR(hsotg->uphy)) { hsotg 256 drivers/usb/dwc2/platform.c ret = PTR_ERR(hsotg->uphy); hsotg 260 drivers/usb/dwc2/platform.c hsotg->uphy = NULL; hsotg 265 drivers/usb/dwc2/platform.c dev_err(hsotg->dev, "error getting usb phy %d\n", hsotg 272 drivers/usb/dwc2/platform.c hsotg->plat = dev_get_platdata(hsotg->dev); hsotg 275 drivers/usb/dwc2/platform.c hsotg->clk = devm_clk_get_optional(hsotg->dev, "otg"); hsotg 276 drivers/usb/dwc2/platform.c if (IS_ERR(hsotg->clk)) { hsotg 277 drivers/usb/dwc2/platform.c dev_err(hsotg->dev, "cannot get otg clock\n"); hsotg 278 drivers/usb/dwc2/platform.c return PTR_ERR(hsotg->clk); hsotg 282 drivers/usb/dwc2/platform.c for (i = 0; i < ARRAY_SIZE(hsotg->supplies); i++) hsotg 283 drivers/usb/dwc2/platform.c hsotg->supplies[i].supply = dwc2_hsotg_supply_names[i]; hsotg 285 drivers/usb/dwc2/platform.c ret = devm_regulator_bulk_get(hsotg->dev, ARRAY_SIZE(hsotg->supplies), hsotg 286 drivers/usb/dwc2/platform.c hsotg->supplies); hsotg 288 drivers/usb/dwc2/platform.c dev_err(hsotg->dev, "failed to request supplies: %d\n", ret); hsotg 307 drivers/usb/dwc2/platform.c struct dwc2_hsotg *hsotg = platform_get_drvdata(dev); hsotg 309 drivers/usb/dwc2/platform.c dwc2_debugfs_exit(hsotg); hsotg 310 drivers/usb/dwc2/platform.c if (hsotg->hcd_enabled) hsotg 311 drivers/usb/dwc2/platform.c dwc2_hcd_remove(hsotg); hsotg 312 drivers/usb/dwc2/platform.c if (hsotg->gadget_enabled) hsotg 313 drivers/usb/dwc2/platform.c dwc2_hsotg_remove(hsotg); hsotg 315 drivers/usb/dwc2/platform.c if (hsotg->ll_hw_enabled) hsotg 316 drivers/usb/dwc2/platform.c dwc2_lowlevel_hw_disable(hsotg); hsotg 318 drivers/usb/dwc2/platform.c reset_control_assert(hsotg->reset); hsotg 319 drivers/usb/dwc2/platform.c reset_control_assert(hsotg->reset_ecc); hsotg 338 drivers/usb/dwc2/platform.c struct dwc2_hsotg *hsotg = platform_get_drvdata(dev); hsotg 340 drivers/usb/dwc2/platform.c disable_irq(hsotg->irq); hsotg 348 drivers/usb/dwc2/platform.c static bool dwc2_check_core_endianness(struct dwc2_hsotg *hsotg) hsotg 352 drivers/usb/dwc2/platform.c snpsid = ioread32(hsotg->regs + GSNPSID); hsotg 374 drivers/usb/dwc2/platform.c struct dwc2_hsotg *hsotg; hsotg 378 drivers/usb/dwc2/platform.c hsotg = devm_kzalloc(&dev->dev, sizeof(*hsotg), GFP_KERNEL); hsotg 379 drivers/usb/dwc2/platform.c if (!hsotg) hsotg 382 drivers/usb/dwc2/platform.c hsotg->dev = &dev->dev; hsotg 396 drivers/usb/dwc2/platform.c hsotg->regs = devm_ioremap_resource(&dev->dev, res); hsotg 397 drivers/usb/dwc2/platform.c if (IS_ERR(hsotg->regs)) hsotg 398 drivers/usb/dwc2/platform.c return PTR_ERR(hsotg->regs); hsotg 401 drivers/usb/dwc2/platform.c (unsigned long)res->start, hsotg->regs); hsotg 403 drivers/usb/dwc2/platform.c retval = dwc2_lowlevel_hw_init(hsotg); hsotg 407 drivers/usb/dwc2/platform.c spin_lock_init(&hsotg->lock); hsotg 409 drivers/usb/dwc2/platform.c hsotg->irq = platform_get_irq(dev, 0); hsotg 410 drivers/usb/dwc2/platform.c if (hsotg->irq < 0) hsotg 411 drivers/usb/dwc2/platform.c return hsotg->irq; hsotg 413 drivers/usb/dwc2/platform.c dev_dbg(hsotg->dev, "registering common handler for irq%d\n", hsotg 414 drivers/usb/dwc2/platform.c hsotg->irq); hsotg 415 drivers/usb/dwc2/platform.c retval = devm_request_irq(hsotg->dev, hsotg->irq, hsotg 417 drivers/usb/dwc2/platform.c dev_name(hsotg->dev), hsotg); hsotg 421 drivers/usb/dwc2/platform.c hsotg->vbus_supply = devm_regulator_get_optional(hsotg->dev, "vbus"); hsotg 422 drivers/usb/dwc2/platform.c if (IS_ERR(hsotg->vbus_supply)) { hsotg 423 drivers/usb/dwc2/platform.c retval = PTR_ERR(hsotg->vbus_supply); hsotg 424 drivers/usb/dwc2/platform.c hsotg->vbus_supply = NULL; hsotg 429 drivers/usb/dwc2/platform.c retval = dwc2_lowlevel_hw_enable(hsotg); hsotg 433 drivers/usb/dwc2/platform.c hsotg->needs_byte_swap = dwc2_check_core_endianness(hsotg); hsotg 435 drivers/usb/dwc2/platform.c retval = dwc2_get_dr_mode(hsotg); hsotg 439 drivers/usb/dwc2/platform.c hsotg->need_phy_for_wake = hsotg 447 drivers/usb/dwc2/platform.c retval = dwc2_core_reset(hsotg, false); hsotg 452 drivers/usb/dwc2/platform.c retval = dwc2_get_hwparams(hsotg); hsotg 461 drivers/usb/dwc2/platform.c dwc2_force_dr_mode(hsotg); hsotg 463 drivers/usb/dwc2/platform.c retval = dwc2_init_params(hsotg); hsotg 467 drivers/usb/dwc2/platform.c if (hsotg->dr_mode != USB_DR_MODE_HOST) { hsotg 468 drivers/usb/dwc2/platform.c retval = dwc2_gadget_init(hsotg); hsotg 471 drivers/usb/dwc2/platform.c hsotg->gadget_enabled = 1; hsotg 479 drivers/usb/dwc2/platform.c if (hsotg->need_phy_for_wake) hsotg 482 drivers/usb/dwc2/platform.c hsotg->reset_phy_on_wake = hsotg 485 drivers/usb/dwc2/platform.c if (hsotg->reset_phy_on_wake && !hsotg->phy) { hsotg 486 drivers/usb/dwc2/platform.c dev_warn(hsotg->dev, hsotg 488 drivers/usb/dwc2/platform.c hsotg->reset_phy_on_wake = false; hsotg 491 drivers/usb/dwc2/platform.c if (hsotg->dr_mode != USB_DR_MODE_PERIPHERAL) { hsotg 492 drivers/usb/dwc2/platform.c retval = dwc2_hcd_init(hsotg); hsotg 494 drivers/usb/dwc2/platform.c if (hsotg->gadget_enabled) hsotg 495 drivers/usb/dwc2/platform.c dwc2_hsotg_remove(hsotg); hsotg 498 drivers/usb/dwc2/platform.c hsotg->hcd_enabled = 1; hsotg 501 drivers/usb/dwc2/platform.c platform_set_drvdata(dev, hsotg); hsotg 502 drivers/usb/dwc2/platform.c hsotg->hibernated = 0; hsotg 504 drivers/usb/dwc2/platform.c dwc2_debugfs_init(hsotg); hsotg 507 drivers/usb/dwc2/platform.c if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) hsotg 508 drivers/usb/dwc2/platform.c dwc2_lowlevel_hw_disable(hsotg); hsotg 513 drivers/usb/dwc2/platform.c dwc2_lowlevel_hw_disable(hsotg);