1 // SPDX-License-Identifier: GPL-2.0
3 * core.c - DesignWare USB3 DRD Controller Core file
5 * Copyright (C) 2010-2011 Texas Instruments Incorporated - https://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 (!IS_ENABLED(CONFIG_USB_ROLE_SWITCH
) ||
89 !device_property_read_bool(dwc
->dev
, "usb-role-switch")) &&
90 !DWC3_VER_IS_PRIOR(DWC3
, 330A
))
91 mode
= USB_DR_MODE_PERIPHERAL
;
94 if (mode
!= dwc
->dr_mode
) {
96 "Configuration mismatch. dr_mode forced to %s\n",
97 mode
== USB_DR_MODE_HOST
? "host" : "gadget");
105 void dwc3_set_prtcap(struct dwc3
*dwc
, u32 mode
)
109 reg
= dwc3_readl(dwc
->regs
, DWC3_GCTL
);
110 reg
&= ~(DWC3_GCTL_PRTCAPDIR(DWC3_GCTL_PRTCAP_OTG
));
111 reg
|= DWC3_GCTL_PRTCAPDIR(mode
);
112 dwc3_writel(dwc
->regs
, DWC3_GCTL
, reg
);
114 dwc
->current_dr_role
= mode
;
117 static void __dwc3_set_mode(struct work_struct
*work
)
119 struct dwc3
*dwc
= work_to_dwc(work
);
124 pm_runtime_get_sync(dwc
->dev
);
126 if (dwc
->current_dr_role
== DWC3_GCTL_PRTCAP_OTG
)
127 dwc3_otg_update(dwc
, 0);
129 if (!dwc
->desired_dr_role
)
132 if (dwc
->desired_dr_role
== dwc
->current_dr_role
)
135 if (dwc
->desired_dr_role
== DWC3_GCTL_PRTCAP_OTG
&& dwc
->edev
)
138 switch (dwc
->current_dr_role
) {
139 case DWC3_GCTL_PRTCAP_HOST
:
142 case DWC3_GCTL_PRTCAP_DEVICE
:
143 dwc3_gadget_exit(dwc
);
144 dwc3_event_buffers_cleanup(dwc
);
146 case DWC3_GCTL_PRTCAP_OTG
:
148 spin_lock_irqsave(&dwc
->lock
, flags
);
149 dwc
->desired_otg_role
= DWC3_OTG_ROLE_IDLE
;
150 spin_unlock_irqrestore(&dwc
->lock
, flags
);
151 dwc3_otg_update(dwc
, 1);
157 spin_lock_irqsave(&dwc
->lock
, flags
);
159 dwc3_set_prtcap(dwc
, dwc
->desired_dr_role
);
161 spin_unlock_irqrestore(&dwc
->lock
, flags
);
163 switch (dwc
->desired_dr_role
) {
164 case DWC3_GCTL_PRTCAP_HOST
:
165 ret
= dwc3_host_init(dwc
);
167 dev_err(dwc
->dev
, "failed to initialize host\n");
170 otg_set_vbus(dwc
->usb2_phy
->otg
, true);
171 phy_set_mode(dwc
->usb2_generic_phy
, PHY_MODE_USB_HOST
);
172 phy_set_mode(dwc
->usb3_generic_phy
, PHY_MODE_USB_HOST
);
173 if (dwc
->dis_split_quirk
) {
174 reg
= dwc3_readl(dwc
->regs
, DWC3_GUCTL3
);
175 reg
|= DWC3_GUCTL3_SPLITDISABLE
;
176 dwc3_writel(dwc
->regs
, DWC3_GUCTL3
, reg
);
180 case DWC3_GCTL_PRTCAP_DEVICE
:
181 dwc3_event_buffers_setup(dwc
);
184 otg_set_vbus(dwc
->usb2_phy
->otg
, false);
185 phy_set_mode(dwc
->usb2_generic_phy
, PHY_MODE_USB_DEVICE
);
186 phy_set_mode(dwc
->usb3_generic_phy
, PHY_MODE_USB_DEVICE
);
188 ret
= dwc3_gadget_init(dwc
);
190 dev_err(dwc
->dev
, "failed to initialize peripheral\n");
192 case DWC3_GCTL_PRTCAP_OTG
:
194 dwc3_otg_update(dwc
, 0);
201 pm_runtime_mark_last_busy(dwc
->dev
);
202 pm_runtime_put_autosuspend(dwc
->dev
);
205 void dwc3_set_mode(struct dwc3
*dwc
, u32 mode
)
209 if (dwc
->dr_mode
!= USB_DR_MODE_OTG
)
212 spin_lock_irqsave(&dwc
->lock
, flags
);
213 dwc
->desired_dr_role
= mode
;
214 spin_unlock_irqrestore(&dwc
->lock
, flags
);
216 queue_work(system_freezable_wq
, &dwc
->drd_work
);
219 u32
dwc3_core_fifo_space(struct dwc3_ep
*dep
, u8 type
)
221 struct dwc3
*dwc
= dep
->dwc
;
224 dwc3_writel(dwc
->regs
, DWC3_GDBGFIFOSPACE
,
225 DWC3_GDBGFIFOSPACE_NUM(dep
->number
) |
226 DWC3_GDBGFIFOSPACE_TYPE(type
));
228 reg
= dwc3_readl(dwc
->regs
, DWC3_GDBGFIFOSPACE
);
230 return DWC3_GDBGFIFOSPACE_SPACE_AVAILABLE(reg
);
234 * dwc3_core_soft_reset - Issues core soft reset and PHY reset
235 * @dwc: pointer to our context structure
237 static int dwc3_core_soft_reset(struct dwc3
*dwc
)
243 usb_phy_init(dwc
->usb2_phy
);
244 usb_phy_init(dwc
->usb3_phy
);
245 ret
= phy_init(dwc
->usb2_generic_phy
);
249 ret
= phy_init(dwc
->usb3_generic_phy
);
251 phy_exit(dwc
->usb2_generic_phy
);
256 * We're resetting only the device side because, if we're in host mode,
257 * XHCI driver will reset the host block. If dwc3 was configured for
258 * host-only mode, then we can return early.
260 if (dwc
->current_dr_role
== DWC3_GCTL_PRTCAP_HOST
)
263 reg
= dwc3_readl(dwc
->regs
, DWC3_DCTL
);
264 reg
|= DWC3_DCTL_CSFTRST
;
265 dwc3_writel(dwc
->regs
, DWC3_DCTL
, reg
);
268 * For DWC_usb31 controller 1.90a and later, the DCTL.CSFRST bit
269 * is cleared only after all the clocks are synchronized. This can
270 * take a little more than 50ms. Set the polling rate at 20ms
271 * for 10 times instead.
273 if (DWC3_VER_IS_WITHIN(DWC31
, 190A
, ANY
) || DWC3_IP_IS(DWC32
))
277 reg
= dwc3_readl(dwc
->regs
, DWC3_DCTL
);
278 if (!(reg
& DWC3_DCTL_CSFTRST
))
281 if (DWC3_VER_IS_WITHIN(DWC31
, 190A
, ANY
) || DWC3_IP_IS(DWC32
))
287 phy_exit(dwc
->usb3_generic_phy
);
288 phy_exit(dwc
->usb2_generic_phy
);
294 * For DWC_usb31 controller 1.80a and prior, once DCTL.CSFRST bit
295 * is cleared, we must wait at least 50ms before accessing the PHY
296 * domain (synchronization delay).
298 if (DWC3_VER_IS_WITHIN(DWC31
, ANY
, 180A
))
305 * dwc3_frame_length_adjustment - Adjusts frame length if required
306 * @dwc3: Pointer to our controller context structure
308 static void dwc3_frame_length_adjustment(struct dwc3
*dwc
)
313 if (DWC3_VER_IS_PRIOR(DWC3
, 250A
))
319 reg
= dwc3_readl(dwc
->regs
, DWC3_GFLADJ
);
320 dft
= reg
& DWC3_GFLADJ_30MHZ_MASK
;
321 if (dft
!= dwc
->fladj
) {
322 reg
&= ~DWC3_GFLADJ_30MHZ_MASK
;
323 reg
|= DWC3_GFLADJ_30MHZ_SDBND_SEL
| dwc
->fladj
;
324 dwc3_writel(dwc
->regs
, DWC3_GFLADJ
, reg
);
329 * dwc3_free_one_event_buffer - Frees one event buffer
330 * @dwc: Pointer to our controller context structure
331 * @evt: Pointer to event buffer to be freed
333 static void dwc3_free_one_event_buffer(struct dwc3
*dwc
,
334 struct dwc3_event_buffer
*evt
)
336 dma_free_coherent(dwc
->sysdev
, evt
->length
, evt
->buf
, evt
->dma
);
340 * dwc3_alloc_one_event_buffer - Allocates one event buffer structure
341 * @dwc: Pointer to our controller context structure
342 * @length: size of the event buffer
344 * Returns a pointer to the allocated event buffer structure on success
345 * otherwise ERR_PTR(errno).
347 static struct dwc3_event_buffer
*dwc3_alloc_one_event_buffer(struct dwc3
*dwc
,
350 struct dwc3_event_buffer
*evt
;
352 evt
= devm_kzalloc(dwc
->dev
, sizeof(*evt
), GFP_KERNEL
);
354 return ERR_PTR(-ENOMEM
);
357 evt
->length
= length
;
358 evt
->cache
= devm_kzalloc(dwc
->dev
, length
, GFP_KERNEL
);
360 return ERR_PTR(-ENOMEM
);
362 evt
->buf
= dma_alloc_coherent(dwc
->sysdev
, length
,
363 &evt
->dma
, GFP_KERNEL
);
365 return ERR_PTR(-ENOMEM
);
371 * dwc3_free_event_buffers - frees all allocated event buffers
372 * @dwc: Pointer to our controller context structure
374 static void dwc3_free_event_buffers(struct dwc3
*dwc
)
376 struct dwc3_event_buffer
*evt
;
380 dwc3_free_one_event_buffer(dwc
, evt
);
384 * dwc3_alloc_event_buffers - Allocates @num event buffers of size @length
385 * @dwc: pointer to our controller context structure
386 * @length: size of event buffer
388 * Returns 0 on success otherwise negative errno. In the error case, dwc
389 * may contain some buffers allocated but not all which were requested.
391 static int dwc3_alloc_event_buffers(struct dwc3
*dwc
, unsigned length
)
393 struct dwc3_event_buffer
*evt
;
395 evt
= dwc3_alloc_one_event_buffer(dwc
, length
);
397 dev_err(dwc
->dev
, "can't allocate event buffer\n");
406 * dwc3_event_buffers_setup - setup our allocated event buffers
407 * @dwc: pointer to our controller context structure
409 * Returns 0 on success otherwise negative errno.
411 int dwc3_event_buffers_setup(struct dwc3
*dwc
)
413 struct dwc3_event_buffer
*evt
;
417 dwc3_writel(dwc
->regs
, DWC3_GEVNTADRLO(0),
418 lower_32_bits(evt
->dma
));
419 dwc3_writel(dwc
->regs
, DWC3_GEVNTADRHI(0),
420 upper_32_bits(evt
->dma
));
421 dwc3_writel(dwc
->regs
, DWC3_GEVNTSIZ(0),
422 DWC3_GEVNTSIZ_SIZE(evt
->length
));
423 dwc3_writel(dwc
->regs
, DWC3_GEVNTCOUNT(0), 0);
428 void dwc3_event_buffers_cleanup(struct dwc3
*dwc
)
430 struct dwc3_event_buffer
*evt
;
436 dwc3_writel(dwc
->regs
, DWC3_GEVNTADRLO(0), 0);
437 dwc3_writel(dwc
->regs
, DWC3_GEVNTADRHI(0), 0);
438 dwc3_writel(dwc
->regs
, DWC3_GEVNTSIZ(0), DWC3_GEVNTSIZ_INTMASK
439 | DWC3_GEVNTSIZ_SIZE(0));
440 dwc3_writel(dwc
->regs
, DWC3_GEVNTCOUNT(0), 0);
443 static int dwc3_alloc_scratch_buffers(struct dwc3
*dwc
)
445 if (!dwc
->has_hibernation
)
448 if (!dwc
->nr_scratch
)
451 dwc
->scratchbuf
= kmalloc_array(dwc
->nr_scratch
,
452 DWC3_SCRATCHBUF_SIZE
, GFP_KERNEL
);
453 if (!dwc
->scratchbuf
)
459 static int dwc3_setup_scratch_buffers(struct dwc3
*dwc
)
461 dma_addr_t scratch_addr
;
465 if (!dwc
->has_hibernation
)
468 if (!dwc
->nr_scratch
)
471 /* should never fall here */
472 if (!WARN_ON(dwc
->scratchbuf
))
475 scratch_addr
= dma_map_single(dwc
->sysdev
, dwc
->scratchbuf
,
476 dwc
->nr_scratch
* DWC3_SCRATCHBUF_SIZE
,
478 if (dma_mapping_error(dwc
->sysdev
, scratch_addr
)) {
479 dev_err(dwc
->sysdev
, "failed to map scratch buffer\n");
484 dwc
->scratch_addr
= scratch_addr
;
486 param
= lower_32_bits(scratch_addr
);
488 ret
= dwc3_send_gadget_generic_command(dwc
,
489 DWC3_DGCMD_SET_SCRATCHPAD_ADDR_LO
, param
);
493 param
= upper_32_bits(scratch_addr
);
495 ret
= dwc3_send_gadget_generic_command(dwc
,
496 DWC3_DGCMD_SET_SCRATCHPAD_ADDR_HI
, param
);
503 dma_unmap_single(dwc
->sysdev
, dwc
->scratch_addr
, dwc
->nr_scratch
*
504 DWC3_SCRATCHBUF_SIZE
, DMA_BIDIRECTIONAL
);
510 static void dwc3_free_scratch_buffers(struct dwc3
*dwc
)
512 if (!dwc
->has_hibernation
)
515 if (!dwc
->nr_scratch
)
518 /* should never fall here */
519 if (!WARN_ON(dwc
->scratchbuf
))
522 dma_unmap_single(dwc
->sysdev
, dwc
->scratch_addr
, dwc
->nr_scratch
*
523 DWC3_SCRATCHBUF_SIZE
, DMA_BIDIRECTIONAL
);
524 kfree(dwc
->scratchbuf
);
527 static void dwc3_core_num_eps(struct dwc3
*dwc
)
529 struct dwc3_hwparams
*parms
= &dwc
->hwparams
;
531 dwc
->num_eps
= DWC3_NUM_EPS(parms
);
534 static void dwc3_cache_hwparams(struct dwc3
*dwc
)
536 struct dwc3_hwparams
*parms
= &dwc
->hwparams
;
538 parms
->hwparams0
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS0
);
539 parms
->hwparams1
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS1
);
540 parms
->hwparams2
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS2
);
541 parms
->hwparams3
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS3
);
542 parms
->hwparams4
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS4
);
543 parms
->hwparams5
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS5
);
544 parms
->hwparams6
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS6
);
545 parms
->hwparams7
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS7
);
546 parms
->hwparams8
= dwc3_readl(dwc
->regs
, DWC3_GHWPARAMS8
);
549 static int dwc3_core_ulpi_init(struct dwc3
*dwc
)
554 intf
= DWC3_GHWPARAMS3_HSPHY_IFC(dwc
->hwparams
.hwparams3
);
556 if (intf
== DWC3_GHWPARAMS3_HSPHY_IFC_ULPI
||
557 (intf
== DWC3_GHWPARAMS3_HSPHY_IFC_UTMI_ULPI
&&
558 dwc
->hsphy_interface
&&
559 !strncmp(dwc
->hsphy_interface
, "ulpi", 4)))
560 ret
= dwc3_ulpi_init(dwc
);
566 * dwc3_phy_setup - Configure USB PHY Interface of DWC3 Core
567 * @dwc: Pointer to our controller context structure
569 * Returns 0 on success. The USB PHY interfaces are configured but not
570 * initialized. The PHY interfaces and the PHYs get initialized together with
571 * the core in dwc3_core_init.
573 static int dwc3_phy_setup(struct dwc3
*dwc
)
575 unsigned int hw_mode
;
578 hw_mode
= DWC3_GHWPARAMS0_MODE(dwc
->hwparams
.hwparams0
);
580 reg
= dwc3_readl(dwc
->regs
, DWC3_GUSB3PIPECTL(0));
583 * Make sure UX_EXIT_PX is cleared as that causes issues with some
584 * PHYs. Also, this bit is not supposed to be used in normal operation.
586 reg
&= ~DWC3_GUSB3PIPECTL_UX_EXIT_PX
;
589 * Above 1.94a, it is recommended to set DWC3_GUSB3PIPECTL_SUSPHY
590 * to '0' during coreConsultant configuration. So default value
591 * will be '0' when the core is reset. Application needs to set it
592 * to '1' after the core initialization is completed.
594 if (!DWC3_VER_IS_WITHIN(DWC3
, ANY
, 194A
))
595 reg
|= DWC3_GUSB3PIPECTL_SUSPHY
;
598 * For DRD controllers, GUSB3PIPECTL.SUSPENDENABLE must be cleared after
599 * power-on reset, and it can be set after core initialization, which is
600 * after device soft-reset during initialization.
602 if (hw_mode
== DWC3_GHWPARAMS0_MODE_DRD
)
603 reg
&= ~DWC3_GUSB3PIPECTL_SUSPHY
;
605 if (dwc
->u2ss_inp3_quirk
)
606 reg
|= DWC3_GUSB3PIPECTL_U2SSINP3OK
;
608 if (dwc
->dis_rxdet_inp3_quirk
)
609 reg
|= DWC3_GUSB3PIPECTL_DISRXDETINP3
;
611 if (dwc
->req_p1p2p3_quirk
)
612 reg
|= DWC3_GUSB3PIPECTL_REQP1P2P3
;
614 if (dwc
->del_p1p2p3_quirk
)
615 reg
|= DWC3_GUSB3PIPECTL_DEP1P2P3_EN
;
617 if (dwc
->del_phy_power_chg_quirk
)
618 reg
|= DWC3_GUSB3PIPECTL_DEPOCHANGE
;
620 if (dwc
->lfps_filter_quirk
)
621 reg
|= DWC3_GUSB3PIPECTL_LFPSFILT
;
623 if (dwc
->rx_detect_poll_quirk
)
624 reg
|= DWC3_GUSB3PIPECTL_RX_DETOPOLL
;
626 if (dwc
->tx_de_emphasis_quirk
)
627 reg
|= DWC3_GUSB3PIPECTL_TX_DEEPH(dwc
->tx_de_emphasis
);
629 if (dwc
->dis_u3_susphy_quirk
)
630 reg
&= ~DWC3_GUSB3PIPECTL_SUSPHY
;
632 if (dwc
->dis_del_phy_power_chg_quirk
)
633 reg
&= ~DWC3_GUSB3PIPECTL_DEPOCHANGE
;
635 dwc3_writel(dwc
->regs
, DWC3_GUSB3PIPECTL(0), reg
);
637 reg
= dwc3_readl(dwc
->regs
, DWC3_GUSB2PHYCFG(0));
639 /* Select the HS PHY interface */
640 switch (DWC3_GHWPARAMS3_HSPHY_IFC(dwc
->hwparams
.hwparams3
)) {
641 case DWC3_GHWPARAMS3_HSPHY_IFC_UTMI_ULPI
:
642 if (dwc
->hsphy_interface
&&
643 !strncmp(dwc
->hsphy_interface
, "utmi", 4)) {
644 reg
&= ~DWC3_GUSB2PHYCFG_ULPI_UTMI
;
646 } else if (dwc
->hsphy_interface
&&
647 !strncmp(dwc
->hsphy_interface
, "ulpi", 4)) {
648 reg
|= DWC3_GUSB2PHYCFG_ULPI_UTMI
;
649 dwc3_writel(dwc
->regs
, DWC3_GUSB2PHYCFG(0), reg
);
651 /* Relying on default value. */
652 if (!(reg
& DWC3_GUSB2PHYCFG_ULPI_UTMI
))
656 case DWC3_GHWPARAMS3_HSPHY_IFC_ULPI
:
661 switch (dwc
->hsphy_mode
) {
662 case USBPHY_INTERFACE_MODE_UTMI
:
663 reg
&= ~(DWC3_GUSB2PHYCFG_PHYIF_MASK
|
664 DWC3_GUSB2PHYCFG_USBTRDTIM_MASK
);
665 reg
|= DWC3_GUSB2PHYCFG_PHYIF(UTMI_PHYIF_8_BIT
) |
666 DWC3_GUSB2PHYCFG_USBTRDTIM(USBTRDTIM_UTMI_8_BIT
);
668 case USBPHY_INTERFACE_MODE_UTMIW
:
669 reg
&= ~(DWC3_GUSB2PHYCFG_PHYIF_MASK
|
670 DWC3_GUSB2PHYCFG_USBTRDTIM_MASK
);
671 reg
|= DWC3_GUSB2PHYCFG_PHYIF(UTMI_PHYIF_16_BIT
) |
672 DWC3_GUSB2PHYCFG_USBTRDTIM(USBTRDTIM_UTMI_16_BIT
);
679 * Above 1.94a, it is recommended to set DWC3_GUSB2PHYCFG_SUSPHY to
680 * '0' during coreConsultant configuration. So default value will
681 * be '0' when the core is reset. Application needs to set it to
682 * '1' after the core initialization is completed.
684 if (!DWC3_VER_IS_WITHIN(DWC3
, ANY
, 194A
))
685 reg
|= DWC3_GUSB2PHYCFG_SUSPHY
;
688 * For DRD controllers, GUSB2PHYCFG.SUSPHY must be cleared after
689 * power-on reset, and it can be set after core initialization, which is
690 * after device soft-reset during initialization.
692 if (hw_mode
== DWC3_GHWPARAMS0_MODE_DRD
)
693 reg
&= ~DWC3_GUSB2PHYCFG_SUSPHY
;
695 if (dwc
->dis_u2_susphy_quirk
)
696 reg
&= ~DWC3_GUSB2PHYCFG_SUSPHY
;
698 if (dwc
->dis_enblslpm_quirk
)
699 reg
&= ~DWC3_GUSB2PHYCFG_ENBLSLPM
;
701 reg
|= DWC3_GUSB2PHYCFG_ENBLSLPM
;
703 if (dwc
->dis_u2_freeclk_exists_quirk
)
704 reg
&= ~DWC3_GUSB2PHYCFG_U2_FREECLK_EXISTS
;
706 dwc3_writel(dwc
->regs
, DWC3_GUSB2PHYCFG(0), reg
);
711 static void dwc3_core_exit(struct dwc3
*dwc
)
713 dwc3_event_buffers_cleanup(dwc
);
715 usb_phy_shutdown(dwc
->usb2_phy
);
716 usb_phy_shutdown(dwc
->usb3_phy
);
717 phy_exit(dwc
->usb2_generic_phy
);
718 phy_exit(dwc
->usb3_generic_phy
);
720 usb_phy_set_suspend(dwc
->usb2_phy
, 1);
721 usb_phy_set_suspend(dwc
->usb3_phy
, 1);
722 phy_power_off(dwc
->usb2_generic_phy
);
723 phy_power_off(dwc
->usb3_generic_phy
);
724 clk_bulk_disable_unprepare(dwc
->num_clks
, dwc
->clks
);
725 reset_control_assert(dwc
->reset
);
728 static bool dwc3_core_is_valid(struct dwc3
*dwc
)
732 reg
= dwc3_readl(dwc
->regs
, DWC3_GSNPSID
);
733 dwc
->ip
= DWC3_GSNPS_ID(reg
);
735 /* This should read as U3 followed by revision number */
736 if (DWC3_IP_IS(DWC3
)) {
738 } else if (DWC3_IP_IS(DWC31
) || DWC3_IP_IS(DWC32
)) {
739 dwc
->revision
= dwc3_readl(dwc
->regs
, DWC3_VER_NUMBER
);
740 dwc
->version_type
= dwc3_readl(dwc
->regs
, DWC3_VER_TYPE
);
748 static void dwc3_core_setup_global_control(struct dwc3
*dwc
)
750 u32 hwparams4
= dwc
->hwparams
.hwparams4
;
753 reg
= dwc3_readl(dwc
->regs
, DWC3_GCTL
);
754 reg
&= ~DWC3_GCTL_SCALEDOWN_MASK
;
756 switch (DWC3_GHWPARAMS1_EN_PWROPT(dwc
->hwparams
.hwparams1
)) {
757 case DWC3_GHWPARAMS1_EN_PWROPT_CLK
:
759 * WORKAROUND: DWC3 revisions between 2.10a and 2.50a have an
760 * issue which would cause xHCI compliance tests to fail.
762 * Because of that we cannot enable clock gating on such
767 * STAR#9000588375: Clock Gating, SOF Issues when ref_clk-Based
770 if ((dwc
->dr_mode
== USB_DR_MODE_HOST
||
771 dwc
->dr_mode
== USB_DR_MODE_OTG
) &&
772 DWC3_VER_IS_WITHIN(DWC3
, 210A
, 250A
))
773 reg
|= DWC3_GCTL_DSBLCLKGTNG
| DWC3_GCTL_SOFITPSYNC
;
775 reg
&= ~DWC3_GCTL_DSBLCLKGTNG
;
777 case DWC3_GHWPARAMS1_EN_PWROPT_HIB
:
778 /* enable hibernation here */
779 dwc
->nr_scratch
= DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(hwparams4
);
782 * REVISIT Enabling this bit so that host-mode hibernation
783 * will work. Device-mode hibernation is not yet implemented.
785 reg
|= DWC3_GCTL_GBLHIBERNATIONEN
;
792 /* check if current dwc3 is on simulation board */
793 if (dwc
->hwparams
.hwparams6
& DWC3_GHWPARAMS6_EN_FPGA
) {
794 dev_info(dwc
->dev
, "Running with FPGA optimizations\n");
798 WARN_ONCE(dwc
->disable_scramble_quirk
&& !dwc
->is_fpga
,
799 "disable_scramble cannot be used on non-FPGA builds\n");
801 if (dwc
->disable_scramble_quirk
&& dwc
->is_fpga
)
802 reg
|= DWC3_GCTL_DISSCRAMBLE
;
804 reg
&= ~DWC3_GCTL_DISSCRAMBLE
;
806 if (dwc
->u2exit_lfps_quirk
)
807 reg
|= DWC3_GCTL_U2EXIT_LFPS
;
810 * WORKAROUND: DWC3 revisions <1.90a have a bug
811 * where the device can fail to connect at SuperSpeed
812 * and falls back to high-speed mode which causes
813 * the device to enter a Connect/Disconnect loop
815 if (DWC3_VER_IS_PRIOR(DWC3
, 190A
))
816 reg
|= DWC3_GCTL_U2RSTECN
;
818 dwc3_writel(dwc
->regs
, DWC3_GCTL
, reg
);
821 static int dwc3_core_get_phy(struct dwc3
*dwc
);
822 static int dwc3_core_ulpi_init(struct dwc3
*dwc
);
824 /* set global incr burst type configuration registers */
825 static void dwc3_set_incr_burst_type(struct dwc3
*dwc
)
827 struct device
*dev
= dwc
->dev
;
828 /* incrx_mode : for INCR burst type. */
830 /* incrx_size : for size of INCRX burst. */
838 cfg
= dwc3_readl(dwc
->regs
, DWC3_GSBUSCFG0
);
841 * Handle property "snps,incr-burst-type-adjustment".
842 * Get the number of value from this property:
843 * result <= 0, means this property is not supported.
844 * result = 1, means INCRx burst mode supported.
845 * result > 1, means undefined length burst mode supported.
847 ntype
= device_property_count_u32(dev
, "snps,incr-burst-type-adjustment");
851 vals
= kcalloc(ntype
, sizeof(u32
), GFP_KERNEL
);
853 dev_err(dev
, "Error to get memory\n");
857 /* Get INCR burst type, and parse it */
858 ret
= device_property_read_u32_array(dev
,
859 "snps,incr-burst-type-adjustment", vals
, ntype
);
862 dev_err(dev
, "Error to get property\n");
869 /* INCRX (undefined length) burst mode */
870 incrx_mode
= INCRX_UNDEF_LENGTH_BURST_MODE
;
871 for (i
= 1; i
< ntype
; i
++) {
872 if (vals
[i
] > incrx_size
)
873 incrx_size
= vals
[i
];
876 /* INCRX burst mode */
877 incrx_mode
= INCRX_BURST_MODE
;
882 /* Enable Undefined Length INCR Burst and Enable INCRx Burst */
883 cfg
&= ~DWC3_GSBUSCFG0_INCRBRST_MASK
;
885 cfg
|= DWC3_GSBUSCFG0_INCRBRSTENA
;
886 switch (incrx_size
) {
888 cfg
|= DWC3_GSBUSCFG0_INCR256BRSTENA
;
891 cfg
|= DWC3_GSBUSCFG0_INCR128BRSTENA
;
894 cfg
|= DWC3_GSBUSCFG0_INCR64BRSTENA
;
897 cfg
|= DWC3_GSBUSCFG0_INCR32BRSTENA
;
900 cfg
|= DWC3_GSBUSCFG0_INCR16BRSTENA
;
903 cfg
|= DWC3_GSBUSCFG0_INCR8BRSTENA
;
906 cfg
|= DWC3_GSBUSCFG0_INCR4BRSTENA
;
911 dev_err(dev
, "Invalid property\n");
915 dwc3_writel(dwc
->regs
, DWC3_GSBUSCFG0
, cfg
);
919 * dwc3_core_init - Low-level initialization of DWC3 Core
920 * @dwc: Pointer to our controller context structure
922 * Returns 0 on success otherwise negative errno.
924 static int dwc3_core_init(struct dwc3
*dwc
)
926 unsigned int hw_mode
;
930 hw_mode
= DWC3_GHWPARAMS0_MODE(dwc
->hwparams
.hwparams0
);
933 * Write Linux Version Code to our GUID register so it's easy to figure
934 * out which kernel version a bug was found.
936 dwc3_writel(dwc
->regs
, DWC3_GUID
, LINUX_VERSION_CODE
);
938 ret
= dwc3_phy_setup(dwc
);
942 if (!dwc
->ulpi_ready
) {
943 ret
= dwc3_core_ulpi_init(dwc
);
946 dwc
->ulpi_ready
= true;
949 if (!dwc
->phys_ready
) {
950 ret
= dwc3_core_get_phy(dwc
);
953 dwc
->phys_ready
= true;
956 ret
= dwc3_core_soft_reset(dwc
);
960 if (hw_mode
== DWC3_GHWPARAMS0_MODE_DRD
&&
961 !DWC3_VER_IS_WITHIN(DWC3
, ANY
, 194A
)) {
962 if (!dwc
->dis_u3_susphy_quirk
) {
963 reg
= dwc3_readl(dwc
->regs
, DWC3_GUSB3PIPECTL(0));
964 reg
|= DWC3_GUSB3PIPECTL_SUSPHY
;
965 dwc3_writel(dwc
->regs
, DWC3_GUSB3PIPECTL(0), reg
);
968 if (!dwc
->dis_u2_susphy_quirk
) {
969 reg
= dwc3_readl(dwc
->regs
, DWC3_GUSB2PHYCFG(0));
970 reg
|= DWC3_GUSB2PHYCFG_SUSPHY
;
971 dwc3_writel(dwc
->regs
, DWC3_GUSB2PHYCFG(0), reg
);
975 dwc3_core_setup_global_control(dwc
);
976 dwc3_core_num_eps(dwc
);
978 ret
= dwc3_setup_scratch_buffers(dwc
);
982 /* Adjust Frame Length */
983 dwc3_frame_length_adjustment(dwc
);
985 dwc3_set_incr_burst_type(dwc
);
987 usb_phy_set_suspend(dwc
->usb2_phy
, 0);
988 usb_phy_set_suspend(dwc
->usb3_phy
, 0);
989 ret
= phy_power_on(dwc
->usb2_generic_phy
);
993 ret
= phy_power_on(dwc
->usb3_generic_phy
);
997 ret
= dwc3_event_buffers_setup(dwc
);
999 dev_err(dwc
->dev
, "failed to setup event buffers\n");
1004 * ENDXFER polling is available on version 3.10a and later of
1005 * the DWC_usb3 controller. It is NOT available in the
1006 * DWC_usb31 controller.
1008 if (DWC3_VER_IS_WITHIN(DWC3
, 310A
, ANY
)) {
1009 reg
= dwc3_readl(dwc
->regs
, DWC3_GUCTL2
);
1010 reg
|= DWC3_GUCTL2_RST_ACTBITLATER
;
1011 dwc3_writel(dwc
->regs
, DWC3_GUCTL2
, reg
);
1014 if (!DWC3_VER_IS_PRIOR(DWC3
, 250A
)) {
1015 reg
= dwc3_readl(dwc
->regs
, DWC3_GUCTL1
);
1018 * Enable hardware control of sending remote wakeup
1019 * in HS when the device is in the L1 state.
1021 if (!DWC3_VER_IS_PRIOR(DWC3
, 290A
))
1022 reg
|= DWC3_GUCTL1_DEV_L1_EXIT_BY_HW
;
1024 if (dwc
->dis_tx_ipgap_linecheck_quirk
)
1025 reg
|= DWC3_GUCTL1_TX_IPGAP_LINECHECK_DIS
;
1027 if (dwc
->parkmode_disable_ss_quirk
)
1028 reg
|= DWC3_GUCTL1_PARKMODE_DISABLE_SS
;
1030 dwc3_writel(dwc
->regs
, DWC3_GUCTL1
, reg
);
1033 if (dwc
->dr_mode
== USB_DR_MODE_HOST
||
1034 dwc
->dr_mode
== USB_DR_MODE_OTG
) {
1035 reg
= dwc3_readl(dwc
->regs
, DWC3_GUCTL
);
1038 * Enable Auto retry Feature to make the controller operating in
1039 * Host mode on seeing transaction errors(CRC errors or internal
1040 * overrun scenerios) on IN transfers to reply to the device
1041 * with a non-terminating retry ACK (i.e, an ACK transcation
1042 * packet with Retry=1 & Nump != 0)
1044 reg
|= DWC3_GUCTL_HSTINAUTORETRY
;
1046 dwc3_writel(dwc
->regs
, DWC3_GUCTL
, reg
);
1050 * Must config both number of packets and max burst settings to enable
1051 * RX and/or TX threshold.
1053 if (!DWC3_IP_IS(DWC3
) && dwc
->dr_mode
== USB_DR_MODE_HOST
) {
1054 u8 rx_thr_num
= dwc
->rx_thr_num_pkt_prd
;
1055 u8 rx_maxburst
= dwc
->rx_max_burst_prd
;
1056 u8 tx_thr_num
= dwc
->tx_thr_num_pkt_prd
;
1057 u8 tx_maxburst
= dwc
->tx_max_burst_prd
;
1059 if (rx_thr_num
&& rx_maxburst
) {
1060 reg
= dwc3_readl(dwc
->regs
, DWC3_GRXTHRCFG
);
1061 reg
|= DWC31_RXTHRNUMPKTSEL_PRD
;
1063 reg
&= ~DWC31_RXTHRNUMPKT_PRD(~0);
1064 reg
|= DWC31_RXTHRNUMPKT_PRD(rx_thr_num
);
1066 reg
&= ~DWC31_MAXRXBURSTSIZE_PRD(~0);
1067 reg
|= DWC31_MAXRXBURSTSIZE_PRD(rx_maxburst
);
1069 dwc3_writel(dwc
->regs
, DWC3_GRXTHRCFG
, reg
);
1072 if (tx_thr_num
&& tx_maxburst
) {
1073 reg
= dwc3_readl(dwc
->regs
, DWC3_GTXTHRCFG
);
1074 reg
|= DWC31_TXTHRNUMPKTSEL_PRD
;
1076 reg
&= ~DWC31_TXTHRNUMPKT_PRD(~0);
1077 reg
|= DWC31_TXTHRNUMPKT_PRD(tx_thr_num
);
1079 reg
&= ~DWC31_MAXTXBURSTSIZE_PRD(~0);
1080 reg
|= DWC31_MAXTXBURSTSIZE_PRD(tx_maxburst
);
1082 dwc3_writel(dwc
->regs
, DWC3_GTXTHRCFG
, reg
);
1089 phy_power_off(dwc
->usb3_generic_phy
);
1092 phy_power_off(dwc
->usb2_generic_phy
);
1095 usb_phy_set_suspend(dwc
->usb2_phy
, 1);
1096 usb_phy_set_suspend(dwc
->usb3_phy
, 1);
1099 usb_phy_shutdown(dwc
->usb2_phy
);
1100 usb_phy_shutdown(dwc
->usb3_phy
);
1101 phy_exit(dwc
->usb2_generic_phy
);
1102 phy_exit(dwc
->usb3_generic_phy
);
1105 dwc3_ulpi_exit(dwc
);
1111 static int dwc3_core_get_phy(struct dwc3
*dwc
)
1113 struct device
*dev
= dwc
->dev
;
1114 struct device_node
*node
= dev
->of_node
;
1118 dwc
->usb2_phy
= devm_usb_get_phy_by_phandle(dev
, "usb-phy", 0);
1119 dwc
->usb3_phy
= devm_usb_get_phy_by_phandle(dev
, "usb-phy", 1);
1121 dwc
->usb2_phy
= devm_usb_get_phy(dev
, USB_PHY_TYPE_USB2
);
1122 dwc
->usb3_phy
= devm_usb_get_phy(dev
, USB_PHY_TYPE_USB3
);
1125 if (IS_ERR(dwc
->usb2_phy
)) {
1126 ret
= PTR_ERR(dwc
->usb2_phy
);
1127 if (ret
== -ENXIO
|| ret
== -ENODEV
) {
1128 dwc
->usb2_phy
= NULL
;
1129 } else if (ret
== -EPROBE_DEFER
) {
1132 dev_err(dev
, "no usb2 phy configured\n");
1137 if (IS_ERR(dwc
->usb3_phy
)) {
1138 ret
= PTR_ERR(dwc
->usb3_phy
);
1139 if (ret
== -ENXIO
|| ret
== -ENODEV
) {
1140 dwc
->usb3_phy
= NULL
;
1141 } else if (ret
== -EPROBE_DEFER
) {
1144 dev_err(dev
, "no usb3 phy configured\n");
1149 dwc
->usb2_generic_phy
= devm_phy_get(dev
, "usb2-phy");
1150 if (IS_ERR(dwc
->usb2_generic_phy
)) {
1151 ret
= PTR_ERR(dwc
->usb2_generic_phy
);
1152 if (ret
== -ENOSYS
|| ret
== -ENODEV
) {
1153 dwc
->usb2_generic_phy
= NULL
;
1154 } else if (ret
== -EPROBE_DEFER
) {
1157 dev_err(dev
, "no usb2 phy configured\n");
1162 dwc
->usb3_generic_phy
= devm_phy_get(dev
, "usb3-phy");
1163 if (IS_ERR(dwc
->usb3_generic_phy
)) {
1164 ret
= PTR_ERR(dwc
->usb3_generic_phy
);
1165 if (ret
== -ENOSYS
|| ret
== -ENODEV
) {
1166 dwc
->usb3_generic_phy
= NULL
;
1167 } else if (ret
== -EPROBE_DEFER
) {
1170 dev_err(dev
, "no usb3 phy configured\n");
1178 static int dwc3_core_init_mode(struct dwc3
*dwc
)
1180 struct device
*dev
= dwc
->dev
;
1183 switch (dwc
->dr_mode
) {
1184 case USB_DR_MODE_PERIPHERAL
:
1185 dwc3_set_prtcap(dwc
, DWC3_GCTL_PRTCAP_DEVICE
);
1188 otg_set_vbus(dwc
->usb2_phy
->otg
, false);
1189 phy_set_mode(dwc
->usb2_generic_phy
, PHY_MODE_USB_DEVICE
);
1190 phy_set_mode(dwc
->usb3_generic_phy
, PHY_MODE_USB_DEVICE
);
1192 ret
= dwc3_gadget_init(dwc
);
1194 if (ret
!= -EPROBE_DEFER
)
1195 dev_err(dev
, "failed to initialize gadget\n");
1199 case USB_DR_MODE_HOST
:
1200 dwc3_set_prtcap(dwc
, DWC3_GCTL_PRTCAP_HOST
);
1203 otg_set_vbus(dwc
->usb2_phy
->otg
, true);
1204 phy_set_mode(dwc
->usb2_generic_phy
, PHY_MODE_USB_HOST
);
1205 phy_set_mode(dwc
->usb3_generic_phy
, PHY_MODE_USB_HOST
);
1207 ret
= dwc3_host_init(dwc
);
1209 if (ret
!= -EPROBE_DEFER
)
1210 dev_err(dev
, "failed to initialize host\n");
1214 case USB_DR_MODE_OTG
:
1215 INIT_WORK(&dwc
->drd_work
, __dwc3_set_mode
);
1216 ret
= dwc3_drd_init(dwc
);
1218 if (ret
!= -EPROBE_DEFER
)
1219 dev_err(dev
, "failed to initialize dual-role\n");
1224 dev_err(dev
, "Unsupported mode of operation %d\n", dwc
->dr_mode
);
1231 static void dwc3_core_exit_mode(struct dwc3
*dwc
)
1233 switch (dwc
->dr_mode
) {
1234 case USB_DR_MODE_PERIPHERAL
:
1235 dwc3_gadget_exit(dwc
);
1237 case USB_DR_MODE_HOST
:
1238 dwc3_host_exit(dwc
);
1240 case USB_DR_MODE_OTG
:
1248 /* de-assert DRVVBUS for HOST and OTG mode */
1249 dwc3_set_prtcap(dwc
, DWC3_GCTL_PRTCAP_DEVICE
);
1252 static void dwc3_get_properties(struct dwc3
*dwc
)
1254 struct device
*dev
= dwc
->dev
;
1255 u8 lpm_nyet_threshold
;
1258 u8 rx_thr_num_pkt_prd
;
1259 u8 rx_max_burst_prd
;
1260 u8 tx_thr_num_pkt_prd
;
1261 u8 tx_max_burst_prd
;
1263 /* default to highest possible threshold */
1264 lpm_nyet_threshold
= 0xf;
1266 /* default to -3.5dB de-emphasis */
1270 * default to assert utmi_sleep_n and use maximum allowed HIRD
1271 * threshold value of 0b1100
1273 hird_threshold
= 12;
1275 dwc
->maximum_speed
= usb_get_maximum_speed(dev
);
1276 dwc
->dr_mode
= usb_get_dr_mode(dev
);
1277 dwc
->hsphy_mode
= of_usb_get_phy_mode(dev
->of_node
);
1279 dwc
->sysdev_is_parent
= device_property_read_bool(dev
,
1280 "linux,sysdev_is_parent");
1281 if (dwc
->sysdev_is_parent
)
1282 dwc
->sysdev
= dwc
->dev
->parent
;
1284 dwc
->sysdev
= dwc
->dev
;
1286 dwc
->has_lpm_erratum
= device_property_read_bool(dev
,
1287 "snps,has-lpm-erratum");
1288 device_property_read_u8(dev
, "snps,lpm-nyet-threshold",
1289 &lpm_nyet_threshold
);
1290 dwc
->is_utmi_l1_suspend
= device_property_read_bool(dev
,
1291 "snps,is-utmi-l1-suspend");
1292 device_property_read_u8(dev
, "snps,hird-threshold",
1294 dwc
->dis_start_transfer_quirk
= device_property_read_bool(dev
,
1295 "snps,dis-start-transfer-quirk");
1296 dwc
->usb3_lpm_capable
= device_property_read_bool(dev
,
1297 "snps,usb3_lpm_capable");
1298 dwc
->usb2_lpm_disable
= device_property_read_bool(dev
,
1299 "snps,usb2-lpm-disable");
1300 device_property_read_u8(dev
, "snps,rx-thr-num-pkt-prd",
1301 &rx_thr_num_pkt_prd
);
1302 device_property_read_u8(dev
, "snps,rx-max-burst-prd",
1304 device_property_read_u8(dev
, "snps,tx-thr-num-pkt-prd",
1305 &tx_thr_num_pkt_prd
);
1306 device_property_read_u8(dev
, "snps,tx-max-burst-prd",
1309 dwc
->disable_scramble_quirk
= device_property_read_bool(dev
,
1310 "snps,disable_scramble_quirk");
1311 dwc
->u2exit_lfps_quirk
= device_property_read_bool(dev
,
1312 "snps,u2exit_lfps_quirk");
1313 dwc
->u2ss_inp3_quirk
= device_property_read_bool(dev
,
1314 "snps,u2ss_inp3_quirk");
1315 dwc
->req_p1p2p3_quirk
= device_property_read_bool(dev
,
1316 "snps,req_p1p2p3_quirk");
1317 dwc
->del_p1p2p3_quirk
= device_property_read_bool(dev
,
1318 "snps,del_p1p2p3_quirk");
1319 dwc
->del_phy_power_chg_quirk
= device_property_read_bool(dev
,
1320 "snps,del_phy_power_chg_quirk");
1321 dwc
->lfps_filter_quirk
= device_property_read_bool(dev
,
1322 "snps,lfps_filter_quirk");
1323 dwc
->rx_detect_poll_quirk
= device_property_read_bool(dev
,
1324 "snps,rx_detect_poll_quirk");
1325 dwc
->dis_u3_susphy_quirk
= device_property_read_bool(dev
,
1326 "snps,dis_u3_susphy_quirk");
1327 dwc
->dis_u2_susphy_quirk
= device_property_read_bool(dev
,
1328 "snps,dis_u2_susphy_quirk");
1329 dwc
->dis_enblslpm_quirk
= device_property_read_bool(dev
,
1330 "snps,dis_enblslpm_quirk");
1331 dwc
->dis_u1_entry_quirk
= device_property_read_bool(dev
,
1332 "snps,dis-u1-entry-quirk");
1333 dwc
->dis_u2_entry_quirk
= device_property_read_bool(dev
,
1334 "snps,dis-u2-entry-quirk");
1335 dwc
->dis_rxdet_inp3_quirk
= device_property_read_bool(dev
,
1336 "snps,dis_rxdet_inp3_quirk");
1337 dwc
->dis_u2_freeclk_exists_quirk
= device_property_read_bool(dev
,
1338 "snps,dis-u2-freeclk-exists-quirk");
1339 dwc
->dis_del_phy_power_chg_quirk
= device_property_read_bool(dev
,
1340 "snps,dis-del-phy-power-chg-quirk");
1341 dwc
->dis_tx_ipgap_linecheck_quirk
= device_property_read_bool(dev
,
1342 "snps,dis-tx-ipgap-linecheck-quirk");
1343 dwc
->parkmode_disable_ss_quirk
= device_property_read_bool(dev
,
1344 "snps,parkmode-disable-ss-quirk");
1346 dwc
->tx_de_emphasis_quirk
= device_property_read_bool(dev
,
1347 "snps,tx_de_emphasis_quirk");
1348 device_property_read_u8(dev
, "snps,tx_de_emphasis",
1350 device_property_read_string(dev
, "snps,hsphy_interface",
1351 &dwc
->hsphy_interface
);
1352 device_property_read_u32(dev
, "snps,quirk-frame-length-adjustment",
1355 dwc
->dis_metastability_quirk
= device_property_read_bool(dev
,
1356 "snps,dis_metastability_quirk");
1358 dwc
->dis_split_quirk
= device_property_read_bool(dev
,
1359 "snps,dis-split-quirk");
1361 dwc
->lpm_nyet_threshold
= lpm_nyet_threshold
;
1362 dwc
->tx_de_emphasis
= tx_de_emphasis
;
1364 dwc
->hird_threshold
= hird_threshold
;
1366 dwc
->rx_thr_num_pkt_prd
= rx_thr_num_pkt_prd
;
1367 dwc
->rx_max_burst_prd
= rx_max_burst_prd
;
1369 dwc
->tx_thr_num_pkt_prd
= tx_thr_num_pkt_prd
;
1370 dwc
->tx_max_burst_prd
= tx_max_burst_prd
;
1372 dwc
->imod_interval
= 0;
1375 /* check whether the core supports IMOD */
1376 bool dwc3_has_imod(struct dwc3
*dwc
)
1378 return DWC3_VER_IS_WITHIN(DWC3
, 300A
, ANY
) ||
1379 DWC3_VER_IS_WITHIN(DWC31
, 120A
, ANY
) ||
1383 static void dwc3_check_params(struct dwc3
*dwc
)
1385 struct device
*dev
= dwc
->dev
;
1386 unsigned int hwparam_gen
=
1387 DWC3_GHWPARAMS3_SSPHY_IFC(dwc
->hwparams
.hwparams3
);
1389 /* Check for proper value of imod_interval */
1390 if (dwc
->imod_interval
&& !dwc3_has_imod(dwc
)) {
1391 dev_warn(dwc
->dev
, "Interrupt moderation not supported\n");
1392 dwc
->imod_interval
= 0;
1396 * Workaround for STAR 9000961433 which affects only version
1397 * 3.00a of the DWC_usb3 core. This prevents the controller
1398 * interrupt from being masked while handling events. IMOD
1399 * allows us to work around this issue. Enable it for the
1402 if (!dwc
->imod_interval
&&
1403 DWC3_VER_IS(DWC3
, 300A
))
1404 dwc
->imod_interval
= 1;
1406 /* Check the maximum_speed parameter */
1407 switch (dwc
->maximum_speed
) {
1409 case USB_SPEED_FULL
:
1410 case USB_SPEED_HIGH
:
1412 case USB_SPEED_SUPER
:
1413 if (hwparam_gen
== DWC3_GHWPARAMS3_SSPHY_IFC_DIS
)
1414 dev_warn(dev
, "UDC doesn't support Gen 1\n");
1416 case USB_SPEED_SUPER_PLUS
:
1417 if ((DWC3_IP_IS(DWC32
) &&
1418 hwparam_gen
== DWC3_GHWPARAMS3_SSPHY_IFC_DIS
) ||
1419 (!DWC3_IP_IS(DWC32
) &&
1420 hwparam_gen
!= DWC3_GHWPARAMS3_SSPHY_IFC_GEN2
))
1421 dev_warn(dev
, "UDC doesn't support SSP\n");
1424 dev_err(dev
, "invalid maximum_speed parameter %d\n",
1425 dwc
->maximum_speed
);
1427 case USB_SPEED_UNKNOWN
:
1428 switch (hwparam_gen
) {
1429 case DWC3_GHWPARAMS3_SSPHY_IFC_GEN2
:
1430 dwc
->maximum_speed
= USB_SPEED_SUPER_PLUS
;
1432 case DWC3_GHWPARAMS3_SSPHY_IFC_GEN1
:
1433 if (DWC3_IP_IS(DWC32
))
1434 dwc
->maximum_speed
= USB_SPEED_SUPER_PLUS
;
1436 dwc
->maximum_speed
= USB_SPEED_SUPER
;
1438 case DWC3_GHWPARAMS3_SSPHY_IFC_DIS
:
1439 dwc
->maximum_speed
= USB_SPEED_HIGH
;
1442 dwc
->maximum_speed
= USB_SPEED_SUPER
;
1449 static int dwc3_probe(struct platform_device
*pdev
)
1451 struct device
*dev
= &pdev
->dev
;
1452 struct resource
*res
, dwc_res
;
1459 dwc
= devm_kzalloc(dev
, sizeof(*dwc
), GFP_KERNEL
);
1465 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1467 dev_err(dev
, "missing memory resource\n");
1471 dwc
->xhci_resources
[0].start
= res
->start
;
1472 dwc
->xhci_resources
[0].end
= dwc
->xhci_resources
[0].start
+
1474 dwc
->xhci_resources
[0].flags
= res
->flags
;
1475 dwc
->xhci_resources
[0].name
= res
->name
;
1478 * Request memory region but exclude xHCI regs,
1479 * since it will be requested by the xhci-plat driver.
1482 dwc_res
.start
+= DWC3_GLOBALS_REGS_START
;
1484 regs
= devm_ioremap_resource(dev
, &dwc_res
);
1486 return PTR_ERR(regs
);
1489 dwc
->regs_size
= resource_size(&dwc_res
);
1491 dwc3_get_properties(dwc
);
1493 dwc
->reset
= devm_reset_control_array_get(dev
, true, true);
1494 if (IS_ERR(dwc
->reset
))
1495 return PTR_ERR(dwc
->reset
);
1498 ret
= devm_clk_bulk_get_all(dev
, &dwc
->clks
);
1499 if (ret
== -EPROBE_DEFER
)
1502 * Clocks are optional, but new DT platforms should support all
1503 * clocks as required by the DT-binding.
1508 dwc
->num_clks
= ret
;
1512 ret
= reset_control_deassert(dwc
->reset
);
1516 ret
= clk_bulk_prepare_enable(dwc
->num_clks
, dwc
->clks
);
1520 if (!dwc3_core_is_valid(dwc
)) {
1521 dev_err(dwc
->dev
, "this is not a DesignWare USB3 DRD Core\n");
1526 platform_set_drvdata(pdev
, dwc
);
1527 dwc3_cache_hwparams(dwc
);
1529 spin_lock_init(&dwc
->lock
);
1531 pm_runtime_set_active(dev
);
1532 pm_runtime_use_autosuspend(dev
);
1533 pm_runtime_set_autosuspend_delay(dev
, DWC3_DEFAULT_AUTOSUSPEND_DELAY
);
1534 pm_runtime_enable(dev
);
1535 ret
= pm_runtime_get_sync(dev
);
1539 pm_runtime_forbid(dev
);
1541 ret
= dwc3_alloc_event_buffers(dwc
, DWC3_EVENT_BUFFERS_SIZE
);
1543 dev_err(dwc
->dev
, "failed to allocate event buffers\n");
1548 ret
= dwc3_get_dr_mode(dwc
);
1552 ret
= dwc3_alloc_scratch_buffers(dwc
);
1556 ret
= dwc3_core_init(dwc
);
1558 if (ret
!= -EPROBE_DEFER
)
1559 dev_err(dev
, "failed to initialize core: %d\n", ret
);
1563 dwc3_check_params(dwc
);
1565 ret
= dwc3_core_init_mode(dwc
);
1569 dwc3_debugfs_init(dwc
);
1570 pm_runtime_put(dev
);
1575 dwc3_event_buffers_cleanup(dwc
);
1577 usb_phy_shutdown(dwc
->usb2_phy
);
1578 usb_phy_shutdown(dwc
->usb3_phy
);
1579 phy_exit(dwc
->usb2_generic_phy
);
1580 phy_exit(dwc
->usb3_generic_phy
);
1582 usb_phy_set_suspend(dwc
->usb2_phy
, 1);
1583 usb_phy_set_suspend(dwc
->usb3_phy
, 1);
1584 phy_power_off(dwc
->usb2_generic_phy
);
1585 phy_power_off(dwc
->usb3_generic_phy
);
1587 dwc3_ulpi_exit(dwc
);
1590 dwc3_free_scratch_buffers(dwc
);
1593 dwc3_free_event_buffers(dwc
);
1596 pm_runtime_allow(&pdev
->dev
);
1599 pm_runtime_put_sync(&pdev
->dev
);
1600 pm_runtime_disable(&pdev
->dev
);
1603 clk_bulk_disable_unprepare(dwc
->num_clks
, dwc
->clks
);
1605 reset_control_assert(dwc
->reset
);
1610 static int dwc3_remove(struct platform_device
*pdev
)
1612 struct dwc3
*dwc
= platform_get_drvdata(pdev
);
1614 pm_runtime_get_sync(&pdev
->dev
);
1616 dwc3_debugfs_exit(dwc
);
1617 dwc3_core_exit_mode(dwc
);
1619 dwc3_core_exit(dwc
);
1620 dwc3_ulpi_exit(dwc
);
1622 pm_runtime_disable(&pdev
->dev
);
1623 pm_runtime_put_noidle(&pdev
->dev
);
1624 pm_runtime_set_suspended(&pdev
->dev
);
1626 dwc3_free_event_buffers(dwc
);
1627 dwc3_free_scratch_buffers(dwc
);
1633 static int dwc3_core_init_for_resume(struct dwc3
*dwc
)
1637 ret
= reset_control_deassert(dwc
->reset
);
1641 ret
= clk_bulk_prepare_enable(dwc
->num_clks
, dwc
->clks
);
1645 ret
= dwc3_core_init(dwc
);
1652 clk_bulk_disable_unprepare(dwc
->num_clks
, dwc
->clks
);
1654 reset_control_assert(dwc
->reset
);
1659 static int dwc3_suspend_common(struct dwc3
*dwc
, pm_message_t msg
)
1661 unsigned long flags
;
1664 switch (dwc
->current_dr_role
) {
1665 case DWC3_GCTL_PRTCAP_DEVICE
:
1666 if (pm_runtime_suspended(dwc
->dev
))
1668 spin_lock_irqsave(&dwc
->lock
, flags
);
1669 dwc3_gadget_suspend(dwc
);
1670 spin_unlock_irqrestore(&dwc
->lock
, flags
);
1671 synchronize_irq(dwc
->irq_gadget
);
1672 dwc3_core_exit(dwc
);
1674 case DWC3_GCTL_PRTCAP_HOST
:
1675 if (!PMSG_IS_AUTO(msg
)) {
1676 dwc3_core_exit(dwc
);
1680 /* Let controller to suspend HSPHY before PHY driver suspends */
1681 if (dwc
->dis_u2_susphy_quirk
||
1682 dwc
->dis_enblslpm_quirk
) {
1683 reg
= dwc3_readl(dwc
->regs
, DWC3_GUSB2PHYCFG(0));
1684 reg
|= DWC3_GUSB2PHYCFG_ENBLSLPM
|
1685 DWC3_GUSB2PHYCFG_SUSPHY
;
1686 dwc3_writel(dwc
->regs
, DWC3_GUSB2PHYCFG(0), reg
);
1688 /* Give some time for USB2 PHY to suspend */
1689 usleep_range(5000, 6000);
1692 phy_pm_runtime_put_sync(dwc
->usb2_generic_phy
);
1693 phy_pm_runtime_put_sync(dwc
->usb3_generic_phy
);
1695 case DWC3_GCTL_PRTCAP_OTG
:
1696 /* do nothing during runtime_suspend */
1697 if (PMSG_IS_AUTO(msg
))
1700 if (dwc
->current_otg_role
== DWC3_OTG_ROLE_DEVICE
) {
1701 spin_lock_irqsave(&dwc
->lock
, flags
);
1702 dwc3_gadget_suspend(dwc
);
1703 spin_unlock_irqrestore(&dwc
->lock
, flags
);
1704 synchronize_irq(dwc
->irq_gadget
);
1708 dwc3_core_exit(dwc
);
1718 static int dwc3_resume_common(struct dwc3
*dwc
, pm_message_t msg
)
1720 unsigned long flags
;
1724 switch (dwc
->current_dr_role
) {
1725 case DWC3_GCTL_PRTCAP_DEVICE
:
1726 ret
= dwc3_core_init_for_resume(dwc
);
1730 dwc3_set_prtcap(dwc
, DWC3_GCTL_PRTCAP_DEVICE
);
1731 spin_lock_irqsave(&dwc
->lock
, flags
);
1732 dwc3_gadget_resume(dwc
);
1733 spin_unlock_irqrestore(&dwc
->lock
, flags
);
1735 case DWC3_GCTL_PRTCAP_HOST
:
1736 if (!PMSG_IS_AUTO(msg
)) {
1737 ret
= dwc3_core_init_for_resume(dwc
);
1740 dwc3_set_prtcap(dwc
, DWC3_GCTL_PRTCAP_HOST
);
1743 /* Restore GUSB2PHYCFG bits that were modified in suspend */
1744 reg
= dwc3_readl(dwc
->regs
, DWC3_GUSB2PHYCFG(0));
1745 if (dwc
->dis_u2_susphy_quirk
)
1746 reg
&= ~DWC3_GUSB2PHYCFG_SUSPHY
;
1748 if (dwc
->dis_enblslpm_quirk
)
1749 reg
&= ~DWC3_GUSB2PHYCFG_ENBLSLPM
;
1751 dwc3_writel(dwc
->regs
, DWC3_GUSB2PHYCFG(0), reg
);
1753 phy_pm_runtime_get_sync(dwc
->usb2_generic_phy
);
1754 phy_pm_runtime_get_sync(dwc
->usb3_generic_phy
);
1756 case DWC3_GCTL_PRTCAP_OTG
:
1757 /* nothing to do on runtime_resume */
1758 if (PMSG_IS_AUTO(msg
))
1761 ret
= dwc3_core_init(dwc
);
1765 dwc3_set_prtcap(dwc
, dwc
->current_dr_role
);
1768 if (dwc
->current_otg_role
== DWC3_OTG_ROLE_HOST
) {
1769 dwc3_otg_host_init(dwc
);
1770 } else if (dwc
->current_otg_role
== DWC3_OTG_ROLE_DEVICE
) {
1771 spin_lock_irqsave(&dwc
->lock
, flags
);
1772 dwc3_gadget_resume(dwc
);
1773 spin_unlock_irqrestore(&dwc
->lock
, flags
);
1785 static int dwc3_runtime_checks(struct dwc3
*dwc
)
1787 switch (dwc
->current_dr_role
) {
1788 case DWC3_GCTL_PRTCAP_DEVICE
:
1792 case DWC3_GCTL_PRTCAP_HOST
:
1801 static int dwc3_runtime_suspend(struct device
*dev
)
1803 struct dwc3
*dwc
= dev_get_drvdata(dev
);
1806 if (dwc3_runtime_checks(dwc
))
1809 ret
= dwc3_suspend_common(dwc
, PMSG_AUTO_SUSPEND
);
1813 device_init_wakeup(dev
, true);
1818 static int dwc3_runtime_resume(struct device
*dev
)
1820 struct dwc3
*dwc
= dev_get_drvdata(dev
);
1823 device_init_wakeup(dev
, false);
1825 ret
= dwc3_resume_common(dwc
, PMSG_AUTO_RESUME
);
1829 switch (dwc
->current_dr_role
) {
1830 case DWC3_GCTL_PRTCAP_DEVICE
:
1831 dwc3_gadget_process_pending_events(dwc
);
1833 case DWC3_GCTL_PRTCAP_HOST
:
1839 pm_runtime_mark_last_busy(dev
);
1844 static int dwc3_runtime_idle(struct device
*dev
)
1846 struct dwc3
*dwc
= dev_get_drvdata(dev
);
1848 switch (dwc
->current_dr_role
) {
1849 case DWC3_GCTL_PRTCAP_DEVICE
:
1850 if (dwc3_runtime_checks(dwc
))
1853 case DWC3_GCTL_PRTCAP_HOST
:
1859 pm_runtime_mark_last_busy(dev
);
1860 pm_runtime_autosuspend(dev
);
1864 #endif /* CONFIG_PM */
1866 #ifdef CONFIG_PM_SLEEP
1867 static int dwc3_suspend(struct device
*dev
)
1869 struct dwc3
*dwc
= dev_get_drvdata(dev
);
1872 ret
= dwc3_suspend_common(dwc
, PMSG_SUSPEND
);
1876 pinctrl_pm_select_sleep_state(dev
);
1881 static int dwc3_resume(struct device
*dev
)
1883 struct dwc3
*dwc
= dev_get_drvdata(dev
);
1886 pinctrl_pm_select_default_state(dev
);
1888 ret
= dwc3_resume_common(dwc
, PMSG_RESUME
);
1892 pm_runtime_disable(dev
);
1893 pm_runtime_set_active(dev
);
1894 pm_runtime_enable(dev
);
1899 static void dwc3_complete(struct device
*dev
)
1901 struct dwc3
*dwc
= dev_get_drvdata(dev
);
1904 if (dwc
->current_dr_role
== DWC3_GCTL_PRTCAP_HOST
&&
1905 dwc
->dis_split_quirk
) {
1906 reg
= dwc3_readl(dwc
->regs
, DWC3_GUCTL3
);
1907 reg
|= DWC3_GUCTL3_SPLITDISABLE
;
1908 dwc3_writel(dwc
->regs
, DWC3_GUCTL3
, reg
);
1912 #define dwc3_complete NULL
1913 #endif /* CONFIG_PM_SLEEP */
1915 static const struct dev_pm_ops dwc3_dev_pm_ops
= {
1916 SET_SYSTEM_SLEEP_PM_OPS(dwc3_suspend
, dwc3_resume
)
1917 .complete
= dwc3_complete
,
1918 SET_RUNTIME_PM_OPS(dwc3_runtime_suspend
, dwc3_runtime_resume
,
1923 static const struct of_device_id of_dwc3_match
[] = {
1925 .compatible
= "snps,dwc3"
1928 .compatible
= "synopsys,dwc3"
1932 MODULE_DEVICE_TABLE(of
, of_dwc3_match
);
1937 #define ACPI_ID_INTEL_BSW "808622B7"
1939 static const struct acpi_device_id dwc3_acpi_match
[] = {
1940 { ACPI_ID_INTEL_BSW
, 0 },
1943 MODULE_DEVICE_TABLE(acpi
, dwc3_acpi_match
);
1946 static struct platform_driver dwc3_driver
= {
1947 .probe
= dwc3_probe
,
1948 .remove
= dwc3_remove
,
1951 .of_match_table
= of_match_ptr(of_dwc3_match
),
1952 .acpi_match_table
= ACPI_PTR(dwc3_acpi_match
),
1953 .pm
= &dwc3_dev_pm_ops
,
1957 module_platform_driver(dwc3_driver
);
1959 MODULE_ALIAS("platform:dwc3");
1960 MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
1961 MODULE_LICENSE("GPL v2");
1962 MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver");