1 // SPDX-License-Identifier: GPL-2.0
3 * core.c - DesignWare USB3 DRD Controller Core file
5 * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com
7 * Authors: Felipe Balbi <balbi@ti.com>,
8 * Sebastian Andrzej Siewior <bigeasy@linutronix.de>
11 #include <linux/clk.h>
12 #include <linux/version.h>
13 #include <linux/module.h>
14 #include <linux/kernel.h>
15 #include <linux/slab.h>
16 #include <linux/spinlock.h>
17 #include <linux/platform_device.h>
18 #include <linux/pm_runtime.h>
19 #include <linux/interrupt.h>
20 #include <linux/ioport.h>
22 #include <linux/list.h>
23 #include <linux/delay.h>
24 #include <linux/dma-mapping.h>
26 #include <linux/acpi.h>
27 #include <linux/pinctrl/consumer.h>
28 #include <linux/reset.h>
30 #include <linux/usb/ch9.h>
31 #include <linux/usb/gadget.h>
32 #include <linux/usb/of.h>
33 #include <linux/usb/otg.h>
41 #define DWC3_DEFAULT_AUTOSUSPEND_DELAY 5000 /* ms */
44 * dwc3_get_dr_mode - Validates and sets dr_mode
45 * @dwc: pointer to our context structure
47 static int dwc3_get_dr_mode(struct dwc3
*dwc
)
49 enum usb_dr_mode mode
;
50 struct device
*dev
= dwc
->dev
;
53 if (dwc
->dr_mode
== USB_DR_MODE_UNKNOWN
)
54 dwc
->dr_mode
= USB_DR_MODE_OTG
;
57 hw_mode
= DWC3_GHWPARAMS0_MODE(dwc
->hwparams
.hwparams0
);
60 case DWC3_GHWPARAMS0_MODE_GADGET
:
61 if (IS_ENABLED(CONFIG_USB_DWC3_HOST
)) {
63 "Controller does not support host mode.\n");
66 mode
= USB_DR_MODE_PERIPHERAL
;
68 case DWC3_GHWPARAMS0_MODE_HOST
:
69 if (IS_ENABLED(CONFIG_USB_DWC3_GADGET
)) {
71 "Controller does not support device mode.\n");
74 mode
= USB_DR_MODE_HOST
;
77 if (IS_ENABLED(CONFIG_USB_DWC3_HOST
))
78 mode
= USB_DR_MODE_HOST
;
79 else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET
))
80 mode
= USB_DR_MODE_PERIPHERAL
;
83 * DWC_usb31 and DWC_usb3 v3.30a and higher do not support OTG
84 * mode. If the controller supports DRD but the dr_mode is not
85 * specified or set to OTG, then set the mode to peripheral.
87 if (mode
== USB_DR_MODE_OTG
&&
88 dwc
->revision
>= DWC3_REVISION_330A
)
89 mode
= USB_DR_MODE_PERIPHERAL
;
92 if (mode
!= dwc
->dr_mode
) {
94 "Configuration mismatch. dr_mode forced to %s\n",
95 mode
== USB_DR_MODE_HOST
? "host" : "gadget");
103 void dwc3_set_prtcap(struct dwc3
*dwc
, u32 mode
)
107 reg
= dwc3_readl(dwc
->regs
, DWC3_GCTL
);
108 reg
&= ~(DWC3_GCTL_PRTCAPDIR(DWC3_GCTL_PRTCAP_OTG
));
109 reg
|= DWC3_GCTL_PRTCAPDIR(mode
);
110 dwc3_writel(dwc
->regs
, DWC3_GCTL
, reg
);
112 dwc
->current_dr_role
= mode
;
115 static void __dwc3_set_mode(struct work_struct
*work
)
117 struct dwc3
*dwc
= work_to_dwc(work
);
121 if (dwc
->dr_mode
!= USB_DR_MODE_OTG
)
124 if (dwc
->current_dr_role
== DWC3_GCTL_PRTCAP_OTG
)
125 dwc3_otg_update(dwc
, 0);
127 if (!dwc
->desired_dr_role
)
130 if (dwc
->desired_dr_role
== dwc
->current_dr_role
)
133 if (dwc
->desired_dr_role
== DWC3_GCTL_PRTCAP_OTG
&& dwc
->edev
)
136 switch (dwc
->current_dr_role
) {
137 case DWC3_GCTL_PRTCAP_HOST
:
140 case DWC3_GCTL_PRTCAP_DEVICE
:
141 dwc3_gadget_exit(dwc
);
142 dwc3_event_buffers_cleanup(dwc
);
144 case DWC3_GCTL_PRTCAP_OTG
:
146 spin_lock_irqsave(&dwc
->lock
, flags
);
147 dwc
->desired_otg_role
= DWC3_OTG_ROLE_IDLE
;
148 spin_unlock_irqrestore(&dwc
->lock
, flags
);
149 dwc3_otg_update(dwc
, 1);
155 spin_lock_irqsave(&dwc
->lock
, flags
);
157 dwc3_set_prtcap(dwc
, dwc
->desired_dr_role
);
159 spin_unlock_irqrestore(&dwc
->lock
, flags
);
161 switch (dwc
->desired_dr_role
) {
162 case DWC3_GCTL_PRTCAP_HOST
:
163 ret
= dwc3_host_init(dwc
);
165 dev_err(dwc
->dev
, "failed to initialize host\n");
168 otg_set_vbus(dwc
->usb2_phy
->otg
, true);
169 phy_set_mode(dwc
->usb2_generic_phy
, PHY_MODE_USB_HOST
);
170 phy_set_mode(dwc
->usb3_generic_phy
, PHY_MODE_USB_HOST
);
173 case DWC3_GCTL_PRTCAP_DEVICE
:
174 dwc3_event_buffers_setup(dwc
);
177 otg_set_vbus(dwc
->usb2_phy
->otg
, false);
178 phy_set_mode(dwc
->usb2_generic_phy
, PHY_MODE_USB_DEVICE
);
179 phy_set_mode(dwc
->usb3_generic_phy
, PHY_MODE_USB_DEVICE
);
181 ret
= dwc3_gadget_init(dwc
);
183 dev_err(dwc
->dev
, "failed to initialize peripheral\n");
185 case DWC3_GCTL_PRTCAP_OTG
:
187 dwc3_otg_update(dwc
, 0);
195 void dwc3_set_mode(struct dwc3
*dwc
, u32 mode
)
199 spin_lock_irqsave(&dwc
->lock
, flags
);
200 dwc
->desired_dr_role
= mode
;
201 spin_unlock_irqrestore(&dwc
->lock
, flags
);
203 queue_work(system_freezable_wq
, &dwc
->drd_work
);
206 u32
dwc3_core_fifo_space(struct dwc3_ep
*dep
, u8 type
)
208 struct dwc3
*dwc
= dep
->dwc
;
211 dwc3_writel(dwc
->regs
, DWC3_GDBGFIFOSPACE
,
212 DWC3_GDBGFIFOSPACE_NUM(dep
->number
) |
213 DWC3_GDBGFIFOSPACE_TYPE(type
));
215 reg
= dwc3_readl(dwc
->regs
, DWC3_GDBGFIFOSPACE
);
217 return DWC3_GDBGFIFOSPACE_SPACE_AVAILABLE(reg
);
221 * dwc3_core_soft_reset - Issues core soft reset and PHY reset
222 * @dwc: pointer to our context structure
224 static int dwc3_core_soft_reset(struct dwc3
*dwc
)
230 usb_phy_init(dwc
->usb2_phy
);
231 usb_phy_init(dwc
->usb3_phy
);
232 ret
= phy_init(dwc
->usb2_generic_phy
);
236 ret
= phy_init(dwc
->usb3_generic_phy
);
238 phy_exit(dwc
->usb2_generic_phy
);
243 * We're resetting only the device side because, if we're in host mode,
244 * XHCI driver will reset the host block. If dwc3 was configured for
245 * host-only mode, then we can return early.
247 if (dwc
->current_dr_role
== DWC3_GCTL_PRTCAP_HOST
)
250 reg
= dwc3_readl(dwc
->regs
, DWC3_DCTL
);
251 reg
|= DWC3_DCTL_CSFTRST
;
252 dwc3_writel(dwc
->regs
, DWC3_DCTL
, reg
);
255 * For DWC_usb31 controller 1.90a and later, the DCTL.CSFRST bit
256 * is cleared only after all the clocks are synchronized. This can
257 * take a little more than 50ms. Set the polling rate at 20ms
258 * for 10 times instead.
260 if (dwc3_is_usb31(dwc
) && dwc
->revision
>= DWC3_USB31_REVISION_190A
)
264 reg
= dwc3_readl(dwc
->regs
, DWC3_DCTL
);
265 if (!(reg
& DWC3_DCTL_CSFTRST
))
268 if (dwc3_is_usb31(dwc
) &&
269 dwc
->revision
>= DWC3_USB31_REVISION_190A
)
275 phy_exit(dwc
->usb3_generic_phy
);
276 phy_exit(dwc
->usb2_generic_phy
);
282 * For DWC_usb31 controller 1.80a and prior, once DCTL.CSFRST bit
283 * is cleared, we must wait at least 50ms before accessing the PHY
284 * domain (synchronization delay).
286 if (dwc3_is_usb31(dwc
) && dwc
->revision
<= DWC3_USB31_REVISION_180A
)
292 static const struct clk_bulk_data dwc3_core_clks
[] = {
294 { .id
= "bus_early" },
299 * dwc3_frame_length_adjustment - Adjusts frame length if required
300 * @dwc3: Pointer to our controller context structure
302 static void dwc3_frame_length_adjustment(struct dwc3
*dwc
)
307 if (dwc
->revision
< DWC3_REVISION_250A
)
313 reg
= dwc3_readl(dwc
->regs
, DWC3_GFLADJ
);
314 dft
= reg
& DWC3_GFLADJ_30MHZ_MASK
;
315 if (dft
!= dwc
->fladj
) {
316 reg
&= ~DWC3_GFLADJ_30MHZ_MASK
;
317 reg
|= DWC3_GFLADJ_30MHZ_SDBND_SEL
| dwc
->fladj
;
318 dwc3_writel(dwc
->regs
, DWC3_GFLADJ
, reg
);
323 * dwc3_free_one_event_buffer - Frees one event buffer
324 * @dwc: Pointer to our controller context structure
325 * @evt: Pointer to event buffer to be freed
327 static void dwc3_free_one_event_buffer(struct dwc3
*dwc
,
328 struct dwc3_event_buffer
*evt
)
330 dma_free_coherent(dwc
->sysdev
, evt
->length
, evt
->buf
, evt
->dma
);
334 * dwc3_alloc_one_event_buffer - Allocates one event buffer structure
335 * @dwc: Pointer to our controller context structure
336 * @length: size of the event buffer
338 * Returns a pointer to the allocated event buffer structure on success
339 * otherwise ERR_PTR(errno).
341 static struct dwc3_event_buffer
*dwc3_alloc_one_event_buffer(struct dwc3
*dwc
,
344 struct dwc3_event_buffer
*evt
;
346 evt
= devm_kzalloc(dwc
->dev
, sizeof(*evt
), GFP_KERNEL
);
348 return ERR_PTR(-ENOMEM
);
351 evt
->length
= length
;
352 evt
->cache
= devm_kzalloc(dwc
->dev
, length
, GFP_KERNEL
);
354 return ERR_PTR(-ENOMEM
);
356 evt
->buf
= dma_alloc_coherent(dwc
->sysdev
, length
,
357 &evt
->dma
, GFP_KERNEL
);
359 return ERR_PTR(-ENOMEM
);
365 * dwc3_free_event_buffers - frees all allocated event buffers
366 * @dwc: Pointer to our controller context structure
368 static void dwc3_free_event_buffers(struct dwc3
*dwc
)
370 struct dwc3_event_buffer
*evt
;
374 dwc3_free_one_event_buffer(dwc
, evt
);
378 * dwc3_alloc_event_buffers - Allocates @num event buffers of size @length
379 * @dwc: pointer to our controller context structure
380 * @length: size of event buffer
382 * Returns 0 on success otherwise negative errno. In the error case, dwc
383 * may contain some buffers allocated but not all which were requested.
385 static int dwc3_alloc_event_buffers(struct dwc3
*dwc
, unsigned length
)
387 struct dwc3_event_buffer
*evt
;
389 evt
= dwc3_alloc_one_event_buffer(dwc
, length
);
391 dev_err(dwc
->dev
, "can't allocate event buffer\n");
400 * dwc3_event_buffers_setup - setup our allocated event buffers
401 * @dwc: pointer to our controller context structure
403 * Returns 0 on success otherwise negative errno.
405 int dwc3_event_buffers_setup(struct dwc3
*dwc
)
407 struct dwc3_event_buffer
*evt
;
411 dwc3_writel(dwc
->regs
, DWC3_GEVNTADRLO(0),
412 lower_32_bits(evt
->dma
));
413 dwc3_writel(dwc
->regs
, DWC3_GEVNTADRHI(0),
414 upper_32_bits(evt
->dma
));
415 dwc3_writel(dwc
->regs
, DWC3_GEVNTSIZ(0),
416 DWC3_GEVNTSIZ_SIZE(evt
->length
));
417 dwc3_writel(dwc
->regs
, DWC3_GEVNTCOUNT(0), 0);
422 void dwc3_event_buffers_cleanup(struct dwc3
*dwc
)
424 struct dwc3_event_buffer
*evt
;
430 dwc3_writel(dwc
->regs
, DWC3_GEVNTADRLO(0), 0);
431 dwc3_writel(dwc
->regs
, DWC3_GEVNTADRHI(0), 0);
432 dwc3_writel(dwc
->regs
, DWC3_GEVNTSIZ(0), DWC3_GEVNTSIZ_INTMASK
433 | DWC3_GEVNTSIZ_SIZE(0));
434 dwc3_writel(dwc
->regs
, DWC3_GEVNTCOUNT(0), 0);
437 static int dwc3_alloc_scratch_buffers(struct dwc3
*dwc
)
439 if (!dwc
->has_hibernation
)
442 if (!dwc
->nr_scratch
)
445 dwc
->scratchbuf
= kmalloc_array(dwc
->nr_scratch
,
446 DWC3_SCRATCHBUF_SIZE
, GFP_KERNEL
);
447 if (!dwc
->scratchbuf
)
453 static int dwc3_setup_scratch_buffers(struct dwc3
*dwc
)
455 dma_addr_t scratch_addr
;
459 if (!dwc
->has_hibernation
)
462 if (!dwc
->nr_scratch
)
465 /* should never fall here */
466 if (!WARN_ON(dwc
->scratchbuf
))
469 scratch_addr
= dma_map_single(dwc
->sysdev
, dwc
->scratchbuf
,
470 dwc
->nr_scratch
* DWC3_SCRATCHBUF_SIZE
,
472 if (dma_mapping_error(dwc
->sysdev
, scratch_addr
)) {
473 dev_err(dwc
->sysdev
, "failed to map scratch buffer\n");
478 dwc
->scratch_addr
= scratch_addr
;
480 param
= lower_32_bits(scratch_addr
);
482 ret
= dwc3_send_gadget_generic_command(dwc
,
483 DWC3_DGCMD_SET_SCRATCHPAD_ADDR_LO
, param
);
487 param
= upper_32_bits(scratch_addr
);
489 ret
= dwc3_send_gadget_generic_command(dwc
,
490 DWC3_DGCMD_SET_SCRATCHPAD_ADDR_HI
, param
);
497 dma_unmap_single(dwc
->sysdev
, dwc
->scratch_addr
, dwc
->nr_scratch
*
498 DWC3_SCRATCHBUF_SIZE
, DMA_BIDIRECTIONAL
);
504 static void dwc3_free_scratch_buffers(struct dwc3
*dwc
)
506 if (!dwc
->has_hibernation
)
509 if (!dwc
->nr_scratch
)
512 /* should never fall here */
513 if (!WARN_ON(dwc
->scratchbuf
))
516 dma_unmap_single(dwc
->sysdev
, dwc
->scratch_addr
, dwc
->nr_scratch
*
517 DWC3_SCRATCHBUF_SIZE
, DMA_BIDIRECTIONAL
);
518 kfree(dwc
->scratchbuf
);
521 static void dwc3_core_num_eps(struct dwc3
*dwc
)
523 struct dwc3_hwparams
*parms
= &dwc
->hwparams
;
525 dwc
->num_eps
= DWC3_NUM_EPS(parms
);
528 static void dwc3_cache_hwparams(struct dwc3
*dwc
)
530 struct dwc3_hwparams
*parms
= &dwc
->hwparams
;
532 parms
->hwparams0
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS0
);
533 parms
->hwparams1
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS1
);
534 parms
->hwparams2
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS2
);
535 parms
->hwparams3
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS3
);
536 parms
->hwparams4
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS4
);
537 parms
->hwparams5
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS5
);
538 parms
->hwparams6
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS6
);
539 parms
->hwparams7
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS7
);
540 parms
->hwparams8
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS8
);
543 static int dwc3_core_ulpi_init(struct dwc3
*dwc
)
548 intf
= DWC3_GHWPARAMS3_HSPHY_IFC(dwc
->hwparams
.hwparams3
);
550 if (intf
== DWC3_GHWPARAMS3_HSPHY_IFC_ULPI
||
551 (intf
== DWC3_GHWPARAMS3_HSPHY_IFC_UTMI_ULPI
&&
552 dwc
->hsphy_interface
&&
553 !strncmp(dwc
->hsphy_interface
, "ulpi", 4)))
554 ret
= dwc3_ulpi_init(dwc
);
560 * dwc3_phy_setup - Configure USB PHY Interface of DWC3 Core
561 * @dwc: Pointer to our controller context structure
563 * Returns 0 on success. The USB PHY interfaces are configured but not
564 * initialized. The PHY interfaces and the PHYs get initialized together with
565 * the core in dwc3_core_init.
567 static int dwc3_phy_setup(struct dwc3
*dwc
)
571 reg
= dwc3_readl(dwc
->regs
, DWC3_GUSB3PIPECTL(0));
574 * Make sure UX_EXIT_PX is cleared as that causes issues with some
575 * PHYs. Also, this bit is not supposed to be used in normal operation.
577 reg
&= ~DWC3_GUSB3PIPECTL_UX_EXIT_PX
;
580 * Above 1.94a, it is recommended to set DWC3_GUSB3PIPECTL_SUSPHY
581 * to '0' during coreConsultant configuration. So default value
582 * will be '0' when the core is reset. Application needs to set it
583 * to '1' after the core initialization is completed.
585 if (dwc
->revision
> DWC3_REVISION_194A
)
586 reg
|= DWC3_GUSB3PIPECTL_SUSPHY
;
588 if (dwc
->u2ss_inp3_quirk
)
589 reg
|= DWC3_GUSB3PIPECTL_U2SSINP3OK
;
591 if (dwc
->dis_rxdet_inp3_quirk
)
592 reg
|= DWC3_GUSB3PIPECTL_DISRXDETINP3
;
594 if (dwc
->req_p1p2p3_quirk
)
595 reg
|= DWC3_GUSB3PIPECTL_REQP1P2P3
;
597 if (dwc
->del_p1p2p3_quirk
)
598 reg
|= DWC3_GUSB3PIPECTL_DEP1P2P3_EN
;
600 if (dwc
->del_phy_power_chg_quirk
)
601 reg
|= DWC3_GUSB3PIPECTL_DEPOCHANGE
;
603 if (dwc
->lfps_filter_quirk
)
604 reg
|= DWC3_GUSB3PIPECTL_LFPSFILT
;
606 if (dwc
->rx_detect_poll_quirk
)
607 reg
|= DWC3_GUSB3PIPECTL_RX_DETOPOLL
;
609 if (dwc
->tx_de_emphasis_quirk
)
610 reg
|= DWC3_GUSB3PIPECTL_TX_DEEPH(dwc
->tx_de_emphasis
);
612 if (dwc
->dis_u3_susphy_quirk
)
613 reg
&= ~DWC3_GUSB3PIPECTL_SUSPHY
;
615 if (dwc
->dis_del_phy_power_chg_quirk
)
616 reg
&= ~DWC3_GUSB3PIPECTL_DEPOCHANGE
;
618 dwc3_writel(dwc
->regs
, DWC3_GUSB3PIPECTL(0), reg
);
620 reg
= dwc3_readl(dwc
->regs
, DWC3_GUSB2PHYCFG(0));
622 /* Select the HS PHY interface */
623 switch (DWC3_GHWPARAMS3_HSPHY_IFC(dwc
->hwparams
.hwparams3
)) {
624 case DWC3_GHWPARAMS3_HSPHY_IFC_UTMI_ULPI
:
625 if (dwc
->hsphy_interface
&&
626 !strncmp(dwc
->hsphy_interface
, "utmi", 4)) {
627 reg
&= ~DWC3_GUSB2PHYCFG_ULPI_UTMI
;
629 } else if (dwc
->hsphy_interface
&&
630 !strncmp(dwc
->hsphy_interface
, "ulpi", 4)) {
631 reg
|= DWC3_GUSB2PHYCFG_ULPI_UTMI
;
632 dwc3_writel(dwc
->regs
, DWC3_GUSB2PHYCFG(0), reg
);
634 /* Relying on default value. */
635 if (!(reg
& DWC3_GUSB2PHYCFG_ULPI_UTMI
))
639 case DWC3_GHWPARAMS3_HSPHY_IFC_ULPI
:
645 switch (dwc
->hsphy_mode
) {
646 case USBPHY_INTERFACE_MODE_UTMI
:
647 reg
&= ~(DWC3_GUSB2PHYCFG_PHYIF_MASK
|
648 DWC3_GUSB2PHYCFG_USBTRDTIM_MASK
);
649 reg
|= DWC3_GUSB2PHYCFG_PHYIF(UTMI_PHYIF_8_BIT
) |
650 DWC3_GUSB2PHYCFG_USBTRDTIM(USBTRDTIM_UTMI_8_BIT
);
652 case USBPHY_INTERFACE_MODE_UTMIW
:
653 reg
&= ~(DWC3_GUSB2PHYCFG_PHYIF_MASK
|
654 DWC3_GUSB2PHYCFG_USBTRDTIM_MASK
);
655 reg
|= DWC3_GUSB2PHYCFG_PHYIF(UTMI_PHYIF_16_BIT
) |
656 DWC3_GUSB2PHYCFG_USBTRDTIM(USBTRDTIM_UTMI_16_BIT
);
663 * Above 1.94a, it is recommended to set DWC3_GUSB2PHYCFG_SUSPHY to
664 * '0' during coreConsultant configuration. So default value will
665 * be '0' when the core is reset. Application needs to set it to
666 * '1' after the core initialization is completed.
668 if (dwc
->revision
> DWC3_REVISION_194A
)
669 reg
|= DWC3_GUSB2PHYCFG_SUSPHY
;
671 if (dwc
->dis_u2_susphy_quirk
)
672 reg
&= ~DWC3_GUSB2PHYCFG_SUSPHY
;
674 if (dwc
->dis_enblslpm_quirk
)
675 reg
&= ~DWC3_GUSB2PHYCFG_ENBLSLPM
;
677 reg
|= DWC3_GUSB2PHYCFG_ENBLSLPM
;
679 if (dwc
->dis_u2_freeclk_exists_quirk
)
680 reg
&= ~DWC3_GUSB2PHYCFG_U2_FREECLK_EXISTS
;
682 dwc3_writel(dwc
->regs
, DWC3_GUSB2PHYCFG(0), reg
);
687 static void dwc3_core_exit(struct dwc3
*dwc
)
689 dwc3_event_buffers_cleanup(dwc
);
691 usb_phy_shutdown(dwc
->usb2_phy
);
692 usb_phy_shutdown(dwc
->usb3_phy
);
693 phy_exit(dwc
->usb2_generic_phy
);
694 phy_exit(dwc
->usb3_generic_phy
);
696 usb_phy_set_suspend(dwc
->usb2_phy
, 1);
697 usb_phy_set_suspend(dwc
->usb3_phy
, 1);
698 phy_power_off(dwc
->usb2_generic_phy
);
699 phy_power_off(dwc
->usb3_generic_phy
);
700 clk_bulk_disable_unprepare(dwc
->num_clks
, dwc
->clks
);
701 reset_control_assert(dwc
->reset
);
704 static bool dwc3_core_is_valid(struct dwc3
*dwc
)
708 reg
= dwc3_readl(dwc
->regs
, DWC3_GSNPSID
);
710 /* This should read as U3 followed by revision number */
711 if ((reg
& DWC3_GSNPSID_MASK
) == 0x55330000) {
712 /* Detected DWC_usb3 IP */
714 } else if ((reg
& DWC3_GSNPSID_MASK
) == 0x33310000) {
715 /* Detected DWC_usb31 IP */
716 dwc
->revision
= dwc3_readl(dwc
->regs
, DWC3_VER_NUMBER
);
717 dwc
->revision
|= DWC3_REVISION_IS_DWC31
;
718 dwc
->version_type
= dwc3_readl(dwc
->regs
, DWC3_VER_TYPE
);
726 static void dwc3_core_setup_global_control(struct dwc3
*dwc
)
728 u32 hwparams4
= dwc
->hwparams
.hwparams4
;
731 reg
= dwc3_readl(dwc
->regs
, DWC3_GCTL
);
732 reg
&= ~DWC3_GCTL_SCALEDOWN_MASK
;
734 switch (DWC3_GHWPARAMS1_EN_PWROPT(dwc
->hwparams
.hwparams1
)) {
735 case DWC3_GHWPARAMS1_EN_PWROPT_CLK
:
737 * WORKAROUND: DWC3 revisions between 2.10a and 2.50a have an
738 * issue which would cause xHCI compliance tests to fail.
740 * Because of that we cannot enable clock gating on such
745 * STAR#9000588375: Clock Gating, SOF Issues when ref_clk-Based
748 if ((dwc
->dr_mode
== USB_DR_MODE_HOST
||
749 dwc
->dr_mode
== USB_DR_MODE_OTG
) &&
750 (dwc
->revision
>= DWC3_REVISION_210A
&&
751 dwc
->revision
<= DWC3_REVISION_250A
))
752 reg
|= DWC3_GCTL_DSBLCLKGTNG
| DWC3_GCTL_SOFITPSYNC
;
754 reg
&= ~DWC3_GCTL_DSBLCLKGTNG
;
756 case DWC3_GHWPARAMS1_EN_PWROPT_HIB
:
757 /* enable hibernation here */
758 dwc
->nr_scratch
= DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(hwparams4
);
761 * REVISIT Enabling this bit so that host-mode hibernation
762 * will work. Device-mode hibernation is not yet implemented.
764 reg
|= DWC3_GCTL_GBLHIBERNATIONEN
;
771 /* check if current dwc3 is on simulation board */
772 if (dwc
->hwparams
.hwparams6
& DWC3_GHWPARAMS6_EN_FPGA
) {
773 dev_info(dwc
->dev
, "Running with FPGA optimizations\n");
777 WARN_ONCE(dwc
->disable_scramble_quirk
&& !dwc
->is_fpga
,
778 "disable_scramble cannot be used on non-FPGA builds\n");
780 if (dwc
->disable_scramble_quirk
&& dwc
->is_fpga
)
781 reg
|= DWC3_GCTL_DISSCRAMBLE
;
783 reg
&= ~DWC3_GCTL_DISSCRAMBLE
;
785 if (dwc
->u2exit_lfps_quirk
)
786 reg
|= DWC3_GCTL_U2EXIT_LFPS
;
789 * WORKAROUND: DWC3 revisions <1.90a have a bug
790 * where the device can fail to connect at SuperSpeed
791 * and falls back to high-speed mode which causes
792 * the device to enter a Connect/Disconnect loop
794 if (dwc
->revision
< DWC3_REVISION_190A
)
795 reg
|= DWC3_GCTL_U2RSTECN
;
797 dwc3_writel(dwc
->regs
, DWC3_GCTL
, reg
);
800 static int dwc3_core_get_phy(struct dwc3
*dwc
);
801 static int dwc3_core_ulpi_init(struct dwc3
*dwc
);
803 /* set global incr burst type configuration registers */
804 static void dwc3_set_incr_burst_type(struct dwc3
*dwc
)
806 struct device
*dev
= dwc
->dev
;
807 /* incrx_mode : for INCR burst type. */
809 /* incrx_size : for size of INCRX burst. */
817 cfg
= dwc3_readl(dwc
->regs
, DWC3_GSBUSCFG0
);
820 * Handle property "snps,incr-burst-type-adjustment".
821 * Get the number of value from this property:
822 * result <= 0, means this property is not supported.
823 * result = 1, means INCRx burst mode supported.
824 * result > 1, means undefined length burst mode supported.
826 ntype
= device_property_count_u32(dev
, "snps,incr-burst-type-adjustment");
830 vals
= kcalloc(ntype
, sizeof(u32
), GFP_KERNEL
);
832 dev_err(dev
, "Error to get memory\n");
836 /* Get INCR burst type, and parse it */
837 ret
= device_property_read_u32_array(dev
,
838 "snps,incr-burst-type-adjustment", vals
, ntype
);
841 dev_err(dev
, "Error to get property\n");
848 /* INCRX (undefined length) burst mode */
849 incrx_mode
= INCRX_UNDEF_LENGTH_BURST_MODE
;
850 for (i
= 1; i
< ntype
; i
++) {
851 if (vals
[i
] > incrx_size
)
852 incrx_size
= vals
[i
];
855 /* INCRX burst mode */
856 incrx_mode
= INCRX_BURST_MODE
;
861 /* Enable Undefined Length INCR Burst and Enable INCRx Burst */
862 cfg
&= ~DWC3_GSBUSCFG0_INCRBRST_MASK
;
864 cfg
|= DWC3_GSBUSCFG0_INCRBRSTENA
;
865 switch (incrx_size
) {
867 cfg
|= DWC3_GSBUSCFG0_INCR256BRSTENA
;
870 cfg
|= DWC3_GSBUSCFG0_INCR128BRSTENA
;
873 cfg
|= DWC3_GSBUSCFG0_INCR64BRSTENA
;
876 cfg
|= DWC3_GSBUSCFG0_INCR32BRSTENA
;
879 cfg
|= DWC3_GSBUSCFG0_INCR16BRSTENA
;
882 cfg
|= DWC3_GSBUSCFG0_INCR8BRSTENA
;
885 cfg
|= DWC3_GSBUSCFG0_INCR4BRSTENA
;
890 dev_err(dev
, "Invalid property\n");
894 dwc3_writel(dwc
->regs
, DWC3_GSBUSCFG0
, cfg
);
898 * dwc3_core_init - Low-level initialization of DWC3 Core
899 * @dwc: Pointer to our controller context structure
901 * Returns 0 on success otherwise negative errno.
903 static int dwc3_core_init(struct dwc3
*dwc
)
909 * Write Linux Version Code to our GUID register so it's easy to figure
910 * out which kernel version a bug was found.
912 dwc3_writel(dwc
->regs
, DWC3_GUID
, LINUX_VERSION_CODE
);
914 /* Handle USB2.0-only core configuration */
915 if (DWC3_GHWPARAMS3_SSPHY_IFC(dwc
->hwparams
.hwparams3
) ==
916 DWC3_GHWPARAMS3_SSPHY_IFC_DIS
) {
917 if (dwc
->maximum_speed
== USB_SPEED_SUPER
)
918 dwc
->maximum_speed
= USB_SPEED_HIGH
;
921 ret
= dwc3_phy_setup(dwc
);
925 if (!dwc
->ulpi_ready
) {
926 ret
= dwc3_core_ulpi_init(dwc
);
929 dwc
->ulpi_ready
= true;
932 if (!dwc
->phys_ready
) {
933 ret
= dwc3_core_get_phy(dwc
);
936 dwc
->phys_ready
= true;
939 ret
= dwc3_core_soft_reset(dwc
);
943 dwc3_core_setup_global_control(dwc
);
944 dwc3_core_num_eps(dwc
);
946 ret
= dwc3_setup_scratch_buffers(dwc
);
950 /* Adjust Frame Length */
951 dwc3_frame_length_adjustment(dwc
);
953 dwc3_set_incr_burst_type(dwc
);
955 usb_phy_set_suspend(dwc
->usb2_phy
, 0);
956 usb_phy_set_suspend(dwc
->usb3_phy
, 0);
957 ret
= phy_power_on(dwc
->usb2_generic_phy
);
961 ret
= phy_power_on(dwc
->usb3_generic_phy
);
965 ret
= dwc3_event_buffers_setup(dwc
);
967 dev_err(dwc
->dev
, "failed to setup event buffers\n");
972 * ENDXFER polling is available on version 3.10a and later of
973 * the DWC_usb3 controller. It is NOT available in the
974 * DWC_usb31 controller.
976 if (!dwc3_is_usb31(dwc
) && dwc
->revision
>= DWC3_REVISION_310A
) {
977 reg
= dwc3_readl(dwc
->regs
, DWC3_GUCTL2
);
978 reg
|= DWC3_GUCTL2_RST_ACTBITLATER
;
979 dwc3_writel(dwc
->regs
, DWC3_GUCTL2
, reg
);
982 if (dwc
->revision
>= DWC3_REVISION_250A
) {
983 reg
= dwc3_readl(dwc
->regs
, DWC3_GUCTL1
);
986 * Enable hardware control of sending remote wakeup
987 * in HS when the device is in the L1 state.
989 if (dwc
->revision
>= DWC3_REVISION_290A
)
990 reg
|= DWC3_GUCTL1_DEV_L1_EXIT_BY_HW
;
992 if (dwc
->dis_tx_ipgap_linecheck_quirk
)
993 reg
|= DWC3_GUCTL1_TX_IPGAP_LINECHECK_DIS
;
995 if (dwc
->parkmode_disable_ss_quirk
)
996 reg
|= DWC3_GUCTL1_PARKMODE_DISABLE_SS
;
998 dwc3_writel(dwc
->regs
, DWC3_GUCTL1
, reg
);
1001 if (dwc
->dr_mode
== USB_DR_MODE_HOST
||
1002 dwc
->dr_mode
== USB_DR_MODE_OTG
) {
1003 reg
= dwc3_readl(dwc
->regs
, DWC3_GUCTL
);
1006 * Enable Auto retry Feature to make the controller operating in
1007 * Host mode on seeing transaction errors(CRC errors or internal
1008 * overrun scenerios) on IN transfers to reply to the device
1009 * with a non-terminating retry ACK (i.e, an ACK transcation
1010 * packet with Retry=1 & Nump != 0)
1012 reg
|= DWC3_GUCTL_HSTINAUTORETRY
;
1014 dwc3_writel(dwc
->regs
, DWC3_GUCTL
, reg
);
1018 * Must config both number of packets and max burst settings to enable
1019 * RX and/or TX threshold.
1021 if (dwc3_is_usb31(dwc
) && dwc
->dr_mode
== USB_DR_MODE_HOST
) {
1022 u8 rx_thr_num
= dwc
->rx_thr_num_pkt_prd
;
1023 u8 rx_maxburst
= dwc
->rx_max_burst_prd
;
1024 u8 tx_thr_num
= dwc
->tx_thr_num_pkt_prd
;
1025 u8 tx_maxburst
= dwc
->tx_max_burst_prd
;
1027 if (rx_thr_num
&& rx_maxburst
) {
1028 reg
= dwc3_readl(dwc
->regs
, DWC3_GRXTHRCFG
);
1029 reg
|= DWC31_RXTHRNUMPKTSEL_PRD
;
1031 reg
&= ~DWC31_RXTHRNUMPKT_PRD(~0);
1032 reg
|= DWC31_RXTHRNUMPKT_PRD(rx_thr_num
);
1034 reg
&= ~DWC31_MAXRXBURSTSIZE_PRD(~0);
1035 reg
|= DWC31_MAXRXBURSTSIZE_PRD(rx_maxburst
);
1037 dwc3_writel(dwc
->regs
, DWC3_GRXTHRCFG
, reg
);
1040 if (tx_thr_num
&& tx_maxburst
) {
1041 reg
= dwc3_readl(dwc
->regs
, DWC3_GTXTHRCFG
);
1042 reg
|= DWC31_TXTHRNUMPKTSEL_PRD
;
1044 reg
&= ~DWC31_TXTHRNUMPKT_PRD(~0);
1045 reg
|= DWC31_TXTHRNUMPKT_PRD(tx_thr_num
);
1047 reg
&= ~DWC31_MAXTXBURSTSIZE_PRD(~0);
1048 reg
|= DWC31_MAXTXBURSTSIZE_PRD(tx_maxburst
);
1050 dwc3_writel(dwc
->regs
, DWC3_GTXTHRCFG
, reg
);
1057 phy_power_off(dwc
->usb3_generic_phy
);
1060 phy_power_off(dwc
->usb2_generic_phy
);
1063 usb_phy_set_suspend(dwc
->usb2_phy
, 1);
1064 usb_phy_set_suspend(dwc
->usb3_phy
, 1);
1067 usb_phy_shutdown(dwc
->usb2_phy
);
1068 usb_phy_shutdown(dwc
->usb3_phy
);
1069 phy_exit(dwc
->usb2_generic_phy
);
1070 phy_exit(dwc
->usb3_generic_phy
);
1073 dwc3_ulpi_exit(dwc
);
1079 static int dwc3_core_get_phy(struct dwc3
*dwc
)
1081 struct device
*dev
= dwc
->dev
;
1082 struct device_node
*node
= dev
->of_node
;
1086 dwc
->usb2_phy
= devm_usb_get_phy_by_phandle(dev
, "usb-phy", 0);
1087 dwc
->usb3_phy
= devm_usb_get_phy_by_phandle(dev
, "usb-phy", 1);
1089 dwc
->usb2_phy
= devm_usb_get_phy(dev
, USB_PHY_TYPE_USB2
);
1090 dwc
->usb3_phy
= devm_usb_get_phy(dev
, USB_PHY_TYPE_USB3
);
1093 if (IS_ERR(dwc
->usb2_phy
)) {
1094 ret
= PTR_ERR(dwc
->usb2_phy
);
1095 if (ret
== -ENXIO
|| ret
== -ENODEV
) {
1096 dwc
->usb2_phy
= NULL
;
1097 } else if (ret
== -EPROBE_DEFER
) {
1100 dev_err(dev
, "no usb2 phy configured\n");
1105 if (IS_ERR(dwc
->usb3_phy
)) {
1106 ret
= PTR_ERR(dwc
->usb3_phy
);
1107 if (ret
== -ENXIO
|| ret
== -ENODEV
) {
1108 dwc
->usb3_phy
= NULL
;
1109 } else if (ret
== -EPROBE_DEFER
) {
1112 dev_err(dev
, "no usb3 phy configured\n");
1117 dwc
->usb2_generic_phy
= devm_phy_get(dev
, "usb2-phy");
1118 if (IS_ERR(dwc
->usb2_generic_phy
)) {
1119 ret
= PTR_ERR(dwc
->usb2_generic_phy
);
1120 if (ret
== -ENOSYS
|| ret
== -ENODEV
) {
1121 dwc
->usb2_generic_phy
= NULL
;
1122 } else if (ret
== -EPROBE_DEFER
) {
1125 dev_err(dev
, "no usb2 phy configured\n");
1130 dwc
->usb3_generic_phy
= devm_phy_get(dev
, "usb3-phy");
1131 if (IS_ERR(dwc
->usb3_generic_phy
)) {
1132 ret
= PTR_ERR(dwc
->usb3_generic_phy
);
1133 if (ret
== -ENOSYS
|| ret
== -ENODEV
) {
1134 dwc
->usb3_generic_phy
= NULL
;
1135 } else if (ret
== -EPROBE_DEFER
) {
1138 dev_err(dev
, "no usb3 phy configured\n");
1146 static int dwc3_core_init_mode(struct dwc3
*dwc
)
1148 struct device
*dev
= dwc
->dev
;
1151 switch (dwc
->dr_mode
) {
1152 case USB_DR_MODE_PERIPHERAL
:
1153 dwc3_set_prtcap(dwc
, DWC3_GCTL_PRTCAP_DEVICE
);
1156 otg_set_vbus(dwc
->usb2_phy
->otg
, false);
1157 phy_set_mode(dwc
->usb2_generic_phy
, PHY_MODE_USB_DEVICE
);
1158 phy_set_mode(dwc
->usb3_generic_phy
, PHY_MODE_USB_DEVICE
);
1160 ret
= dwc3_gadget_init(dwc
);
1162 if (ret
!= -EPROBE_DEFER
)
1163 dev_err(dev
, "failed to initialize gadget\n");
1167 case USB_DR_MODE_HOST
:
1168 dwc3_set_prtcap(dwc
, DWC3_GCTL_PRTCAP_HOST
);
1171 otg_set_vbus(dwc
->usb2_phy
->otg
, true);
1172 phy_set_mode(dwc
->usb2_generic_phy
, PHY_MODE_USB_HOST
);
1173 phy_set_mode(dwc
->usb3_generic_phy
, PHY_MODE_USB_HOST
);
1175 ret
= dwc3_host_init(dwc
);
1177 if (ret
!= -EPROBE_DEFER
)
1178 dev_err(dev
, "failed to initialize host\n");
1182 case USB_DR_MODE_OTG
:
1183 INIT_WORK(&dwc
->drd_work
, __dwc3_set_mode
);
1184 ret
= dwc3_drd_init(dwc
);
1186 if (ret
!= -EPROBE_DEFER
)
1187 dev_err(dev
, "failed to initialize dual-role\n");
1192 dev_err(dev
, "Unsupported mode of operation %d\n", dwc
->dr_mode
);
1199 static void dwc3_core_exit_mode(struct dwc3
*dwc
)
1201 switch (dwc
->dr_mode
) {
1202 case USB_DR_MODE_PERIPHERAL
:
1203 dwc3_gadget_exit(dwc
);
1205 case USB_DR_MODE_HOST
:
1206 dwc3_host_exit(dwc
);
1208 case USB_DR_MODE_OTG
:
1216 /* de-assert DRVVBUS for HOST and OTG mode */
1217 dwc3_set_prtcap(dwc
, DWC3_GCTL_PRTCAP_DEVICE
);
1220 static void dwc3_get_properties(struct dwc3
*dwc
)
1222 struct device
*dev
= dwc
->dev
;
1223 u8 lpm_nyet_threshold
;
1226 u8 rx_thr_num_pkt_prd
;
1227 u8 rx_max_burst_prd
;
1228 u8 tx_thr_num_pkt_prd
;
1229 u8 tx_max_burst_prd
;
1231 /* default to highest possible threshold */
1232 lpm_nyet_threshold
= 0xf;
1234 /* default to -3.5dB de-emphasis */
1238 * default to assert utmi_sleep_n and use maximum allowed HIRD
1239 * threshold value of 0b1100
1241 hird_threshold
= 12;
1243 dwc
->maximum_speed
= usb_get_maximum_speed(dev
);
1244 dwc
->dr_mode
= usb_get_dr_mode(dev
);
1245 dwc
->hsphy_mode
= of_usb_get_phy_mode(dev
->of_node
);
1247 dwc
->sysdev_is_parent
= device_property_read_bool(dev
,
1248 "linux,sysdev_is_parent");
1249 if (dwc
->sysdev_is_parent
)
1250 dwc
->sysdev
= dwc
->dev
->parent
;
1252 dwc
->sysdev
= dwc
->dev
;
1254 dwc
->has_lpm_erratum
= device_property_read_bool(dev
,
1255 "snps,has-lpm-erratum");
1256 device_property_read_u8(dev
, "snps,lpm-nyet-threshold",
1257 &lpm_nyet_threshold
);
1258 dwc
->is_utmi_l1_suspend
= device_property_read_bool(dev
,
1259 "snps,is-utmi-l1-suspend");
1260 device_property_read_u8(dev
, "snps,hird-threshold",
1262 dwc
->dis_start_transfer_quirk
= device_property_read_bool(dev
,
1263 "snps,dis-start-transfer-quirk");
1264 dwc
->usb3_lpm_capable
= device_property_read_bool(dev
,
1265 "snps,usb3_lpm_capable");
1266 dwc
->usb2_lpm_disable
= device_property_read_bool(dev
,
1267 "snps,usb2-lpm-disable");
1268 device_property_read_u8(dev
, "snps,rx-thr-num-pkt-prd",
1269 &rx_thr_num_pkt_prd
);
1270 device_property_read_u8(dev
, "snps,rx-max-burst-prd",
1272 device_property_read_u8(dev
, "snps,tx-thr-num-pkt-prd",
1273 &tx_thr_num_pkt_prd
);
1274 device_property_read_u8(dev
, "snps,tx-max-burst-prd",
1277 dwc
->disable_scramble_quirk
= device_property_read_bool(dev
,
1278 "snps,disable_scramble_quirk");
1279 dwc
->u2exit_lfps_quirk
= device_property_read_bool(dev
,
1280 "snps,u2exit_lfps_quirk");
1281 dwc
->u2ss_inp3_quirk
= device_property_read_bool(dev
,
1282 "snps,u2ss_inp3_quirk");
1283 dwc
->req_p1p2p3_quirk
= device_property_read_bool(dev
,
1284 "snps,req_p1p2p3_quirk");
1285 dwc
->del_p1p2p3_quirk
= device_property_read_bool(dev
,
1286 "snps,del_p1p2p3_quirk");
1287 dwc
->del_phy_power_chg_quirk
= device_property_read_bool(dev
,
1288 "snps,del_phy_power_chg_quirk");
1289 dwc
->lfps_filter_quirk
= device_property_read_bool(dev
,
1290 "snps,lfps_filter_quirk");
1291 dwc
->rx_detect_poll_quirk
= device_property_read_bool(dev
,
1292 "snps,rx_detect_poll_quirk");
1293 dwc
->dis_u3_susphy_quirk
= device_property_read_bool(dev
,
1294 "snps,dis_u3_susphy_quirk");
1295 dwc
->dis_u2_susphy_quirk
= device_property_read_bool(dev
,
1296 "snps,dis_u2_susphy_quirk");
1297 dwc
->dis_enblslpm_quirk
= device_property_read_bool(dev
,
1298 "snps,dis_enblslpm_quirk");
1299 dwc
->dis_u1_entry_quirk
= device_property_read_bool(dev
,
1300 "snps,dis-u1-entry-quirk");
1301 dwc
->dis_u2_entry_quirk
= device_property_read_bool(dev
,
1302 "snps,dis-u2-entry-quirk");
1303 dwc
->dis_rxdet_inp3_quirk
= device_property_read_bool(dev
,
1304 "snps,dis_rxdet_inp3_quirk");
1305 dwc
->dis_u2_freeclk_exists_quirk
= device_property_read_bool(dev
,
1306 "snps,dis-u2-freeclk-exists-quirk");
1307 dwc
->dis_del_phy_power_chg_quirk
= device_property_read_bool(dev
,
1308 "snps,dis-del-phy-power-chg-quirk");
1309 dwc
->dis_tx_ipgap_linecheck_quirk
= device_property_read_bool(dev
,
1310 "snps,dis-tx-ipgap-linecheck-quirk");
1311 dwc
->parkmode_disable_ss_quirk
= device_property_read_bool(dev
,
1312 "snps,parkmode-disable-ss-quirk");
1314 dwc
->tx_de_emphasis_quirk
= device_property_read_bool(dev
,
1315 "snps,tx_de_emphasis_quirk");
1316 device_property_read_u8(dev
, "snps,tx_de_emphasis",
1318 device_property_read_string(dev
, "snps,hsphy_interface",
1319 &dwc
->hsphy_interface
);
1320 device_property_read_u32(dev
, "snps,quirk-frame-length-adjustment",
1323 dwc
->dis_metastability_quirk
= device_property_read_bool(dev
,
1324 "snps,dis_metastability_quirk");
1326 dwc
->lpm_nyet_threshold
= lpm_nyet_threshold
;
1327 dwc
->tx_de_emphasis
= tx_de_emphasis
;
1329 dwc
->hird_threshold
= hird_threshold
;
1331 dwc
->rx_thr_num_pkt_prd
= rx_thr_num_pkt_prd
;
1332 dwc
->rx_max_burst_prd
= rx_max_burst_prd
;
1334 dwc
->tx_thr_num_pkt_prd
= tx_thr_num_pkt_prd
;
1335 dwc
->tx_max_burst_prd
= tx_max_burst_prd
;
1337 dwc
->imod_interval
= 0;
1340 /* check whether the core supports IMOD */
1341 bool dwc3_has_imod(struct dwc3
*dwc
)
1343 return ((dwc3_is_usb3(dwc
) &&
1344 dwc
->revision
>= DWC3_REVISION_300A
) ||
1345 (dwc3_is_usb31(dwc
) &&
1346 dwc
->revision
>= DWC3_USB31_REVISION_120A
));
1349 static void dwc3_check_params(struct dwc3
*dwc
)
1351 struct device
*dev
= dwc
->dev
;
1353 /* Check for proper value of imod_interval */
1354 if (dwc
->imod_interval
&& !dwc3_has_imod(dwc
)) {
1355 dev_warn(dwc
->dev
, "Interrupt moderation not supported\n");
1356 dwc
->imod_interval
= 0;
1360 * Workaround for STAR 9000961433 which affects only version
1361 * 3.00a of the DWC_usb3 core. This prevents the controller
1362 * interrupt from being masked while handling events. IMOD
1363 * allows us to work around this issue. Enable it for the
1366 if (!dwc
->imod_interval
&&
1367 (dwc
->revision
== DWC3_REVISION_300A
))
1368 dwc
->imod_interval
= 1;
1370 /* Check the maximum_speed parameter */
1371 switch (dwc
->maximum_speed
) {
1373 case USB_SPEED_FULL
:
1374 case USB_SPEED_HIGH
:
1375 case USB_SPEED_SUPER
:
1376 case USB_SPEED_SUPER_PLUS
:
1379 dev_err(dev
, "invalid maximum_speed parameter %d\n",
1380 dwc
->maximum_speed
);
1382 case USB_SPEED_UNKNOWN
:
1383 /* default to superspeed */
1384 dwc
->maximum_speed
= USB_SPEED_SUPER
;
1387 * default to superspeed plus if we are capable.
1389 if (dwc3_is_usb31(dwc
) &&
1390 (DWC3_GHWPARAMS3_SSPHY_IFC(dwc
->hwparams
.hwparams3
) ==
1391 DWC3_GHWPARAMS3_SSPHY_IFC_GEN2
))
1392 dwc
->maximum_speed
= USB_SPEED_SUPER_PLUS
;
1398 static int dwc3_probe(struct platform_device
*pdev
)
1400 struct device
*dev
= &pdev
->dev
;
1401 struct resource
*res
, dwc_res
;
1408 dwc
= devm_kzalloc(dev
, sizeof(*dwc
), GFP_KERNEL
);
1412 dwc
->clks
= devm_kmemdup(dev
, dwc3_core_clks
, sizeof(dwc3_core_clks
),
1419 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1421 dev_err(dev
, "missing memory resource\n");
1425 dwc
->xhci_resources
[0].start
= res
->start
;
1426 dwc
->xhci_resources
[0].end
= dwc
->xhci_resources
[0].start
+
1428 dwc
->xhci_resources
[0].flags
= res
->flags
;
1429 dwc
->xhci_resources
[0].name
= res
->name
;
1432 * Request memory region but exclude xHCI regs,
1433 * since it will be requested by the xhci-plat driver.
1436 dwc_res
.start
+= DWC3_GLOBALS_REGS_START
;
1438 regs
= devm_ioremap_resource(dev
, &dwc_res
);
1440 return PTR_ERR(regs
);
1443 dwc
->regs_size
= resource_size(&dwc_res
);
1445 dwc3_get_properties(dwc
);
1447 dwc
->reset
= devm_reset_control_get_optional_shared(dev
, NULL
);
1448 if (IS_ERR(dwc
->reset
))
1449 return PTR_ERR(dwc
->reset
);
1452 dwc
->num_clks
= ARRAY_SIZE(dwc3_core_clks
);
1454 ret
= devm_clk_bulk_get(dev
, dwc
->num_clks
, dwc
->clks
);
1455 if (ret
== -EPROBE_DEFER
)
1458 * Clocks are optional, but new DT platforms should support all
1459 * clocks as required by the DT-binding.
1465 ret
= reset_control_deassert(dwc
->reset
);
1469 ret
= clk_bulk_prepare_enable(dwc
->num_clks
, dwc
->clks
);
1473 if (!dwc3_core_is_valid(dwc
)) {
1474 dev_err(dwc
->dev
, "this is not a DesignWare USB3 DRD Core\n");
1479 platform_set_drvdata(pdev
, dwc
);
1480 dwc3_cache_hwparams(dwc
);
1482 spin_lock_init(&dwc
->lock
);
1484 pm_runtime_set_active(dev
);
1485 pm_runtime_use_autosuspend(dev
);
1486 pm_runtime_set_autosuspend_delay(dev
, DWC3_DEFAULT_AUTOSUSPEND_DELAY
);
1487 pm_runtime_enable(dev
);
1488 ret
= pm_runtime_get_sync(dev
);
1492 pm_runtime_forbid(dev
);
1494 ret
= dwc3_alloc_event_buffers(dwc
, DWC3_EVENT_BUFFERS_SIZE
);
1496 dev_err(dwc
->dev
, "failed to allocate event buffers\n");
1501 ret
= dwc3_get_dr_mode(dwc
);
1505 ret
= dwc3_alloc_scratch_buffers(dwc
);
1509 ret
= dwc3_core_init(dwc
);
1511 if (ret
!= -EPROBE_DEFER
)
1512 dev_err(dev
, "failed to initialize core: %d\n", ret
);
1516 dwc3_check_params(dwc
);
1518 ret
= dwc3_core_init_mode(dwc
);
1522 dwc3_debugfs_init(dwc
);
1523 pm_runtime_put(dev
);
1528 dwc3_event_buffers_cleanup(dwc
);
1529 dwc3_ulpi_exit(dwc
);
1532 dwc3_free_scratch_buffers(dwc
);
1535 dwc3_free_event_buffers(dwc
);
1538 pm_runtime_allow(&pdev
->dev
);
1541 pm_runtime_put_sync(&pdev
->dev
);
1542 pm_runtime_disable(&pdev
->dev
);
1545 clk_bulk_disable_unprepare(dwc
->num_clks
, dwc
->clks
);
1547 reset_control_assert(dwc
->reset
);
1552 static int dwc3_remove(struct platform_device
*pdev
)
1554 struct dwc3
*dwc
= platform_get_drvdata(pdev
);
1556 pm_runtime_get_sync(&pdev
->dev
);
1558 dwc3_debugfs_exit(dwc
);
1559 dwc3_core_exit_mode(dwc
);
1561 dwc3_core_exit(dwc
);
1562 dwc3_ulpi_exit(dwc
);
1564 pm_runtime_put_sync(&pdev
->dev
);
1565 pm_runtime_allow(&pdev
->dev
);
1566 pm_runtime_disable(&pdev
->dev
);
1568 dwc3_free_event_buffers(dwc
);
1569 dwc3_free_scratch_buffers(dwc
);
1575 static int dwc3_core_init_for_resume(struct dwc3
*dwc
)
1579 ret
= reset_control_deassert(dwc
->reset
);
1583 ret
= clk_bulk_prepare_enable(dwc
->num_clks
, dwc
->clks
);
1587 ret
= dwc3_core_init(dwc
);
1594 clk_bulk_disable_unprepare(dwc
->num_clks
, dwc
->clks
);
1596 reset_control_assert(dwc
->reset
);
1601 static int dwc3_suspend_common(struct dwc3
*dwc
, pm_message_t msg
)
1603 unsigned long flags
;
1606 switch (dwc
->current_dr_role
) {
1607 case DWC3_GCTL_PRTCAP_DEVICE
:
1608 spin_lock_irqsave(&dwc
->lock
, flags
);
1609 dwc3_gadget_suspend(dwc
);
1610 spin_unlock_irqrestore(&dwc
->lock
, flags
);
1611 synchronize_irq(dwc
->irq_gadget
);
1612 dwc3_core_exit(dwc
);
1614 case DWC3_GCTL_PRTCAP_HOST
:
1615 if (!PMSG_IS_AUTO(msg
)) {
1616 dwc3_core_exit(dwc
);
1620 /* Let controller to suspend HSPHY before PHY driver suspends */
1621 if (dwc
->dis_u2_susphy_quirk
||
1622 dwc
->dis_enblslpm_quirk
) {
1623 reg
= dwc3_readl(dwc
->regs
, DWC3_GUSB2PHYCFG(0));
1624 reg
|= DWC3_GUSB2PHYCFG_ENBLSLPM
|
1625 DWC3_GUSB2PHYCFG_SUSPHY
;
1626 dwc3_writel(dwc
->regs
, DWC3_GUSB2PHYCFG(0), reg
);
1628 /* Give some time for USB2 PHY to suspend */
1629 usleep_range(5000, 6000);
1632 phy_pm_runtime_put_sync(dwc
->usb2_generic_phy
);
1633 phy_pm_runtime_put_sync(dwc
->usb3_generic_phy
);
1635 case DWC3_GCTL_PRTCAP_OTG
:
1636 /* do nothing during runtime_suspend */
1637 if (PMSG_IS_AUTO(msg
))
1640 if (dwc
->current_otg_role
== DWC3_OTG_ROLE_DEVICE
) {
1641 spin_lock_irqsave(&dwc
->lock
, flags
);
1642 dwc3_gadget_suspend(dwc
);
1643 spin_unlock_irqrestore(&dwc
->lock
, flags
);
1644 synchronize_irq(dwc
->irq_gadget
);
1648 dwc3_core_exit(dwc
);
1658 static int dwc3_resume_common(struct dwc3
*dwc
, pm_message_t msg
)
1660 unsigned long flags
;
1664 switch (dwc
->current_dr_role
) {
1665 case DWC3_GCTL_PRTCAP_DEVICE
:
1666 ret
= dwc3_core_init_for_resume(dwc
);
1670 dwc3_set_prtcap(dwc
, DWC3_GCTL_PRTCAP_DEVICE
);
1671 spin_lock_irqsave(&dwc
->lock
, flags
);
1672 dwc3_gadget_resume(dwc
);
1673 spin_unlock_irqrestore(&dwc
->lock
, flags
);
1675 case DWC3_GCTL_PRTCAP_HOST
:
1676 if (!PMSG_IS_AUTO(msg
)) {
1677 ret
= dwc3_core_init_for_resume(dwc
);
1680 dwc3_set_prtcap(dwc
, DWC3_GCTL_PRTCAP_HOST
);
1683 /* Restore GUSB2PHYCFG bits that were modified in suspend */
1684 reg
= dwc3_readl(dwc
->regs
, DWC3_GUSB2PHYCFG(0));
1685 if (dwc
->dis_u2_susphy_quirk
)
1686 reg
&= ~DWC3_GUSB2PHYCFG_SUSPHY
;
1688 if (dwc
->dis_enblslpm_quirk
)
1689 reg
&= ~DWC3_GUSB2PHYCFG_ENBLSLPM
;
1691 dwc3_writel(dwc
->regs
, DWC3_GUSB2PHYCFG(0), reg
);
1693 phy_pm_runtime_get_sync(dwc
->usb2_generic_phy
);
1694 phy_pm_runtime_get_sync(dwc
->usb3_generic_phy
);
1696 case DWC3_GCTL_PRTCAP_OTG
:
1697 /* nothing to do on runtime_resume */
1698 if (PMSG_IS_AUTO(msg
))
1701 ret
= dwc3_core_init(dwc
);
1705 dwc3_set_prtcap(dwc
, dwc
->current_dr_role
);
1708 if (dwc
->current_otg_role
== DWC3_OTG_ROLE_HOST
) {
1709 dwc3_otg_host_init(dwc
);
1710 } else if (dwc
->current_otg_role
== DWC3_OTG_ROLE_DEVICE
) {
1711 spin_lock_irqsave(&dwc
->lock
, flags
);
1712 dwc3_gadget_resume(dwc
);
1713 spin_unlock_irqrestore(&dwc
->lock
, flags
);
1725 static int dwc3_runtime_checks(struct dwc3
*dwc
)
1727 switch (dwc
->current_dr_role
) {
1728 case DWC3_GCTL_PRTCAP_DEVICE
:
1732 case DWC3_GCTL_PRTCAP_HOST
:
1741 static int dwc3_runtime_suspend(struct device
*dev
)
1743 struct dwc3
*dwc
= dev_get_drvdata(dev
);
1746 if (dwc3_runtime_checks(dwc
))
1749 ret
= dwc3_suspend_common(dwc
, PMSG_AUTO_SUSPEND
);
1753 device_init_wakeup(dev
, true);
1758 static int dwc3_runtime_resume(struct device
*dev
)
1760 struct dwc3
*dwc
= dev_get_drvdata(dev
);
1763 device_init_wakeup(dev
, false);
1765 ret
= dwc3_resume_common(dwc
, PMSG_AUTO_RESUME
);
1769 switch (dwc
->current_dr_role
) {
1770 case DWC3_GCTL_PRTCAP_DEVICE
:
1771 dwc3_gadget_process_pending_events(dwc
);
1773 case DWC3_GCTL_PRTCAP_HOST
:
1779 pm_runtime_mark_last_busy(dev
);
1784 static int dwc3_runtime_idle(struct device
*dev
)
1786 struct dwc3
*dwc
= dev_get_drvdata(dev
);
1788 switch (dwc
->current_dr_role
) {
1789 case DWC3_GCTL_PRTCAP_DEVICE
:
1790 if (dwc3_runtime_checks(dwc
))
1793 case DWC3_GCTL_PRTCAP_HOST
:
1799 pm_runtime_mark_last_busy(dev
);
1800 pm_runtime_autosuspend(dev
);
1804 #endif /* CONFIG_PM */
1806 #ifdef CONFIG_PM_SLEEP
1807 static int dwc3_suspend(struct device
*dev
)
1809 struct dwc3
*dwc
= dev_get_drvdata(dev
);
1812 ret
= dwc3_suspend_common(dwc
, PMSG_SUSPEND
);
1816 pinctrl_pm_select_sleep_state(dev
);
1821 static int dwc3_resume(struct device
*dev
)
1823 struct dwc3
*dwc
= dev_get_drvdata(dev
);
1826 pinctrl_pm_select_default_state(dev
);
1828 ret
= dwc3_resume_common(dwc
, PMSG_RESUME
);
1832 pm_runtime_disable(dev
);
1833 pm_runtime_set_active(dev
);
1834 pm_runtime_enable(dev
);
1838 #endif /* CONFIG_PM_SLEEP */
1840 static const struct dev_pm_ops dwc3_dev_pm_ops
= {
1841 SET_SYSTEM_SLEEP_PM_OPS(dwc3_suspend
, dwc3_resume
)
1842 SET_RUNTIME_PM_OPS(dwc3_runtime_suspend
, dwc3_runtime_resume
,
1847 static const struct of_device_id of_dwc3_match
[] = {
1849 .compatible
= "snps,dwc3"
1852 .compatible
= "synopsys,dwc3"
1856 MODULE_DEVICE_TABLE(of
, of_dwc3_match
);
1861 #define ACPI_ID_INTEL_BSW "808622B7"
1863 static const struct acpi_device_id dwc3_acpi_match
[] = {
1864 { ACPI_ID_INTEL_BSW
, 0 },
1867 MODULE_DEVICE_TABLE(acpi
, dwc3_acpi_match
);
1870 static struct platform_driver dwc3_driver
= {
1871 .probe
= dwc3_probe
,
1872 .remove
= dwc3_remove
,
1875 .of_match_table
= of_match_ptr(of_dwc3_match
),
1876 .acpi_match_table
= ACPI_PTR(dwc3_acpi_match
),
1877 .pm
= &dwc3_dev_pm_ops
,
1881 module_platform_driver(dwc3_driver
);
1883 MODULE_ALIAS("platform:dwc3");
1884 MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
1885 MODULE_LICENSE("GPL v2");
1886 MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver");