xref: /openbmc/linux/drivers/usb/dwc3/core.c (revision f3a8b664)
1 /**
2  * core.c - DesignWare USB3 DRD Controller Core file
3  *
4  * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com
5  *
6  * Authors: Felipe Balbi <balbi@ti.com>,
7  *	    Sebastian Andrzej Siewior <bigeasy@linutronix.de>
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License version 2  of
11  * the License as published by the Free Software Foundation.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20  */
21 
22 #include <linux/version.h>
23 #include <linux/module.h>
24 #include <linux/kernel.h>
25 #include <linux/slab.h>
26 #include <linux/spinlock.h>
27 #include <linux/platform_device.h>
28 #include <linux/pm_runtime.h>
29 #include <linux/interrupt.h>
30 #include <linux/ioport.h>
31 #include <linux/io.h>
32 #include <linux/list.h>
33 #include <linux/delay.h>
34 #include <linux/dma-mapping.h>
35 #include <linux/of.h>
36 #include <linux/acpi.h>
37 #include <linux/pinctrl/consumer.h>
38 
39 #include <linux/usb/ch9.h>
40 #include <linux/usb/gadget.h>
41 #include <linux/usb/of.h>
42 #include <linux/usb/otg.h>
43 
44 #include "core.h"
45 #include "gadget.h"
46 #include "io.h"
47 
48 #include "debug.h"
49 
50 #define DWC3_DEFAULT_AUTOSUSPEND_DELAY	5000 /* ms */
51 
52 /**
53  * dwc3_get_dr_mode - Validates and sets dr_mode
54  * @dwc: pointer to our context structure
55  */
56 static int dwc3_get_dr_mode(struct dwc3 *dwc)
57 {
58 	enum usb_dr_mode mode;
59 	struct device *dev = dwc->dev;
60 	unsigned int hw_mode;
61 
62 	if (dwc->dr_mode == USB_DR_MODE_UNKNOWN)
63 		dwc->dr_mode = USB_DR_MODE_OTG;
64 
65 	mode = dwc->dr_mode;
66 	hw_mode = DWC3_GHWPARAMS0_MODE(dwc->hwparams.hwparams0);
67 
68 	switch (hw_mode) {
69 	case DWC3_GHWPARAMS0_MODE_GADGET:
70 		if (IS_ENABLED(CONFIG_USB_DWC3_HOST)) {
71 			dev_err(dev,
72 				"Controller does not support host mode.\n");
73 			return -EINVAL;
74 		}
75 		mode = USB_DR_MODE_PERIPHERAL;
76 		break;
77 	case DWC3_GHWPARAMS0_MODE_HOST:
78 		if (IS_ENABLED(CONFIG_USB_DWC3_GADGET)) {
79 			dev_err(dev,
80 				"Controller does not support device mode.\n");
81 			return -EINVAL;
82 		}
83 		mode = USB_DR_MODE_HOST;
84 		break;
85 	default:
86 		if (IS_ENABLED(CONFIG_USB_DWC3_HOST))
87 			mode = USB_DR_MODE_HOST;
88 		else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET))
89 			mode = USB_DR_MODE_PERIPHERAL;
90 	}
91 
92 	if (mode != dwc->dr_mode) {
93 		dev_warn(dev,
94 			 "Configuration mismatch. dr_mode forced to %s\n",
95 			 mode == USB_DR_MODE_HOST ? "host" : "gadget");
96 
97 		dwc->dr_mode = mode;
98 	}
99 
100 	return 0;
101 }
102 
103 void dwc3_set_mode(struct dwc3 *dwc, u32 mode)
104 {
105 	u32 reg;
106 
107 	reg = dwc3_readl(dwc->regs, DWC3_GCTL);
108 	reg &= ~(DWC3_GCTL_PRTCAPDIR(DWC3_GCTL_PRTCAP_OTG));
109 	reg |= DWC3_GCTL_PRTCAPDIR(mode);
110 	dwc3_writel(dwc->regs, DWC3_GCTL, reg);
111 }
112 
113 u32 dwc3_core_fifo_space(struct dwc3_ep *dep, u8 type)
114 {
115 	struct dwc3		*dwc = dep->dwc;
116 	u32			reg;
117 
118 	dwc3_writel(dwc->regs, DWC3_GDBGFIFOSPACE,
119 			DWC3_GDBGFIFOSPACE_NUM(dep->number) |
120 			DWC3_GDBGFIFOSPACE_TYPE(type));
121 
122 	reg = dwc3_readl(dwc->regs, DWC3_GDBGFIFOSPACE);
123 
124 	return DWC3_GDBGFIFOSPACE_SPACE_AVAILABLE(reg);
125 }
126 
127 /**
128  * dwc3_core_soft_reset - Issues core soft reset and PHY reset
129  * @dwc: pointer to our context structure
130  */
131 static int dwc3_core_soft_reset(struct dwc3 *dwc)
132 {
133 	u32		reg;
134 	int		retries = 1000;
135 	int		ret;
136 
137 	usb_phy_init(dwc->usb2_phy);
138 	usb_phy_init(dwc->usb3_phy);
139 	ret = phy_init(dwc->usb2_generic_phy);
140 	if (ret < 0)
141 		return ret;
142 
143 	ret = phy_init(dwc->usb3_generic_phy);
144 	if (ret < 0) {
145 		phy_exit(dwc->usb2_generic_phy);
146 		return ret;
147 	}
148 
149 	/*
150 	 * We're resetting only the device side because, if we're in host mode,
151 	 * XHCI driver will reset the host block. If dwc3 was configured for
152 	 * host-only mode, then we can return early.
153 	 */
154 	if (dwc->dr_mode == USB_DR_MODE_HOST)
155 		return 0;
156 
157 	reg = dwc3_readl(dwc->regs, DWC3_DCTL);
158 	reg |= DWC3_DCTL_CSFTRST;
159 	dwc3_writel(dwc->regs, DWC3_DCTL, reg);
160 
161 	do {
162 		reg = dwc3_readl(dwc->regs, DWC3_DCTL);
163 		if (!(reg & DWC3_DCTL_CSFTRST))
164 			return 0;
165 
166 		udelay(1);
167 	} while (--retries);
168 
169 	return -ETIMEDOUT;
170 }
171 
172 /**
173  * dwc3_soft_reset - Issue soft reset
174  * @dwc: Pointer to our controller context structure
175  */
176 static int dwc3_soft_reset(struct dwc3 *dwc)
177 {
178 	unsigned long timeout;
179 	u32 reg;
180 
181 	timeout = jiffies + msecs_to_jiffies(500);
182 	dwc3_writel(dwc->regs, DWC3_DCTL, DWC3_DCTL_CSFTRST);
183 	do {
184 		reg = dwc3_readl(dwc->regs, DWC3_DCTL);
185 		if (!(reg & DWC3_DCTL_CSFTRST))
186 			break;
187 
188 		if (time_after(jiffies, timeout)) {
189 			dev_err(dwc->dev, "Reset Timed Out\n");
190 			return -ETIMEDOUT;
191 		}
192 
193 		cpu_relax();
194 	} while (true);
195 
196 	return 0;
197 }
198 
199 /*
200  * dwc3_frame_length_adjustment - Adjusts frame length if required
201  * @dwc3: Pointer to our controller context structure
202  */
203 static void dwc3_frame_length_adjustment(struct dwc3 *dwc)
204 {
205 	u32 reg;
206 	u32 dft;
207 
208 	if (dwc->revision < DWC3_REVISION_250A)
209 		return;
210 
211 	if (dwc->fladj == 0)
212 		return;
213 
214 	reg = dwc3_readl(dwc->regs, DWC3_GFLADJ);
215 	dft = reg & DWC3_GFLADJ_30MHZ_MASK;
216 	if (!dev_WARN_ONCE(dwc->dev, dft == dwc->fladj,
217 	    "request value same as default, ignoring\n")) {
218 		reg &= ~DWC3_GFLADJ_30MHZ_MASK;
219 		reg |= DWC3_GFLADJ_30MHZ_SDBND_SEL | dwc->fladj;
220 		dwc3_writel(dwc->regs, DWC3_GFLADJ, reg);
221 	}
222 }
223 
224 /**
225  * dwc3_free_one_event_buffer - Frees one event buffer
226  * @dwc: Pointer to our controller context structure
227  * @evt: Pointer to event buffer to be freed
228  */
229 static void dwc3_free_one_event_buffer(struct dwc3 *dwc,
230 		struct dwc3_event_buffer *evt)
231 {
232 	dma_free_coherent(dwc->dev, evt->length, evt->buf, evt->dma);
233 }
234 
235 /**
236  * dwc3_alloc_one_event_buffer - Allocates one event buffer structure
237  * @dwc: Pointer to our controller context structure
238  * @length: size of the event buffer
239  *
240  * Returns a pointer to the allocated event buffer structure on success
241  * otherwise ERR_PTR(errno).
242  */
243 static struct dwc3_event_buffer *dwc3_alloc_one_event_buffer(struct dwc3 *dwc,
244 		unsigned length)
245 {
246 	struct dwc3_event_buffer	*evt;
247 
248 	evt = devm_kzalloc(dwc->dev, sizeof(*evt), GFP_KERNEL);
249 	if (!evt)
250 		return ERR_PTR(-ENOMEM);
251 
252 	evt->dwc	= dwc;
253 	evt->length	= length;
254 	evt->buf	= dma_alloc_coherent(dwc->dev, length,
255 			&evt->dma, GFP_KERNEL);
256 	if (!evt->buf)
257 		return ERR_PTR(-ENOMEM);
258 
259 	return evt;
260 }
261 
262 /**
263  * dwc3_free_event_buffers - frees all allocated event buffers
264  * @dwc: Pointer to our controller context structure
265  */
266 static void dwc3_free_event_buffers(struct dwc3 *dwc)
267 {
268 	struct dwc3_event_buffer	*evt;
269 
270 	evt = dwc->ev_buf;
271 	if (evt)
272 		dwc3_free_one_event_buffer(dwc, evt);
273 }
274 
275 /**
276  * dwc3_alloc_event_buffers - Allocates @num event buffers of size @length
277  * @dwc: pointer to our controller context structure
278  * @length: size of event buffer
279  *
280  * Returns 0 on success otherwise negative errno. In the error case, dwc
281  * may contain some buffers allocated but not all which were requested.
282  */
283 static int dwc3_alloc_event_buffers(struct dwc3 *dwc, unsigned length)
284 {
285 	struct dwc3_event_buffer *evt;
286 
287 	evt = dwc3_alloc_one_event_buffer(dwc, length);
288 	if (IS_ERR(evt)) {
289 		dev_err(dwc->dev, "can't allocate event buffer\n");
290 		return PTR_ERR(evt);
291 	}
292 	dwc->ev_buf = evt;
293 
294 	return 0;
295 }
296 
297 /**
298  * dwc3_event_buffers_setup - setup our allocated event buffers
299  * @dwc: pointer to our controller context structure
300  *
301  * Returns 0 on success otherwise negative errno.
302  */
303 static int dwc3_event_buffers_setup(struct dwc3 *dwc)
304 {
305 	struct dwc3_event_buffer	*evt;
306 
307 	evt = dwc->ev_buf;
308 	dwc3_trace(trace_dwc3_core,
309 			"Event buf %p dma %08llx length %d\n",
310 			evt->buf, (unsigned long long) evt->dma,
311 			evt->length);
312 
313 	evt->lpos = 0;
314 
315 	dwc3_writel(dwc->regs, DWC3_GEVNTADRLO(0),
316 			lower_32_bits(evt->dma));
317 	dwc3_writel(dwc->regs, DWC3_GEVNTADRHI(0),
318 			upper_32_bits(evt->dma));
319 	dwc3_writel(dwc->regs, DWC3_GEVNTSIZ(0),
320 			DWC3_GEVNTSIZ_SIZE(evt->length));
321 	dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(0), 0);
322 
323 	return 0;
324 }
325 
326 static void dwc3_event_buffers_cleanup(struct dwc3 *dwc)
327 {
328 	struct dwc3_event_buffer	*evt;
329 
330 	evt = dwc->ev_buf;
331 
332 	evt->lpos = 0;
333 
334 	dwc3_writel(dwc->regs, DWC3_GEVNTADRLO(0), 0);
335 	dwc3_writel(dwc->regs, DWC3_GEVNTADRHI(0), 0);
336 	dwc3_writel(dwc->regs, DWC3_GEVNTSIZ(0), DWC3_GEVNTSIZ_INTMASK
337 			| DWC3_GEVNTSIZ_SIZE(0));
338 	dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(0), 0);
339 }
340 
341 static int dwc3_alloc_scratch_buffers(struct dwc3 *dwc)
342 {
343 	if (!dwc->has_hibernation)
344 		return 0;
345 
346 	if (!dwc->nr_scratch)
347 		return 0;
348 
349 	dwc->scratchbuf = kmalloc_array(dwc->nr_scratch,
350 			DWC3_SCRATCHBUF_SIZE, GFP_KERNEL);
351 	if (!dwc->scratchbuf)
352 		return -ENOMEM;
353 
354 	return 0;
355 }
356 
357 static int dwc3_setup_scratch_buffers(struct dwc3 *dwc)
358 {
359 	dma_addr_t scratch_addr;
360 	u32 param;
361 	int ret;
362 
363 	if (!dwc->has_hibernation)
364 		return 0;
365 
366 	if (!dwc->nr_scratch)
367 		return 0;
368 
369 	 /* should never fall here */
370 	if (!WARN_ON(dwc->scratchbuf))
371 		return 0;
372 
373 	scratch_addr = dma_map_single(dwc->dev, dwc->scratchbuf,
374 			dwc->nr_scratch * DWC3_SCRATCHBUF_SIZE,
375 			DMA_BIDIRECTIONAL);
376 	if (dma_mapping_error(dwc->dev, scratch_addr)) {
377 		dev_err(dwc->dev, "failed to map scratch buffer\n");
378 		ret = -EFAULT;
379 		goto err0;
380 	}
381 
382 	dwc->scratch_addr = scratch_addr;
383 
384 	param = lower_32_bits(scratch_addr);
385 
386 	ret = dwc3_send_gadget_generic_command(dwc,
387 			DWC3_DGCMD_SET_SCRATCHPAD_ADDR_LO, param);
388 	if (ret < 0)
389 		goto err1;
390 
391 	param = upper_32_bits(scratch_addr);
392 
393 	ret = dwc3_send_gadget_generic_command(dwc,
394 			DWC3_DGCMD_SET_SCRATCHPAD_ADDR_HI, param);
395 	if (ret < 0)
396 		goto err1;
397 
398 	return 0;
399 
400 err1:
401 	dma_unmap_single(dwc->dev, dwc->scratch_addr, dwc->nr_scratch *
402 			DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
403 
404 err0:
405 	return ret;
406 }
407 
408 static void dwc3_free_scratch_buffers(struct dwc3 *dwc)
409 {
410 	if (!dwc->has_hibernation)
411 		return;
412 
413 	if (!dwc->nr_scratch)
414 		return;
415 
416 	 /* should never fall here */
417 	if (!WARN_ON(dwc->scratchbuf))
418 		return;
419 
420 	dma_unmap_single(dwc->dev, dwc->scratch_addr, dwc->nr_scratch *
421 			DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
422 	kfree(dwc->scratchbuf);
423 }
424 
425 static void dwc3_core_num_eps(struct dwc3 *dwc)
426 {
427 	struct dwc3_hwparams	*parms = &dwc->hwparams;
428 
429 	dwc->num_in_eps = DWC3_NUM_IN_EPS(parms);
430 	dwc->num_out_eps = DWC3_NUM_EPS(parms) - dwc->num_in_eps;
431 
432 	dwc3_trace(trace_dwc3_core, "found %d IN and %d OUT endpoints",
433 			dwc->num_in_eps, dwc->num_out_eps);
434 }
435 
436 static void dwc3_cache_hwparams(struct dwc3 *dwc)
437 {
438 	struct dwc3_hwparams	*parms = &dwc->hwparams;
439 
440 	parms->hwparams0 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS0);
441 	parms->hwparams1 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS1);
442 	parms->hwparams2 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS2);
443 	parms->hwparams3 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS3);
444 	parms->hwparams4 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS4);
445 	parms->hwparams5 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS5);
446 	parms->hwparams6 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS6);
447 	parms->hwparams7 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS7);
448 	parms->hwparams8 = dwc3_readl(dwc->regs, DWC3_GHWPARAMS8);
449 }
450 
451 /**
452  * dwc3_phy_setup - Configure USB PHY Interface of DWC3 Core
453  * @dwc: Pointer to our controller context structure
454  *
455  * Returns 0 on success. The USB PHY interfaces are configured but not
456  * initialized. The PHY interfaces and the PHYs get initialized together with
457  * the core in dwc3_core_init.
458  */
459 static int dwc3_phy_setup(struct dwc3 *dwc)
460 {
461 	u32 reg;
462 	int ret;
463 
464 	reg = dwc3_readl(dwc->regs, DWC3_GUSB3PIPECTL(0));
465 
466 	/*
467 	 * Above 1.94a, it is recommended to set DWC3_GUSB3PIPECTL_SUSPHY
468 	 * to '0' during coreConsultant configuration. So default value
469 	 * will be '0' when the core is reset. Application needs to set it
470 	 * to '1' after the core initialization is completed.
471 	 */
472 	if (dwc->revision > DWC3_REVISION_194A)
473 		reg |= DWC3_GUSB3PIPECTL_SUSPHY;
474 
475 	if (dwc->u2ss_inp3_quirk)
476 		reg |= DWC3_GUSB3PIPECTL_U2SSINP3OK;
477 
478 	if (dwc->dis_rxdet_inp3_quirk)
479 		reg |= DWC3_GUSB3PIPECTL_DISRXDETINP3;
480 
481 	if (dwc->req_p1p2p3_quirk)
482 		reg |= DWC3_GUSB3PIPECTL_REQP1P2P3;
483 
484 	if (dwc->del_p1p2p3_quirk)
485 		reg |= DWC3_GUSB3PIPECTL_DEP1P2P3_EN;
486 
487 	if (dwc->del_phy_power_chg_quirk)
488 		reg |= DWC3_GUSB3PIPECTL_DEPOCHANGE;
489 
490 	if (dwc->lfps_filter_quirk)
491 		reg |= DWC3_GUSB3PIPECTL_LFPSFILT;
492 
493 	if (dwc->rx_detect_poll_quirk)
494 		reg |= DWC3_GUSB3PIPECTL_RX_DETOPOLL;
495 
496 	if (dwc->tx_de_emphasis_quirk)
497 		reg |= DWC3_GUSB3PIPECTL_TX_DEEPH(dwc->tx_de_emphasis);
498 
499 	if (dwc->dis_u3_susphy_quirk)
500 		reg &= ~DWC3_GUSB3PIPECTL_SUSPHY;
501 
502 	if (dwc->dis_del_phy_power_chg_quirk)
503 		reg &= ~DWC3_GUSB3PIPECTL_DEPOCHANGE;
504 
505 	dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
506 
507 	reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0));
508 
509 	/* Select the HS PHY interface */
510 	switch (DWC3_GHWPARAMS3_HSPHY_IFC(dwc->hwparams.hwparams3)) {
511 	case DWC3_GHWPARAMS3_HSPHY_IFC_UTMI_ULPI:
512 		if (dwc->hsphy_interface &&
513 				!strncmp(dwc->hsphy_interface, "utmi", 4)) {
514 			reg &= ~DWC3_GUSB2PHYCFG_ULPI_UTMI;
515 			break;
516 		} else if (dwc->hsphy_interface &&
517 				!strncmp(dwc->hsphy_interface, "ulpi", 4)) {
518 			reg |= DWC3_GUSB2PHYCFG_ULPI_UTMI;
519 			dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg);
520 		} else {
521 			/* Relying on default value. */
522 			if (!(reg & DWC3_GUSB2PHYCFG_ULPI_UTMI))
523 				break;
524 		}
525 		/* FALLTHROUGH */
526 	case DWC3_GHWPARAMS3_HSPHY_IFC_ULPI:
527 		/* Making sure the interface and PHY are operational */
528 		ret = dwc3_soft_reset(dwc);
529 		if (ret)
530 			return ret;
531 
532 		udelay(1);
533 
534 		ret = dwc3_ulpi_init(dwc);
535 		if (ret)
536 			return ret;
537 		/* FALLTHROUGH */
538 	default:
539 		break;
540 	}
541 
542 	switch (dwc->hsphy_mode) {
543 	case USBPHY_INTERFACE_MODE_UTMI:
544 		reg &= ~(DWC3_GUSB2PHYCFG_PHYIF_MASK |
545 		       DWC3_GUSB2PHYCFG_USBTRDTIM_MASK);
546 		reg |= DWC3_GUSB2PHYCFG_PHYIF(UTMI_PHYIF_8_BIT) |
547 		       DWC3_GUSB2PHYCFG_USBTRDTIM(USBTRDTIM_UTMI_8_BIT);
548 		break;
549 	case USBPHY_INTERFACE_MODE_UTMIW:
550 		reg &= ~(DWC3_GUSB2PHYCFG_PHYIF_MASK |
551 		       DWC3_GUSB2PHYCFG_USBTRDTIM_MASK);
552 		reg |= DWC3_GUSB2PHYCFG_PHYIF(UTMI_PHYIF_16_BIT) |
553 		       DWC3_GUSB2PHYCFG_USBTRDTIM(USBTRDTIM_UTMI_16_BIT);
554 		break;
555 	default:
556 		break;
557 	}
558 
559 	/*
560 	 * Above 1.94a, it is recommended to set DWC3_GUSB2PHYCFG_SUSPHY to
561 	 * '0' during coreConsultant configuration. So default value will
562 	 * be '0' when the core is reset. Application needs to set it to
563 	 * '1' after the core initialization is completed.
564 	 */
565 	if (dwc->revision > DWC3_REVISION_194A)
566 		reg |= DWC3_GUSB2PHYCFG_SUSPHY;
567 
568 	if (dwc->dis_u2_susphy_quirk)
569 		reg &= ~DWC3_GUSB2PHYCFG_SUSPHY;
570 
571 	if (dwc->dis_enblslpm_quirk)
572 		reg &= ~DWC3_GUSB2PHYCFG_ENBLSLPM;
573 
574 	if (dwc->dis_u2_freeclk_exists_quirk)
575 		reg &= ~DWC3_GUSB2PHYCFG_U2_FREECLK_EXISTS;
576 
577 	dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg);
578 
579 	return 0;
580 }
581 
582 static void dwc3_core_exit(struct dwc3 *dwc)
583 {
584 	dwc3_event_buffers_cleanup(dwc);
585 
586 	usb_phy_shutdown(dwc->usb2_phy);
587 	usb_phy_shutdown(dwc->usb3_phy);
588 	phy_exit(dwc->usb2_generic_phy);
589 	phy_exit(dwc->usb3_generic_phy);
590 
591 	usb_phy_set_suspend(dwc->usb2_phy, 1);
592 	usb_phy_set_suspend(dwc->usb3_phy, 1);
593 	phy_power_off(dwc->usb2_generic_phy);
594 	phy_power_off(dwc->usb3_generic_phy);
595 }
596 
597 /**
598  * dwc3_core_init - Low-level initialization of DWC3 Core
599  * @dwc: Pointer to our controller context structure
600  *
601  * Returns 0 on success otherwise negative errno.
602  */
603 static int dwc3_core_init(struct dwc3 *dwc)
604 {
605 	u32			hwparams4 = dwc->hwparams.hwparams4;
606 	u32			reg;
607 	int			ret;
608 
609 	reg = dwc3_readl(dwc->regs, DWC3_GSNPSID);
610 	/* This should read as U3 followed by revision number */
611 	if ((reg & DWC3_GSNPSID_MASK) == 0x55330000) {
612 		/* Detected DWC_usb3 IP */
613 		dwc->revision = reg;
614 	} else if ((reg & DWC3_GSNPSID_MASK) == 0x33310000) {
615 		/* Detected DWC_usb31 IP */
616 		dwc->revision = dwc3_readl(dwc->regs, DWC3_VER_NUMBER);
617 		dwc->revision |= DWC3_REVISION_IS_DWC31;
618 	} else {
619 		dev_err(dwc->dev, "this is not a DesignWare USB3 DRD Core\n");
620 		ret = -ENODEV;
621 		goto err0;
622 	}
623 
624 	/*
625 	 * Write Linux Version Code to our GUID register so it's easy to figure
626 	 * out which kernel version a bug was found.
627 	 */
628 	dwc3_writel(dwc->regs, DWC3_GUID, LINUX_VERSION_CODE);
629 
630 	/* Handle USB2.0-only core configuration */
631 	if (DWC3_GHWPARAMS3_SSPHY_IFC(dwc->hwparams.hwparams3) ==
632 			DWC3_GHWPARAMS3_SSPHY_IFC_DIS) {
633 		if (dwc->maximum_speed == USB_SPEED_SUPER)
634 			dwc->maximum_speed = USB_SPEED_HIGH;
635 	}
636 
637 	/* issue device SoftReset too */
638 	ret = dwc3_soft_reset(dwc);
639 	if (ret)
640 		goto err0;
641 
642 	ret = dwc3_core_soft_reset(dwc);
643 	if (ret)
644 		goto err0;
645 
646 	ret = dwc3_phy_setup(dwc);
647 	if (ret)
648 		goto err0;
649 
650 	reg = dwc3_readl(dwc->regs, DWC3_GCTL);
651 	reg &= ~DWC3_GCTL_SCALEDOWN_MASK;
652 
653 	switch (DWC3_GHWPARAMS1_EN_PWROPT(dwc->hwparams.hwparams1)) {
654 	case DWC3_GHWPARAMS1_EN_PWROPT_CLK:
655 		/**
656 		 * WORKAROUND: DWC3 revisions between 2.10a and 2.50a have an
657 		 * issue which would cause xHCI compliance tests to fail.
658 		 *
659 		 * Because of that we cannot enable clock gating on such
660 		 * configurations.
661 		 *
662 		 * Refers to:
663 		 *
664 		 * STAR#9000588375: Clock Gating, SOF Issues when ref_clk-Based
665 		 * SOF/ITP Mode Used
666 		 */
667 		if ((dwc->dr_mode == USB_DR_MODE_HOST ||
668 				dwc->dr_mode == USB_DR_MODE_OTG) &&
669 				(dwc->revision >= DWC3_REVISION_210A &&
670 				dwc->revision <= DWC3_REVISION_250A))
671 			reg |= DWC3_GCTL_DSBLCLKGTNG | DWC3_GCTL_SOFITPSYNC;
672 		else
673 			reg &= ~DWC3_GCTL_DSBLCLKGTNG;
674 		break;
675 	case DWC3_GHWPARAMS1_EN_PWROPT_HIB:
676 		/* enable hibernation here */
677 		dwc->nr_scratch = DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(hwparams4);
678 
679 		/*
680 		 * REVISIT Enabling this bit so that host-mode hibernation
681 		 * will work. Device-mode hibernation is not yet implemented.
682 		 */
683 		reg |= DWC3_GCTL_GBLHIBERNATIONEN;
684 		break;
685 	default:
686 		dwc3_trace(trace_dwc3_core, "No power optimization available\n");
687 	}
688 
689 	/* check if current dwc3 is on simulation board */
690 	if (dwc->hwparams.hwparams6 & DWC3_GHWPARAMS6_EN_FPGA) {
691 		dwc3_trace(trace_dwc3_core,
692 				"running on FPGA platform\n");
693 		dwc->is_fpga = true;
694 	}
695 
696 	WARN_ONCE(dwc->disable_scramble_quirk && !dwc->is_fpga,
697 			"disable_scramble cannot be used on non-FPGA builds\n");
698 
699 	if (dwc->disable_scramble_quirk && dwc->is_fpga)
700 		reg |= DWC3_GCTL_DISSCRAMBLE;
701 	else
702 		reg &= ~DWC3_GCTL_DISSCRAMBLE;
703 
704 	if (dwc->u2exit_lfps_quirk)
705 		reg |= DWC3_GCTL_U2EXIT_LFPS;
706 
707 	/*
708 	 * WORKAROUND: DWC3 revisions <1.90a have a bug
709 	 * where the device can fail to connect at SuperSpeed
710 	 * and falls back to high-speed mode which causes
711 	 * the device to enter a Connect/Disconnect loop
712 	 */
713 	if (dwc->revision < DWC3_REVISION_190A)
714 		reg |= DWC3_GCTL_U2RSTECN;
715 
716 	dwc3_writel(dwc->regs, DWC3_GCTL, reg);
717 
718 	dwc3_core_num_eps(dwc);
719 
720 	ret = dwc3_setup_scratch_buffers(dwc);
721 	if (ret)
722 		goto err1;
723 
724 	/* Adjust Frame Length */
725 	dwc3_frame_length_adjustment(dwc);
726 
727 	usb_phy_set_suspend(dwc->usb2_phy, 0);
728 	usb_phy_set_suspend(dwc->usb3_phy, 0);
729 	ret = phy_power_on(dwc->usb2_generic_phy);
730 	if (ret < 0)
731 		goto err2;
732 
733 	ret = phy_power_on(dwc->usb3_generic_phy);
734 	if (ret < 0)
735 		goto err3;
736 
737 	ret = dwc3_event_buffers_setup(dwc);
738 	if (ret) {
739 		dev_err(dwc->dev, "failed to setup event buffers\n");
740 		goto err4;
741 	}
742 
743 	switch (dwc->dr_mode) {
744 	case USB_DR_MODE_PERIPHERAL:
745 		dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE);
746 		break;
747 	case USB_DR_MODE_HOST:
748 		dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST);
749 		break;
750 	case USB_DR_MODE_OTG:
751 		dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_OTG);
752 		break;
753 	default:
754 		dev_warn(dwc->dev, "Unsupported mode %d\n", dwc->dr_mode);
755 		break;
756 	}
757 
758 	/*
759 	 * ENDXFER polling is available on version 3.10a and later of
760 	 * the DWC_usb3 controller. It is NOT available in the
761 	 * DWC_usb31 controller.
762 	 */
763 	if (!dwc3_is_usb31(dwc) && dwc->revision >= DWC3_REVISION_310A) {
764 		reg = dwc3_readl(dwc->regs, DWC3_GUCTL2);
765 		reg |= DWC3_GUCTL2_RST_ACTBITLATER;
766 		dwc3_writel(dwc->regs, DWC3_GUCTL2, reg);
767 	}
768 
769 	return 0;
770 
771 err4:
772 	phy_power_off(dwc->usb2_generic_phy);
773 
774 err3:
775 	phy_power_off(dwc->usb3_generic_phy);
776 
777 err2:
778 	usb_phy_set_suspend(dwc->usb2_phy, 1);
779 	usb_phy_set_suspend(dwc->usb3_phy, 1);
780 	dwc3_core_exit(dwc);
781 
782 err1:
783 	usb_phy_shutdown(dwc->usb2_phy);
784 	usb_phy_shutdown(dwc->usb3_phy);
785 	phy_exit(dwc->usb2_generic_phy);
786 	phy_exit(dwc->usb3_generic_phy);
787 
788 err0:
789 	return ret;
790 }
791 
792 static int dwc3_core_get_phy(struct dwc3 *dwc)
793 {
794 	struct device		*dev = dwc->dev;
795 	struct device_node	*node = dev->of_node;
796 	int ret;
797 
798 	if (node) {
799 		dwc->usb2_phy = devm_usb_get_phy_by_phandle(dev, "usb-phy", 0);
800 		dwc->usb3_phy = devm_usb_get_phy_by_phandle(dev, "usb-phy", 1);
801 	} else {
802 		dwc->usb2_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
803 		dwc->usb3_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB3);
804 	}
805 
806 	if (IS_ERR(dwc->usb2_phy)) {
807 		ret = PTR_ERR(dwc->usb2_phy);
808 		if (ret == -ENXIO || ret == -ENODEV) {
809 			dwc->usb2_phy = NULL;
810 		} else if (ret == -EPROBE_DEFER) {
811 			return ret;
812 		} else {
813 			dev_err(dev, "no usb2 phy configured\n");
814 			return ret;
815 		}
816 	}
817 
818 	if (IS_ERR(dwc->usb3_phy)) {
819 		ret = PTR_ERR(dwc->usb3_phy);
820 		if (ret == -ENXIO || ret == -ENODEV) {
821 			dwc->usb3_phy = NULL;
822 		} else if (ret == -EPROBE_DEFER) {
823 			return ret;
824 		} else {
825 			dev_err(dev, "no usb3 phy configured\n");
826 			return ret;
827 		}
828 	}
829 
830 	dwc->usb2_generic_phy = devm_phy_get(dev, "usb2-phy");
831 	if (IS_ERR(dwc->usb2_generic_phy)) {
832 		ret = PTR_ERR(dwc->usb2_generic_phy);
833 		if (ret == -ENOSYS || ret == -ENODEV) {
834 			dwc->usb2_generic_phy = NULL;
835 		} else if (ret == -EPROBE_DEFER) {
836 			return ret;
837 		} else {
838 			dev_err(dev, "no usb2 phy configured\n");
839 			return ret;
840 		}
841 	}
842 
843 	dwc->usb3_generic_phy = devm_phy_get(dev, "usb3-phy");
844 	if (IS_ERR(dwc->usb3_generic_phy)) {
845 		ret = PTR_ERR(dwc->usb3_generic_phy);
846 		if (ret == -ENOSYS || ret == -ENODEV) {
847 			dwc->usb3_generic_phy = NULL;
848 		} else if (ret == -EPROBE_DEFER) {
849 			return ret;
850 		} else {
851 			dev_err(dev, "no usb3 phy configured\n");
852 			return ret;
853 		}
854 	}
855 
856 	return 0;
857 }
858 
859 static int dwc3_core_init_mode(struct dwc3 *dwc)
860 {
861 	struct device *dev = dwc->dev;
862 	int ret;
863 
864 	switch (dwc->dr_mode) {
865 	case USB_DR_MODE_PERIPHERAL:
866 		ret = dwc3_gadget_init(dwc);
867 		if (ret) {
868 			if (ret != -EPROBE_DEFER)
869 				dev_err(dev, "failed to initialize gadget\n");
870 			return ret;
871 		}
872 		break;
873 	case USB_DR_MODE_HOST:
874 		ret = dwc3_host_init(dwc);
875 		if (ret) {
876 			if (ret != -EPROBE_DEFER)
877 				dev_err(dev, "failed to initialize host\n");
878 			return ret;
879 		}
880 		break;
881 	case USB_DR_MODE_OTG:
882 		ret = dwc3_host_init(dwc);
883 		if (ret) {
884 			if (ret != -EPROBE_DEFER)
885 				dev_err(dev, "failed to initialize host\n");
886 			return ret;
887 		}
888 
889 		ret = dwc3_gadget_init(dwc);
890 		if (ret) {
891 			if (ret != -EPROBE_DEFER)
892 				dev_err(dev, "failed to initialize gadget\n");
893 			return ret;
894 		}
895 		break;
896 	default:
897 		dev_err(dev, "Unsupported mode of operation %d\n", dwc->dr_mode);
898 		return -EINVAL;
899 	}
900 
901 	return 0;
902 }
903 
904 static void dwc3_core_exit_mode(struct dwc3 *dwc)
905 {
906 	switch (dwc->dr_mode) {
907 	case USB_DR_MODE_PERIPHERAL:
908 		dwc3_gadget_exit(dwc);
909 		break;
910 	case USB_DR_MODE_HOST:
911 		dwc3_host_exit(dwc);
912 		break;
913 	case USB_DR_MODE_OTG:
914 		dwc3_host_exit(dwc);
915 		dwc3_gadget_exit(dwc);
916 		break;
917 	default:
918 		/* do nothing */
919 		break;
920 	}
921 }
922 
923 #define DWC3_ALIGN_MASK		(16 - 1)
924 
925 static int dwc3_probe(struct platform_device *pdev)
926 {
927 	struct device		*dev = &pdev->dev;
928 	struct resource		*res;
929 	struct dwc3		*dwc;
930 	u8			lpm_nyet_threshold;
931 	u8			tx_de_emphasis;
932 	u8			hird_threshold;
933 
934 	int			ret;
935 
936 	void __iomem		*regs;
937 	void			*mem;
938 
939 	mem = devm_kzalloc(dev, sizeof(*dwc) + DWC3_ALIGN_MASK, GFP_KERNEL);
940 	if (!mem)
941 		return -ENOMEM;
942 
943 	dwc = PTR_ALIGN(mem, DWC3_ALIGN_MASK + 1);
944 	dwc->mem = mem;
945 	dwc->dev = dev;
946 
947 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
948 	if (!res) {
949 		dev_err(dev, "missing memory resource\n");
950 		return -ENODEV;
951 	}
952 
953 	dwc->xhci_resources[0].start = res->start;
954 	dwc->xhci_resources[0].end = dwc->xhci_resources[0].start +
955 					DWC3_XHCI_REGS_END;
956 	dwc->xhci_resources[0].flags = res->flags;
957 	dwc->xhci_resources[0].name = res->name;
958 
959 	res->start += DWC3_GLOBALS_REGS_START;
960 
961 	/*
962 	 * Request memory region but exclude xHCI regs,
963 	 * since it will be requested by the xhci-plat driver.
964 	 */
965 	regs = devm_ioremap_resource(dev, res);
966 	if (IS_ERR(regs)) {
967 		ret = PTR_ERR(regs);
968 		goto err0;
969 	}
970 
971 	dwc->regs	= regs;
972 	dwc->regs_size	= resource_size(res);
973 
974 	/* default to highest possible threshold */
975 	lpm_nyet_threshold = 0xff;
976 
977 	/* default to -3.5dB de-emphasis */
978 	tx_de_emphasis = 1;
979 
980 	/*
981 	 * default to assert utmi_sleep_n and use maximum allowed HIRD
982 	 * threshold value of 0b1100
983 	 */
984 	hird_threshold = 12;
985 
986 	dwc->maximum_speed = usb_get_maximum_speed(dev);
987 	dwc->dr_mode = usb_get_dr_mode(dev);
988 	dwc->hsphy_mode = of_usb_get_phy_mode(dev->of_node);
989 
990 	dwc->has_lpm_erratum = device_property_read_bool(dev,
991 				"snps,has-lpm-erratum");
992 	device_property_read_u8(dev, "snps,lpm-nyet-threshold",
993 				&lpm_nyet_threshold);
994 	dwc->is_utmi_l1_suspend = device_property_read_bool(dev,
995 				"snps,is-utmi-l1-suspend");
996 	device_property_read_u8(dev, "snps,hird-threshold",
997 				&hird_threshold);
998 	dwc->usb3_lpm_capable = device_property_read_bool(dev,
999 				"snps,usb3_lpm_capable");
1000 
1001 	dwc->disable_scramble_quirk = device_property_read_bool(dev,
1002 				"snps,disable_scramble_quirk");
1003 	dwc->u2exit_lfps_quirk = device_property_read_bool(dev,
1004 				"snps,u2exit_lfps_quirk");
1005 	dwc->u2ss_inp3_quirk = device_property_read_bool(dev,
1006 				"snps,u2ss_inp3_quirk");
1007 	dwc->req_p1p2p3_quirk = device_property_read_bool(dev,
1008 				"snps,req_p1p2p3_quirk");
1009 	dwc->del_p1p2p3_quirk = device_property_read_bool(dev,
1010 				"snps,del_p1p2p3_quirk");
1011 	dwc->del_phy_power_chg_quirk = device_property_read_bool(dev,
1012 				"snps,del_phy_power_chg_quirk");
1013 	dwc->lfps_filter_quirk = device_property_read_bool(dev,
1014 				"snps,lfps_filter_quirk");
1015 	dwc->rx_detect_poll_quirk = device_property_read_bool(dev,
1016 				"snps,rx_detect_poll_quirk");
1017 	dwc->dis_u3_susphy_quirk = device_property_read_bool(dev,
1018 				"snps,dis_u3_susphy_quirk");
1019 	dwc->dis_u2_susphy_quirk = device_property_read_bool(dev,
1020 				"snps,dis_u2_susphy_quirk");
1021 	dwc->dis_enblslpm_quirk = device_property_read_bool(dev,
1022 				"snps,dis_enblslpm_quirk");
1023 	dwc->dis_rxdet_inp3_quirk = device_property_read_bool(dev,
1024 				"snps,dis_rxdet_inp3_quirk");
1025 	dwc->dis_u2_freeclk_exists_quirk = device_property_read_bool(dev,
1026 				"snps,dis-u2-freeclk-exists-quirk");
1027 	dwc->dis_del_phy_power_chg_quirk = device_property_read_bool(dev,
1028 				"snps,dis-del-phy-power-chg-quirk");
1029 
1030 	dwc->tx_de_emphasis_quirk = device_property_read_bool(dev,
1031 				"snps,tx_de_emphasis_quirk");
1032 	device_property_read_u8(dev, "snps,tx_de_emphasis",
1033 				&tx_de_emphasis);
1034 	device_property_read_string(dev, "snps,hsphy_interface",
1035 				    &dwc->hsphy_interface);
1036 	device_property_read_u32(dev, "snps,quirk-frame-length-adjustment",
1037 				 &dwc->fladj);
1038 
1039 	dwc->lpm_nyet_threshold = lpm_nyet_threshold;
1040 	dwc->tx_de_emphasis = tx_de_emphasis;
1041 
1042 	dwc->hird_threshold = hird_threshold
1043 		| (dwc->is_utmi_l1_suspend << 4);
1044 
1045 	platform_set_drvdata(pdev, dwc);
1046 	dwc3_cache_hwparams(dwc);
1047 
1048 	ret = dwc3_core_get_phy(dwc);
1049 	if (ret)
1050 		goto err0;
1051 
1052 	spin_lock_init(&dwc->lock);
1053 
1054 	if (!dev->dma_mask) {
1055 		dev->dma_mask = dev->parent->dma_mask;
1056 		dev->dma_parms = dev->parent->dma_parms;
1057 		dma_set_coherent_mask(dev, dev->parent->coherent_dma_mask);
1058 	}
1059 
1060 	pm_runtime_set_active(dev);
1061 	pm_runtime_use_autosuspend(dev);
1062 	pm_runtime_set_autosuspend_delay(dev, DWC3_DEFAULT_AUTOSUSPEND_DELAY);
1063 	pm_runtime_enable(dev);
1064 	ret = pm_runtime_get_sync(dev);
1065 	if (ret < 0)
1066 		goto err1;
1067 
1068 	pm_runtime_forbid(dev);
1069 
1070 	ret = dwc3_alloc_event_buffers(dwc, DWC3_EVENT_BUFFERS_SIZE);
1071 	if (ret) {
1072 		dev_err(dwc->dev, "failed to allocate event buffers\n");
1073 		ret = -ENOMEM;
1074 		goto err2;
1075 	}
1076 
1077 	ret = dwc3_get_dr_mode(dwc);
1078 	if (ret)
1079 		goto err3;
1080 
1081 	ret = dwc3_alloc_scratch_buffers(dwc);
1082 	if (ret)
1083 		goto err3;
1084 
1085 	ret = dwc3_core_init(dwc);
1086 	if (ret) {
1087 		dev_err(dev, "failed to initialize core\n");
1088 		goto err4;
1089 	}
1090 
1091 	/* Check the maximum_speed parameter */
1092 	switch (dwc->maximum_speed) {
1093 	case USB_SPEED_LOW:
1094 	case USB_SPEED_FULL:
1095 	case USB_SPEED_HIGH:
1096 	case USB_SPEED_SUPER:
1097 	case USB_SPEED_SUPER_PLUS:
1098 		break;
1099 	default:
1100 		dev_err(dev, "invalid maximum_speed parameter %d\n",
1101 			dwc->maximum_speed);
1102 		/* fall through */
1103 	case USB_SPEED_UNKNOWN:
1104 		/* default to superspeed */
1105 		dwc->maximum_speed = USB_SPEED_SUPER;
1106 
1107 		/*
1108 		 * default to superspeed plus if we are capable.
1109 		 */
1110 		if (dwc3_is_usb31(dwc) &&
1111 		    (DWC3_GHWPARAMS3_SSPHY_IFC(dwc->hwparams.hwparams3) ==
1112 		     DWC3_GHWPARAMS3_SSPHY_IFC_GEN2))
1113 			dwc->maximum_speed = USB_SPEED_SUPER_PLUS;
1114 
1115 		break;
1116 	}
1117 
1118 	ret = dwc3_core_init_mode(dwc);
1119 	if (ret)
1120 		goto err5;
1121 
1122 	dwc3_debugfs_init(dwc);
1123 	pm_runtime_put(dev);
1124 
1125 	return 0;
1126 
1127 err5:
1128 	dwc3_event_buffers_cleanup(dwc);
1129 
1130 err4:
1131 	dwc3_free_scratch_buffers(dwc);
1132 
1133 err3:
1134 	dwc3_free_event_buffers(dwc);
1135 	dwc3_ulpi_exit(dwc);
1136 
1137 err2:
1138 	pm_runtime_allow(&pdev->dev);
1139 
1140 err1:
1141 	pm_runtime_put_sync(&pdev->dev);
1142 	pm_runtime_disable(&pdev->dev);
1143 
1144 err0:
1145 	/*
1146 	 * restore res->start back to its original value so that, in case the
1147 	 * probe is deferred, we don't end up getting error in request the
1148 	 * memory region the next time probe is called.
1149 	 */
1150 	res->start -= DWC3_GLOBALS_REGS_START;
1151 
1152 	return ret;
1153 }
1154 
1155 static int dwc3_remove(struct platform_device *pdev)
1156 {
1157 	struct dwc3	*dwc = platform_get_drvdata(pdev);
1158 	struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1159 
1160 	pm_runtime_get_sync(&pdev->dev);
1161 	/*
1162 	 * restore res->start back to its original value so that, in case the
1163 	 * probe is deferred, we don't end up getting error in request the
1164 	 * memory region the next time probe is called.
1165 	 */
1166 	res->start -= DWC3_GLOBALS_REGS_START;
1167 
1168 	dwc3_debugfs_exit(dwc);
1169 	dwc3_core_exit_mode(dwc);
1170 
1171 	dwc3_core_exit(dwc);
1172 	dwc3_ulpi_exit(dwc);
1173 
1174 	pm_runtime_put_sync(&pdev->dev);
1175 	pm_runtime_allow(&pdev->dev);
1176 	pm_runtime_disable(&pdev->dev);
1177 
1178 	dwc3_free_event_buffers(dwc);
1179 	dwc3_free_scratch_buffers(dwc);
1180 
1181 	return 0;
1182 }
1183 
1184 #ifdef CONFIG_PM
1185 static int dwc3_suspend_common(struct dwc3 *dwc)
1186 {
1187 	unsigned long	flags;
1188 
1189 	switch (dwc->dr_mode) {
1190 	case USB_DR_MODE_PERIPHERAL:
1191 	case USB_DR_MODE_OTG:
1192 		spin_lock_irqsave(&dwc->lock, flags);
1193 		dwc3_gadget_suspend(dwc);
1194 		spin_unlock_irqrestore(&dwc->lock, flags);
1195 		break;
1196 	case USB_DR_MODE_HOST:
1197 	default:
1198 		/* do nothing */
1199 		break;
1200 	}
1201 
1202 	dwc3_core_exit(dwc);
1203 
1204 	return 0;
1205 }
1206 
1207 static int dwc3_resume_common(struct dwc3 *dwc)
1208 {
1209 	unsigned long	flags;
1210 	int		ret;
1211 
1212 	ret = dwc3_core_init(dwc);
1213 	if (ret)
1214 		return ret;
1215 
1216 	switch (dwc->dr_mode) {
1217 	case USB_DR_MODE_PERIPHERAL:
1218 	case USB_DR_MODE_OTG:
1219 		spin_lock_irqsave(&dwc->lock, flags);
1220 		dwc3_gadget_resume(dwc);
1221 		spin_unlock_irqrestore(&dwc->lock, flags);
1222 		/* FALLTHROUGH */
1223 	case USB_DR_MODE_HOST:
1224 	default:
1225 		/* do nothing */
1226 		break;
1227 	}
1228 
1229 	return 0;
1230 }
1231 
1232 static int dwc3_runtime_checks(struct dwc3 *dwc)
1233 {
1234 	switch (dwc->dr_mode) {
1235 	case USB_DR_MODE_PERIPHERAL:
1236 	case USB_DR_MODE_OTG:
1237 		if (dwc->connected)
1238 			return -EBUSY;
1239 		break;
1240 	case USB_DR_MODE_HOST:
1241 	default:
1242 		/* do nothing */
1243 		break;
1244 	}
1245 
1246 	return 0;
1247 }
1248 
1249 static int dwc3_runtime_suspend(struct device *dev)
1250 {
1251 	struct dwc3     *dwc = dev_get_drvdata(dev);
1252 	int		ret;
1253 
1254 	if (dwc3_runtime_checks(dwc))
1255 		return -EBUSY;
1256 
1257 	ret = dwc3_suspend_common(dwc);
1258 	if (ret)
1259 		return ret;
1260 
1261 	device_init_wakeup(dev, true);
1262 
1263 	return 0;
1264 }
1265 
1266 static int dwc3_runtime_resume(struct device *dev)
1267 {
1268 	struct dwc3     *dwc = dev_get_drvdata(dev);
1269 	int		ret;
1270 
1271 	device_init_wakeup(dev, false);
1272 
1273 	ret = dwc3_resume_common(dwc);
1274 	if (ret)
1275 		return ret;
1276 
1277 	switch (dwc->dr_mode) {
1278 	case USB_DR_MODE_PERIPHERAL:
1279 	case USB_DR_MODE_OTG:
1280 		dwc3_gadget_process_pending_events(dwc);
1281 		break;
1282 	case USB_DR_MODE_HOST:
1283 	default:
1284 		/* do nothing */
1285 		break;
1286 	}
1287 
1288 	pm_runtime_mark_last_busy(dev);
1289 	pm_runtime_put(dev);
1290 
1291 	return 0;
1292 }
1293 
1294 static int dwc3_runtime_idle(struct device *dev)
1295 {
1296 	struct dwc3     *dwc = dev_get_drvdata(dev);
1297 
1298 	switch (dwc->dr_mode) {
1299 	case USB_DR_MODE_PERIPHERAL:
1300 	case USB_DR_MODE_OTG:
1301 		if (dwc3_runtime_checks(dwc))
1302 			return -EBUSY;
1303 		break;
1304 	case USB_DR_MODE_HOST:
1305 	default:
1306 		/* do nothing */
1307 		break;
1308 	}
1309 
1310 	pm_runtime_mark_last_busy(dev);
1311 	pm_runtime_autosuspend(dev);
1312 
1313 	return 0;
1314 }
1315 #endif /* CONFIG_PM */
1316 
1317 #ifdef CONFIG_PM_SLEEP
1318 static int dwc3_suspend(struct device *dev)
1319 {
1320 	struct dwc3	*dwc = dev_get_drvdata(dev);
1321 	int		ret;
1322 
1323 	ret = dwc3_suspend_common(dwc);
1324 	if (ret)
1325 		return ret;
1326 
1327 	pinctrl_pm_select_sleep_state(dev);
1328 
1329 	return 0;
1330 }
1331 
1332 static int dwc3_resume(struct device *dev)
1333 {
1334 	struct dwc3	*dwc = dev_get_drvdata(dev);
1335 	int		ret;
1336 
1337 	pinctrl_pm_select_default_state(dev);
1338 
1339 	ret = dwc3_resume_common(dwc);
1340 	if (ret)
1341 		return ret;
1342 
1343 	pm_runtime_disable(dev);
1344 	pm_runtime_set_active(dev);
1345 	pm_runtime_enable(dev);
1346 
1347 	return 0;
1348 }
1349 #endif /* CONFIG_PM_SLEEP */
1350 
1351 static const struct dev_pm_ops dwc3_dev_pm_ops = {
1352 	SET_SYSTEM_SLEEP_PM_OPS(dwc3_suspend, dwc3_resume)
1353 	SET_RUNTIME_PM_OPS(dwc3_runtime_suspend, dwc3_runtime_resume,
1354 			dwc3_runtime_idle)
1355 };
1356 
1357 #ifdef CONFIG_OF
1358 static const struct of_device_id of_dwc3_match[] = {
1359 	{
1360 		.compatible = "snps,dwc3"
1361 	},
1362 	{
1363 		.compatible = "synopsys,dwc3"
1364 	},
1365 	{ },
1366 };
1367 MODULE_DEVICE_TABLE(of, of_dwc3_match);
1368 #endif
1369 
1370 #ifdef CONFIG_ACPI
1371 
1372 #define ACPI_ID_INTEL_BSW	"808622B7"
1373 
1374 static const struct acpi_device_id dwc3_acpi_match[] = {
1375 	{ ACPI_ID_INTEL_BSW, 0 },
1376 	{ },
1377 };
1378 MODULE_DEVICE_TABLE(acpi, dwc3_acpi_match);
1379 #endif
1380 
1381 static struct platform_driver dwc3_driver = {
1382 	.probe		= dwc3_probe,
1383 	.remove		= dwc3_remove,
1384 	.driver		= {
1385 		.name	= "dwc3",
1386 		.of_match_table	= of_match_ptr(of_dwc3_match),
1387 		.acpi_match_table = ACPI_PTR(dwc3_acpi_match),
1388 		.pm	= &dwc3_dev_pm_ops,
1389 	},
1390 };
1391 
1392 module_platform_driver(dwc3_driver);
1393 
1394 MODULE_ALIAS("platform:dwc3");
1395 MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
1396 MODULE_LICENSE("GPL v2");
1397 MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver");
1398