nds32: fix build error "relocation truncated to fit: R_NDS32_25_PCREL_RELA" when
[linux-2.6-microblaze.git] / drivers / usb / dwc3 / core.c
1 // SPDX-License-Identifier: GPL-2.0
2 /**
3  * core.c - DesignWare USB3 DRD Controller Core file
4  *
5  * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com
6  *
7  * Authors: Felipe Balbi <balbi@ti.com>,
8  *          Sebastian Andrzej Siewior <bigeasy@linutronix.de>
9  */
10
11 #include <linux/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>
21 #include <linux/io.h>
22 #include <linux/list.h>
23 #include <linux/delay.h>
24 #include <linux/dma-mapping.h>
25 #include <linux/of.h>
26 #include <linux/acpi.h>
27 #include <linux/pinctrl/consumer.h>
28 #include <linux/reset.h>
29
30 #include <linux/usb/ch9.h>
31 #include <linux/usb/gadget.h>
32 #include <linux/usb/of.h>
33 #include <linux/usb/otg.h>
34
35 #include "core.h"
36 #include "gadget.h"
37 #include "io.h"
38
39 #include "debug.h"
40
41 #define DWC3_DEFAULT_AUTOSUSPEND_DELAY  5000 /* ms */
42
43 /**
44  * dwc3_get_dr_mode - Validates and sets dr_mode
45  * @dwc: pointer to our context structure
46  */
47 static int dwc3_get_dr_mode(struct dwc3 *dwc)
48 {
49         enum usb_dr_mode mode;
50         struct device *dev = dwc->dev;
51         unsigned int hw_mode;
52
53         if (dwc->dr_mode == USB_DR_MODE_UNKNOWN)
54                 dwc->dr_mode = USB_DR_MODE_OTG;
55
56         mode = dwc->dr_mode;
57         hw_mode = DWC3_GHWPARAMS0_MODE(dwc->hwparams.hwparams0);
58
59         switch (hw_mode) {
60         case DWC3_GHWPARAMS0_MODE_GADGET:
61                 if (IS_ENABLED(CONFIG_USB_DWC3_HOST)) {
62                         dev_err(dev,
63                                 "Controller does not support host mode.\n");
64                         return -EINVAL;
65                 }
66                 mode = USB_DR_MODE_PERIPHERAL;
67                 break;
68         case DWC3_GHWPARAMS0_MODE_HOST:
69                 if (IS_ENABLED(CONFIG_USB_DWC3_GADGET)) {
70                         dev_err(dev,
71                                 "Controller does not support device mode.\n");
72                         return -EINVAL;
73                 }
74                 mode = USB_DR_MODE_HOST;
75                 break;
76         default:
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;
81         }
82
83         if (mode != dwc->dr_mode) {
84                 dev_warn(dev,
85                          "Configuration mismatch. dr_mode forced to %s\n",
86                          mode == USB_DR_MODE_HOST ? "host" : "gadget");
87
88                 dwc->dr_mode = mode;
89         }
90
91         return 0;
92 }
93
94 void dwc3_set_prtcap(struct dwc3 *dwc, u32 mode)
95 {
96         u32 reg;
97
98         reg = dwc3_readl(dwc->regs, DWC3_GCTL);
99         reg &= ~(DWC3_GCTL_PRTCAPDIR(DWC3_GCTL_PRTCAP_OTG));
100         reg |= DWC3_GCTL_PRTCAPDIR(mode);
101         dwc3_writel(dwc->regs, DWC3_GCTL, reg);
102
103         dwc->current_dr_role = mode;
104 }
105
106 static void __dwc3_set_mode(struct work_struct *work)
107 {
108         struct dwc3 *dwc = work_to_dwc(work);
109         unsigned long flags;
110         int ret;
111
112         if (dwc->dr_mode != USB_DR_MODE_OTG)
113                 return;
114
115         if (dwc->current_dr_role == DWC3_GCTL_PRTCAP_OTG)
116                 dwc3_otg_update(dwc, 0);
117
118         if (!dwc->desired_dr_role)
119                 return;
120
121         if (dwc->desired_dr_role == dwc->current_dr_role)
122                 return;
123
124         if (dwc->desired_dr_role == DWC3_GCTL_PRTCAP_OTG && dwc->edev)
125                 return;
126
127         switch (dwc->current_dr_role) {
128         case DWC3_GCTL_PRTCAP_HOST:
129                 dwc3_host_exit(dwc);
130                 break;
131         case DWC3_GCTL_PRTCAP_DEVICE:
132                 dwc3_gadget_exit(dwc);
133                 dwc3_event_buffers_cleanup(dwc);
134                 break;
135         case DWC3_GCTL_PRTCAP_OTG:
136                 dwc3_otg_exit(dwc);
137                 spin_lock_irqsave(&dwc->lock, flags);
138                 dwc->desired_otg_role = DWC3_OTG_ROLE_IDLE;
139                 spin_unlock_irqrestore(&dwc->lock, flags);
140                 dwc3_otg_update(dwc, 1);
141                 break;
142         default:
143                 break;
144         }
145
146         spin_lock_irqsave(&dwc->lock, flags);
147
148         dwc3_set_prtcap(dwc, dwc->desired_dr_role);
149
150         spin_unlock_irqrestore(&dwc->lock, flags);
151
152         switch (dwc->desired_dr_role) {
153         case DWC3_GCTL_PRTCAP_HOST:
154                 ret = dwc3_host_init(dwc);
155                 if (ret) {
156                         dev_err(dwc->dev, "failed to initialize host\n");
157                 } else {
158                         if (dwc->usb2_phy)
159                                 otg_set_vbus(dwc->usb2_phy->otg, true);
160                         phy_set_mode(dwc->usb2_generic_phy, PHY_MODE_USB_HOST);
161                         phy_set_mode(dwc->usb3_generic_phy, PHY_MODE_USB_HOST);
162                         phy_calibrate(dwc->usb2_generic_phy);
163                 }
164                 break;
165         case DWC3_GCTL_PRTCAP_DEVICE:
166                 dwc3_event_buffers_setup(dwc);
167
168                 if (dwc->usb2_phy)
169                         otg_set_vbus(dwc->usb2_phy->otg, false);
170                 phy_set_mode(dwc->usb2_generic_phy, PHY_MODE_USB_DEVICE);
171                 phy_set_mode(dwc->usb3_generic_phy, PHY_MODE_USB_DEVICE);
172
173                 ret = dwc3_gadget_init(dwc);
174                 if (ret)
175                         dev_err(dwc->dev, "failed to initialize peripheral\n");
176                 break;
177         case DWC3_GCTL_PRTCAP_OTG:
178                 dwc3_otg_init(dwc);
179                 dwc3_otg_update(dwc, 0);
180                 break;
181         default:
182                 break;
183         }
184
185 }
186
187 void dwc3_set_mode(struct dwc3 *dwc, u32 mode)
188 {
189         unsigned long flags;
190
191         spin_lock_irqsave(&dwc->lock, flags);
192         dwc->desired_dr_role = mode;
193         spin_unlock_irqrestore(&dwc->lock, flags);
194
195         queue_work(system_freezable_wq, &dwc->drd_work);
196 }
197
198 u32 dwc3_core_fifo_space(struct dwc3_ep *dep, u8 type)
199 {
200         struct dwc3             *dwc = dep->dwc;
201         u32                     reg;
202
203         dwc3_writel(dwc->regs, DWC3_GDBGFIFOSPACE,
204                         DWC3_GDBGFIFOSPACE_NUM(dep->number) |
205                         DWC3_GDBGFIFOSPACE_TYPE(type));
206
207         reg = dwc3_readl(dwc->regs, DWC3_GDBGFIFOSPACE);
208
209         return DWC3_GDBGFIFOSPACE_SPACE_AVAILABLE(reg);
210 }
211
212 /**
213  * dwc3_core_soft_reset - Issues core soft reset and PHY reset
214  * @dwc: pointer to our context structure
215  */
216 static int dwc3_core_soft_reset(struct dwc3 *dwc)
217 {
218         u32             reg;
219         int             retries = 1000;
220         int             ret;
221
222         usb_phy_init(dwc->usb2_phy);
223         usb_phy_init(dwc->usb3_phy);
224         ret = phy_init(dwc->usb2_generic_phy);
225         if (ret < 0)
226                 return ret;
227
228         ret = phy_init(dwc->usb3_generic_phy);
229         if (ret < 0) {
230                 phy_exit(dwc->usb2_generic_phy);
231                 return ret;
232         }
233
234         /*
235          * We're resetting only the device side because, if we're in host mode,
236          * XHCI driver will reset the host block. If dwc3 was configured for
237          * host-only mode, then we can return early.
238          */
239         if (dwc->current_dr_role == DWC3_GCTL_PRTCAP_HOST)
240                 return 0;
241
242         reg = dwc3_readl(dwc->regs, DWC3_DCTL);
243         reg |= DWC3_DCTL_CSFTRST;
244         dwc3_writel(dwc->regs, DWC3_DCTL, reg);
245
246         do {
247                 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
248                 if (!(reg & DWC3_DCTL_CSFTRST))
249                         goto done;
250
251                 udelay(1);
252         } while (--retries);
253
254         phy_exit(dwc->usb3_generic_phy);
255         phy_exit(dwc->usb2_generic_phy);
256
257         return -ETIMEDOUT;
258
259 done:
260         /*
261          * For DWC_usb31 controller, once DWC3_DCTL_CSFTRST bit is cleared,
262          * we must wait at least 50ms before accessing the PHY domain
263          * (synchronization delay). DWC_usb31 programming guide section 1.3.2.
264          */
265         if (dwc3_is_usb31(dwc))
266                 msleep(50);
267
268         return 0;
269 }
270
271 static const struct clk_bulk_data dwc3_core_clks[] = {
272         { .id = "ref" },
273         { .id = "bus_early" },
274         { .id = "suspend" },
275 };
276
277 /*
278  * dwc3_frame_length_adjustment - Adjusts frame length if required
279  * @dwc3: Pointer to our controller context structure
280  */
281 static void dwc3_frame_length_adjustment(struct dwc3 *dwc)
282 {
283         u32 reg;
284         u32 dft;
285
286         if (dwc->revision < DWC3_REVISION_250A)
287                 return;
288
289         if (dwc->fladj == 0)
290                 return;
291
292         reg = dwc3_readl(dwc->regs, DWC3_GFLADJ);
293         dft = reg & DWC3_GFLADJ_30MHZ_MASK;
294         if (!dev_WARN_ONCE(dwc->dev, dft == dwc->fladj,
295             "request value same as default, ignoring\n")) {
296                 reg &= ~DWC3_GFLADJ_30MHZ_MASK;
297                 reg |= DWC3_GFLADJ_30MHZ_SDBND_SEL | dwc->fladj;
298                 dwc3_writel(dwc->regs, DWC3_GFLADJ, reg);
299         }
300 }
301
302 /**
303  * dwc3_free_one_event_buffer - Frees one event buffer
304  * @dwc: Pointer to our controller context structure
305  * @evt: Pointer to event buffer to be freed
306  */
307 static void dwc3_free_one_event_buffer(struct dwc3 *dwc,
308                 struct dwc3_event_buffer *evt)
309 {
310         dma_free_coherent(dwc->sysdev, evt->length, evt->buf, evt->dma);
311 }
312
313 /**
314  * dwc3_alloc_one_event_buffer - Allocates one event buffer structure
315  * @dwc: Pointer to our controller context structure
316  * @length: size of the event buffer
317  *
318  * Returns a pointer to the allocated event buffer structure on success
319  * otherwise ERR_PTR(errno).
320  */
321 static struct dwc3_event_buffer *dwc3_alloc_one_event_buffer(struct dwc3 *dwc,
322                 unsigned length)
323 {
324         struct dwc3_event_buffer        *evt;
325
326         evt = devm_kzalloc(dwc->dev, sizeof(*evt), GFP_KERNEL);
327         if (!evt)
328                 return ERR_PTR(-ENOMEM);
329
330         evt->dwc        = dwc;
331         evt->length     = length;
332         evt->cache      = devm_kzalloc(dwc->dev, length, GFP_KERNEL);
333         if (!evt->cache)
334                 return ERR_PTR(-ENOMEM);
335
336         evt->buf        = dma_alloc_coherent(dwc->sysdev, length,
337                         &evt->dma, GFP_KERNEL);
338         if (!evt->buf)
339                 return ERR_PTR(-ENOMEM);
340
341         return evt;
342 }
343
344 /**
345  * dwc3_free_event_buffers - frees all allocated event buffers
346  * @dwc: Pointer to our controller context structure
347  */
348 static void dwc3_free_event_buffers(struct dwc3 *dwc)
349 {
350         struct dwc3_event_buffer        *evt;
351
352         evt = dwc->ev_buf;
353         if (evt)
354                 dwc3_free_one_event_buffer(dwc, evt);
355 }
356
357 /**
358  * dwc3_alloc_event_buffers - Allocates @num event buffers of size @length
359  * @dwc: pointer to our controller context structure
360  * @length: size of event buffer
361  *
362  * Returns 0 on success otherwise negative errno. In the error case, dwc
363  * may contain some buffers allocated but not all which were requested.
364  */
365 static int dwc3_alloc_event_buffers(struct dwc3 *dwc, unsigned length)
366 {
367         struct dwc3_event_buffer *evt;
368
369         evt = dwc3_alloc_one_event_buffer(dwc, length);
370         if (IS_ERR(evt)) {
371                 dev_err(dwc->dev, "can't allocate event buffer\n");
372                 return PTR_ERR(evt);
373         }
374         dwc->ev_buf = evt;
375
376         return 0;
377 }
378
379 /**
380  * dwc3_event_buffers_setup - setup our allocated event buffers
381  * @dwc: pointer to our controller context structure
382  *
383  * Returns 0 on success otherwise negative errno.
384  */
385 int dwc3_event_buffers_setup(struct dwc3 *dwc)
386 {
387         struct dwc3_event_buffer        *evt;
388
389         evt = dwc->ev_buf;
390         evt->lpos = 0;
391         dwc3_writel(dwc->regs, DWC3_GEVNTADRLO(0),
392                         lower_32_bits(evt->dma));
393         dwc3_writel(dwc->regs, DWC3_GEVNTADRHI(0),
394                         upper_32_bits(evt->dma));
395         dwc3_writel(dwc->regs, DWC3_GEVNTSIZ(0),
396                         DWC3_GEVNTSIZ_SIZE(evt->length));
397         dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(0), 0);
398
399         return 0;
400 }
401
402 void dwc3_event_buffers_cleanup(struct dwc3 *dwc)
403 {
404         struct dwc3_event_buffer        *evt;
405
406         evt = dwc->ev_buf;
407
408         evt->lpos = 0;
409
410         dwc3_writel(dwc->regs, DWC3_GEVNTADRLO(0), 0);
411         dwc3_writel(dwc->regs, DWC3_GEVNTADRHI(0), 0);
412         dwc3_writel(dwc->regs, DWC3_GEVNTSIZ(0), DWC3_GEVNTSIZ_INTMASK
413                         | DWC3_GEVNTSIZ_SIZE(0));
414         dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(0), 0);
415 }
416
417 static int dwc3_alloc_scratch_buffers(struct dwc3 *dwc)
418 {
419         if (!dwc->has_hibernation)
420                 return 0;
421
422         if (!dwc->nr_scratch)
423                 return 0;
424
425         dwc->scratchbuf = kmalloc_array(dwc->nr_scratch,
426                         DWC3_SCRATCHBUF_SIZE, GFP_KERNEL);
427         if (!dwc->scratchbuf)
428                 return -ENOMEM;
429
430         return 0;
431 }
432
433 static int dwc3_setup_scratch_buffers(struct dwc3 *dwc)
434 {
435         dma_addr_t scratch_addr;
436         u32 param;
437         int ret;
438
439         if (!dwc->has_hibernation)
440                 return 0;
441
442         if (!dwc->nr_scratch)
443                 return 0;
444
445          /* should never fall here */
446         if (!WARN_ON(dwc->scratchbuf))
447                 return 0;
448
449         scratch_addr = dma_map_single(dwc->sysdev, dwc->scratchbuf,
450                         dwc->nr_scratch * DWC3_SCRATCHBUF_SIZE,
451                         DMA_BIDIRECTIONAL);
452         if (dma_mapping_error(dwc->sysdev, scratch_addr)) {
453                 dev_err(dwc->sysdev, "failed to map scratch buffer\n");
454                 ret = -EFAULT;
455                 goto err0;
456         }
457
458         dwc->scratch_addr = scratch_addr;
459
460         param = lower_32_bits(scratch_addr);
461
462         ret = dwc3_send_gadget_generic_command(dwc,
463                         DWC3_DGCMD_SET_SCRATCHPAD_ADDR_LO, param);
464         if (ret < 0)
465                 goto err1;
466
467         param = upper_32_bits(scratch_addr);
468
469         ret = dwc3_send_gadget_generic_command(dwc,
470                         DWC3_DGCMD_SET_SCRATCHPAD_ADDR_HI, param);
471         if (ret < 0)
472                 goto err1;
473
474         return 0;
475
476 err1:
477         dma_unmap_single(dwc->sysdev, dwc->scratch_addr, dwc->nr_scratch *
478                         DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
479
480 err0:
481         return ret;
482 }
483
484 static void dwc3_free_scratch_buffers(struct dwc3 *dwc)
485 {
486         if (!dwc->has_hibernation)
487                 return;
488
489         if (!dwc->nr_scratch)
490                 return;
491
492          /* should never fall here */
493         if (!WARN_ON(dwc->scratchbuf))
494                 return;
495
496         dma_unmap_single(dwc->sysdev, dwc->scratch_addr, dwc->nr_scratch *
497                         DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
498         kfree(dwc->scratchbuf);
499 }
500
501 static void dwc3_core_num_eps(struct dwc3 *dwc)
502 {
503         struct dwc3_hwparams    *parms = &dwc->hwparams;
504
505         dwc->num_eps = DWC3_NUM_EPS(parms);
506 }
507
508 static void dwc3_cache_hwparams(struct dwc3 *dwc)
509 {
510         struct dwc3_hwparams    *parms = &dwc->hwparams;
511
512         parms->hwparams0 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS0);
513         parms->hwparams1 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS1);
514         parms->hwparams2 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS2);
515         parms->hwparams3 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS3);
516         parms->hwparams4 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS4);
517         parms->hwparams5 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS5);
518         parms->hwparams6 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS6);
519         parms->hwparams7 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS7);
520         parms->hwparams8 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS8);
521 }
522
523 static int dwc3_core_ulpi_init(struct dwc3 *dwc)
524 {
525         int intf;
526         int ret = 0;
527
528         intf = DWC3_GHWPARAMS3_HSPHY_IFC(dwc->hwparams.hwparams3);
529
530         if (intf == DWC3_GHWPARAMS3_HSPHY_IFC_ULPI ||
531             (intf == DWC3_GHWPARAMS3_HSPHY_IFC_UTMI_ULPI &&
532              dwc->hsphy_interface &&
533              !strncmp(dwc->hsphy_interface, "ulpi", 4)))
534                 ret = dwc3_ulpi_init(dwc);
535
536         return ret;
537 }
538
539 /**
540  * dwc3_phy_setup - Configure USB PHY Interface of DWC3 Core
541  * @dwc: Pointer to our controller context structure
542  *
543  * Returns 0 on success. The USB PHY interfaces are configured but not
544  * initialized. The PHY interfaces and the PHYs get initialized together with
545  * the core in dwc3_core_init.
546  */
547 static int dwc3_phy_setup(struct dwc3 *dwc)
548 {
549         u32 reg;
550
551         reg = dwc3_readl(dwc->regs, DWC3_GUSB3PIPECTL(0));
552
553         /*
554          * Make sure UX_EXIT_PX is cleared as that causes issues with some
555          * PHYs. Also, this bit is not supposed to be used in normal operation.
556          */
557         reg &= ~DWC3_GUSB3PIPECTL_UX_EXIT_PX;
558
559         /*
560          * Above 1.94a, it is recommended to set DWC3_GUSB3PIPECTL_SUSPHY
561          * to '0' during coreConsultant configuration. So default value
562          * will be '0' when the core is reset. Application needs to set it
563          * to '1' after the core initialization is completed.
564          */
565         if (dwc->revision > DWC3_REVISION_194A)
566                 reg |= DWC3_GUSB3PIPECTL_SUSPHY;
567
568         if (dwc->u2ss_inp3_quirk)
569                 reg |= DWC3_GUSB3PIPECTL_U2SSINP3OK;
570
571         if (dwc->dis_rxdet_inp3_quirk)
572                 reg |= DWC3_GUSB3PIPECTL_DISRXDETINP3;
573
574         if (dwc->req_p1p2p3_quirk)
575                 reg |= DWC3_GUSB3PIPECTL_REQP1P2P3;
576
577         if (dwc->del_p1p2p3_quirk)
578                 reg |= DWC3_GUSB3PIPECTL_DEP1P2P3_EN;
579
580         if (dwc->del_phy_power_chg_quirk)
581                 reg |= DWC3_GUSB3PIPECTL_DEPOCHANGE;
582
583         if (dwc->lfps_filter_quirk)
584                 reg |= DWC3_GUSB3PIPECTL_LFPSFILT;
585
586         if (dwc->rx_detect_poll_quirk)
587                 reg |= DWC3_GUSB3PIPECTL_RX_DETOPOLL;
588
589         if (dwc->tx_de_emphasis_quirk)
590                 reg |= DWC3_GUSB3PIPECTL_TX_DEEPH(dwc->tx_de_emphasis);
591
592         if (dwc->dis_u3_susphy_quirk)
593                 reg &= ~DWC3_GUSB3PIPECTL_SUSPHY;
594
595         if (dwc->dis_del_phy_power_chg_quirk)
596                 reg &= ~DWC3_GUSB3PIPECTL_DEPOCHANGE;
597
598         dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
599
600         reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0));
601
602         /* Select the HS PHY interface */
603         switch (DWC3_GHWPARAMS3_HSPHY_IFC(dwc->hwparams.hwparams3)) {
604         case DWC3_GHWPARAMS3_HSPHY_IFC_UTMI_ULPI:
605                 if (dwc->hsphy_interface &&
606                                 !strncmp(dwc->hsphy_interface, "utmi", 4)) {
607                         reg &= ~DWC3_GUSB2PHYCFG_ULPI_UTMI;
608                         break;
609                 } else if (dwc->hsphy_interface &&
610                                 !strncmp(dwc->hsphy_interface, "ulpi", 4)) {
611                         reg |= DWC3_GUSB2PHYCFG_ULPI_UTMI;
612                         dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg);
613                 } else {
614                         /* Relying on default value. */
615                         if (!(reg & DWC3_GUSB2PHYCFG_ULPI_UTMI))
616                                 break;
617                 }
618                 /* FALLTHROUGH */
619         case DWC3_GHWPARAMS3_HSPHY_IFC_ULPI:
620                 /* FALLTHROUGH */
621         default:
622                 break;
623         }
624
625         switch (dwc->hsphy_mode) {
626         case USBPHY_INTERFACE_MODE_UTMI:
627                 reg &= ~(DWC3_GUSB2PHYCFG_PHYIF_MASK |
628                        DWC3_GUSB2PHYCFG_USBTRDTIM_MASK);
629                 reg |= DWC3_GUSB2PHYCFG_PHYIF(UTMI_PHYIF_8_BIT) |
630                        DWC3_GUSB2PHYCFG_USBTRDTIM(USBTRDTIM_UTMI_8_BIT);
631                 break;
632         case USBPHY_INTERFACE_MODE_UTMIW:
633                 reg &= ~(DWC3_GUSB2PHYCFG_PHYIF_MASK |
634                        DWC3_GUSB2PHYCFG_USBTRDTIM_MASK);
635                 reg |= DWC3_GUSB2PHYCFG_PHYIF(UTMI_PHYIF_16_BIT) |
636                        DWC3_GUSB2PHYCFG_USBTRDTIM(USBTRDTIM_UTMI_16_BIT);
637                 break;
638         default:
639                 break;
640         }
641
642         /*
643          * Above 1.94a, it is recommended to set DWC3_GUSB2PHYCFG_SUSPHY to
644          * '0' during coreConsultant configuration. So default value will
645          * be '0' when the core is reset. Application needs to set it to
646          * '1' after the core initialization is completed.
647          */
648         if (dwc->revision > DWC3_REVISION_194A)
649                 reg |= DWC3_GUSB2PHYCFG_SUSPHY;
650
651         if (dwc->dis_u2_susphy_quirk)
652                 reg &= ~DWC3_GUSB2PHYCFG_SUSPHY;
653
654         if (dwc->dis_enblslpm_quirk)
655                 reg &= ~DWC3_GUSB2PHYCFG_ENBLSLPM;
656
657         if (dwc->dis_u2_freeclk_exists_quirk)
658                 reg &= ~DWC3_GUSB2PHYCFG_U2_FREECLK_EXISTS;
659
660         dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg);
661
662         return 0;
663 }
664
665 static void dwc3_core_exit(struct dwc3 *dwc)
666 {
667         dwc3_event_buffers_cleanup(dwc);
668
669         usb_phy_shutdown(dwc->usb2_phy);
670         usb_phy_shutdown(dwc->usb3_phy);
671         phy_exit(dwc->usb2_generic_phy);
672         phy_exit(dwc->usb3_generic_phy);
673
674         usb_phy_set_suspend(dwc->usb2_phy, 1);
675         usb_phy_set_suspend(dwc->usb3_phy, 1);
676         phy_power_off(dwc->usb2_generic_phy);
677         phy_power_off(dwc->usb3_generic_phy);
678         clk_bulk_disable(dwc->num_clks, dwc->clks);
679         clk_bulk_unprepare(dwc->num_clks, dwc->clks);
680         reset_control_assert(dwc->reset);
681 }
682
683 static bool dwc3_core_is_valid(struct dwc3 *dwc)
684 {
685         u32 reg;
686
687         reg = dwc3_readl(dwc->regs, DWC3_GSNPSID);
688
689         /* This should read as U3 followed by revision number */
690         if ((reg & DWC3_GSNPSID_MASK) == 0x55330000) {
691                 /* Detected DWC_usb3 IP */
692                 dwc->revision = reg;
693         } else if ((reg & DWC3_GSNPSID_MASK) == 0x33310000) {
694                 /* Detected DWC_usb31 IP */
695                 dwc->revision = dwc3_readl(dwc->regs, DWC3_VER_NUMBER);
696                 dwc->revision |= DWC3_REVISION_IS_DWC31;
697         } else {
698                 return false;
699         }
700
701         return true;
702 }
703
704 static void dwc3_core_setup_global_control(struct dwc3 *dwc)
705 {
706         u32 hwparams4 = dwc->hwparams.hwparams4;
707         u32 reg;
708
709         reg = dwc3_readl(dwc->regs, DWC3_GCTL);
710         reg &= ~DWC3_GCTL_SCALEDOWN_MASK;
711
712         switch (DWC3_GHWPARAMS1_EN_PWROPT(dwc->hwparams.hwparams1)) {
713         case DWC3_GHWPARAMS1_EN_PWROPT_CLK:
714                 /**
715                  * WORKAROUND: DWC3 revisions between 2.10a and 2.50a have an
716                  * issue which would cause xHCI compliance tests to fail.
717                  *
718                  * Because of that we cannot enable clock gating on such
719                  * configurations.
720                  *
721                  * Refers to:
722                  *
723                  * STAR#9000588375: Clock Gating, SOF Issues when ref_clk-Based
724                  * SOF/ITP Mode Used
725                  */
726                 if ((dwc->dr_mode == USB_DR_MODE_HOST ||
727                                 dwc->dr_mode == USB_DR_MODE_OTG) &&
728                                 (dwc->revision >= DWC3_REVISION_210A &&
729                                 dwc->revision <= DWC3_REVISION_250A))
730                         reg |= DWC3_GCTL_DSBLCLKGTNG | DWC3_GCTL_SOFITPSYNC;
731                 else
732                         reg &= ~DWC3_GCTL_DSBLCLKGTNG;
733                 break;
734         case DWC3_GHWPARAMS1_EN_PWROPT_HIB:
735                 /* enable hibernation here */
736                 dwc->nr_scratch = DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(hwparams4);
737
738                 /*
739                  * REVISIT Enabling this bit so that host-mode hibernation
740                  * will work. Device-mode hibernation is not yet implemented.
741                  */
742                 reg |= DWC3_GCTL_GBLHIBERNATIONEN;
743                 break;
744         default:
745                 /* nothing */
746                 break;
747         }
748
749         /* check if current dwc3 is on simulation board */
750         if (dwc->hwparams.hwparams6 & DWC3_GHWPARAMS6_EN_FPGA) {
751                 dev_info(dwc->dev, "Running with FPGA optmizations\n");
752                 dwc->is_fpga = true;
753         }
754
755         WARN_ONCE(dwc->disable_scramble_quirk && !dwc->is_fpga,
756                         "disable_scramble cannot be used on non-FPGA builds\n");
757
758         if (dwc->disable_scramble_quirk && dwc->is_fpga)
759                 reg |= DWC3_GCTL_DISSCRAMBLE;
760         else
761                 reg &= ~DWC3_GCTL_DISSCRAMBLE;
762
763         if (dwc->u2exit_lfps_quirk)
764                 reg |= DWC3_GCTL_U2EXIT_LFPS;
765
766         /*
767          * WORKAROUND: DWC3 revisions <1.90a have a bug
768          * where the device can fail to connect at SuperSpeed
769          * and falls back to high-speed mode which causes
770          * the device to enter a Connect/Disconnect loop
771          */
772         if (dwc->revision < DWC3_REVISION_190A)
773                 reg |= DWC3_GCTL_U2RSTECN;
774
775         dwc3_writel(dwc->regs, DWC3_GCTL, reg);
776 }
777
778 static int dwc3_core_get_phy(struct dwc3 *dwc);
779 static int dwc3_core_ulpi_init(struct dwc3 *dwc);
780
781 /**
782  * dwc3_core_init - Low-level initialization of DWC3 Core
783  * @dwc: Pointer to our controller context structure
784  *
785  * Returns 0 on success otherwise negative errno.
786  */
787 static int dwc3_core_init(struct dwc3 *dwc)
788 {
789         u32                     reg;
790         int                     ret;
791
792         if (!dwc3_core_is_valid(dwc)) {
793                 dev_err(dwc->dev, "this is not a DesignWare USB3 DRD Core\n");
794                 ret = -ENODEV;
795                 goto err0;
796         }
797
798         /*
799          * Write Linux Version Code to our GUID register so it's easy to figure
800          * out which kernel version a bug was found.
801          */
802         dwc3_writel(dwc->regs, DWC3_GUID, LINUX_VERSION_CODE);
803
804         /* Handle USB2.0-only core configuration */
805         if (DWC3_GHWPARAMS3_SSPHY_IFC(dwc->hwparams.hwparams3) ==
806                         DWC3_GHWPARAMS3_SSPHY_IFC_DIS) {
807                 if (dwc->maximum_speed == USB_SPEED_SUPER)
808                         dwc->maximum_speed = USB_SPEED_HIGH;
809         }
810
811         ret = dwc3_phy_setup(dwc);
812         if (ret)
813                 goto err0;
814
815         if (!dwc->ulpi_ready) {
816                 ret = dwc3_core_ulpi_init(dwc);
817                 if (ret)
818                         goto err0;
819                 dwc->ulpi_ready = true;
820         }
821
822         if (!dwc->phys_ready) {
823                 ret = dwc3_core_get_phy(dwc);
824                 if (ret)
825                         goto err0a;
826                 dwc->phys_ready = true;
827         }
828
829         ret = dwc3_core_soft_reset(dwc);
830         if (ret)
831                 goto err0a;
832
833         dwc3_core_setup_global_control(dwc);
834         dwc3_core_num_eps(dwc);
835
836         ret = dwc3_setup_scratch_buffers(dwc);
837         if (ret)
838                 goto err1;
839
840         /* Adjust Frame Length */
841         dwc3_frame_length_adjustment(dwc);
842
843         usb_phy_set_suspend(dwc->usb2_phy, 0);
844         usb_phy_set_suspend(dwc->usb3_phy, 0);
845         ret = phy_power_on(dwc->usb2_generic_phy);
846         if (ret < 0)
847                 goto err2;
848
849         ret = phy_power_on(dwc->usb3_generic_phy);
850         if (ret < 0)
851                 goto err3;
852
853         ret = dwc3_event_buffers_setup(dwc);
854         if (ret) {
855                 dev_err(dwc->dev, "failed to setup event buffers\n");
856                 goto err4;
857         }
858
859         /*
860          * ENDXFER polling is available on version 3.10a and later of
861          * the DWC_usb3 controller. It is NOT available in the
862          * DWC_usb31 controller.
863          */
864         if (!dwc3_is_usb31(dwc) && dwc->revision >= DWC3_REVISION_310A) {
865                 reg = dwc3_readl(dwc->regs, DWC3_GUCTL2);
866                 reg |= DWC3_GUCTL2_RST_ACTBITLATER;
867                 dwc3_writel(dwc->regs, DWC3_GUCTL2, reg);
868         }
869
870         if (dwc->revision >= DWC3_REVISION_250A) {
871                 reg = dwc3_readl(dwc->regs, DWC3_GUCTL1);
872
873                 /*
874                  * Enable hardware control of sending remote wakeup
875                  * in HS when the device is in the L1 state.
876                  */
877                 if (dwc->revision >= DWC3_REVISION_290A)
878                         reg |= DWC3_GUCTL1_DEV_L1_EXIT_BY_HW;
879
880                 if (dwc->dis_tx_ipgap_linecheck_quirk)
881                         reg |= DWC3_GUCTL1_TX_IPGAP_LINECHECK_DIS;
882
883                 dwc3_writel(dwc->regs, DWC3_GUCTL1, reg);
884         }
885
886         /*
887          * Must config both number of packets and max burst settings to enable
888          * RX and/or TX threshold.
889          */
890         if (dwc3_is_usb31(dwc) && dwc->dr_mode == USB_DR_MODE_HOST) {
891                 u8 rx_thr_num = dwc->rx_thr_num_pkt_prd;
892                 u8 rx_maxburst = dwc->rx_max_burst_prd;
893                 u8 tx_thr_num = dwc->tx_thr_num_pkt_prd;
894                 u8 tx_maxburst = dwc->tx_max_burst_prd;
895
896                 if (rx_thr_num && rx_maxburst) {
897                         reg = dwc3_readl(dwc->regs, DWC3_GRXTHRCFG);
898                         reg |= DWC31_RXTHRNUMPKTSEL_PRD;
899
900                         reg &= ~DWC31_RXTHRNUMPKT_PRD(~0);
901                         reg |= DWC31_RXTHRNUMPKT_PRD(rx_thr_num);
902
903                         reg &= ~DWC31_MAXRXBURSTSIZE_PRD(~0);
904                         reg |= DWC31_MAXRXBURSTSIZE_PRD(rx_maxburst);
905
906                         dwc3_writel(dwc->regs, DWC3_GRXTHRCFG, reg);
907                 }
908
909                 if (tx_thr_num && tx_maxburst) {
910                         reg = dwc3_readl(dwc->regs, DWC3_GTXTHRCFG);
911                         reg |= DWC31_TXTHRNUMPKTSEL_PRD;
912
913                         reg &= ~DWC31_TXTHRNUMPKT_PRD(~0);
914                         reg |= DWC31_TXTHRNUMPKT_PRD(tx_thr_num);
915
916                         reg &= ~DWC31_MAXTXBURSTSIZE_PRD(~0);
917                         reg |= DWC31_MAXTXBURSTSIZE_PRD(tx_maxburst);
918
919                         dwc3_writel(dwc->regs, DWC3_GTXTHRCFG, reg);
920                 }
921         }
922
923         return 0;
924
925 err4:
926         phy_power_off(dwc->usb3_generic_phy);
927
928 err3:
929         phy_power_off(dwc->usb2_generic_phy);
930
931 err2:
932         usb_phy_set_suspend(dwc->usb2_phy, 1);
933         usb_phy_set_suspend(dwc->usb3_phy, 1);
934
935 err1:
936         usb_phy_shutdown(dwc->usb2_phy);
937         usb_phy_shutdown(dwc->usb3_phy);
938         phy_exit(dwc->usb2_generic_phy);
939         phy_exit(dwc->usb3_generic_phy);
940
941 err0a:
942         dwc3_ulpi_exit(dwc);
943
944 err0:
945         return ret;
946 }
947
948 static int dwc3_core_get_phy(struct dwc3 *dwc)
949 {
950         struct device           *dev = dwc->dev;
951         struct device_node      *node = dev->of_node;
952         int ret;
953
954         if (node) {
955                 dwc->usb2_phy = devm_usb_get_phy_by_phandle(dev, "usb-phy", 0);
956                 dwc->usb3_phy = devm_usb_get_phy_by_phandle(dev, "usb-phy", 1);
957         } else {
958                 dwc->usb2_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
959                 dwc->usb3_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB3);
960         }
961
962         if (IS_ERR(dwc->usb2_phy)) {
963                 ret = PTR_ERR(dwc->usb2_phy);
964                 if (ret == -ENXIO || ret == -ENODEV) {
965                         dwc->usb2_phy = NULL;
966                 } else if (ret == -EPROBE_DEFER) {
967                         return ret;
968                 } else {
969                         dev_err(dev, "no usb2 phy configured\n");
970                         return ret;
971                 }
972         }
973
974         if (IS_ERR(dwc->usb3_phy)) {
975                 ret = PTR_ERR(dwc->usb3_phy);
976                 if (ret == -ENXIO || ret == -ENODEV) {
977                         dwc->usb3_phy = NULL;
978                 } else if (ret == -EPROBE_DEFER) {
979                         return ret;
980                 } else {
981                         dev_err(dev, "no usb3 phy configured\n");
982                         return ret;
983                 }
984         }
985
986         dwc->usb2_generic_phy = devm_phy_get(dev, "usb2-phy");
987         if (IS_ERR(dwc->usb2_generic_phy)) {
988                 ret = PTR_ERR(dwc->usb2_generic_phy);
989                 if (ret == -ENOSYS || ret == -ENODEV) {
990                         dwc->usb2_generic_phy = NULL;
991                 } else if (ret == -EPROBE_DEFER) {
992                         return ret;
993                 } else {
994                         dev_err(dev, "no usb2 phy configured\n");
995                         return ret;
996                 }
997         }
998
999         dwc->usb3_generic_phy = devm_phy_get(dev, "usb3-phy");
1000         if (IS_ERR(dwc->usb3_generic_phy)) {
1001                 ret = PTR_ERR(dwc->usb3_generic_phy);
1002                 if (ret == -ENOSYS || ret == -ENODEV) {
1003                         dwc->usb3_generic_phy = NULL;
1004                 } else if (ret == -EPROBE_DEFER) {
1005                         return ret;
1006                 } else {
1007                         dev_err(dev, "no usb3 phy configured\n");
1008                         return ret;
1009                 }
1010         }
1011
1012         return 0;
1013 }
1014
1015 static int dwc3_core_init_mode(struct dwc3 *dwc)
1016 {
1017         struct device *dev = dwc->dev;
1018         int ret;
1019
1020         switch (dwc->dr_mode) {
1021         case USB_DR_MODE_PERIPHERAL:
1022                 dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_DEVICE);
1023
1024                 if (dwc->usb2_phy)
1025                         otg_set_vbus(dwc->usb2_phy->otg, false);
1026                 phy_set_mode(dwc->usb2_generic_phy, PHY_MODE_USB_DEVICE);
1027                 phy_set_mode(dwc->usb3_generic_phy, PHY_MODE_USB_DEVICE);
1028
1029                 ret = dwc3_gadget_init(dwc);
1030                 if (ret) {
1031                         if (ret != -EPROBE_DEFER)
1032                                 dev_err(dev, "failed to initialize gadget\n");
1033                         return ret;
1034                 }
1035                 break;
1036         case USB_DR_MODE_HOST:
1037                 dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_HOST);
1038
1039                 if (dwc->usb2_phy)
1040                         otg_set_vbus(dwc->usb2_phy->otg, true);
1041                 phy_set_mode(dwc->usb2_generic_phy, PHY_MODE_USB_HOST);
1042                 phy_set_mode(dwc->usb3_generic_phy, PHY_MODE_USB_HOST);
1043
1044                 ret = dwc3_host_init(dwc);
1045                 if (ret) {
1046                         if (ret != -EPROBE_DEFER)
1047                                 dev_err(dev, "failed to initialize host\n");
1048                         return ret;
1049                 }
1050                 phy_calibrate(dwc->usb2_generic_phy);
1051                 break;
1052         case USB_DR_MODE_OTG:
1053                 INIT_WORK(&dwc->drd_work, __dwc3_set_mode);
1054                 ret = dwc3_drd_init(dwc);
1055                 if (ret) {
1056                         if (ret != -EPROBE_DEFER)
1057                                 dev_err(dev, "failed to initialize dual-role\n");
1058                         return ret;
1059                 }
1060                 break;
1061         default:
1062                 dev_err(dev, "Unsupported mode of operation %d\n", dwc->dr_mode);
1063                 return -EINVAL;
1064         }
1065
1066         return 0;
1067 }
1068
1069 static void dwc3_core_exit_mode(struct dwc3 *dwc)
1070 {
1071         switch (dwc->dr_mode) {
1072         case USB_DR_MODE_PERIPHERAL:
1073                 dwc3_gadget_exit(dwc);
1074                 break;
1075         case USB_DR_MODE_HOST:
1076                 dwc3_host_exit(dwc);
1077                 break;
1078         case USB_DR_MODE_OTG:
1079                 dwc3_drd_exit(dwc);
1080                 break;
1081         default:
1082                 /* do nothing */
1083                 break;
1084         }
1085 }
1086
1087 static void dwc3_get_properties(struct dwc3 *dwc)
1088 {
1089         struct device           *dev = dwc->dev;
1090         u8                      lpm_nyet_threshold;
1091         u8                      tx_de_emphasis;
1092         u8                      hird_threshold;
1093         u8                      rx_thr_num_pkt_prd;
1094         u8                      rx_max_burst_prd;
1095         u8                      tx_thr_num_pkt_prd;
1096         u8                      tx_max_burst_prd;
1097
1098         /* default to highest possible threshold */
1099         lpm_nyet_threshold = 0xff;
1100
1101         /* default to -3.5dB de-emphasis */
1102         tx_de_emphasis = 1;
1103
1104         /*
1105          * default to assert utmi_sleep_n and use maximum allowed HIRD
1106          * threshold value of 0b1100
1107          */
1108         hird_threshold = 12;
1109
1110         dwc->maximum_speed = usb_get_maximum_speed(dev);
1111         dwc->dr_mode = usb_get_dr_mode(dev);
1112         dwc->hsphy_mode = of_usb_get_phy_mode(dev->of_node);
1113
1114         dwc->sysdev_is_parent = device_property_read_bool(dev,
1115                                 "linux,sysdev_is_parent");
1116         if (dwc->sysdev_is_parent)
1117                 dwc->sysdev = dwc->dev->parent;
1118         else
1119                 dwc->sysdev = dwc->dev;
1120
1121         dwc->has_lpm_erratum = device_property_read_bool(dev,
1122                                 "snps,has-lpm-erratum");
1123         device_property_read_u8(dev, "snps,lpm-nyet-threshold",
1124                                 &lpm_nyet_threshold);
1125         dwc->is_utmi_l1_suspend = device_property_read_bool(dev,
1126                                 "snps,is-utmi-l1-suspend");
1127         device_property_read_u8(dev, "snps,hird-threshold",
1128                                 &hird_threshold);
1129         dwc->usb3_lpm_capable = device_property_read_bool(dev,
1130                                 "snps,usb3_lpm_capable");
1131         device_property_read_u8(dev, "snps,rx-thr-num-pkt-prd",
1132                                 &rx_thr_num_pkt_prd);
1133         device_property_read_u8(dev, "snps,rx-max-burst-prd",
1134                                 &rx_max_burst_prd);
1135         device_property_read_u8(dev, "snps,tx-thr-num-pkt-prd",
1136                                 &tx_thr_num_pkt_prd);
1137         device_property_read_u8(dev, "snps,tx-max-burst-prd",
1138                                 &tx_max_burst_prd);
1139
1140         dwc->disable_scramble_quirk = device_property_read_bool(dev,
1141                                 "snps,disable_scramble_quirk");
1142         dwc->u2exit_lfps_quirk = device_property_read_bool(dev,
1143                                 "snps,u2exit_lfps_quirk");
1144         dwc->u2ss_inp3_quirk = device_property_read_bool(dev,
1145                                 "snps,u2ss_inp3_quirk");
1146         dwc->req_p1p2p3_quirk = device_property_read_bool(dev,
1147                                 "snps,req_p1p2p3_quirk");
1148         dwc->del_p1p2p3_quirk = device_property_read_bool(dev,
1149                                 "snps,del_p1p2p3_quirk");
1150         dwc->del_phy_power_chg_quirk = device_property_read_bool(dev,
1151                                 "snps,del_phy_power_chg_quirk");
1152         dwc->lfps_filter_quirk = device_property_read_bool(dev,
1153                                 "snps,lfps_filter_quirk");
1154         dwc->rx_detect_poll_quirk = device_property_read_bool(dev,
1155                                 "snps,rx_detect_poll_quirk");
1156         dwc->dis_u3_susphy_quirk = device_property_read_bool(dev,
1157                                 "snps,dis_u3_susphy_quirk");
1158         dwc->dis_u2_susphy_quirk = device_property_read_bool(dev,
1159                                 "snps,dis_u2_susphy_quirk");
1160         dwc->dis_enblslpm_quirk = device_property_read_bool(dev,
1161                                 "snps,dis_enblslpm_quirk");
1162         dwc->dis_rxdet_inp3_quirk = device_property_read_bool(dev,
1163                                 "snps,dis_rxdet_inp3_quirk");
1164         dwc->dis_u2_freeclk_exists_quirk = device_property_read_bool(dev,
1165                                 "snps,dis-u2-freeclk-exists-quirk");
1166         dwc->dis_del_phy_power_chg_quirk = device_property_read_bool(dev,
1167                                 "snps,dis-del-phy-power-chg-quirk");
1168         dwc->dis_tx_ipgap_linecheck_quirk = device_property_read_bool(dev,
1169                                 "snps,dis-tx-ipgap-linecheck-quirk");
1170
1171         dwc->tx_de_emphasis_quirk = device_property_read_bool(dev,
1172                                 "snps,tx_de_emphasis_quirk");
1173         device_property_read_u8(dev, "snps,tx_de_emphasis",
1174                                 &tx_de_emphasis);
1175         device_property_read_string(dev, "snps,hsphy_interface",
1176                                     &dwc->hsphy_interface);
1177         device_property_read_u32(dev, "snps,quirk-frame-length-adjustment",
1178                                  &dwc->fladj);
1179
1180         dwc->dis_metastability_quirk = device_property_read_bool(dev,
1181                                 "snps,dis_metastability_quirk");
1182
1183         dwc->lpm_nyet_threshold = lpm_nyet_threshold;
1184         dwc->tx_de_emphasis = tx_de_emphasis;
1185
1186         dwc->hird_threshold = hird_threshold
1187                 | (dwc->is_utmi_l1_suspend << 4);
1188
1189         dwc->rx_thr_num_pkt_prd = rx_thr_num_pkt_prd;
1190         dwc->rx_max_burst_prd = rx_max_burst_prd;
1191
1192         dwc->tx_thr_num_pkt_prd = tx_thr_num_pkt_prd;
1193         dwc->tx_max_burst_prd = tx_max_burst_prd;
1194
1195         dwc->imod_interval = 0;
1196 }
1197
1198 /* check whether the core supports IMOD */
1199 bool dwc3_has_imod(struct dwc3 *dwc)
1200 {
1201         return ((dwc3_is_usb3(dwc) &&
1202                  dwc->revision >= DWC3_REVISION_300A) ||
1203                 (dwc3_is_usb31(dwc) &&
1204                  dwc->revision >= DWC3_USB31_REVISION_120A));
1205 }
1206
1207 static void dwc3_check_params(struct dwc3 *dwc)
1208 {
1209         struct device *dev = dwc->dev;
1210
1211         /* Check for proper value of imod_interval */
1212         if (dwc->imod_interval && !dwc3_has_imod(dwc)) {
1213                 dev_warn(dwc->dev, "Interrupt moderation not supported\n");
1214                 dwc->imod_interval = 0;
1215         }
1216
1217         /*
1218          * Workaround for STAR 9000961433 which affects only version
1219          * 3.00a of the DWC_usb3 core. This prevents the controller
1220          * interrupt from being masked while handling events. IMOD
1221          * allows us to work around this issue. Enable it for the
1222          * affected version.
1223          */
1224         if (!dwc->imod_interval &&
1225             (dwc->revision == DWC3_REVISION_300A))
1226                 dwc->imod_interval = 1;
1227
1228         /* Check the maximum_speed parameter */
1229         switch (dwc->maximum_speed) {
1230         case USB_SPEED_LOW:
1231         case USB_SPEED_FULL:
1232         case USB_SPEED_HIGH:
1233         case USB_SPEED_SUPER:
1234         case USB_SPEED_SUPER_PLUS:
1235                 break;
1236         default:
1237                 dev_err(dev, "invalid maximum_speed parameter %d\n",
1238                         dwc->maximum_speed);
1239                 /* fall through */
1240         case USB_SPEED_UNKNOWN:
1241                 /* default to superspeed */
1242                 dwc->maximum_speed = USB_SPEED_SUPER;
1243
1244                 /*
1245                  * default to superspeed plus if we are capable.
1246                  */
1247                 if (dwc3_is_usb31(dwc) &&
1248                     (DWC3_GHWPARAMS3_SSPHY_IFC(dwc->hwparams.hwparams3) ==
1249                      DWC3_GHWPARAMS3_SSPHY_IFC_GEN2))
1250                         dwc->maximum_speed = USB_SPEED_SUPER_PLUS;
1251
1252                 break;
1253         }
1254 }
1255
1256 static int dwc3_probe(struct platform_device *pdev)
1257 {
1258         struct device           *dev = &pdev->dev;
1259         struct resource         *res, dwc_res;
1260         struct dwc3             *dwc;
1261
1262         int                     ret;
1263
1264         void __iomem            *regs;
1265
1266         dwc = devm_kzalloc(dev, sizeof(*dwc), GFP_KERNEL);
1267         if (!dwc)
1268                 return -ENOMEM;
1269
1270         dwc->clks = devm_kmemdup(dev, dwc3_core_clks, sizeof(dwc3_core_clks),
1271                                  GFP_KERNEL);
1272         if (!dwc->clks)
1273                 return -ENOMEM;
1274
1275         dwc->num_clks = ARRAY_SIZE(dwc3_core_clks);
1276         dwc->dev = dev;
1277
1278         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1279         if (!res) {
1280                 dev_err(dev, "missing memory resource\n");
1281                 return -ENODEV;
1282         }
1283
1284         dwc->xhci_resources[0].start = res->start;
1285         dwc->xhci_resources[0].end = dwc->xhci_resources[0].start +
1286                                         DWC3_XHCI_REGS_END;
1287         dwc->xhci_resources[0].flags = res->flags;
1288         dwc->xhci_resources[0].name = res->name;
1289
1290         /*
1291          * Request memory region but exclude xHCI regs,
1292          * since it will be requested by the xhci-plat driver.
1293          */
1294         dwc_res = *res;
1295         dwc_res.start += DWC3_GLOBALS_REGS_START;
1296
1297         regs = devm_ioremap_resource(dev, &dwc_res);
1298         if (IS_ERR(regs))
1299                 return PTR_ERR(regs);
1300
1301         dwc->regs       = regs;
1302         dwc->regs_size  = resource_size(&dwc_res);
1303
1304         dwc3_get_properties(dwc);
1305
1306         dwc->reset = devm_reset_control_get_optional_shared(dev, NULL);
1307         if (IS_ERR(dwc->reset))
1308                 return PTR_ERR(dwc->reset);
1309
1310         ret = clk_bulk_get(dev, dwc->num_clks, dwc->clks);
1311         if (ret == -EPROBE_DEFER)
1312                 return ret;
1313         /*
1314          * Clocks are optional, but new DT platforms should support all clocks
1315          * as required by the DT-binding.
1316          */
1317         if (ret)
1318                 dwc->num_clks = 0;
1319
1320         ret = reset_control_deassert(dwc->reset);
1321         if (ret)
1322                 goto put_clks;
1323
1324         ret = clk_bulk_prepare(dwc->num_clks, dwc->clks);
1325         if (ret)
1326                 goto assert_reset;
1327
1328         ret = clk_bulk_enable(dwc->num_clks, dwc->clks);
1329         if (ret)
1330                 goto unprepare_clks;
1331
1332         platform_set_drvdata(pdev, dwc);
1333         dwc3_cache_hwparams(dwc);
1334
1335         spin_lock_init(&dwc->lock);
1336
1337         pm_runtime_set_active(dev);
1338         pm_runtime_use_autosuspend(dev);
1339         pm_runtime_set_autosuspend_delay(dev, DWC3_DEFAULT_AUTOSUSPEND_DELAY);
1340         pm_runtime_enable(dev);
1341         ret = pm_runtime_get_sync(dev);
1342         if (ret < 0)
1343                 goto err1;
1344
1345         pm_runtime_forbid(dev);
1346
1347         ret = dwc3_alloc_event_buffers(dwc, DWC3_EVENT_BUFFERS_SIZE);
1348         if (ret) {
1349                 dev_err(dwc->dev, "failed to allocate event buffers\n");
1350                 ret = -ENOMEM;
1351                 goto err2;
1352         }
1353
1354         ret = dwc3_get_dr_mode(dwc);
1355         if (ret)
1356                 goto err3;
1357
1358         ret = dwc3_alloc_scratch_buffers(dwc);
1359         if (ret)
1360                 goto err3;
1361
1362         ret = dwc3_core_init(dwc);
1363         if (ret) {
1364                 dev_err(dev, "failed to initialize core\n");
1365                 goto err4;
1366         }
1367
1368         dwc3_check_params(dwc);
1369
1370         ret = dwc3_core_init_mode(dwc);
1371         if (ret)
1372                 goto err5;
1373
1374         dwc3_debugfs_init(dwc);
1375         pm_runtime_put(dev);
1376
1377         return 0;
1378
1379 err5:
1380         dwc3_event_buffers_cleanup(dwc);
1381
1382 err4:
1383         dwc3_free_scratch_buffers(dwc);
1384
1385 err3:
1386         dwc3_free_event_buffers(dwc);
1387
1388 err2:
1389         pm_runtime_allow(&pdev->dev);
1390
1391 err1:
1392         pm_runtime_put_sync(&pdev->dev);
1393         pm_runtime_disable(&pdev->dev);
1394
1395         clk_bulk_disable(dwc->num_clks, dwc->clks);
1396 unprepare_clks:
1397         clk_bulk_unprepare(dwc->num_clks, dwc->clks);
1398 assert_reset:
1399         reset_control_assert(dwc->reset);
1400 put_clks:
1401         clk_bulk_put(dwc->num_clks, dwc->clks);
1402
1403         return ret;
1404 }
1405
1406 static int dwc3_remove(struct platform_device *pdev)
1407 {
1408         struct dwc3     *dwc = platform_get_drvdata(pdev);
1409
1410         pm_runtime_get_sync(&pdev->dev);
1411
1412         dwc3_debugfs_exit(dwc);
1413         dwc3_core_exit_mode(dwc);
1414
1415         dwc3_core_exit(dwc);
1416         dwc3_ulpi_exit(dwc);
1417
1418         pm_runtime_put_sync(&pdev->dev);
1419         pm_runtime_allow(&pdev->dev);
1420         pm_runtime_disable(&pdev->dev);
1421
1422         dwc3_free_event_buffers(dwc);
1423         dwc3_free_scratch_buffers(dwc);
1424         clk_bulk_put(dwc->num_clks, dwc->clks);
1425
1426         return 0;
1427 }
1428
1429 #ifdef CONFIG_PM
1430 static int dwc3_core_init_for_resume(struct dwc3 *dwc)
1431 {
1432         int ret;
1433
1434         ret = reset_control_deassert(dwc->reset);
1435         if (ret)
1436                 return ret;
1437
1438         ret = clk_bulk_prepare(dwc->num_clks, dwc->clks);
1439         if (ret)
1440                 goto assert_reset;
1441
1442         ret = clk_bulk_enable(dwc->num_clks, dwc->clks);
1443         if (ret)
1444                 goto unprepare_clks;
1445
1446         ret = dwc3_core_init(dwc);
1447         if (ret)
1448                 goto disable_clks;
1449
1450         return 0;
1451
1452 disable_clks:
1453         clk_bulk_disable(dwc->num_clks, dwc->clks);
1454 unprepare_clks:
1455         clk_bulk_unprepare(dwc->num_clks, dwc->clks);
1456 assert_reset:
1457         reset_control_assert(dwc->reset);
1458
1459         return ret;
1460 }
1461
1462 static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg)
1463 {
1464         unsigned long   flags;
1465         u32 reg;
1466
1467         switch (dwc->current_dr_role) {
1468         case DWC3_GCTL_PRTCAP_DEVICE:
1469                 spin_lock_irqsave(&dwc->lock, flags);
1470                 dwc3_gadget_suspend(dwc);
1471                 spin_unlock_irqrestore(&dwc->lock, flags);
1472                 dwc3_core_exit(dwc);
1473                 break;
1474         case DWC3_GCTL_PRTCAP_HOST:
1475                 if (!PMSG_IS_AUTO(msg)) {
1476                         dwc3_core_exit(dwc);
1477                         break;
1478                 }
1479
1480                 /* Let controller to suspend HSPHY before PHY driver suspends */
1481                 if (dwc->dis_u2_susphy_quirk ||
1482                     dwc->dis_enblslpm_quirk) {
1483                         reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0));
1484                         reg |=  DWC3_GUSB2PHYCFG_ENBLSLPM |
1485                                 DWC3_GUSB2PHYCFG_SUSPHY;
1486                         dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg);
1487
1488                         /* Give some time for USB2 PHY to suspend */
1489                         usleep_range(5000, 6000);
1490                 }
1491
1492                 phy_pm_runtime_put_sync(dwc->usb2_generic_phy);
1493                 phy_pm_runtime_put_sync(dwc->usb3_generic_phy);
1494                 break;
1495         case DWC3_GCTL_PRTCAP_OTG:
1496                 /* do nothing during runtime_suspend */
1497                 if (PMSG_IS_AUTO(msg))
1498                         break;
1499
1500                 if (dwc->current_otg_role == DWC3_OTG_ROLE_DEVICE) {
1501                         spin_lock_irqsave(&dwc->lock, flags);
1502                         dwc3_gadget_suspend(dwc);
1503                         spin_unlock_irqrestore(&dwc->lock, flags);
1504                 }
1505
1506                 dwc3_otg_exit(dwc);
1507                 dwc3_core_exit(dwc);
1508                 break;
1509         default:
1510                 /* do nothing */
1511                 break;
1512         }
1513
1514         return 0;
1515 }
1516
1517 static int dwc3_resume_common(struct dwc3 *dwc, pm_message_t msg)
1518 {
1519         unsigned long   flags;
1520         int             ret;
1521         u32             reg;
1522
1523         switch (dwc->current_dr_role) {
1524         case DWC3_GCTL_PRTCAP_DEVICE:
1525                 ret = dwc3_core_init_for_resume(dwc);
1526                 if (ret)
1527                         return ret;
1528
1529                 dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_DEVICE);
1530                 spin_lock_irqsave(&dwc->lock, flags);
1531                 dwc3_gadget_resume(dwc);
1532                 spin_unlock_irqrestore(&dwc->lock, flags);
1533                 break;
1534         case DWC3_GCTL_PRTCAP_HOST:
1535                 if (!PMSG_IS_AUTO(msg)) {
1536                         ret = dwc3_core_init_for_resume(dwc);
1537                         if (ret)
1538                                 return ret;
1539                         dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_HOST);
1540                         break;
1541                 }
1542                 /* Restore GUSB2PHYCFG bits that were modified in suspend */
1543                 reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0));
1544                 if (dwc->dis_u2_susphy_quirk)
1545                         reg &= ~DWC3_GUSB2PHYCFG_SUSPHY;
1546
1547                 if (dwc->dis_enblslpm_quirk)
1548                         reg &= ~DWC3_GUSB2PHYCFG_ENBLSLPM;
1549
1550                 dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg);
1551
1552                 phy_pm_runtime_get_sync(dwc->usb2_generic_phy);
1553                 phy_pm_runtime_get_sync(dwc->usb3_generic_phy);
1554                 break;
1555         case DWC3_GCTL_PRTCAP_OTG:
1556                 /* nothing to do on runtime_resume */
1557                 if (PMSG_IS_AUTO(msg))
1558                         break;
1559
1560                 ret = dwc3_core_init(dwc);
1561                 if (ret)
1562                         return ret;
1563
1564                 dwc3_set_prtcap(dwc, dwc->current_dr_role);
1565
1566                 dwc3_otg_init(dwc);
1567                 if (dwc->current_otg_role == DWC3_OTG_ROLE_HOST) {
1568                         dwc3_otg_host_init(dwc);
1569                 } else if (dwc->current_otg_role == DWC3_OTG_ROLE_DEVICE) {
1570                         spin_lock_irqsave(&dwc->lock, flags);
1571                         dwc3_gadget_resume(dwc);
1572                         spin_unlock_irqrestore(&dwc->lock, flags);
1573                 }
1574
1575                 break;
1576         default:
1577                 /* do nothing */
1578                 break;
1579         }
1580
1581         return 0;
1582 }
1583
1584 static int dwc3_runtime_checks(struct dwc3 *dwc)
1585 {
1586         switch (dwc->current_dr_role) {
1587         case DWC3_GCTL_PRTCAP_DEVICE:
1588                 if (dwc->connected)
1589                         return -EBUSY;
1590                 break;
1591         case DWC3_GCTL_PRTCAP_HOST:
1592         default:
1593                 /* do nothing */
1594                 break;
1595         }
1596
1597         return 0;
1598 }
1599
1600 static int dwc3_runtime_suspend(struct device *dev)
1601 {
1602         struct dwc3     *dwc = dev_get_drvdata(dev);
1603         int             ret;
1604
1605         if (dwc3_runtime_checks(dwc))
1606                 return -EBUSY;
1607
1608         ret = dwc3_suspend_common(dwc, PMSG_AUTO_SUSPEND);
1609         if (ret)
1610                 return ret;
1611
1612         device_init_wakeup(dev, true);
1613
1614         return 0;
1615 }
1616
1617 static int dwc3_runtime_resume(struct device *dev)
1618 {
1619         struct dwc3     *dwc = dev_get_drvdata(dev);
1620         int             ret;
1621
1622         device_init_wakeup(dev, false);
1623
1624         ret = dwc3_resume_common(dwc, PMSG_AUTO_RESUME);
1625         if (ret)
1626                 return ret;
1627
1628         switch (dwc->current_dr_role) {
1629         case DWC3_GCTL_PRTCAP_DEVICE:
1630                 dwc3_gadget_process_pending_events(dwc);
1631                 break;
1632         case DWC3_GCTL_PRTCAP_HOST:
1633         default:
1634                 /* do nothing */
1635                 break;
1636         }
1637
1638         pm_runtime_mark_last_busy(dev);
1639
1640         return 0;
1641 }
1642
1643 static int dwc3_runtime_idle(struct device *dev)
1644 {
1645         struct dwc3     *dwc = dev_get_drvdata(dev);
1646
1647         switch (dwc->current_dr_role) {
1648         case DWC3_GCTL_PRTCAP_DEVICE:
1649                 if (dwc3_runtime_checks(dwc))
1650                         return -EBUSY;
1651                 break;
1652         case DWC3_GCTL_PRTCAP_HOST:
1653         default:
1654                 /* do nothing */
1655                 break;
1656         }
1657
1658         pm_runtime_mark_last_busy(dev);
1659         pm_runtime_autosuspend(dev);
1660
1661         return 0;
1662 }
1663 #endif /* CONFIG_PM */
1664
1665 #ifdef CONFIG_PM_SLEEP
1666 static int dwc3_suspend(struct device *dev)
1667 {
1668         struct dwc3     *dwc = dev_get_drvdata(dev);
1669         int             ret;
1670
1671         ret = dwc3_suspend_common(dwc, PMSG_SUSPEND);
1672         if (ret)
1673                 return ret;
1674
1675         pinctrl_pm_select_sleep_state(dev);
1676
1677         return 0;
1678 }
1679
1680 static int dwc3_resume(struct device *dev)
1681 {
1682         struct dwc3     *dwc = dev_get_drvdata(dev);
1683         int             ret;
1684
1685         pinctrl_pm_select_default_state(dev);
1686
1687         ret = dwc3_resume_common(dwc, PMSG_RESUME);
1688         if (ret)
1689                 return ret;
1690
1691         pm_runtime_disable(dev);
1692         pm_runtime_set_active(dev);
1693         pm_runtime_enable(dev);
1694
1695         return 0;
1696 }
1697 #endif /* CONFIG_PM_SLEEP */
1698
1699 static const struct dev_pm_ops dwc3_dev_pm_ops = {
1700         SET_SYSTEM_SLEEP_PM_OPS(dwc3_suspend, dwc3_resume)
1701         SET_RUNTIME_PM_OPS(dwc3_runtime_suspend, dwc3_runtime_resume,
1702                         dwc3_runtime_idle)
1703 };
1704
1705 #ifdef CONFIG_OF
1706 static const struct of_device_id of_dwc3_match[] = {
1707         {
1708                 .compatible = "snps,dwc3"
1709         },
1710         {
1711                 .compatible = "synopsys,dwc3"
1712         },
1713         { },
1714 };
1715 MODULE_DEVICE_TABLE(of, of_dwc3_match);
1716 #endif
1717
1718 #ifdef CONFIG_ACPI
1719
1720 #define ACPI_ID_INTEL_BSW       "808622B7"
1721
1722 static const struct acpi_device_id dwc3_acpi_match[] = {
1723         { ACPI_ID_INTEL_BSW, 0 },
1724         { },
1725 };
1726 MODULE_DEVICE_TABLE(acpi, dwc3_acpi_match);
1727 #endif
1728
1729 static struct platform_driver dwc3_driver = {
1730         .probe          = dwc3_probe,
1731         .remove         = dwc3_remove,
1732         .driver         = {
1733                 .name   = "dwc3",
1734                 .of_match_table = of_match_ptr(of_dwc3_match),
1735                 .acpi_match_table = ACPI_PTR(dwc3_acpi_match),
1736                 .pm     = &dwc3_dev_pm_ops,
1737         },
1738 };
1739
1740 module_platform_driver(dwc3_driver);
1741
1742 MODULE_ALIAS("platform:dwc3");
1743 MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
1744 MODULE_LICENSE("GPL v2");
1745 MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver");