xref: /netbsd/sys/external/bsd/dwc2/dist/dwc2_core.c (revision b938fbb9)
1 /*	$NetBSD: dwc2_core.c,v 1.13 2016/02/24 22:17:54 skrll Exp $	*/
2 
3 /*
4  * core.c - DesignWare HS OTG Controller common routines
5  *
6  * Copyright (C) 2004-2013 Synopsys, Inc.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions, and the following disclaimer,
13  *    without modification.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  * 3. The names of the above-listed copyright holders may not be used
18  *    to endorse or promote products derived from this software without
19  *    specific prior written permission.
20  *
21  * ALTERNATIVELY, this software may be distributed under the terms of the
22  * GNU General Public License ("GPL") as published by the Free Software
23  * Foundation; either version 2 of the License, or (at your option) any
24  * later version.
25  *
26  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
27  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
28  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
30  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37  */
38 
39 /*
40  * The Core code provides basic services for accessing and managing the
41  * DWC_otg hardware. These services are used by both the Host Controller
42  * Driver and the Peripheral Controller Driver.
43  */
44 
45 #include <sys/cdefs.h>
46 __KERNEL_RCSID(0, "$NetBSD: dwc2_core.c,v 1.13 2016/02/24 22:17:54 skrll Exp $");
47 
48 #include <sys/types.h>
49 #include <sys/bus.h>
50 #include <sys/proc.h>
51 #include <sys/callout.h>
52 #include <sys/mutex.h>
53 #include <sys/pool.h>
54 
55 #include <dev/usb/usb.h>
56 #include <dev/usb/usbdi.h>
57 #include <dev/usb/usbdivar.h>
58 #include <dev/usb/usb_mem.h>
59 
60 #include <linux/kernel.h>
61 #include <linux/list.h>
62 
63 #include <dwc2/dwc2.h>
64 #include <dwc2/dwc2var.h>
65 
66 #include "dwc2_core.h"
67 #include "dwc2_hcd.h"
68 
69 #if IS_ENABLED(CONFIG_USB_DWC2_HOST) || IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)
70 /**
71  * dwc2_backup_host_registers() - Backup controller host registers.
72  * When suspending usb bus, registers needs to be backuped
73  * if controller power is disabled once suspended.
74  *
75  * @hsotg: Programming view of the DWC_otg controller
76  */
dwc2_backup_host_registers(struct dwc2_hsotg * hsotg)77 static int dwc2_backup_host_registers(struct dwc2_hsotg *hsotg)
78 {
79 	struct dwc2_hregs_backup *hr;
80 	int i;
81 
82 	dev_dbg(hsotg->dev, "%s\n", __func__);
83 
84 	/* Backup Host regs */
85 	hr = &hsotg->hr_backup;
86 	hr->hcfg = DWC2_READ_4(hsotg, HCFG);
87 	hr->haintmsk = DWC2_READ_4(hsotg, HAINTMSK);
88 	for (i = 0; i < hsotg->core_params->host_channels; ++i)
89 		hr->hcintmsk[i] = DWC2_READ_4(hsotg, HCINTMSK(i));
90 
91 	hr->hprt0 = DWC2_READ_4(hsotg, HPRT0);
92 	hr->hfir = DWC2_READ_4(hsotg, HFIR);
93 	hr->valid = true;
94 
95 	return 0;
96 }
97 
98 /**
99  * dwc2_restore_host_registers() - Restore controller host registers.
100  * When resuming usb bus, device registers needs to be restored
101  * if controller power were disabled.
102  *
103  * @hsotg: Programming view of the DWC_otg controller
104  */
dwc2_restore_host_registers(struct dwc2_hsotg * hsotg)105 static int dwc2_restore_host_registers(struct dwc2_hsotg *hsotg)
106 {
107 	struct dwc2_hregs_backup *hr;
108 	int i;
109 
110 	dev_dbg(hsotg->dev, "%s\n", __func__);
111 
112 	/* Restore host regs */
113 	hr = &hsotg->hr_backup;
114 	if (!hr->valid) {
115 		dev_err(hsotg->dev, "%s: no host registers to restore\n",
116 				__func__);
117 		return -EINVAL;
118 	}
119 	hr->valid = false;
120 
121 	DWC2_WRITE_4(hsotg, HCFG, hr->hcfg);
122 	DWC2_WRITE_4(hsotg, HAINTMSK, hr->haintmsk);
123 
124 	for (i = 0; i < hsotg->core_params->host_channels; ++i)
125 		DWC2_WRITE_4(hsotg, HCINTMSK(i), hr->hcintmsk[i]);
126 
127 	DWC2_WRITE_4(hsotg, HPRT0, hr->hprt0);
128 	DWC2_WRITE_4(hsotg, HFIR, hr->hfir);
129 	hsotg->frame_number = 0;
130 
131 	return 0;
132 }
133 #else
dwc2_backup_host_registers(struct dwc2_hsotg * hsotg)134 static inline int dwc2_backup_host_registers(struct dwc2_hsotg *hsotg)
135 { return 0; }
136 
dwc2_restore_host_registers(struct dwc2_hsotg * hsotg)137 static inline int dwc2_restore_host_registers(struct dwc2_hsotg *hsotg)
138 { return 0; }
139 #endif
140 
141 #if IS_ENABLED(CONFIG_USB_DWC2_PERIPHERAL) || \
142 	IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)
143 /**
144  * dwc2_backup_device_registers() - Backup controller device registers.
145  * When suspending usb bus, registers needs to be backuped
146  * if controller power is disabled once suspended.
147  *
148  * @hsotg: Programming view of the DWC_otg controller
149  */
dwc2_backup_device_registers(struct dwc2_hsotg * hsotg)150 static int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg)
151 {
152 	struct dwc2_dregs_backup *dr;
153 	int i;
154 
155 	dev_dbg(hsotg->dev, "%s\n", __func__);
156 
157 	/* Backup dev regs */
158 	dr = &hsotg->dr_backup;
159 
160 	dr->dcfg = DWC2_READ_4(hsotg, DCFG);
161 	dr->dctl = DWC2_READ_4(hsotg, DCTL);
162 	dr->daintmsk = DWC2_READ_4(hsotg, DAINTMSK);
163 	dr->diepmsk = DWC2_READ_4(hsotg, DIEPMSK);
164 	dr->doepmsk = DWC2_READ_4(hsotg, DOEPMSK);
165 
166 	for (i = 0; i < hsotg->num_of_eps; i++) {
167 		/* Backup IN EPs */
168 		dr->diepctl[i] = DWC2_READ_4(hsotg, DIEPCTL(i));
169 
170 		/* Ensure DATA PID is correctly configured */
171 		if (dr->diepctl[i] & DXEPCTL_DPID)
172 			dr->diepctl[i] |= DXEPCTL_SETD1PID;
173 		else
174 			dr->diepctl[i] |= DXEPCTL_SETD0PID;
175 
176 		dr->dieptsiz[i] = DWC2_READ_4(hsotg, DIEPTSIZ(i));
177 		dr->diepdma[i] = DWC2_READ_4(hsotg, DIEPDMA(i));
178 
179 		/* Backup OUT EPs */
180 		dr->doepctl[i] = DWC2_READ_4(hsotg, DOEPCTL(i));
181 
182 		/* Ensure DATA PID is correctly configured */
183 		if (dr->doepctl[i] & DXEPCTL_DPID)
184 			dr->doepctl[i] |= DXEPCTL_SETD1PID;
185 		else
186 			dr->doepctl[i] |= DXEPCTL_SETD0PID;
187 
188 		dr->doeptsiz[i] = DWC2_READ_4(hsotg, DOEPTSIZ(i));
189 		dr->doepdma[i] = DWC2_READ_4(hsotg, DOEPDMA(i));
190 	}
191 	dr->valid = true;
192 	return 0;
193 }
194 
195 /**
196  * dwc2_restore_device_registers() - Restore controller device registers.
197  * When resuming usb bus, device registers needs to be restored
198  * if controller power were disabled.
199  *
200  * @hsotg: Programming view of the DWC_otg controller
201  */
dwc2_restore_device_registers(struct dwc2_hsotg * hsotg)202 static int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg)
203 {
204 	struct dwc2_dregs_backup *dr;
205 	u32 dctl;
206 	int i;
207 
208 	dev_dbg(hsotg->dev, "%s\n", __func__);
209 
210 	/* Restore dev regs */
211 	dr = &hsotg->dr_backup;
212 	if (!dr->valid) {
213 		dev_err(hsotg->dev, "%s: no device registers to restore\n",
214 				__func__);
215 		return -EINVAL;
216 	}
217 	dr->valid = false;
218 
219 	DWC2_WRITE_4(hsotg, DCFG, dr->dcfg);
220 	DWC2_WRITE_4(hsotg, DCTL, dr->dctl);
221 	DWC2_WRITE_4(hsotg, DAINTMSK, dr->daintmsk);
222 	DWC2_WRITE_4(hsotg, DIEPMSK, dr->diepmsk);
223 	DWC2_WRITE_4(hsotg, DOEPMSK, dr->doepmsk);
224 
225 	for (i = 0; i < hsotg->num_of_eps; i++) {
226 		/* Restore IN EPs */
227 		DWC2_WRITE_4(hsotg, DIEPCTL(i), dr->diepctl[i]);
228 		DWC2_WRITE_4(hsotg, DIEPTSIZ(i), dr->dieptsiz[i]);
229 		DWC2_WRITE_4(hsotg, DIEPDMA(i), dr->diepdma[i]);
230 
231 		/* Restore OUT EPs */
232 		DWC2_WRITE_4(hsotg, DOEPCTL(i), dr->doepctl[i]);
233 		DWC2_WRITE_4(hsotg, DOEPTSIZ(i), dr->doeptsiz[i]);
234 		DWC2_WRITE_4(hsotg, DOEPDMA(i), dr->doepdma[i]);
235 	}
236 
237 	/* Set the Power-On Programming done bit */
238 	dctl = DWC2_READ_4(hsotg, DCTL);
239 	dctl |= DCTL_PWRONPRGDONE;
240 	DWC2_WRITE_4(hsotg, DCTL, dctl);
241 
242 	return 0;
243 }
244 #else
dwc2_backup_device_registers(struct dwc2_hsotg * hsotg)245 static inline int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg)
246 { return 0; }
247 
dwc2_restore_device_registers(struct dwc2_hsotg * hsotg)248 static inline int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg)
249 { return 0; }
250 #endif
251 
252 /**
253  * dwc2_backup_global_registers() - Backup global controller registers.
254  * When suspending usb bus, registers needs to be backuped
255  * if controller power is disabled once suspended.
256  *
257  * @hsotg: Programming view of the DWC_otg controller
258  */
dwc2_backup_global_registers(struct dwc2_hsotg * hsotg)259 static int dwc2_backup_global_registers(struct dwc2_hsotg *hsotg)
260 {
261 	struct dwc2_gregs_backup *gr;
262 	int i;
263 
264 	/* Backup global regs */
265 	gr = &hsotg->gr_backup;
266 
267 	gr->gotgctl = DWC2_READ_4(hsotg, GOTGCTL);
268 	gr->gintmsk = DWC2_READ_4(hsotg, GINTMSK);
269 	gr->gahbcfg = DWC2_READ_4(hsotg, GAHBCFG);
270 	gr->gusbcfg = DWC2_READ_4(hsotg, GUSBCFG);
271 	gr->grxfsiz = DWC2_READ_4(hsotg, GRXFSIZ);
272 	gr->gnptxfsiz = DWC2_READ_4(hsotg, GNPTXFSIZ);
273 	gr->hptxfsiz = DWC2_READ_4(hsotg, HPTXFSIZ);
274 	gr->gdfifocfg = DWC2_READ_4(hsotg, GDFIFOCFG);
275 	for (i = 0; i < MAX_EPS_CHANNELS; i++)
276 		gr->dtxfsiz[i] = DWC2_READ_4(hsotg, DPTXFSIZN(i));
277 
278 	gr->valid = true;
279 	return 0;
280 }
281 
282 /**
283  * dwc2_restore_global_registers() - Restore controller global registers.
284  * When resuming usb bus, device registers needs to be restored
285  * if controller power were disabled.
286  *
287  * @hsotg: Programming view of the DWC_otg controller
288  */
dwc2_restore_global_registers(struct dwc2_hsotg * hsotg)289 static int dwc2_restore_global_registers(struct dwc2_hsotg *hsotg)
290 {
291 	struct dwc2_gregs_backup *gr;
292 	int i;
293 
294 	dev_dbg(hsotg->dev, "%s\n", __func__);
295 
296 	/* Restore global regs */
297 	gr = &hsotg->gr_backup;
298 	if (!gr->valid) {
299 		dev_err(hsotg->dev, "%s: no global registers to restore\n",
300 				__func__);
301 		return -EINVAL;
302 	}
303 	gr->valid = false;
304 
305 	DWC2_WRITE_4(hsotg, GINTSTS, 0xffffffff);
306 	DWC2_WRITE_4(hsotg, GOTGCTL, gr->gotgctl);
307 	DWC2_WRITE_4(hsotg, GINTMSK, gr->gintmsk);
308 	DWC2_WRITE_4(hsotg, GUSBCFG, gr->gusbcfg);
309 	DWC2_WRITE_4(hsotg, GAHBCFG, gr->gahbcfg);
310 	DWC2_WRITE_4(hsotg, GRXFSIZ, gr->grxfsiz);
311 	DWC2_WRITE_4(hsotg, GNPTXFSIZ, gr->gnptxfsiz);
312 	DWC2_WRITE_4(hsotg, HPTXFSIZ, gr->hptxfsiz);
313 	DWC2_WRITE_4(hsotg, GDFIFOCFG, gr->gdfifocfg);
314 	for (i = 0; i < MAX_EPS_CHANNELS; i++)
315 		DWC2_WRITE_4(hsotg, DPTXFSIZN(i), gr->dtxfsiz[i]);
316 
317 	return 0;
318 }
319 
320 /**
321  * dwc2_exit_hibernation() - Exit controller from Partial Power Down.
322  *
323  * @hsotg: Programming view of the DWC_otg controller
324  * @restore: Controller registers need to be restored
325  */
dwc2_exit_hibernation(struct dwc2_hsotg * hsotg,bool restore)326 int dwc2_exit_hibernation(struct dwc2_hsotg *hsotg, bool restore)
327 {
328 	u32 pcgcctl;
329 	int ret = 0;
330 
331 	if (!hsotg->core_params->hibernation)
332 		return -ENOTSUPP;
333 
334 	pcgcctl = DWC2_READ_4(hsotg, PCGCTL);
335 	pcgcctl &= ~PCGCTL_STOPPCLK;
336 	DWC2_WRITE_4(hsotg, PCGCTL, pcgcctl);
337 
338 	pcgcctl = DWC2_READ_4(hsotg, PCGCTL);
339 	pcgcctl &= ~PCGCTL_PWRCLMP;
340 	DWC2_WRITE_4(hsotg, PCGCTL, pcgcctl);
341 
342 	pcgcctl = DWC2_READ_4(hsotg, PCGCTL);
343 	pcgcctl &= ~PCGCTL_RSTPDWNMODULE;
344 	DWC2_WRITE_4(hsotg, PCGCTL, pcgcctl);
345 
346 	udelay(100);
347 	if (restore) {
348 		ret = dwc2_restore_global_registers(hsotg);
349 		if (ret) {
350 			dev_err(hsotg->dev, "%s: failed to restore registers\n",
351 					__func__);
352 			return ret;
353 		}
354 		if (dwc2_is_host_mode(hsotg)) {
355 			ret = dwc2_restore_host_registers(hsotg);
356 			if (ret) {
357 				dev_err(hsotg->dev, "%s: failed to restore host registers\n",
358 						__func__);
359 				return ret;
360 			}
361 		} else {
362 			ret = dwc2_restore_device_registers(hsotg);
363 			if (ret) {
364 				dev_err(hsotg->dev, "%s: failed to restore device registers\n",
365 						__func__);
366 				return ret;
367 			}
368 		}
369 	}
370 
371 	return ret;
372 }
373 
374 /**
375  * dwc2_enter_hibernation() - Put controller in Partial Power Down.
376  *
377  * @hsotg: Programming view of the DWC_otg controller
378  */
dwc2_enter_hibernation(struct dwc2_hsotg * hsotg)379 int dwc2_enter_hibernation(struct dwc2_hsotg *hsotg)
380 {
381 	u32 pcgcctl;
382 	int ret = 0;
383 
384 	if (!hsotg->core_params->hibernation)
385 		return -ENOTSUPP;
386 
387 	/* Backup all registers */
388 	ret = dwc2_backup_global_registers(hsotg);
389 	if (ret) {
390 		dev_err(hsotg->dev, "%s: failed to backup global registers\n",
391 				__func__);
392 		return ret;
393 	}
394 
395 	if (dwc2_is_host_mode(hsotg)) {
396 		ret = dwc2_backup_host_registers(hsotg);
397 		if (ret) {
398 			dev_err(hsotg->dev, "%s: failed to backup host registers\n",
399 					__func__);
400 			return ret;
401 		}
402 	} else {
403 		ret = dwc2_backup_device_registers(hsotg);
404 		if (ret) {
405 			dev_err(hsotg->dev, "%s: failed to backup device registers\n",
406 					__func__);
407 			return ret;
408 		}
409 	}
410 
411 	/*
412 	 * Clear any pending interrupts since dwc2 will not be able to
413 	 * clear them after entering hibernation.
414 	 */
415 	DWC2_WRITE_4(hsotg, GINTSTS, 0xffffffff);
416 
417 	/* Put the controller in low power state */
418 	pcgcctl = DWC2_READ_4(hsotg, PCGCTL);
419 
420 	pcgcctl |= PCGCTL_PWRCLMP;
421 	DWC2_WRITE_4(hsotg, PCGCTL, pcgcctl);
422 	ndelay(20);
423 
424 	pcgcctl |= PCGCTL_RSTPDWNMODULE;
425 	DWC2_WRITE_4(hsotg, PCGCTL, pcgcctl);
426 	ndelay(20);
427 
428 	pcgcctl |= PCGCTL_STOPPCLK;
429 	DWC2_WRITE_4(hsotg, PCGCTL, pcgcctl);
430 
431 	return ret;
432 }
433 
434 /**
435  * dwc2_enable_common_interrupts() - Initializes the commmon interrupts,
436  * used in both device and host modes
437  *
438  * @hsotg: Programming view of the DWC_otg controller
439  */
dwc2_enable_common_interrupts(struct dwc2_hsotg * hsotg)440 static void dwc2_enable_common_interrupts(struct dwc2_hsotg *hsotg)
441 {
442 	u32 intmsk;
443 
444 	/* Clear any pending OTG Interrupts */
445 	DWC2_WRITE_4(hsotg, GOTGINT, 0xffffffff);
446 
447 	/* Clear any pending interrupts */
448 	DWC2_WRITE_4(hsotg, GINTSTS, 0xffffffff);
449 
450 	/* Enable the interrupts in the GINTMSK */
451 	intmsk = GINTSTS_MODEMIS | GINTSTS_OTGINT;
452 
453 	if (hsotg->core_params->dma_enable <= 0)
454 		intmsk |= GINTSTS_RXFLVL;
455 	if (hsotg->core_params->external_id_pin_ctl <= 0)
456 		intmsk |= GINTSTS_CONIDSTSCHNG;
457 
458 	intmsk |= GINTSTS_WKUPINT | GINTSTS_USBSUSP |
459 		  GINTSTS_SESSREQINT;
460 
461 	DWC2_WRITE_4(hsotg, GINTMSK, intmsk);
462 }
463 
464 /*
465  * Initializes the FSLSPClkSel field of the HCFG register depending on the
466  * PHY type
467  */
dwc2_init_fs_ls_pclk_sel(struct dwc2_hsotg * hsotg)468 static void dwc2_init_fs_ls_pclk_sel(struct dwc2_hsotg *hsotg)
469 {
470 	u32 hcfg, val;
471 
472 	if ((hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_ULPI &&
473 	     hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED &&
474 	     hsotg->core_params->ulpi_fs_ls > 0) ||
475 	    hsotg->core_params->phy_type == DWC2_PHY_TYPE_PARAM_FS) {
476 		/* Full speed PHY */
477 		val = HCFG_FSLSPCLKSEL_48_MHZ;
478 	} else {
479 		/* High speed PHY running at full speed or high speed */
480 		val = HCFG_FSLSPCLKSEL_30_60_MHZ;
481 	}
482 
483 	dev_dbg(hsotg->dev, "Initializing HCFG.FSLSPClkSel to %08x\n", val);
484 	hcfg = DWC2_READ_4(hsotg, HCFG);
485 	hcfg &= ~HCFG_FSLSPCLKSEL_MASK;
486 	hcfg |= val << HCFG_FSLSPCLKSEL_SHIFT;
487 	DWC2_WRITE_4(hsotg, HCFG, hcfg);
488 }
489 
490 /*
491  * Do core a soft reset of the core.  Be careful with this because it
492  * resets all the internal state machines of the core.
493  */
dwc2_core_reset(struct dwc2_hsotg * hsotg)494 int dwc2_core_reset(struct dwc2_hsotg *hsotg)
495 {
496 	u32 greset;
497 	int count = 0;
498 
499 	dev_vdbg(hsotg->dev, "%s()\n", __func__);
500 
501 	/* Core Soft Reset */
502 	greset = DWC2_READ_4(hsotg, GRSTCTL);
503 	greset |= GRSTCTL_CSFTRST;
504 	DWC2_WRITE_4(hsotg, GRSTCTL, greset);
505 	do {
506 		udelay(1);
507 		greset = DWC2_READ_4(hsotg, GRSTCTL);
508 		if (++count > 50) {
509 			dev_warn(hsotg->dev,
510 				 "%s() HANG! Soft Reset GRSTCTL=%0x\n",
511 				 __func__, greset);
512 			return -EBUSY;
513 		}
514 	} while (greset & GRSTCTL_CSFTRST);
515 
516 	/* Wait for AHB master IDLE state */
517 	count = 0;
518 	do {
519 		udelay(1);
520 		greset = DWC2_READ_4(hsotg, GRSTCTL);
521 		if (++count > 50) {
522 			dev_warn(hsotg->dev,
523 				 "%s() HANG! AHB Idle GRSTCTL=%0x\n",
524 				 __func__, greset);
525 			return -EBUSY;
526 		}
527 	} while (!(greset & GRSTCTL_AHBIDLE));
528 
529 	return 0;
530 }
531 
532 /*
533  * Force the mode of the controller.
534  *
535  * Forcing the mode is needed for two cases:
536  *
537  * 1) If the dr_mode is set to either HOST or PERIPHERAL we force the
538  * controller to stay in a particular mode regardless of ID pin
539  * changes. We do this usually after a core reset.
540  *
541  * 2) During probe we want to read reset values of the hw
542  * configuration registers that are only available in either host or
543  * device mode. We may need to force the mode if the current mode does
544  * not allow us to access the register in the mode that we want.
545  *
546  * In either case it only makes sense to force the mode if the
547  * controller hardware is OTG capable.
548  *
549  * Checks are done in this function to determine whether doing a force
550  * would be valid or not.
551  *
552  * If a force is done, it requires a 25ms delay to take effect.
553  *
554  * Returns true if the mode was forced.
555  */
dwc2_force_mode(struct dwc2_hsotg * hsotg,bool host)556 static bool dwc2_force_mode(struct dwc2_hsotg *hsotg, bool host)
557 {
558 	u32 gusbcfg;
559 	u32 set;
560 	u32 clear;
561 
562 	dev_dbg(hsotg->dev, "Forcing mode to %s\n", host ? "host" : "device");
563 
564 	/*
565 	 * Force mode has no effect if the hardware is not OTG.
566 	 */
567 	if (!dwc2_hw_is_otg(hsotg))
568 		return false;
569 
570 	/*
571 	 * If dr_mode is either peripheral or host only, there is no
572 	 * need to ever force the mode to the opposite mode.
573 	 */
574 	if (host && hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) {
575 		WARN_ON(1);
576 		return false;
577 	}
578 
579 	if (!host && hsotg->dr_mode == USB_DR_MODE_HOST) {
580 		WARN_ON(1);
581 		return false;
582 	}
583 
584 	gusbcfg = DWC2_READ_4(hsotg, GUSBCFG);
585 
586 	set = host ? GUSBCFG_FORCEHOSTMODE : GUSBCFG_FORCEDEVMODE;
587 	clear = host ? GUSBCFG_FORCEDEVMODE : GUSBCFG_FORCEHOSTMODE;
588 
589 	gusbcfg &= ~clear;
590 	gusbcfg |= set;
591 	DWC2_WRITE_4(hsotg, GUSBCFG, gusbcfg);
592 
593 	msleep(25);
594 	return true;
595 }
596 
597 /*
598  * Clears the force mode bits.
599  */
dwc2_clear_force_mode(struct dwc2_hsotg * hsotg)600 static void dwc2_clear_force_mode(struct dwc2_hsotg *hsotg)
601 {
602 	u32 gusbcfg;
603 
604 	gusbcfg = DWC2_READ_4(hsotg, GUSBCFG);
605 	gusbcfg &= ~GUSBCFG_FORCEHOSTMODE;
606 	gusbcfg &= ~GUSBCFG_FORCEDEVMODE;
607 	DWC2_WRITE_4(hsotg, GUSBCFG, gusbcfg);
608 
609 	/*
610 	 * NOTE: This long sleep is _very_ important, otherwise the core will
611 	 * not stay in host mode after a connector ID change!
612 	 */
613 	msleep(25);
614 }
615 
616 /*
617  * Sets or clears force mode based on the dr_mode parameter.
618  */
dwc2_force_dr_mode(struct dwc2_hsotg * hsotg)619 void dwc2_force_dr_mode(struct dwc2_hsotg *hsotg)
620 {
621 	switch (hsotg->dr_mode) {
622 	case USB_DR_MODE_HOST:
623 		dwc2_force_mode(hsotg, true);
624 		break;
625 	case USB_DR_MODE_PERIPHERAL:
626 		dwc2_force_mode(hsotg, false);
627 		break;
628 	case USB_DR_MODE_OTG:
629 		dwc2_clear_force_mode(hsotg);
630 		break;
631 	default:
632 		dev_warn(hsotg->dev, "%s() Invalid dr_mode=%d\n",
633 			 __func__, hsotg->dr_mode);
634 		break;
635 	}
636 }
637 
638 /*
639  * Do core a soft reset of the core.  Be careful with this because it
640  * resets all the internal state machines of the core.
641  *
642  * Additionally this will apply force mode as per the hsotg->dr_mode
643  * parameter.
644  */
dwc2_core_reset_and_force_dr_mode(struct dwc2_hsotg * hsotg)645 int dwc2_core_reset_and_force_dr_mode(struct dwc2_hsotg *hsotg)
646 {
647 	int retval;
648 
649 	retval = dwc2_core_reset(hsotg);
650 	if (retval)
651 		return retval;
652 
653 	dwc2_force_dr_mode(hsotg);
654 	return 0;
655 }
656 
dwc2_fs_phy_init(struct dwc2_hsotg * hsotg,bool select_phy)657 static int dwc2_fs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
658 {
659 	u32 usbcfg, i2cctl;
660 	int retval = 0;
661 
662 	/*
663 	 * core_init() is now called on every switch so only call the
664 	 * following for the first time through
665 	 */
666 	if (select_phy) {
667 		dev_dbg(hsotg->dev, "FS PHY selected\n");
668 
669 		usbcfg = DWC2_READ_4(hsotg, GUSBCFG);
670 		if (!(usbcfg & GUSBCFG_PHYSEL)) {
671 			usbcfg |= GUSBCFG_PHYSEL;
672 			DWC2_WRITE_4(hsotg, GUSBCFG, usbcfg);
673 
674 			/* Reset after a PHY select */
675 			retval = dwc2_core_reset_and_force_dr_mode(hsotg);
676 
677 			if (retval) {
678 				dev_err(hsotg->dev,
679 					"%s: Reset failed, aborting", __func__);
680 				return retval;
681 			}
682 		}
683 	}
684 
685 	/*
686 	 * Program DCFG.DevSpd or HCFG.FSLSPclkSel to 48Mhz in FS. Also
687 	 * do this on HNP Dev/Host mode switches (done in dev_init and
688 	 * host_init).
689 	 */
690 	if (dwc2_is_host_mode(hsotg))
691 		dwc2_init_fs_ls_pclk_sel(hsotg);
692 
693 	if (hsotg->core_params->i2c_enable > 0) {
694 		dev_dbg(hsotg->dev, "FS PHY enabling I2C\n");
695 
696 		/* Program GUSBCFG.OtgUtmiFsSel to I2C */
697 		usbcfg = DWC2_READ_4(hsotg, GUSBCFG);
698 		usbcfg |= GUSBCFG_OTG_UTMI_FS_SEL;
699 		DWC2_WRITE_4(hsotg, GUSBCFG, usbcfg);
700 
701 		/* Program GI2CCTL.I2CEn */
702 		i2cctl = DWC2_READ_4(hsotg, GI2CCTL);
703 		i2cctl &= ~GI2CCTL_I2CDEVADDR_MASK;
704 		i2cctl |= 1 << GI2CCTL_I2CDEVADDR_SHIFT;
705 		i2cctl &= ~GI2CCTL_I2CEN;
706 		DWC2_WRITE_4(hsotg, GI2CCTL, i2cctl);
707 		i2cctl |= GI2CCTL_I2CEN;
708 		DWC2_WRITE_4(hsotg, GI2CCTL, i2cctl);
709 	}
710 
711 	return retval;
712 }
713 
dwc2_hs_phy_init(struct dwc2_hsotg * hsotg,bool select_phy)714 static int dwc2_hs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
715 {
716 	u32 usbcfg, usbcfg_old;
717 	int retval = 0;
718 
719 	if (!select_phy)
720 		return 0;
721 
722 	usbcfg = usbcfg_old = DWC2_READ_4(hsotg, GUSBCFG);
723 
724 	/*
725 	 * HS PHY parameters. These parameters are preserved during soft reset
726 	 * so only program the first time. Do a soft reset immediately after
727 	 * setting phyif.
728 	 */
729 	switch (hsotg->core_params->phy_type) {
730 	case DWC2_PHY_TYPE_PARAM_ULPI:
731 		/* ULPI interface */
732 		dev_dbg(hsotg->dev, "HS ULPI PHY selected\n");
733 		usbcfg |= GUSBCFG_ULPI_UTMI_SEL;
734 		usbcfg &= ~(GUSBCFG_PHYIF16 | GUSBCFG_DDRSEL);
735 		if (hsotg->core_params->phy_ulpi_ddr > 0)
736 			usbcfg |= GUSBCFG_DDRSEL;
737 		break;
738 	case DWC2_PHY_TYPE_PARAM_UTMI:
739 		/* UTMI+ interface */
740 		dev_dbg(hsotg->dev, "HS UTMI+ PHY selected\n");
741 		usbcfg &= ~(GUSBCFG_ULPI_UTMI_SEL | GUSBCFG_PHYIF16);
742 		if (hsotg->core_params->phy_utmi_width == 16)
743 			usbcfg |= GUSBCFG_PHYIF16;
744 		break;
745 	default:
746 		dev_err(hsotg->dev, "FS PHY selected at HS!\n");
747 		break;
748 	}
749 
750 	if (usbcfg != usbcfg_old) {
751 		DWC2_WRITE_4(hsotg, GUSBCFG, usbcfg);
752 
753 		/* Reset after setting the PHY parameters */
754 		retval = dwc2_core_reset_and_force_dr_mode(hsotg);
755 		if (retval) {
756 			dev_err(hsotg->dev,
757 				"%s: Reset failed, aborting", __func__);
758 			return retval;
759 		}
760 	}
761 
762 	return retval;
763 }
764 
dwc2_phy_init(struct dwc2_hsotg * hsotg,bool select_phy)765 static int dwc2_phy_init(struct dwc2_hsotg *hsotg, bool select_phy)
766 {
767 	u32 usbcfg;
768 	int retval = 0;
769 
770 	if (hsotg->core_params->speed == DWC2_SPEED_PARAM_FULL &&
771 	    hsotg->core_params->phy_type == DWC2_PHY_TYPE_PARAM_FS) {
772 		/* If FS mode with FS PHY */
773 		retval = dwc2_fs_phy_init(hsotg, select_phy);
774 		if (retval)
775 			return retval;
776 	} else {
777 		/* High speed PHY */
778 		retval = dwc2_hs_phy_init(hsotg, select_phy);
779 		if (retval)
780 			return retval;
781 	}
782 
783 	if (hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_ULPI &&
784 	    hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED &&
785 	    hsotg->core_params->ulpi_fs_ls > 0) {
786 		dev_dbg(hsotg->dev, "Setting ULPI FSLS\n");
787 		usbcfg = DWC2_READ_4(hsotg, GUSBCFG);
788 		usbcfg |= GUSBCFG_ULPI_FS_LS;
789 		usbcfg |= GUSBCFG_ULPI_CLK_SUSP_M;
790 		DWC2_WRITE_4(hsotg, GUSBCFG, usbcfg);
791 	} else {
792 		usbcfg = DWC2_READ_4(hsotg, GUSBCFG);
793 		usbcfg &= ~GUSBCFG_ULPI_FS_LS;
794 		usbcfg &= ~GUSBCFG_ULPI_CLK_SUSP_M;
795 		DWC2_WRITE_4(hsotg, GUSBCFG, usbcfg);
796 	}
797 
798 	return retval;
799 }
800 
dwc2_gahbcfg_init(struct dwc2_hsotg * hsotg)801 static int dwc2_gahbcfg_init(struct dwc2_hsotg *hsotg)
802 {
803 	struct dwc2_softc *sc = hsotg->hsotg_sc;
804 	u32 ahbcfg = DWC2_READ_4(hsotg, GAHBCFG);
805 
806 	switch (hsotg->hw_params.arch) {
807 	case GHWCFG2_EXT_DMA_ARCH:
808 		dev_dbg(hsotg->dev, "External DMA Mode\n");
809 		if (!sc->sc_set_dma_addr) {
810 			dev_err(hsotg->dev, "External DMA Mode not supported\n");
811 			return -EINVAL;
812 		}
813 		if (hsotg->core_params->ahbcfg != -1) {
814 			ahbcfg &= GAHBCFG_CTRL_MASK;
815 			ahbcfg |= hsotg->core_params->ahbcfg &
816 				  ~GAHBCFG_CTRL_MASK;
817 		}
818 		break;
819 
820 	case GHWCFG2_INT_DMA_ARCH:
821 		dev_dbg(hsotg->dev, "Internal DMA Mode\n");
822 		if (hsotg->core_params->ahbcfg != -1) {
823 			ahbcfg &= GAHBCFG_CTRL_MASK;
824 			ahbcfg |= hsotg->core_params->ahbcfg &
825 				  ~GAHBCFG_CTRL_MASK;
826 		}
827 		break;
828 
829 	case GHWCFG2_SLAVE_ONLY_ARCH:
830 	default:
831 		dev_dbg(hsotg->dev, "Slave Only Mode\n");
832 		break;
833 	}
834 
835 	dev_dbg(hsotg->dev, "dma_enable:%d dma_desc_enable:%d\n",
836 		hsotg->core_params->dma_enable,
837 		hsotg->core_params->dma_desc_enable);
838 
839 	if (hsotg->core_params->dma_enable > 0) {
840 		if (hsotg->core_params->dma_desc_enable > 0)
841 			dev_dbg(hsotg->dev, "Using Descriptor DMA mode\n");
842 		else
843 			dev_dbg(hsotg->dev, "Using Buffer DMA mode\n");
844 	} else {
845 		dev_dbg(hsotg->dev, "Using Slave mode\n");
846 		hsotg->core_params->dma_desc_enable = 0;
847 	}
848 
849 	if (hsotg->core_params->dma_enable > 0)
850 		ahbcfg |= GAHBCFG_DMA_EN;
851 
852 	DWC2_WRITE_4(hsotg, GAHBCFG, ahbcfg);
853 
854 	return 0;
855 }
856 
dwc2_gusbcfg_init(struct dwc2_hsotg * hsotg)857 static void dwc2_gusbcfg_init(struct dwc2_hsotg *hsotg)
858 {
859 	u32 usbcfg;
860 
861 	usbcfg = DWC2_READ_4(hsotg, GUSBCFG);
862 	usbcfg &= ~(GUSBCFG_HNPCAP | GUSBCFG_SRPCAP);
863 
864 	switch (hsotg->hw_params.op_mode) {
865 	case GHWCFG2_OP_MODE_HNP_SRP_CAPABLE:
866 		if (hsotg->core_params->otg_cap ==
867 				DWC2_CAP_PARAM_HNP_SRP_CAPABLE)
868 			usbcfg |= GUSBCFG_HNPCAP;
869 		if (hsotg->core_params->otg_cap !=
870 				DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE)
871 			usbcfg |= GUSBCFG_SRPCAP;
872 		break;
873 
874 	case GHWCFG2_OP_MODE_SRP_ONLY_CAPABLE:
875 	case GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE:
876 	case GHWCFG2_OP_MODE_SRP_CAPABLE_HOST:
877 		if (hsotg->core_params->otg_cap !=
878 				DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE)
879 			usbcfg |= GUSBCFG_SRPCAP;
880 		break;
881 
882 	case GHWCFG2_OP_MODE_NO_HNP_SRP_CAPABLE:
883 	case GHWCFG2_OP_MODE_NO_SRP_CAPABLE_DEVICE:
884 	case GHWCFG2_OP_MODE_NO_SRP_CAPABLE_HOST:
885 	default:
886 		break;
887 	}
888 
889 	DWC2_WRITE_4(hsotg, GUSBCFG, usbcfg);
890 }
891 
892 /**
893  * dwc2_core_init() - Initializes the DWC_otg controller registers and
894  * prepares the core for device mode or host mode operation
895  *
896  * @hsotg:         Programming view of the DWC_otg controller
897  * @initial_setup: If true then this is the first init for this instance.
898  */
dwc2_core_init(struct dwc2_hsotg * hsotg,bool initial_setup)899 int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup)
900 {
901 	u32 usbcfg, otgctl;
902 	int retval;
903 
904 	dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg);
905 
906 	usbcfg = DWC2_READ_4(hsotg, GUSBCFG);
907 
908 	/* Set ULPI External VBUS bit if needed */
909 	usbcfg &= ~GUSBCFG_ULPI_EXT_VBUS_DRV;
910 	if (hsotg->core_params->phy_ulpi_ext_vbus ==
911 				DWC2_PHY_ULPI_EXTERNAL_VBUS)
912 		usbcfg |= GUSBCFG_ULPI_EXT_VBUS_DRV;
913 
914 	/* Set external TS Dline pulsing bit if needed */
915 	usbcfg &= ~GUSBCFG_TERMSELDLPULSE;
916 	if (hsotg->core_params->ts_dline > 0)
917 		usbcfg |= GUSBCFG_TERMSELDLPULSE;
918 
919 	DWC2_WRITE_4(hsotg, GUSBCFG, usbcfg);
920 
921 	/*
922 	 * Reset the Controller
923 	 *
924 	 * We only need to reset the controller if this is a re-init.
925 	 * For the first init we know for sure that earlier code reset us (it
926 	 * needed to in order to properly detect various parameters).
927 	 */
928 	if (!initial_setup) {
929 		retval = dwc2_core_reset_and_force_dr_mode(hsotg);
930 		if (retval) {
931 			dev_err(hsotg->dev, "%s(): Reset failed, aborting\n",
932 					__func__);
933 			return retval;
934 		}
935 	}
936 
937 	/*
938 	 * This needs to happen in FS mode before any other programming occurs
939 	 */
940 	retval = dwc2_phy_init(hsotg, initial_setup);
941 	if (retval)
942 		return retval;
943 
944 	/* Program the GAHBCFG Register */
945 	retval = dwc2_gahbcfg_init(hsotg);
946 	if (retval)
947 		return retval;
948 
949 	/* Program the GUSBCFG register */
950 	dwc2_gusbcfg_init(hsotg);
951 
952 	/* Program the GOTGCTL register */
953 	otgctl = DWC2_READ_4(hsotg, GOTGCTL);
954 	otgctl &= ~GOTGCTL_OTGVER;
955 	if (hsotg->core_params->otg_ver > 0)
956 		otgctl |= GOTGCTL_OTGVER;
957 	DWC2_WRITE_4(hsotg, GOTGCTL, otgctl);
958 	dev_dbg(hsotg->dev, "OTG VER PARAM: %d\n", hsotg->core_params->otg_ver);
959 
960 	/* Clear the SRP success bit for FS-I2c */
961 	hsotg->srp_success = 0;
962 
963 	/* Enable common interrupts */
964 	dwc2_enable_common_interrupts(hsotg);
965 
966 	/*
967 	 * Do device or host initialization based on mode during PCD and
968 	 * HCD initialization
969 	 */
970 	if (dwc2_is_host_mode(hsotg)) {
971 		dev_dbg(hsotg->dev, "Host Mode\n");
972 		hsotg->op_state = OTG_STATE_A_HOST;
973 	} else {
974 		dev_dbg(hsotg->dev, "Device Mode\n");
975 		hsotg->op_state = OTG_STATE_B_PERIPHERAL;
976 	}
977 
978 	return 0;
979 }
980 
981 /**
982  * dwc2_enable_host_interrupts() - Enables the Host mode interrupts
983  *
984  * @hsotg: Programming view of DWC_otg controller
985  */
dwc2_enable_host_interrupts(struct dwc2_hsotg * hsotg)986 void dwc2_enable_host_interrupts(struct dwc2_hsotg *hsotg)
987 {
988 	u32 intmsk;
989 
990 	dev_dbg(hsotg->dev, "%s()\n", __func__);
991 
992 	/* Disable all interrupts */
993 	DWC2_WRITE_4(hsotg, GINTMSK, 0);
994 	DWC2_WRITE_4(hsotg, HAINTMSK, 0);
995 
996 	/* Enable the common interrupts */
997 	dwc2_enable_common_interrupts(hsotg);
998 
999 	/* Enable host mode interrupts without disturbing common interrupts */
1000 	intmsk = DWC2_READ_4(hsotg, GINTMSK);
1001 	intmsk |= GINTSTS_DISCONNINT | GINTSTS_PRTINT | GINTSTS_HCHINT;
1002 	DWC2_WRITE_4(hsotg, GINTMSK, intmsk);
1003 }
1004 
1005 /**
1006  * dwc2_disable_host_interrupts() - Disables the Host Mode interrupts
1007  *
1008  * @hsotg: Programming view of DWC_otg controller
1009  */
dwc2_disable_host_interrupts(struct dwc2_hsotg * hsotg)1010 void dwc2_disable_host_interrupts(struct dwc2_hsotg *hsotg)
1011 {
1012 	u32 intmsk = DWC2_READ_4(hsotg, GINTMSK);
1013 
1014 	/* Disable host mode interrupts without disturbing common interrupts */
1015 	intmsk &= ~(GINTSTS_SOF | GINTSTS_PRTINT | GINTSTS_HCHINT |
1016 		    GINTSTS_PTXFEMP | GINTSTS_NPTXFEMP | GINTSTS_DISCONNINT);
1017 	DWC2_WRITE_4(hsotg, GINTMSK, intmsk);
1018 }
1019 
1020 /*
1021  * dwc2_calculate_dynamic_fifo() - Calculates the default fifo size
1022  * For system that have a total fifo depth that is smaller than the default
1023  * RX + TX fifo size.
1024  *
1025  * @hsotg: Programming view of DWC_otg controller
1026  */
dwc2_calculate_dynamic_fifo(struct dwc2_hsotg * hsotg)1027 static void dwc2_calculate_dynamic_fifo(struct dwc2_hsotg *hsotg)
1028 {
1029 	struct dwc2_core_params *params = hsotg->core_params;
1030 	struct dwc2_hw_params *hw = &hsotg->hw_params;
1031 	u32 rxfsiz, nptxfsiz, ptxfsiz, total_fifo_size;
1032 
1033 	total_fifo_size = hw->total_fifo_size;
1034 	rxfsiz = params->host_rx_fifo_size;
1035 	nptxfsiz = params->host_nperio_tx_fifo_size;
1036 	ptxfsiz = params->host_perio_tx_fifo_size;
1037 
1038 	/*
1039 	 * Will use Method 2 defined in the DWC2 spec: minimum FIFO depth
1040 	 * allocation with support for high bandwidth endpoints. Synopsys
1041 	 * defines MPS(Max Packet size) for a periodic EP=1024, and for
1042 	 * non-periodic as 512.
1043 	 */
1044 	if (total_fifo_size < (rxfsiz + nptxfsiz + ptxfsiz)) {
1045 		/*
1046 		 * For Buffer DMA mode/Scatter Gather DMA mode
1047 		 * 2 * ((Largest Packet size / 4) + 1 + 1) + n
1048 		 * with n = number of host channel.
1049 		 * 2 * ((1024/4) + 2) = 516
1050 		 */
1051 		rxfsiz = 516 + hw->host_channels;
1052 
1053 		/*
1054 		 * min non-periodic tx fifo depth
1055 		 * 2 * (largest non-periodic USB packet used / 4)
1056 		 * 2 * (512/4) = 256
1057 		 */
1058 		nptxfsiz = 256;
1059 
1060 		/*
1061 		 * min periodic tx fifo depth
1062 		 * (largest packet size*MC)/4
1063 		 * (1024 * 3)/4 = 768
1064 		 */
1065 		ptxfsiz = 768;
1066 
1067 		params->host_rx_fifo_size = rxfsiz;
1068 		params->host_nperio_tx_fifo_size = nptxfsiz;
1069 		params->host_perio_tx_fifo_size = ptxfsiz;
1070 	}
1071 
1072 	/*
1073 	 * If the summation of RX, NPTX and PTX fifo sizes is still
1074 	 * bigger than the total_fifo_size, then we have a problem.
1075 	 *
1076 	 * We won't be able to allocate as many endpoints. Right now,
1077 	 * we're just printing an error message, but ideally this FIFO
1078 	 * allocation algorithm would be improved in the future.
1079 	 *
1080 	 * FIXME improve this FIFO allocation algorithm.
1081 	 */
1082 	if (unlikely(total_fifo_size < (rxfsiz + nptxfsiz + ptxfsiz)))
1083 		dev_err(hsotg->dev, "invalid fifo sizes\n");
1084 }
1085 
dwc2_config_fifos(struct dwc2_hsotg * hsotg)1086 static void dwc2_config_fifos(struct dwc2_hsotg *hsotg)
1087 {
1088 	struct dwc2_core_params *params = hsotg->core_params;
1089 	u32 nptxfsiz, hptxfsiz, dfifocfg, grxfsiz;
1090 
1091 	if (!params->enable_dynamic_fifo)
1092 		return;
1093 
1094 	dwc2_calculate_dynamic_fifo(hsotg);
1095 
1096 	/* Rx FIFO */
1097 	grxfsiz = DWC2_READ_4(hsotg, GRXFSIZ);
1098 	dev_dbg(hsotg->dev, "initial grxfsiz=%08x\n", grxfsiz);
1099 	grxfsiz &= ~GRXFSIZ_DEPTH_MASK;
1100 	grxfsiz |= params->host_rx_fifo_size <<
1101 		   GRXFSIZ_DEPTH_SHIFT & GRXFSIZ_DEPTH_MASK;
1102 	DWC2_WRITE_4(hsotg, GRXFSIZ, grxfsiz);
1103 	dev_dbg(hsotg->dev, "new grxfsiz=%08x\n",
1104 		DWC2_READ_4(hsotg, GRXFSIZ));
1105 
1106 	/* Non-periodic Tx FIFO */
1107 	dev_dbg(hsotg->dev, "initial gnptxfsiz=%08x\n",
1108 		DWC2_READ_4(hsotg, GNPTXFSIZ));
1109 	nptxfsiz = params->host_nperio_tx_fifo_size <<
1110 		   FIFOSIZE_DEPTH_SHIFT & FIFOSIZE_DEPTH_MASK;
1111 	nptxfsiz |= params->host_rx_fifo_size <<
1112 		    FIFOSIZE_STARTADDR_SHIFT & FIFOSIZE_STARTADDR_MASK;
1113 	DWC2_WRITE_4(hsotg, GNPTXFSIZ, nptxfsiz);
1114 	dev_dbg(hsotg->dev, "new gnptxfsiz=%08x\n",
1115 		DWC2_READ_4(hsotg, GNPTXFSIZ));
1116 
1117 	/* Periodic Tx FIFO */
1118 	dev_dbg(hsotg->dev, "initial hptxfsiz=%08x\n",
1119 		DWC2_READ_4(hsotg, HPTXFSIZ));
1120 	hptxfsiz = params->host_perio_tx_fifo_size <<
1121 		   FIFOSIZE_DEPTH_SHIFT & FIFOSIZE_DEPTH_MASK;
1122 	hptxfsiz |= (params->host_rx_fifo_size +
1123 		     params->host_nperio_tx_fifo_size) <<
1124 		    FIFOSIZE_STARTADDR_SHIFT & FIFOSIZE_STARTADDR_MASK;
1125 	DWC2_WRITE_4(hsotg, HPTXFSIZ, hptxfsiz);
1126 	dev_dbg(hsotg->dev, "new hptxfsiz=%08x\n",
1127 		DWC2_READ_4(hsotg, HPTXFSIZ));
1128 
1129 	if (hsotg->core_params->en_multiple_tx_fifo > 0 &&
1130 	    hsotg->hw_params.snpsid <= DWC2_CORE_REV_2_94a) {
1131 		/*
1132 		 * Global DFIFOCFG calculation for Host mode -
1133 		 * include RxFIFO, NPTXFIFO and HPTXFIFO
1134 		 */
1135 		dfifocfg = DWC2_READ_4(hsotg, GDFIFOCFG);
1136 		dfifocfg &= ~GDFIFOCFG_EPINFOBASE_MASK;
1137 		dfifocfg |= (params->host_rx_fifo_size +
1138 			     params->host_nperio_tx_fifo_size +
1139 			     params->host_perio_tx_fifo_size) <<
1140 			    GDFIFOCFG_EPINFOBASE_SHIFT &
1141 			    GDFIFOCFG_EPINFOBASE_MASK;
1142 		DWC2_WRITE_4(hsotg, GDFIFOCFG, dfifocfg);
1143 	}
1144 }
1145 
1146 /**
1147  * dwc2_core_host_init() - Initializes the DWC_otg controller registers for
1148  * Host mode
1149  *
1150  * @hsotg: Programming view of DWC_otg controller
1151  *
1152  * This function flushes the Tx and Rx FIFOs and flushes any entries in the
1153  * request queues. Host channels are reset to ensure that they are ready for
1154  * performing transfers.
1155  */
dwc2_core_host_init(struct dwc2_hsotg * hsotg)1156 void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
1157 {
1158 	u32 hcfg, hfir, otgctl;
1159 
1160 	dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg);
1161 
1162 	/* Restart the Phy Clock */
1163 	DWC2_WRITE_4(hsotg, PCGCTL, 0);
1164 
1165 	/* Initialize Host Configuration Register */
1166 	dwc2_init_fs_ls_pclk_sel(hsotg);
1167 	if (hsotg->core_params->speed == DWC2_SPEED_PARAM_FULL) {
1168 		hcfg = DWC2_READ_4(hsotg, HCFG);
1169 		hcfg |= HCFG_FSLSSUPP;
1170 		DWC2_WRITE_4(hsotg, HCFG, hcfg);
1171 	}
1172 
1173 	/*
1174 	 * This bit allows dynamic reloading of the HFIR register during
1175 	 * runtime. This bit needs to be programmed during initial configuration
1176 	 * and its value must not be changed during runtime.
1177 	 */
1178 	if (hsotg->core_params->reload_ctl > 0) {
1179 		hfir = DWC2_READ_4(hsotg, HFIR);
1180 		hfir |= HFIR_RLDCTRL;
1181 		DWC2_WRITE_4(hsotg, HFIR, hfir);
1182 	}
1183 
1184 	if (hsotg->core_params->dma_desc_enable > 0) {
1185 		u32 op_mode = hsotg->hw_params.op_mode;
1186 		if (hsotg->hw_params.snpsid < DWC2_CORE_REV_2_90a ||
1187 		    !hsotg->hw_params.dma_desc_enable ||
1188 		    op_mode == GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE ||
1189 		    op_mode == GHWCFG2_OP_MODE_NO_SRP_CAPABLE_DEVICE ||
1190 		    op_mode == GHWCFG2_OP_MODE_UNDEFINED) {
1191 			dev_err(hsotg->dev,
1192 				"Hardware does not support descriptor DMA mode -\n");
1193 			dev_err(hsotg->dev,
1194 				"falling back to buffer DMA mode.\n");
1195 			hsotg->core_params->dma_desc_enable = 0;
1196 		} else {
1197 			hcfg = DWC2_READ_4(hsotg, HCFG);
1198 			hcfg |= HCFG_DESCDMA;
1199 			DWC2_WRITE_4(hsotg, HCFG, hcfg);
1200 		}
1201 	}
1202 
1203 	/* Configure data FIFO sizes */
1204 	dwc2_config_fifos(hsotg);
1205 
1206 	/* TODO - check this */
1207 	/* Clear Host Set HNP Enable in the OTG Control Register */
1208 	otgctl = DWC2_READ_4(hsotg, GOTGCTL);
1209 	otgctl &= ~GOTGCTL_HSTSETHNPEN;
1210 	DWC2_WRITE_4(hsotg, GOTGCTL, otgctl);
1211 
1212 	/* Make sure the FIFOs are flushed */
1213 	dwc2_flush_tx_fifo(hsotg, 0x10 /* all TX FIFOs */);
1214 	dwc2_flush_rx_fifo(hsotg);
1215 
1216 	/* Clear Host Set HNP Enable in the OTG Control Register */
1217 	otgctl = DWC2_READ_4(hsotg, GOTGCTL);
1218 	otgctl &= ~GOTGCTL_HSTSETHNPEN;
1219 	DWC2_WRITE_4(hsotg, GOTGCTL, otgctl);
1220 
1221 	if (hsotg->core_params->dma_desc_enable <= 0) {
1222 		int num_channels, i;
1223 		u32 hcchar;
1224 
1225 		/* Flush out any leftover queued requests */
1226 		num_channels = hsotg->core_params->host_channels;
1227 		for (i = 0; i < num_channels; i++) {
1228 			hcchar = DWC2_READ_4(hsotg, HCCHAR(i));
1229 			hcchar &= ~HCCHAR_CHENA;
1230 			hcchar |= HCCHAR_CHDIS;
1231 			hcchar &= ~HCCHAR_EPDIR;
1232 			DWC2_WRITE_4(hsotg, HCCHAR(i), hcchar);
1233 		}
1234 
1235 		/* Halt all channels to put them into a known state */
1236 		for (i = 0; i < num_channels; i++) {
1237 			int count = 0;
1238 
1239 			hcchar = DWC2_READ_4(hsotg, HCCHAR(i));
1240 			hcchar |= HCCHAR_CHENA | HCCHAR_CHDIS;
1241 			hcchar &= ~HCCHAR_EPDIR;
1242 			DWC2_WRITE_4(hsotg, HCCHAR(i), hcchar);
1243 			dev_dbg(hsotg->dev, "%s: Halt channel %d\n",
1244 				__func__, i);
1245 			do {
1246 				hcchar = DWC2_READ_4(hsotg, HCCHAR(i));
1247 				if (++count > 1000) {
1248 					dev_err(hsotg->dev,
1249 						"Unable to clear enable on channel %d\n",
1250 						i);
1251 					break;
1252 				}
1253 				udelay(1);
1254 			} while (hcchar & HCCHAR_CHENA);
1255 		}
1256 	}
1257 
1258 	/* Turn on the vbus power */
1259 	dev_dbg(hsotg->dev, "Init: Port Power? op_state=%d\n", hsotg->op_state);
1260 	if (hsotg->op_state == OTG_STATE_A_HOST) {
1261 		u32 hprt0 = dwc2_read_hprt0(hsotg);
1262 
1263 		dev_dbg(hsotg->dev, "Init: Power Port (%d)\n",
1264 			!!(hprt0 & HPRT0_PWR));
1265 		if (!(hprt0 & HPRT0_PWR)) {
1266 			hprt0 |= HPRT0_PWR;
1267 			DWC2_WRITE_4(hsotg, HPRT0, hprt0);
1268 		}
1269 	}
1270 
1271 	dwc2_enable_host_interrupts(hsotg);
1272 }
1273 
dwc2_hc_enable_slave_ints(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan)1274 static void dwc2_hc_enable_slave_ints(struct dwc2_hsotg *hsotg,
1275 				      struct dwc2_host_chan *chan)
1276 {
1277 	u32 hcintmsk = HCINTMSK_CHHLTD;
1278 
1279 	switch (chan->ep_type) {
1280 	case USB_ENDPOINT_XFER_CONTROL:
1281 	case USB_ENDPOINT_XFER_BULK:
1282 		dev_vdbg(hsotg->dev, "control/bulk\n");
1283 		hcintmsk |= HCINTMSK_XFERCOMPL;
1284 		hcintmsk |= HCINTMSK_STALL;
1285 		hcintmsk |= HCINTMSK_XACTERR;
1286 		hcintmsk |= HCINTMSK_DATATGLERR;
1287 		if (chan->ep_is_in) {
1288 			hcintmsk |= HCINTMSK_BBLERR;
1289 		} else {
1290 			hcintmsk |= HCINTMSK_NAK;
1291 			hcintmsk |= HCINTMSK_NYET;
1292 			if (chan->do_ping)
1293 				hcintmsk |= HCINTMSK_ACK;
1294 		}
1295 
1296 		if (chan->do_split) {
1297 			hcintmsk |= HCINTMSK_NAK;
1298 			if (chan->complete_split)
1299 				hcintmsk |= HCINTMSK_NYET;
1300 			else
1301 				hcintmsk |= HCINTMSK_ACK;
1302 		}
1303 
1304 		if (chan->error_state)
1305 			hcintmsk |= HCINTMSK_ACK;
1306 		break;
1307 
1308 	case USB_ENDPOINT_XFER_INT:
1309 		if (dbg_perio())
1310 			dev_vdbg(hsotg->dev, "intr\n");
1311 		hcintmsk |= HCINTMSK_XFERCOMPL;
1312 		hcintmsk |= HCINTMSK_NAK;
1313 		hcintmsk |= HCINTMSK_STALL;
1314 		hcintmsk |= HCINTMSK_XACTERR;
1315 		hcintmsk |= HCINTMSK_DATATGLERR;
1316 		hcintmsk |= HCINTMSK_FRMOVRUN;
1317 
1318 		if (chan->ep_is_in)
1319 			hcintmsk |= HCINTMSK_BBLERR;
1320 		if (chan->error_state)
1321 			hcintmsk |= HCINTMSK_ACK;
1322 		if (chan->do_split) {
1323 			if (chan->complete_split)
1324 				hcintmsk |= HCINTMSK_NYET;
1325 			else
1326 				hcintmsk |= HCINTMSK_ACK;
1327 		}
1328 		break;
1329 
1330 	case USB_ENDPOINT_XFER_ISOC:
1331 		if (dbg_perio())
1332 			dev_vdbg(hsotg->dev, "isoc\n");
1333 		hcintmsk |= HCINTMSK_XFERCOMPL;
1334 		hcintmsk |= HCINTMSK_FRMOVRUN;
1335 		hcintmsk |= HCINTMSK_ACK;
1336 
1337 		if (chan->ep_is_in) {
1338 			hcintmsk |= HCINTMSK_XACTERR;
1339 			hcintmsk |= HCINTMSK_BBLERR;
1340 		}
1341 		break;
1342 	default:
1343 		dev_err(hsotg->dev, "## Unknown EP type ##\n");
1344 		break;
1345 	}
1346 
1347 	DWC2_WRITE_4(hsotg, HCINTMSK(chan->hc_num), hcintmsk);
1348 	if (dbg_hc(chan))
1349 		dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk);
1350 }
1351 
dwc2_hc_enable_dma_ints(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan)1352 static void dwc2_hc_enable_dma_ints(struct dwc2_hsotg *hsotg,
1353 				    struct dwc2_host_chan *chan)
1354 {
1355 	u32 hcintmsk = HCINTMSK_CHHLTD;
1356 
1357 	/*
1358 	 * For Descriptor DMA mode core halts the channel on AHB error.
1359 	 * Interrupt is not required.
1360 	 */
1361 	if (hsotg->core_params->dma_desc_enable <= 0) {
1362 		if (dbg_hc(chan))
1363 			dev_vdbg(hsotg->dev, "desc DMA disabled\n");
1364 		hcintmsk |= HCINTMSK_AHBERR;
1365 	} else {
1366 		if (dbg_hc(chan))
1367 			dev_vdbg(hsotg->dev, "desc DMA enabled\n");
1368 		if (chan->ep_type == USB_ENDPOINT_XFER_ISOC)
1369 			hcintmsk |= HCINTMSK_XFERCOMPL;
1370 	}
1371 
1372 	if (chan->error_state && !chan->do_split &&
1373 	    chan->ep_type != USB_ENDPOINT_XFER_ISOC) {
1374 		if (dbg_hc(chan))
1375 			dev_vdbg(hsotg->dev, "setting ACK\n");
1376 		hcintmsk |= HCINTMSK_ACK;
1377 		if (chan->ep_is_in) {
1378 			hcintmsk |= HCINTMSK_DATATGLERR;
1379 			if (chan->ep_type != USB_ENDPOINT_XFER_INT)
1380 				hcintmsk |= HCINTMSK_NAK;
1381 		}
1382 	}
1383 
1384 	DWC2_WRITE_4(hsotg, HCINTMSK(chan->hc_num), hcintmsk);
1385 	if (dbg_hc(chan))
1386 		dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk);
1387 }
1388 
dwc2_hc_enable_ints(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan)1389 static void dwc2_hc_enable_ints(struct dwc2_hsotg *hsotg,
1390 				struct dwc2_host_chan *chan)
1391 {
1392 	u32 intmsk;
1393 
1394 	if (hsotg->core_params->dma_enable > 0) {
1395 		if (dbg_hc(chan))
1396 			dev_vdbg(hsotg->dev, "DMA enabled\n");
1397 		dwc2_hc_enable_dma_ints(hsotg, chan);
1398 	} else {
1399 		if (dbg_hc(chan))
1400 			dev_vdbg(hsotg->dev, "DMA disabled\n");
1401 		dwc2_hc_enable_slave_ints(hsotg, chan);
1402 	}
1403 
1404 	/* Enable the top level host channel interrupt */
1405 	intmsk = DWC2_READ_4(hsotg, HAINTMSK);
1406 	intmsk |= 1 << chan->hc_num;
1407 	DWC2_WRITE_4(hsotg, HAINTMSK, intmsk);
1408 	if (dbg_hc(chan))
1409 		dev_vdbg(hsotg->dev, "set HAINTMSK to %08x\n", intmsk);
1410 
1411 	/* Make sure host channel interrupts are enabled */
1412 	intmsk = DWC2_READ_4(hsotg, GINTMSK);
1413 	intmsk |= GINTSTS_HCHINT;
1414 	DWC2_WRITE_4(hsotg, GINTMSK, intmsk);
1415 	if (dbg_hc(chan))
1416 		dev_vdbg(hsotg->dev, "set GINTMSK to %08x\n", intmsk);
1417 }
1418 
1419 /**
1420  * dwc2_hc_init() - Prepares a host channel for transferring packets to/from
1421  * a specific endpoint
1422  *
1423  * @hsotg: Programming view of DWC_otg controller
1424  * @chan:  Information needed to initialize the host channel
1425  *
1426  * The HCCHARn register is set up with the characteristics specified in chan.
1427  * Host channel interrupts that may need to be serviced while this transfer is
1428  * in progress are enabled.
1429  */
dwc2_hc_init(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan)1430 void dwc2_hc_init(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan)
1431 {
1432 	u8 hc_num = chan->hc_num;
1433 	u32 hcintmsk;
1434 	u32 hcchar;
1435 	u32 hcsplt = 0;
1436 
1437 	if (dbg_hc(chan))
1438 		dev_vdbg(hsotg->dev, "%s()\n", __func__);
1439 
1440 	/* Clear old interrupt conditions for this host channel */
1441 	hcintmsk = 0xffffffff;
1442 	hcintmsk &= ~HCINTMSK_RESERVED14_31;
1443 	DWC2_WRITE_4(hsotg, HCINT(hc_num), hcintmsk);
1444 
1445 	/* Enable channel interrupts required for this transfer */
1446 	dwc2_hc_enable_ints(hsotg, chan);
1447 
1448 	/*
1449 	 * Program the HCCHARn register with the endpoint characteristics for
1450 	 * the current transfer
1451 	 */
1452 	hcchar = chan->dev_addr << HCCHAR_DEVADDR_SHIFT & HCCHAR_DEVADDR_MASK;
1453 	hcchar |= chan->ep_num << HCCHAR_EPNUM_SHIFT & HCCHAR_EPNUM_MASK;
1454 	if (chan->ep_is_in)
1455 		hcchar |= HCCHAR_EPDIR;
1456 	if (chan->speed == USB_SPEED_LOW)
1457 		hcchar |= HCCHAR_LSPDDEV;
1458 	hcchar |= chan->ep_type << HCCHAR_EPTYPE_SHIFT & HCCHAR_EPTYPE_MASK;
1459 	hcchar |= chan->max_packet << HCCHAR_MPS_SHIFT & HCCHAR_MPS_MASK;
1460 	DWC2_WRITE_4(hsotg, HCCHAR(hc_num), hcchar);
1461 	if (dbg_hc(chan)) {
1462 		dev_vdbg(hsotg->dev, "set HCCHAR(%d) to %08x\n",
1463 			 hc_num, hcchar);
1464 
1465 		dev_vdbg(hsotg->dev, "%s: Channel %d\n",
1466 			 __func__, hc_num);
1467 		dev_vdbg(hsotg->dev, "	 Dev Addr: %d\n",
1468 			 chan->dev_addr);
1469 		dev_vdbg(hsotg->dev, "	 Ep Num: %d\n",
1470 			 chan->ep_num);
1471 		dev_vdbg(hsotg->dev, "	 Is In: %d\n",
1472 			 chan->ep_is_in);
1473 		dev_vdbg(hsotg->dev, "	 Is Low Speed: %d\n",
1474 			 chan->speed == USB_SPEED_LOW);
1475 		dev_vdbg(hsotg->dev, "	 Ep Type: %d\n",
1476 			 chan->ep_type);
1477 		dev_vdbg(hsotg->dev, "	 Max Pkt: %d\n",
1478 			 chan->max_packet);
1479 	}
1480 
1481 	/* Program the HCSPLT register for SPLITs */
1482 	if (chan->do_split) {
1483 		if (dbg_hc(chan))
1484 			dev_vdbg(hsotg->dev,
1485 				 "Programming HC %d with split --> %s\n",
1486 				 hc_num,
1487 				 chan->complete_split ? "CSPLIT" : "SSPLIT");
1488 		if (chan->complete_split)
1489 			hcsplt |= HCSPLT_COMPSPLT;
1490 		hcsplt |= chan->xact_pos << HCSPLT_XACTPOS_SHIFT &
1491 			  HCSPLT_XACTPOS_MASK;
1492 		hcsplt |= chan->hub_addr << HCSPLT_HUBADDR_SHIFT &
1493 			  HCSPLT_HUBADDR_MASK;
1494 		hcsplt |= chan->hub_port << HCSPLT_PRTADDR_SHIFT &
1495 			  HCSPLT_PRTADDR_MASK;
1496 		if (dbg_hc(chan)) {
1497 			dev_vdbg(hsotg->dev, "	  comp split %d\n",
1498 				 chan->complete_split);
1499 			dev_vdbg(hsotg->dev, "	  xact pos %d\n",
1500 				 chan->xact_pos);
1501 			dev_vdbg(hsotg->dev, "	  hub addr %d\n",
1502 				 chan->hub_addr);
1503 			dev_vdbg(hsotg->dev, "	  hub port %d\n",
1504 				 chan->hub_port);
1505 			dev_vdbg(hsotg->dev, "	  is_in %d\n",
1506 				 chan->ep_is_in);
1507 			dev_vdbg(hsotg->dev, "	  Max Pkt %d\n",
1508 				 chan->max_packet);
1509 			dev_vdbg(hsotg->dev, "	  xferlen %d\n",
1510 				 chan->xfer_len);
1511 		}
1512 	}
1513 
1514 	DWC2_WRITE_4(hsotg, HCSPLT(hc_num), hcsplt);
1515 }
1516 
1517 /**
1518  * dwc2_hc_halt() - Attempts to halt a host channel
1519  *
1520  * @hsotg:       Controller register interface
1521  * @chan:        Host channel to halt
1522  * @halt_status: Reason for halting the channel
1523  *
1524  * This function should only be called in Slave mode or to abort a transfer in
1525  * either Slave mode or DMA mode. Under normal circumstances in DMA mode, the
1526  * controller halts the channel when the transfer is complete or a condition
1527  * occurs that requires application intervention.
1528  *
1529  * In slave mode, checks for a free request queue entry, then sets the Channel
1530  * Enable and Channel Disable bits of the Host Channel Characteristics
1531  * register of the specified channel to intiate the halt. If there is no free
1532  * request queue entry, sets only the Channel Disable bit of the HCCHARn
1533  * register to flush requests for this channel. In the latter case, sets a
1534  * flag to indicate that the host channel needs to be halted when a request
1535  * queue slot is open.
1536  *
1537  * In DMA mode, always sets the Channel Enable and Channel Disable bits of the
1538  * HCCHARn register. The controller ensures there is space in the request
1539  * queue before submitting the halt request.
1540  *
1541  * Some time may elapse before the core flushes any posted requests for this
1542  * host channel and halts. The Channel Halted interrupt handler completes the
1543  * deactivation of the host channel.
1544  */
dwc2_hc_halt(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan,enum dwc2_halt_status halt_status)1545 void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan,
1546 		  enum dwc2_halt_status halt_status)
1547 {
1548 	u32 nptxsts, hptxsts, hcchar;
1549 
1550 	if (dbg_hc(chan))
1551 		dev_vdbg(hsotg->dev, "%s()\n", __func__);
1552 	if (halt_status == DWC2_HC_XFER_NO_HALT_STATUS)
1553 		dev_err(hsotg->dev, "!!! halt_status = %d !!!\n", halt_status);
1554 
1555 	if (halt_status == DWC2_HC_XFER_URB_DEQUEUE ||
1556 	    halt_status == DWC2_HC_XFER_AHB_ERR) {
1557 		/*
1558 		 * Disable all channel interrupts except Ch Halted. The QTD
1559 		 * and QH state associated with this transfer has been cleared
1560 		 * (in the case of URB_DEQUEUE), so the channel needs to be
1561 		 * shut down carefully to prevent crashes.
1562 		 */
1563 		u32 hcintmsk = HCINTMSK_CHHLTD;
1564 
1565 		dev_vdbg(hsotg->dev, "dequeue/error\n");
1566 		DWC2_WRITE_4(hsotg, HCINTMSK(chan->hc_num), hcintmsk);
1567 
1568 		/*
1569 		 * Make sure no other interrupts besides halt are currently
1570 		 * pending. Handling another interrupt could cause a crash due
1571 		 * to the QTD and QH state.
1572 		 */
1573 		DWC2_WRITE_4(hsotg, HCINT(chan->hc_num), ~hcintmsk);
1574 
1575 		/*
1576 		 * Make sure the halt status is set to URB_DEQUEUE or AHB_ERR
1577 		 * even if the channel was already halted for some other
1578 		 * reason
1579 		 */
1580 		chan->halt_status = halt_status;
1581 
1582 		hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num));
1583 		if (!(hcchar & HCCHAR_CHENA)) {
1584 			/*
1585 			 * The channel is either already halted or it hasn't
1586 			 * started yet. In DMA mode, the transfer may halt if
1587 			 * it finishes normally or a condition occurs that
1588 			 * requires driver intervention. Don't want to halt
1589 			 * the channel again. In either Slave or DMA mode,
1590 			 * it's possible that the transfer has been assigned
1591 			 * to a channel, but not started yet when an URB is
1592 			 * dequeued. Don't want to halt a channel that hasn't
1593 			 * started yet.
1594 			 */
1595 			return;
1596 		}
1597 	}
1598 	if (chan->halt_pending) {
1599 		/*
1600 		 * A halt has already been issued for this channel. This might
1601 		 * happen when a transfer is aborted by a higher level in
1602 		 * the stack.
1603 		 */
1604 		dev_vdbg(hsotg->dev,
1605 			 "*** %s: Channel %d, chan->halt_pending already set ***\n",
1606 			 __func__, chan->hc_num);
1607 		return;
1608 	}
1609 
1610 	hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num));
1611 
1612 	/* No need to set the bit in DDMA for disabling the channel */
1613 	/* TODO check it everywhere channel is disabled */
1614 	if (hsotg->core_params->dma_desc_enable <= 0) {
1615 		if (dbg_hc(chan))
1616 			dev_vdbg(hsotg->dev, "desc DMA disabled\n");
1617 		hcchar |= HCCHAR_CHENA;
1618 	} else {
1619 		if (dbg_hc(chan))
1620 			dev_dbg(hsotg->dev, "desc DMA enabled\n");
1621 	}
1622 	hcchar |= HCCHAR_CHDIS;
1623 
1624 	if (hsotg->core_params->dma_enable <= 0) {
1625 		if (dbg_hc(chan))
1626 			dev_vdbg(hsotg->dev, "DMA not enabled\n");
1627 		hcchar |= HCCHAR_CHENA;
1628 
1629 		/* Check for space in the request queue to issue the halt */
1630 		if (chan->ep_type == USB_ENDPOINT_XFER_CONTROL ||
1631 		    chan->ep_type == USB_ENDPOINT_XFER_BULK) {
1632 			dev_vdbg(hsotg->dev, "control/bulk\n");
1633 			nptxsts = DWC2_READ_4(hsotg, GNPTXSTS);
1634 			if ((nptxsts & TXSTS_QSPCAVAIL_MASK) == 0) {
1635 				dev_vdbg(hsotg->dev, "Disabling channel\n");
1636 				hcchar &= ~HCCHAR_CHENA;
1637 			}
1638 		} else {
1639 			if (dbg_perio())
1640 				dev_vdbg(hsotg->dev, "isoc/intr\n");
1641 			hptxsts = DWC2_READ_4(hsotg, HPTXSTS);
1642 			if ((hptxsts & TXSTS_QSPCAVAIL_MASK) == 0 ||
1643 			    hsotg->queuing_high_bandwidth) {
1644 				if (dbg_perio())
1645 					dev_vdbg(hsotg->dev, "Disabling channel\n");
1646 				hcchar &= ~HCCHAR_CHENA;
1647 			}
1648 		}
1649 	} else {
1650 		if (dbg_hc(chan))
1651 			dev_vdbg(hsotg->dev, "DMA enabled\n");
1652 	}
1653 
1654 	DWC2_WRITE_4(hsotg, HCCHAR(chan->hc_num), hcchar);
1655 	chan->halt_status = halt_status;
1656 
1657 	if (hcchar & HCCHAR_CHENA) {
1658 		if (dbg_hc(chan))
1659 			dev_vdbg(hsotg->dev, "Channel enabled\n");
1660 		chan->halt_pending = 1;
1661 		chan->halt_on_queue = 0;
1662 	} else {
1663 		if (dbg_hc(chan))
1664 			dev_vdbg(hsotg->dev, "Channel disabled\n");
1665 		chan->halt_on_queue = 1;
1666 	}
1667 
1668 	if (dbg_hc(chan)) {
1669 		dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__,
1670 			 chan->hc_num);
1671 		dev_vdbg(hsotg->dev, "	 hcchar: 0x%08x\n",
1672 			 hcchar);
1673 		dev_vdbg(hsotg->dev, "	 halt_pending: %d\n",
1674 			 chan->halt_pending);
1675 		dev_vdbg(hsotg->dev, "	 halt_on_queue: %d\n",
1676 			 chan->halt_on_queue);
1677 		dev_vdbg(hsotg->dev, "	 halt_status: %d\n",
1678 			 chan->halt_status);
1679 	}
1680 }
1681 
1682 /**
1683  * dwc2_hc_cleanup() - Clears the transfer state for a host channel
1684  *
1685  * @hsotg: Programming view of DWC_otg controller
1686  * @chan:  Identifies the host channel to clean up
1687  *
1688  * This function is normally called after a transfer is done and the host
1689  * channel is being released
1690  */
dwc2_hc_cleanup(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan)1691 void dwc2_hc_cleanup(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan)
1692 {
1693 	u32 hcintmsk;
1694 
1695 	chan->xfer_started = 0;
1696 
1697 	/*
1698 	 * Clear channel interrupt enables and any unhandled channel interrupt
1699 	 * conditions
1700 	 */
1701 	DWC2_WRITE_4(hsotg, HCINTMSK(chan->hc_num), 0);
1702 	hcintmsk = 0xffffffff;
1703 	hcintmsk &= ~HCINTMSK_RESERVED14_31;
1704 	DWC2_WRITE_4(hsotg, HCINT(chan->hc_num), hcintmsk);
1705 }
1706 
1707 /**
1708  * dwc2_hc_set_even_odd_frame() - Sets the channel property that indicates in
1709  * which frame a periodic transfer should occur
1710  *
1711  * @hsotg:  Programming view of DWC_otg controller
1712  * @chan:   Identifies the host channel to set up and its properties
1713  * @hcchar: Current value of the HCCHAR register for the specified host channel
1714  *
1715  * This function has no effect on non-periodic transfers
1716  */
dwc2_hc_set_even_odd_frame(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan,u32 * hcchar)1717 static void dwc2_hc_set_even_odd_frame(struct dwc2_hsotg *hsotg,
1718 				       struct dwc2_host_chan *chan, u32 *hcchar)
1719 {
1720 	if (chan->ep_type == USB_ENDPOINT_XFER_INT ||
1721 	    chan->ep_type == USB_ENDPOINT_XFER_ISOC) {
1722 		/* 1 if _next_ frame is odd, 0 if it's even */
1723 		if (!(dwc2_hcd_get_frame_number(hsotg) & 0x1))
1724 			*hcchar |= HCCHAR_ODDFRM;
1725 	}
1726 }
1727 
dwc2_set_pid_isoc(struct dwc2_host_chan * chan)1728 static void dwc2_set_pid_isoc(struct dwc2_host_chan *chan)
1729 {
1730 	/* Set up the initial PID for the transfer */
1731 	if (chan->speed == USB_SPEED_HIGH) {
1732 		if (chan->ep_is_in) {
1733 			if (chan->multi_count == 1)
1734 				chan->data_pid_start = DWC2_HC_PID_DATA0;
1735 			else if (chan->multi_count == 2)
1736 				chan->data_pid_start = DWC2_HC_PID_DATA1;
1737 			else
1738 				chan->data_pid_start = DWC2_HC_PID_DATA2;
1739 		} else {
1740 			if (chan->multi_count == 1)
1741 				chan->data_pid_start = DWC2_HC_PID_DATA0;
1742 			else
1743 				chan->data_pid_start = DWC2_HC_PID_MDATA;
1744 		}
1745 	} else {
1746 		chan->data_pid_start = DWC2_HC_PID_DATA0;
1747 	}
1748 }
1749 
1750 /**
1751  * dwc2_hc_write_packet() - Writes a packet into the Tx FIFO associated with
1752  * the Host Channel
1753  *
1754  * @hsotg: Programming view of DWC_otg controller
1755  * @chan:  Information needed to initialize the host channel
1756  *
1757  * This function should only be called in Slave mode. For a channel associated
1758  * with a non-periodic EP, the non-periodic Tx FIFO is written. For a channel
1759  * associated with a periodic EP, the periodic Tx FIFO is written.
1760  *
1761  * Upon return the xfer_buf and xfer_count fields in chan are incremented by
1762  * the number of bytes written to the Tx FIFO.
1763  */
dwc2_hc_write_packet(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan)1764 static void dwc2_hc_write_packet(struct dwc2_hsotg *hsotg,
1765 				 struct dwc2_host_chan *chan)
1766 {
1767 	u32 i;
1768 	u32 remaining_count;
1769 	u32 byte_count;
1770 	u32 dword_count;
1771 	u32 *data_buf = (u32 *)chan->xfer_buf;
1772 	u32 data_fifo;
1773 
1774 	if (dbg_hc(chan))
1775 		dev_vdbg(hsotg->dev, "%s()\n", __func__);
1776 
1777 	data_fifo = HCFIFO(chan->hc_num);
1778 
1779 	remaining_count = chan->xfer_len - chan->xfer_count;
1780 	if (remaining_count > chan->max_packet)
1781 		byte_count = chan->max_packet;
1782 	else
1783 		byte_count = remaining_count;
1784 
1785 	dword_count = (byte_count + 3) / 4;
1786 
1787 	if (((unsigned long)data_buf & 0x3) == 0) {
1788 		/* xfer_buf is DWORD aligned */
1789 		for (i = 0; i < dword_count; i++, data_buf++)
1790 			DWC2_WRITE_4(hsotg, data_fifo, *data_buf);
1791 	} else {
1792 		/* xfer_buf is not DWORD aligned */
1793 		for (i = 0; i < dword_count; i++, data_buf++) {
1794 			u32 data = data_buf[0] | data_buf[1] << 8 |
1795 				   data_buf[2] << 16 | data_buf[3] << 24;
1796 			DWC2_WRITE_4(hsotg, data_fifo, data);
1797 		}
1798 	}
1799 
1800 	chan->xfer_count += byte_count;
1801 	chan->xfer_buf += byte_count;
1802 }
1803 
1804 /**
1805  * dwc2_hc_start_transfer() - Does the setup for a data transfer for a host
1806  * channel and starts the transfer
1807  *
1808  * @hsotg: Programming view of DWC_otg controller
1809  * @chan:  Information needed to initialize the host channel. The xfer_len value
1810  *         may be reduced to accommodate the max widths of the XferSize and
1811  *         PktCnt fields in the HCTSIZn register. The multi_count value may be
1812  *         changed to reflect the final xfer_len value.
1813  *
1814  * This function may be called in either Slave mode or DMA mode. In Slave mode,
1815  * the caller must ensure that there is sufficient space in the request queue
1816  * and Tx Data FIFO.
1817  *
1818  * For an OUT transfer in Slave mode, it loads a data packet into the
1819  * appropriate FIFO. If necessary, additional data packets are loaded in the
1820  * Host ISR.
1821  *
1822  * For an IN transfer in Slave mode, a data packet is requested. The data
1823  * packets are unloaded from the Rx FIFO in the Host ISR. If necessary,
1824  * additional data packets are requested in the Host ISR.
1825  *
1826  * For a PING transfer in Slave mode, the Do Ping bit is set in the HCTSIZ
1827  * register along with a packet count of 1 and the channel is enabled. This
1828  * causes a single PING transaction to occur. Other fields in HCTSIZ are
1829  * simply set to 0 since no data transfer occurs in this case.
1830  *
1831  * For a PING transfer in DMA mode, the HCTSIZ register is initialized with
1832  * all the information required to perform the subsequent data transfer. In
1833  * addition, the Do Ping bit is set in the HCTSIZ register. In this case, the
1834  * controller performs the entire PING protocol, then starts the data
1835  * transfer.
1836  */
dwc2_hc_start_transfer(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan)1837 void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg,
1838 			    struct dwc2_host_chan *chan)
1839 {
1840 	u32 max_hc_xfer_size = hsotg->core_params->max_transfer_size;
1841 	u16 max_hc_pkt_count = hsotg->core_params->max_packet_count;
1842 	u32 hcchar;
1843 	u32 hctsiz = 0;
1844 	u16 num_packets;
1845 	u32 ec_mc;
1846 
1847 	if (dbg_hc(chan))
1848 		dev_vdbg(hsotg->dev, "%s()\n", __func__);
1849 
1850 	if (chan->do_ping) {
1851 		if (hsotg->core_params->dma_enable <= 0) {
1852 			if (dbg_hc(chan))
1853 				dev_vdbg(hsotg->dev, "ping, no DMA\n");
1854 			dwc2_hc_do_ping(hsotg, chan);
1855 			chan->xfer_started = 1;
1856 			return;
1857 		} else {
1858 			if (dbg_hc(chan))
1859 				dev_vdbg(hsotg->dev, "ping, DMA\n");
1860 			hctsiz |= TSIZ_DOPNG;
1861 		}
1862 	}
1863 
1864 	if (chan->do_split) {
1865 		if (dbg_hc(chan))
1866 			dev_vdbg(hsotg->dev, "split\n");
1867 		num_packets = 1;
1868 
1869 		if (chan->complete_split && !chan->ep_is_in)
1870 			/*
1871 			 * For CSPLIT OUT Transfer, set the size to 0 so the
1872 			 * core doesn't expect any data written to the FIFO
1873 			 */
1874 			chan->xfer_len = 0;
1875 		else if (chan->ep_is_in || chan->xfer_len > chan->max_packet)
1876 			chan->xfer_len = chan->max_packet;
1877 		else if (!chan->ep_is_in && chan->xfer_len > 188)
1878 			chan->xfer_len = 188;
1879 
1880 		hctsiz |= chan->xfer_len << TSIZ_XFERSIZE_SHIFT &
1881 			  TSIZ_XFERSIZE_MASK;
1882 
1883 		/* For split set ec_mc for immediate retries */
1884 		if (chan->ep_type == USB_ENDPOINT_XFER_INT ||
1885 		    chan->ep_type == USB_ENDPOINT_XFER_ISOC)
1886 			ec_mc = 3;
1887 		else
1888 			ec_mc = 1;
1889 	} else {
1890 		if (dbg_hc(chan))
1891 			dev_vdbg(hsotg->dev, "no split\n");
1892 		/*
1893 		 * Ensure that the transfer length and packet count will fit
1894 		 * in the widths allocated for them in the HCTSIZn register
1895 		 */
1896 		if (chan->ep_type == USB_ENDPOINT_XFER_INT ||
1897 		    chan->ep_type == USB_ENDPOINT_XFER_ISOC) {
1898 			/*
1899 			 * Make sure the transfer size is no larger than one
1900 			 * (micro)frame's worth of data. (A check was done
1901 			 * when the periodic transfer was accepted to ensure
1902 			 * that a (micro)frame's worth of data can be
1903 			 * programmed into a channel.)
1904 			 */
1905 			u32 max_periodic_len =
1906 				chan->multi_count * chan->max_packet;
1907 
1908 			if (chan->xfer_len > max_periodic_len)
1909 				chan->xfer_len = max_periodic_len;
1910 		} else if (chan->xfer_len > max_hc_xfer_size) {
1911 			/*
1912 			 * Make sure that xfer_len is a multiple of max packet
1913 			 * size
1914 			 */
1915 			chan->xfer_len =
1916 				max_hc_xfer_size - chan->max_packet + 1;
1917 		}
1918 
1919 		if (chan->xfer_len > 0) {
1920 			num_packets = (chan->xfer_len + chan->max_packet - 1) /
1921 					chan->max_packet;
1922 			if (num_packets > max_hc_pkt_count) {
1923 				num_packets = max_hc_pkt_count;
1924 				chan->xfer_len = num_packets * chan->max_packet;
1925 			}
1926 		} else {
1927 			/* Need 1 packet for transfer length of 0 */
1928 			num_packets = 1;
1929 		}
1930 
1931 		if (chan->ep_is_in)
1932 			/*
1933 			 * Always program an integral # of max packets for IN
1934 			 * transfers
1935 			 */
1936 			chan->xfer_len = num_packets * chan->max_packet;
1937 
1938 		if (chan->ep_type == USB_ENDPOINT_XFER_INT ||
1939 		    chan->ep_type == USB_ENDPOINT_XFER_ISOC)
1940 			/*
1941 			 * Make sure that the multi_count field matches the
1942 			 * actual transfer length
1943 			 */
1944 			chan->multi_count = num_packets;
1945 
1946 		if (chan->ep_type == USB_ENDPOINT_XFER_ISOC)
1947 			dwc2_set_pid_isoc(chan);
1948 
1949 		hctsiz |= chan->xfer_len << TSIZ_XFERSIZE_SHIFT &
1950 			  TSIZ_XFERSIZE_MASK;
1951 
1952 		/* The ec_mc gets the multi_count for non-split */
1953 		ec_mc = chan->multi_count;
1954 	}
1955 
1956 	chan->start_pkt_count = num_packets;
1957 	hctsiz |= num_packets << TSIZ_PKTCNT_SHIFT & TSIZ_PKTCNT_MASK;
1958 	hctsiz |= chan->data_pid_start << TSIZ_SC_MC_PID_SHIFT &
1959 		  TSIZ_SC_MC_PID_MASK;
1960 	DWC2_WRITE_4(hsotg, HCTSIZ(chan->hc_num), hctsiz);
1961 	if (dbg_hc(chan)) {
1962 		dev_vdbg(hsotg->dev, "Wrote %08x to HCTSIZ(%d)\n",
1963 			 hctsiz, chan->hc_num);
1964 
1965 		dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__,
1966 			 chan->hc_num);
1967 		dev_vdbg(hsotg->dev, "	 Xfer Size: %d\n",
1968 			 (hctsiz & TSIZ_XFERSIZE_MASK) >>
1969 			 TSIZ_XFERSIZE_SHIFT);
1970 		dev_vdbg(hsotg->dev, "	 Num Pkts: %d\n",
1971 			 (hctsiz & TSIZ_PKTCNT_MASK) >>
1972 			 TSIZ_PKTCNT_SHIFT);
1973 		dev_vdbg(hsotg->dev, "	 Start PID: %d\n",
1974 			 (hctsiz & TSIZ_SC_MC_PID_MASK) >>
1975 			 TSIZ_SC_MC_PID_SHIFT);
1976 	}
1977 
1978 	if (hsotg->core_params->dma_enable > 0) {
1979 		dma_addr_t dma_addr;
1980 
1981 		if (chan->align_buf) {
1982 			if (dbg_hc(chan))
1983 				dev_vdbg(hsotg->dev, "align_buf\n");
1984 			dma_addr = chan->align_buf;
1985 		} else {
1986 			dma_addr = chan->xfer_dma;
1987 		}
1988 		if (hsotg->hsotg_sc->sc_set_dma_addr == NULL) {
1989 			DWC2_WRITE_4(hsotg, HCDMA(chan->hc_num),
1990 			    (u32)dma_addr);
1991 			if (dbg_hc(chan))
1992 				dev_vdbg(hsotg->dev,
1993 				    "Wrote %08lx to HCDMA(%d)\n",
1994 				     (unsigned long)dma_addr,
1995 				    chan->hc_num);
1996 		} else {
1997 			(void)(*hsotg->hsotg_sc->sc_set_dma_addr)(
1998 			    hsotg->dev, dma_addr, chan->hc_num);
1999 		}
2000 	}
2001 
2002 	/* Start the split */
2003 	if (chan->do_split) {
2004 		u32 hcsplt = DWC2_READ_4(hsotg, HCSPLT(chan->hc_num));
2005 
2006 		hcsplt |= HCSPLT_SPLTENA;
2007 		DWC2_WRITE_4(hsotg, HCSPLT(chan->hc_num), hcsplt);
2008 	}
2009 
2010 	hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num));
2011 	hcchar &= ~HCCHAR_MULTICNT_MASK;
2012 	hcchar |= (ec_mc << HCCHAR_MULTICNT_SHIFT) & HCCHAR_MULTICNT_MASK;
2013 	dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar);
2014 
2015 	if (hcchar & HCCHAR_CHDIS)
2016 		dev_warn(hsotg->dev,
2017 			 "%s: chdis set, channel %d, hcchar 0x%08x\n",
2018 			 __func__, chan->hc_num, hcchar);
2019 
2020 	/* Set host channel enable after all other setup is complete */
2021 	hcchar |= HCCHAR_CHENA;
2022 	hcchar &= ~HCCHAR_CHDIS;
2023 
2024 	if (dbg_hc(chan))
2025 		dev_vdbg(hsotg->dev, "	 Multi Cnt: %d\n",
2026 			 (hcchar & HCCHAR_MULTICNT_MASK) >>
2027 			 HCCHAR_MULTICNT_SHIFT);
2028 
2029 	DWC2_WRITE_4(hsotg, HCCHAR(chan->hc_num), hcchar);
2030 	if (dbg_hc(chan))
2031 		dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar,
2032 			 chan->hc_num);
2033 
2034 	chan->xfer_started = 1;
2035 	chan->requests++;
2036 
2037 	if (hsotg->core_params->dma_enable <= 0 &&
2038 	    !chan->ep_is_in && chan->xfer_len > 0)
2039 		/* Load OUT packet into the appropriate Tx FIFO */
2040 		dwc2_hc_write_packet(hsotg, chan);
2041 }
2042 
2043 /**
2044  * dwc2_hc_start_transfer_ddma() - Does the setup for a data transfer for a
2045  * host channel and starts the transfer in Descriptor DMA mode
2046  *
2047  * @hsotg: Programming view of DWC_otg controller
2048  * @chan:  Information needed to initialize the host channel
2049  *
2050  * Initializes HCTSIZ register. For a PING transfer the Do Ping bit is set.
2051  * Sets PID and NTD values. For periodic transfers initializes SCHED_INFO field
2052  * with micro-frame bitmap.
2053  *
2054  * Initializes HCDMA register with descriptor list address and CTD value then
2055  * starts the transfer via enabling the channel.
2056  */
dwc2_hc_start_transfer_ddma(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan)2057 void dwc2_hc_start_transfer_ddma(struct dwc2_hsotg *hsotg,
2058 				 struct dwc2_host_chan *chan)
2059 {
2060 	u32 hcchar;
2061 	u32 hctsiz = 0;
2062 
2063 	if (chan->do_ping)
2064 		hctsiz |= TSIZ_DOPNG;
2065 
2066 	if (chan->ep_type == USB_ENDPOINT_XFER_ISOC)
2067 		dwc2_set_pid_isoc(chan);
2068 
2069 	/* Packet Count and Xfer Size are not used in Descriptor DMA mode */
2070 	hctsiz |= chan->data_pid_start << TSIZ_SC_MC_PID_SHIFT &
2071 		  TSIZ_SC_MC_PID_MASK;
2072 
2073 	/* 0 - 1 descriptor, 1 - 2 descriptors, etc */
2074 	hctsiz |= (chan->ntd - 1) << TSIZ_NTD_SHIFT & TSIZ_NTD_MASK;
2075 
2076 	/* Non-zero only for high-speed interrupt endpoints */
2077 	hctsiz |= chan->schinfo << TSIZ_SCHINFO_SHIFT & TSIZ_SCHINFO_MASK;
2078 
2079 	if (dbg_hc(chan)) {
2080 		dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__,
2081 			 chan->hc_num);
2082 		dev_vdbg(hsotg->dev, "	 Start PID: %d\n",
2083 			 chan->data_pid_start);
2084 		dev_vdbg(hsotg->dev, "	 NTD: %d\n", chan->ntd - 1);
2085 	}
2086 
2087 	DWC2_WRITE_4(hsotg, HCTSIZ(chan->hc_num), hctsiz);
2088 
2089 	usb_syncmem(&chan->desc_list_usbdma, 0, chan->desc_list_sz,
2090 	    BUS_DMASYNC_PREWRITE);
2091 
2092 	if (hsotg->hsotg_sc->sc_set_dma_addr == NULL) {
2093 		DWC2_WRITE_4(hsotg, HCDMA(chan->hc_num), chan->desc_list_addr);
2094 		if (dbg_hc(chan))
2095 			dev_vdbg(hsotg->dev, "Wrote %pad to HCDMA(%d)\n",
2096 				&chan->desc_list_addr, chan->hc_num);
2097 	} else {
2098 		(void)(*hsotg->hsotg_sc->sc_set_dma_addr)(
2099 		    hsotg->dev, chan->desc_list_addr, chan->hc_num);
2100 		if (dbg_hc(chan))
2101 			dev_vdbg(hsotg->dev, "Wrote %pad to ext dma(%d)\n",
2102 				&chan->desc_list_addr, chan->hc_num);
2103 	}
2104 
2105 	hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num));
2106 	hcchar &= ~HCCHAR_MULTICNT_MASK;
2107 	hcchar |= chan->multi_count << HCCHAR_MULTICNT_SHIFT &
2108 		  HCCHAR_MULTICNT_MASK;
2109 
2110 	if (hcchar & HCCHAR_CHDIS)
2111 		dev_warn(hsotg->dev,
2112 			 "%s: chdis set, channel %d, hcchar 0x%08x\n",
2113 			 __func__, chan->hc_num, hcchar);
2114 
2115 	/* Set host channel enable after all other setup is complete */
2116 	hcchar |= HCCHAR_CHENA;
2117 	hcchar &= ~HCCHAR_CHDIS;
2118 
2119 	if (dbg_hc(chan))
2120 		dev_vdbg(hsotg->dev, "	 Multi Cnt: %d\n",
2121 			 (hcchar & HCCHAR_MULTICNT_MASK) >>
2122 			 HCCHAR_MULTICNT_SHIFT);
2123 
2124 	DWC2_WRITE_4(hsotg, HCCHAR(chan->hc_num), hcchar);
2125 	if (dbg_hc(chan))
2126 		dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar,
2127 			 chan->hc_num);
2128 
2129 	chan->xfer_started = 1;
2130 	chan->requests++;
2131 }
2132 
2133 /**
2134  * dwc2_hc_continue_transfer() - Continues a data transfer that was started by
2135  * a previous call to dwc2_hc_start_transfer()
2136  *
2137  * @hsotg: Programming view of DWC_otg controller
2138  * @chan:  Information needed to initialize the host channel
2139  *
2140  * The caller must ensure there is sufficient space in the request queue and Tx
2141  * Data FIFO. This function should only be called in Slave mode. In DMA mode,
2142  * the controller acts autonomously to complete transfers programmed to a host
2143  * channel.
2144  *
2145  * For an OUT transfer, a new data packet is loaded into the appropriate FIFO
2146  * if there is any data remaining to be queued. For an IN transfer, another
2147  * data packet is always requested. For the SETUP phase of a control transfer,
2148  * this function does nothing.
2149  *
2150  * Return: 1 if a new request is queued, 0 if no more requests are required
2151  * for this transfer
2152  */
dwc2_hc_continue_transfer(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan)2153 int dwc2_hc_continue_transfer(struct dwc2_hsotg *hsotg,
2154 			      struct dwc2_host_chan *chan)
2155 {
2156 	if (dbg_hc(chan))
2157 		dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__,
2158 			 chan->hc_num);
2159 
2160 	if (chan->do_split)
2161 		/* SPLITs always queue just once per channel */
2162 		return 0;
2163 
2164 	if (chan->data_pid_start == DWC2_HC_PID_SETUP)
2165 		/* SETUPs are queued only once since they can't be NAK'd */
2166 		return 0;
2167 
2168 	if (chan->ep_is_in) {
2169 		/*
2170 		 * Always queue another request for other IN transfers. If
2171 		 * back-to-back INs are issued and NAKs are received for both,
2172 		 * the driver may still be processing the first NAK when the
2173 		 * second NAK is received. When the interrupt handler clears
2174 		 * the NAK interrupt for the first NAK, the second NAK will
2175 		 * not be seen. So we can't depend on the NAK interrupt
2176 		 * handler to requeue a NAK'd request. Instead, IN requests
2177 		 * are issued each time this function is called. When the
2178 		 * transfer completes, the extra requests for the channel will
2179 		 * be flushed.
2180 		 */
2181 		u32 hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num));
2182 
2183 		dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar);
2184 		hcchar |= HCCHAR_CHENA;
2185 		hcchar &= ~HCCHAR_CHDIS;
2186 		if (dbg_hc(chan))
2187 			dev_vdbg(hsotg->dev, "	 IN xfer: hcchar = 0x%08x\n",
2188 				 hcchar);
2189 		DWC2_WRITE_4(hsotg, HCCHAR(chan->hc_num), hcchar);
2190 		chan->requests++;
2191 		return 1;
2192 	}
2193 
2194 	/* OUT transfers */
2195 
2196 	if (chan->xfer_count < chan->xfer_len) {
2197 		if (chan->ep_type == USB_ENDPOINT_XFER_INT ||
2198 		    chan->ep_type == USB_ENDPOINT_XFER_ISOC) {
2199 			u32 hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num));
2200 
2201 			dwc2_hc_set_even_odd_frame(hsotg, chan,
2202 						   &hcchar);
2203 		}
2204 
2205 		/* Load OUT packet into the appropriate Tx FIFO */
2206 		dwc2_hc_write_packet(hsotg, chan);
2207 		chan->requests++;
2208 		return 1;
2209 	}
2210 
2211 	return 0;
2212 }
2213 
2214 /**
2215  * dwc2_hc_do_ping() - Starts a PING transfer
2216  *
2217  * @hsotg: Programming view of DWC_otg controller
2218  * @chan:  Information needed to initialize the host channel
2219  *
2220  * This function should only be called in Slave mode. The Do Ping bit is set in
2221  * the HCTSIZ register, then the channel is enabled.
2222  */
dwc2_hc_do_ping(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan)2223 void dwc2_hc_do_ping(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan)
2224 {
2225 	u32 hcchar;
2226 	u32 hctsiz;
2227 
2228 	if (dbg_hc(chan))
2229 		dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__,
2230 			 chan->hc_num);
2231 
2232 
2233 	hctsiz = TSIZ_DOPNG;
2234 	hctsiz |= 1 << TSIZ_PKTCNT_SHIFT;
2235 	DWC2_WRITE_4(hsotg, HCTSIZ(chan->hc_num), hctsiz);
2236 
2237 	hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num));
2238 	hcchar |= HCCHAR_CHENA;
2239 	hcchar &= ~HCCHAR_CHDIS;
2240 	DWC2_WRITE_4(hsotg, HCCHAR(chan->hc_num), hcchar);
2241 }
2242 
2243 /**
2244  * dwc2_calc_frame_interval() - Calculates the correct frame Interval value for
2245  * the HFIR register according to PHY type and speed
2246  *
2247  * @hsotg: Programming view of DWC_otg controller
2248  *
2249  * NOTE: The caller can modify the value of the HFIR register only after the
2250  * Port Enable bit of the Host Port Control and Status register (HPRT.EnaPort)
2251  * has been set
2252  */
dwc2_calc_frame_interval(struct dwc2_hsotg * hsotg)2253 u32 dwc2_calc_frame_interval(struct dwc2_hsotg *hsotg)
2254 {
2255 	u32 usbcfg;
2256 	u32 hprt0;
2257 	int clock = 60;	/* default value */
2258 
2259 	usbcfg = DWC2_READ_4(hsotg, GUSBCFG);
2260 	hprt0 = DWC2_READ_4(hsotg, HPRT0);
2261 
2262 	if (!(usbcfg & GUSBCFG_PHYSEL) && (usbcfg & GUSBCFG_ULPI_UTMI_SEL) &&
2263 	    !(usbcfg & GUSBCFG_PHYIF16))
2264 		clock = 60;
2265 	if ((usbcfg & GUSBCFG_PHYSEL) && hsotg->hw_params.fs_phy_type ==
2266 	    GHWCFG2_FS_PHY_TYPE_SHARED_ULPI)
2267 		clock = 48;
2268 	if (!(usbcfg & GUSBCFG_PHY_LP_CLK_SEL) && !(usbcfg & GUSBCFG_PHYSEL) &&
2269 	    !(usbcfg & GUSBCFG_ULPI_UTMI_SEL) && (usbcfg & GUSBCFG_PHYIF16))
2270 		clock = 30;
2271 	if (!(usbcfg & GUSBCFG_PHY_LP_CLK_SEL) && !(usbcfg & GUSBCFG_PHYSEL) &&
2272 	    !(usbcfg & GUSBCFG_ULPI_UTMI_SEL) && !(usbcfg & GUSBCFG_PHYIF16))
2273 		clock = 60;
2274 	if ((usbcfg & GUSBCFG_PHY_LP_CLK_SEL) && !(usbcfg & GUSBCFG_PHYSEL) &&
2275 	    !(usbcfg & GUSBCFG_ULPI_UTMI_SEL) && (usbcfg & GUSBCFG_PHYIF16))
2276 		clock = 48;
2277 	if ((usbcfg & GUSBCFG_PHYSEL) && !(usbcfg & GUSBCFG_PHYIF16) &&
2278 	    hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_SHARED_UTMI)
2279 		clock = 48;
2280 	if ((usbcfg & GUSBCFG_PHYSEL) &&
2281 	    hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED)
2282 		clock = 48;
2283 
2284 	if ((hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT == HPRT0_SPD_HIGH_SPEED)
2285 		/* High speed case */
2286 		return 125 * clock;
2287 	else
2288 		/* FS/LS case */
2289 		return 1000 * clock;
2290 }
2291 
2292 /**
2293  * dwc2_read_packet() - Reads a packet from the Rx FIFO into the destination
2294  * buffer
2295  *
2296  * @core_if: Programming view of DWC_otg controller
2297  * @dest:    Destination buffer for the packet
2298  * @bytes:   Number of bytes to copy to the destination
2299  */
dwc2_read_packet(struct dwc2_hsotg * hsotg,u8 * dest,u16 bytes)2300 void dwc2_read_packet(struct dwc2_hsotg *hsotg, u8 *dest, u16 bytes)
2301 {
2302 	bus_size_t fifo = HCFIFO(0);
2303 	u32 *data_buf = (u32 *)dest;
2304 	int word_count = (bytes + 3) / 4;
2305 	int i;
2306 
2307 	/*
2308 	 * Todo: Account for the case where dest is not dword aligned. This
2309 	 * requires reading data from the FIFO into a u32 temp buffer, then
2310 	 * moving it into the data buffer.
2311 	 */
2312 
2313 	dev_vdbg(hsotg->dev, "%s(%p,%p,%d)\n", __func__, hsotg, dest, bytes);
2314 
2315 	for (i = 0; i < word_count; i++, data_buf++)
2316 		*data_buf = DWC2_READ_4(hsotg, fifo);
2317 }
2318 
2319 /**
2320  * dwc2_dump_host_registers() - Prints the host registers
2321  *
2322  * @hsotg: Programming view of DWC_otg controller
2323  *
2324  * NOTE: This function will be removed once the peripheral controller code
2325  * is integrated and the driver is stable
2326  */
dwc2_dump_host_registers(struct dwc2_hsotg * hsotg)2327 void dwc2_dump_host_registers(struct dwc2_hsotg *hsotg)
2328 {
2329 #ifdef DWC2_DEBUG
2330 	bus_size_t addr;
2331 	int i;
2332 
2333 	dev_dbg(hsotg->dev, "Host Global Registers\n");
2334 	addr = HCFG;
2335 	dev_dbg(hsotg->dev, "HCFG	 @0x%08lX : 0x%08X\n",
2336 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2337 	addr = HFIR;
2338 	dev_dbg(hsotg->dev, "HFIR	 @0x%08lX : 0x%08X\n",
2339 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2340 	addr = HFNUM;
2341 	dev_dbg(hsotg->dev, "HFNUM	 @0x%08lX : 0x%08X\n",
2342 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2343 	addr = HPTXSTS;
2344 	dev_dbg(hsotg->dev, "HPTXSTS	 @0x%08lX : 0x%08X\n",
2345 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2346 	addr = HAINT;
2347 	dev_dbg(hsotg->dev, "HAINT	 @0x%08lX : 0x%08X\n",
2348 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2349 	addr = HAINTMSK;
2350 	dev_dbg(hsotg->dev, "HAINTMSK	 @0x%08lX : 0x%08X\n",
2351 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2352 	if (hsotg->core_params->dma_desc_enable > 0) {
2353 		addr = HFLBADDR;
2354 		dev_dbg(hsotg->dev, "HFLBADDR @0x%08lX : 0x%08X\n",
2355 			(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2356 	}
2357 
2358 	addr = HPRT0;
2359 	dev_dbg(hsotg->dev, "HPRT0	 @0x%08lX : 0x%08X\n",
2360 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2361 
2362 	for (i = 0; i < hsotg->core_params->host_channels; i++) {
2363 		dev_dbg(hsotg->dev, "Host Channel %d Specific Registers\n", i);
2364 		addr = HCCHAR(i);
2365 		dev_dbg(hsotg->dev, "HCCHAR	 @0x%08lX : 0x%08X\n",
2366 			(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2367 		addr = HCSPLT(i);
2368 		dev_dbg(hsotg->dev, "HCSPLT	 @0x%08lX : 0x%08X\n",
2369 			(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2370 		addr = HCINT(i);
2371 		dev_dbg(hsotg->dev, "HCINT	 @0x%08lX : 0x%08X\n",
2372 			(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2373 		addr = HCINTMSK(i);
2374 		dev_dbg(hsotg->dev, "HCINTMSK	 @0x%08lX : 0x%08X\n",
2375 			(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2376 		addr = HCTSIZ(i);
2377 		dev_dbg(hsotg->dev, "HCTSIZ	 @0x%08lX : 0x%08X\n",
2378 			(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2379 		addr = HCDMA(i);
2380 		dev_dbg(hsotg->dev, "HCDMA	 @0x%08lX : 0x%08X\n",
2381 			(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2382 		if (hsotg->core_params->dma_desc_enable > 0) {
2383 			addr = HCDMAB(i);
2384 			dev_dbg(hsotg->dev, "HCDMAB	 @0x%08lX : 0x%08X\n",
2385 				(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2386 		}
2387 	}
2388 #endif
2389 }
2390 
2391 /**
2392  * dwc2_dump_global_registers() - Prints the core global registers
2393  *
2394  * @hsotg: Programming view of DWC_otg controller
2395  *
2396  * NOTE: This function will be removed once the peripheral controller code
2397  * is integrated and the driver is stable
2398  */
dwc2_dump_global_registers(struct dwc2_hsotg * hsotg)2399 void dwc2_dump_global_registers(struct dwc2_hsotg *hsotg)
2400 {
2401 #ifdef DWC2_DEBUG
2402 	bus_size_t addr;
2403 
2404 	dev_dbg(hsotg->dev, "Core Global Registers\n");
2405 	addr = GOTGCTL;
2406 	dev_dbg(hsotg->dev, "GOTGCTL	 @0x%08lX : 0x%08X\n",
2407 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2408 	addr = GOTGINT;
2409 	dev_dbg(hsotg->dev, "GOTGINT	 @0x%08lX : 0x%08X\n",
2410 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2411 	addr = GAHBCFG;
2412 	dev_dbg(hsotg->dev, "GAHBCFG	 @0x%08lX : 0x%08X\n",
2413 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2414 	addr = GUSBCFG;
2415 	dev_dbg(hsotg->dev, "GUSBCFG	 @0x%08lX : 0x%08X\n",
2416 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2417 	addr = GRSTCTL;
2418 	dev_dbg(hsotg->dev, "GRSTCTL	 @0x%08lX : 0x%08X\n",
2419 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2420 	addr = GINTSTS;
2421 	dev_dbg(hsotg->dev, "GINTSTS	 @0x%08lX : 0x%08X\n",
2422 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2423 	addr = GINTMSK;
2424 	dev_dbg(hsotg->dev, "GINTMSK	 @0x%08lX : 0x%08X\n",
2425 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2426 	addr = GRXSTSR;
2427 	dev_dbg(hsotg->dev, "GRXSTSR	 @0x%08lX : 0x%08X\n",
2428 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2429 	addr = GRXFSIZ;
2430 	dev_dbg(hsotg->dev, "GRXFSIZ	 @0x%08lX : 0x%08X\n",
2431 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2432 	addr = GNPTXFSIZ;
2433 	dev_dbg(hsotg->dev, "GNPTXFSIZ	 @0x%08lX : 0x%08X\n",
2434 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2435 	addr = GNPTXSTS;
2436 	dev_dbg(hsotg->dev, "GNPTXSTS	 @0x%08lX : 0x%08X\n",
2437 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2438 	addr = GI2CCTL;
2439 	dev_dbg(hsotg->dev, "GI2CCTL	 @0x%08lX : 0x%08X\n",
2440 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2441 	addr = GPVNDCTL;
2442 	dev_dbg(hsotg->dev, "GPVNDCTL	 @0x%08lX : 0x%08X\n",
2443 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2444 	addr = GGPIO;
2445 	dev_dbg(hsotg->dev, "GGPIO	 @0x%08lX : 0x%08X\n",
2446 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2447 	addr = GUID;
2448 	dev_dbg(hsotg->dev, "GUID	 @0x%08lX : 0x%08X\n",
2449 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2450 	addr = GSNPSID;
2451 	dev_dbg(hsotg->dev, "GSNPSID	 @0x%08lX : 0x%08X\n",
2452 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2453 	addr = GHWCFG1;
2454 	dev_dbg(hsotg->dev, "GHWCFG1	 @0x%08lX : 0x%08X\n",
2455 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2456 	addr = GHWCFG2;
2457 	dev_dbg(hsotg->dev, "GHWCFG2	 @0x%08lX : 0x%08X\n",
2458 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2459 	addr = GHWCFG3;
2460 	dev_dbg(hsotg->dev, "GHWCFG3	 @0x%08lX : 0x%08X\n",
2461 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2462 	addr = GHWCFG4;
2463 	dev_dbg(hsotg->dev, "GHWCFG4	 @0x%08lX : 0x%08X\n",
2464 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2465 	addr = GLPMCFG;
2466 	dev_dbg(hsotg->dev, "GLPMCFG	 @0x%08lX : 0x%08X\n",
2467 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2468 	addr = GPWRDN;
2469 	dev_dbg(hsotg->dev, "GPWRDN	 @0x%08lX : 0x%08X\n",
2470 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2471 	addr = GDFIFOCFG;
2472 	dev_dbg(hsotg->dev, "GDFIFOCFG	 @0x%08lX : 0x%08X\n",
2473 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2474 	addr = HPTXFSIZ;
2475 	dev_dbg(hsotg->dev, "HPTXFSIZ	 @0x%08lX : 0x%08X\n",
2476 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2477 
2478 	addr = PCGCTL;
2479 	dev_dbg(hsotg->dev, "PCGCTL	 @0x%08lX : 0x%08X\n",
2480 		(unsigned long)addr, DWC2_READ_4(hsotg, addr));
2481 #endif
2482 }
2483 
2484 /**
2485  * dwc2_flush_tx_fifo() - Flushes a Tx FIFO
2486  *
2487  * @hsotg: Programming view of DWC_otg controller
2488  * @num:   Tx FIFO to flush
2489  */
dwc2_flush_tx_fifo(struct dwc2_hsotg * hsotg,const int num)2490 void dwc2_flush_tx_fifo(struct dwc2_hsotg *hsotg, const int num)
2491 {
2492 	u32 greset;
2493 	int count = 0;
2494 
2495 	dev_vdbg(hsotg->dev, "Flush Tx FIFO %d\n", num);
2496 
2497 	greset = GRSTCTL_TXFFLSH;
2498 	greset |= num << GRSTCTL_TXFNUM_SHIFT & GRSTCTL_TXFNUM_MASK;
2499 	DWC2_WRITE_4(hsotg, GRSTCTL, greset);
2500 
2501 	do {
2502 		greset = DWC2_READ_4(hsotg, GRSTCTL);
2503 		if (++count > 10000) {
2504 			dev_warn(hsotg->dev,
2505 				 "%s() HANG! GRSTCTL=%0x GNPTXSTS=0x%08x\n",
2506 				 __func__, greset,
2507 				 DWC2_READ_4(hsotg, GNPTXSTS));
2508 			break;
2509 		}
2510 		udelay(1);
2511 	} while (greset & GRSTCTL_TXFFLSH);
2512 
2513 	/* Wait for at least 3 PHY Clocks */
2514 	udelay(1);
2515 }
2516 
2517 /**
2518  * dwc2_flush_rx_fifo() - Flushes the Rx FIFO
2519  *
2520  * @hsotg: Programming view of DWC_otg controller
2521  */
dwc2_flush_rx_fifo(struct dwc2_hsotg * hsotg)2522 void dwc2_flush_rx_fifo(struct dwc2_hsotg *hsotg)
2523 {
2524 	u32 greset;
2525 	int count = 0;
2526 
2527 	dev_vdbg(hsotg->dev, "%s()\n", __func__);
2528 
2529 	greset = GRSTCTL_RXFFLSH;
2530 	DWC2_WRITE_4(hsotg, GRSTCTL, greset);
2531 
2532 	do {
2533 		greset = DWC2_READ_4(hsotg, GRSTCTL);
2534 		if (++count > 10000) {
2535 			dev_warn(hsotg->dev, "%s() HANG! GRSTCTL=%0x\n",
2536 				 __func__, greset);
2537 			break;
2538 		}
2539 		udelay(1);
2540 	} while (greset & GRSTCTL_RXFFLSH);
2541 
2542 	/* Wait for at least 3 PHY Clocks */
2543 	udelay(1);
2544 }
2545 
2546 #define DWC2_OUT_OF_BOUNDS(a, b, c)	((a) < (b) || (a) > (c))
2547 
2548 /* Parameter access functions */
dwc2_set_param_otg_cap(struct dwc2_hsotg * hsotg,int val)2549 void dwc2_set_param_otg_cap(struct dwc2_hsotg *hsotg, int val)
2550 {
2551 	int valid = 1;
2552 
2553 	switch (val) {
2554 	case DWC2_CAP_PARAM_HNP_SRP_CAPABLE:
2555 		if (hsotg->hw_params.op_mode != GHWCFG2_OP_MODE_HNP_SRP_CAPABLE)
2556 			valid = 0;
2557 		break;
2558 	case DWC2_CAP_PARAM_SRP_ONLY_CAPABLE:
2559 		switch (hsotg->hw_params.op_mode) {
2560 		case GHWCFG2_OP_MODE_HNP_SRP_CAPABLE:
2561 		case GHWCFG2_OP_MODE_SRP_ONLY_CAPABLE:
2562 		case GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE:
2563 		case GHWCFG2_OP_MODE_SRP_CAPABLE_HOST:
2564 			break;
2565 		default:
2566 			valid = 0;
2567 			break;
2568 		}
2569 		break;
2570 	case DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE:
2571 		/* always valid */
2572 		break;
2573 	default:
2574 		valid = 0;
2575 		break;
2576 	}
2577 
2578 	if (!valid) {
2579 		if (val >= 0)
2580 			dev_err(hsotg->dev,
2581 				"%d invalid for otg_cap parameter. Check HW configuration.\n",
2582 				val);
2583 		switch (hsotg->hw_params.op_mode) {
2584 		case GHWCFG2_OP_MODE_HNP_SRP_CAPABLE:
2585 			val = DWC2_CAP_PARAM_HNP_SRP_CAPABLE;
2586 			break;
2587 		case GHWCFG2_OP_MODE_SRP_ONLY_CAPABLE:
2588 		case GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE:
2589 		case GHWCFG2_OP_MODE_SRP_CAPABLE_HOST:
2590 			val = DWC2_CAP_PARAM_SRP_ONLY_CAPABLE;
2591 			break;
2592 		default:
2593 			val = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE;
2594 			break;
2595 		}
2596 		dev_dbg(hsotg->dev, "Setting otg_cap to %d\n", val);
2597 	}
2598 
2599 	hsotg->core_params->otg_cap = val;
2600 }
2601 
dwc2_set_param_dma_enable(struct dwc2_hsotg * hsotg,int val)2602 void dwc2_set_param_dma_enable(struct dwc2_hsotg *hsotg, int val)
2603 {
2604 	int valid = 1;
2605 
2606 	if (val > 0 && hsotg->hw_params.arch == GHWCFG2_SLAVE_ONLY_ARCH)
2607 		valid = 0;
2608 	if (val < 0)
2609 		valid = 0;
2610 
2611 	if (!valid) {
2612 		if (val >= 0)
2613 			dev_err(hsotg->dev,
2614 				"%d invalid for dma_enable parameter. Check HW configuration.\n",
2615 				val);
2616 		val = hsotg->hw_params.arch != GHWCFG2_SLAVE_ONLY_ARCH;
2617 		dev_dbg(hsotg->dev, "Setting dma_enable to %d\n", val);
2618 	}
2619 
2620 	hsotg->core_params->dma_enable = val;
2621 }
2622 
dwc2_set_param_dma_desc_enable(struct dwc2_hsotg * hsotg,int val)2623 void dwc2_set_param_dma_desc_enable(struct dwc2_hsotg *hsotg, int val)
2624 {
2625 	int valid = 1;
2626 
2627 	if (val > 0 && (hsotg->core_params->dma_enable <= 0 ||
2628 			!hsotg->hw_params.dma_desc_enable))
2629 		valid = 0;
2630 	if (val < 0)
2631 		valid = 0;
2632 
2633 	if (!valid) {
2634 		if (val >= 0)
2635 			dev_err(hsotg->dev,
2636 				"%d invalid for dma_desc_enable parameter. Check HW configuration.\n",
2637 				val);
2638 		val = (hsotg->core_params->dma_enable > 0 &&
2639 			hsotg->hw_params.dma_desc_enable);
2640 		dev_dbg(hsotg->dev, "Setting dma_desc_enable to %d\n", val);
2641 	}
2642 
2643 	hsotg->core_params->dma_desc_enable = val;
2644 }
2645 
dwc2_set_param_dma_desc_fs_enable(struct dwc2_hsotg * hsotg,int val)2646 void dwc2_set_param_dma_desc_fs_enable(struct dwc2_hsotg *hsotg, int val)
2647 {
2648 	int valid = 1;
2649 
2650 	if (val > 0 && (hsotg->core_params->dma_enable <= 0 ||
2651 			!hsotg->hw_params.dma_desc_enable))
2652 		valid = 0;
2653 	if (val < 0)
2654 		valid = 0;
2655 
2656 	if (!valid) {
2657 		if (val >= 0)
2658 			dev_err(hsotg->dev,
2659 				"%d invalid for dma_desc_fs_enable parameter. Check HW configuration.\n",
2660 				val);
2661 		val = (hsotg->core_params->dma_enable > 0 &&
2662 			hsotg->hw_params.dma_desc_enable);
2663 	}
2664 
2665 	hsotg->core_params->dma_desc_fs_enable = val;
2666 	dev_dbg(hsotg->dev, "Setting dma_desc_fs_enable to %d\n", val);
2667 }
2668 
dwc2_set_param_host_support_fs_ls_low_power(struct dwc2_hsotg * hsotg,int val)2669 void dwc2_set_param_host_support_fs_ls_low_power(struct dwc2_hsotg *hsotg,
2670 						 int val)
2671 {
2672 	if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) {
2673 		if (val >= 0) {
2674 			dev_err(hsotg->dev,
2675 				"Wrong value for host_support_fs_low_power\n");
2676 			dev_err(hsotg->dev,
2677 				"host_support_fs_low_power must be 0 or 1\n");
2678 		}
2679 		val = 0;
2680 		dev_dbg(hsotg->dev,
2681 			"Setting host_support_fs_low_power to %d\n", val);
2682 	}
2683 
2684 	hsotg->core_params->host_support_fs_ls_low_power = val;
2685 }
2686 
dwc2_set_param_enable_dynamic_fifo(struct dwc2_hsotg * hsotg,int val)2687 void dwc2_set_param_enable_dynamic_fifo(struct dwc2_hsotg *hsotg, int val)
2688 {
2689 	int valid = 1;
2690 
2691 	if (val > 0 && !hsotg->hw_params.enable_dynamic_fifo)
2692 		valid = 0;
2693 	if (val < 0)
2694 		valid = 0;
2695 
2696 	if (!valid) {
2697 		if (val >= 0)
2698 			dev_err(hsotg->dev,
2699 				"%d invalid for enable_dynamic_fifo parameter. Check HW configuration.\n",
2700 				val);
2701 		val = hsotg->hw_params.enable_dynamic_fifo;
2702 		dev_dbg(hsotg->dev, "Setting enable_dynamic_fifo to %d\n", val);
2703 	}
2704 
2705 	hsotg->core_params->enable_dynamic_fifo = val;
2706 }
2707 
dwc2_set_param_host_rx_fifo_size(struct dwc2_hsotg * hsotg,int val)2708 void dwc2_set_param_host_rx_fifo_size(struct dwc2_hsotg *hsotg, int val)
2709 {
2710 	int valid = 1;
2711 
2712 	if (val < 16 || val > hsotg->hw_params.host_rx_fifo_size)
2713 		valid = 0;
2714 
2715 	if (!valid) {
2716 		if (val >= 0)
2717 			dev_err(hsotg->dev,
2718 				"%d invalid for host_rx_fifo_size. Check HW configuration.\n",
2719 				val);
2720 		val = hsotg->hw_params.host_rx_fifo_size;
2721 		dev_dbg(hsotg->dev, "Setting host_rx_fifo_size to %d\n", val);
2722 	}
2723 
2724 	hsotg->core_params->host_rx_fifo_size = val;
2725 }
2726 
dwc2_set_param_host_nperio_tx_fifo_size(struct dwc2_hsotg * hsotg,int val)2727 void dwc2_set_param_host_nperio_tx_fifo_size(struct dwc2_hsotg *hsotg, int val)
2728 {
2729 	int valid = 1;
2730 
2731 	if (val < 16 || val > hsotg->hw_params.host_nperio_tx_fifo_size)
2732 		valid = 0;
2733 
2734 	if (!valid) {
2735 		if (val >= 0)
2736 			dev_err(hsotg->dev,
2737 				"%d invalid for host_nperio_tx_fifo_size. Check HW configuration.\n",
2738 				val);
2739 		val = hsotg->hw_params.host_nperio_tx_fifo_size;
2740 		dev_dbg(hsotg->dev, "Setting host_nperio_tx_fifo_size to %d\n",
2741 			val);
2742 	}
2743 
2744 	hsotg->core_params->host_nperio_tx_fifo_size = val;
2745 }
2746 
dwc2_set_param_host_perio_tx_fifo_size(struct dwc2_hsotg * hsotg,int val)2747 void dwc2_set_param_host_perio_tx_fifo_size(struct dwc2_hsotg *hsotg, int val)
2748 {
2749 	int valid = 1;
2750 
2751 	if (val < 16 || val > hsotg->hw_params.host_perio_tx_fifo_size)
2752 		valid = 0;
2753 
2754 	if (!valid) {
2755 		if (val >= 0)
2756 			dev_err(hsotg->dev,
2757 				"%d invalid for host_perio_tx_fifo_size. Check HW configuration.\n",
2758 				val);
2759 		val = hsotg->hw_params.host_perio_tx_fifo_size;
2760 		dev_dbg(hsotg->dev, "Setting host_perio_tx_fifo_size to %d\n",
2761 			val);
2762 	}
2763 
2764 	hsotg->core_params->host_perio_tx_fifo_size = val;
2765 }
2766 
dwc2_set_param_max_transfer_size(struct dwc2_hsotg * hsotg,int val)2767 void dwc2_set_param_max_transfer_size(struct dwc2_hsotg *hsotg, int val)
2768 {
2769 	int valid = 1;
2770 
2771 	if (val < 2047 || val > hsotg->hw_params.max_transfer_size)
2772 		valid = 0;
2773 
2774 	if (!valid) {
2775 		if (val >= 0)
2776 			dev_err(hsotg->dev,
2777 				"%d invalid for max_transfer_size. Check HW configuration.\n",
2778 				val);
2779 		val = hsotg->hw_params.max_transfer_size;
2780 		dev_dbg(hsotg->dev, "Setting max_transfer_size to %d\n", val);
2781 	}
2782 
2783 	hsotg->core_params->max_transfer_size = val;
2784 }
2785 
dwc2_set_param_max_packet_count(struct dwc2_hsotg * hsotg,int val)2786 void dwc2_set_param_max_packet_count(struct dwc2_hsotg *hsotg, int val)
2787 {
2788 	int valid = 1;
2789 
2790 	if (val < 15 || val > hsotg->hw_params.max_packet_count)
2791 		valid = 0;
2792 
2793 	if (!valid) {
2794 		if (val >= 0)
2795 			dev_err(hsotg->dev,
2796 				"%d invalid for max_packet_count. Check HW configuration.\n",
2797 				val);
2798 		val = hsotg->hw_params.max_packet_count;
2799 		dev_dbg(hsotg->dev, "Setting max_packet_count to %d\n", val);
2800 	}
2801 
2802 	hsotg->core_params->max_packet_count = val;
2803 }
2804 
dwc2_set_param_host_channels(struct dwc2_hsotg * hsotg,int val)2805 void dwc2_set_param_host_channels(struct dwc2_hsotg *hsotg, int val)
2806 {
2807 	int valid = 1;
2808 
2809 	if (val < 1 || val > hsotg->hw_params.host_channels)
2810 		valid = 0;
2811 
2812 	if (!valid) {
2813 		if (val >= 0)
2814 			dev_err(hsotg->dev,
2815 				"%d invalid for host_channels. Check HW configuration.\n",
2816 				val);
2817 		val = hsotg->hw_params.host_channels;
2818 		dev_dbg(hsotg->dev, "Setting host_channels to %d\n", val);
2819 	}
2820 
2821 	hsotg->core_params->host_channels = val;
2822 }
2823 
dwc2_set_param_phy_type(struct dwc2_hsotg * hsotg,int val)2824 void dwc2_set_param_phy_type(struct dwc2_hsotg *hsotg, int val)
2825 {
2826 	int valid = 0;
2827 	u32 hs_phy_type, fs_phy_type;
2828 
2829 	if (DWC2_OUT_OF_BOUNDS(val, DWC2_PHY_TYPE_PARAM_FS,
2830 			       DWC2_PHY_TYPE_PARAM_ULPI)) {
2831 		if (val >= 0) {
2832 			dev_err(hsotg->dev, "Wrong value for phy_type\n");
2833 			dev_err(hsotg->dev, "phy_type must be 0, 1 or 2\n");
2834 		}
2835 
2836 		valid = 0;
2837 	}
2838 
2839 	hs_phy_type = hsotg->hw_params.hs_phy_type;
2840 	fs_phy_type = hsotg->hw_params.fs_phy_type;
2841 	if (val == DWC2_PHY_TYPE_PARAM_UTMI &&
2842 	    (hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI ||
2843 	     hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI_ULPI))
2844 		valid = 1;
2845 	else if (val == DWC2_PHY_TYPE_PARAM_ULPI &&
2846 		 (hs_phy_type == GHWCFG2_HS_PHY_TYPE_ULPI ||
2847 		  hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI_ULPI))
2848 		valid = 1;
2849 	else if (val == DWC2_PHY_TYPE_PARAM_FS &&
2850 		 fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED)
2851 		valid = 1;
2852 
2853 	if (!valid) {
2854 		if (val >= 0)
2855 			dev_err(hsotg->dev,
2856 				"%d invalid for phy_type. Check HW configuration.\n",
2857 				val);
2858 		val = DWC2_PHY_TYPE_PARAM_FS;
2859 		if (hs_phy_type != GHWCFG2_HS_PHY_TYPE_NOT_SUPPORTED) {
2860 			if (hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI ||
2861 			    hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI_ULPI)
2862 				val = DWC2_PHY_TYPE_PARAM_UTMI;
2863 			else
2864 				val = DWC2_PHY_TYPE_PARAM_ULPI;
2865 		}
2866 		dev_dbg(hsotg->dev, "Setting phy_type to %d\n", val);
2867 	}
2868 
2869 	hsotg->core_params->phy_type = val;
2870 }
2871 
dwc2_get_param_phy_type(struct dwc2_hsotg * hsotg)2872 static int dwc2_get_param_phy_type(struct dwc2_hsotg *hsotg)
2873 {
2874 	return hsotg->core_params->phy_type;
2875 }
2876 
dwc2_set_param_speed(struct dwc2_hsotg * hsotg,int val)2877 void dwc2_set_param_speed(struct dwc2_hsotg *hsotg, int val)
2878 {
2879 	int valid = 1;
2880 
2881 	if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) {
2882 		if (val >= 0) {
2883 			dev_err(hsotg->dev, "Wrong value for speed parameter\n");
2884 			dev_err(hsotg->dev, "max_speed parameter must be 0 or 1\n");
2885 		}
2886 		valid = 0;
2887 	}
2888 
2889 	if (val == DWC2_SPEED_PARAM_HIGH &&
2890 	    dwc2_get_param_phy_type(hsotg) == DWC2_PHY_TYPE_PARAM_FS)
2891 		valid = 0;
2892 
2893 	if (!valid) {
2894 		if (val >= 0)
2895 			dev_err(hsotg->dev,
2896 				"%d invalid for speed parameter. Check HW configuration.\n",
2897 				val);
2898 		val = dwc2_get_param_phy_type(hsotg) == DWC2_PHY_TYPE_PARAM_FS ?
2899 				DWC2_SPEED_PARAM_FULL : DWC2_SPEED_PARAM_HIGH;
2900 		dev_dbg(hsotg->dev, "Setting speed to %d\n", val);
2901 	}
2902 
2903 	hsotg->core_params->speed = val;
2904 }
2905 
dwc2_set_param_host_ls_low_power_phy_clk(struct dwc2_hsotg * hsotg,int val)2906 void dwc2_set_param_host_ls_low_power_phy_clk(struct dwc2_hsotg *hsotg, int val)
2907 {
2908 	int valid = 1;
2909 
2910 	if (DWC2_OUT_OF_BOUNDS(val, DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_48MHZ,
2911 			       DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_6MHZ)) {
2912 		if (val >= 0) {
2913 			dev_err(hsotg->dev,
2914 				"Wrong value for host_ls_low_power_phy_clk parameter\n");
2915 			dev_err(hsotg->dev,
2916 				"host_ls_low_power_phy_clk must be 0 or 1\n");
2917 		}
2918 		valid = 0;
2919 	}
2920 
2921 	if (val == DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_48MHZ &&
2922 	    dwc2_get_param_phy_type(hsotg) == DWC2_PHY_TYPE_PARAM_FS)
2923 		valid = 0;
2924 
2925 	if (!valid) {
2926 		if (val >= 0)
2927 			dev_err(hsotg->dev,
2928 				"%d invalid for host_ls_low_power_phy_clk. Check HW configuration.\n",
2929 				val);
2930 		val = dwc2_get_param_phy_type(hsotg) == DWC2_PHY_TYPE_PARAM_FS
2931 			? DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_6MHZ
2932 			: DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_48MHZ;
2933 		dev_dbg(hsotg->dev, "Setting host_ls_low_power_phy_clk to %d\n",
2934 			val);
2935 	}
2936 
2937 	hsotg->core_params->host_ls_low_power_phy_clk = val;
2938 }
2939 
dwc2_set_param_phy_ulpi_ddr(struct dwc2_hsotg * hsotg,int val)2940 void dwc2_set_param_phy_ulpi_ddr(struct dwc2_hsotg *hsotg, int val)
2941 {
2942 	if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) {
2943 		if (val >= 0) {
2944 			dev_err(hsotg->dev, "Wrong value for phy_ulpi_ddr\n");
2945 			dev_err(hsotg->dev, "phy_upli_ddr must be 0 or 1\n");
2946 		}
2947 		val = 0;
2948 		dev_dbg(hsotg->dev, "Setting phy_upli_ddr to %d\n", val);
2949 	}
2950 
2951 	hsotg->core_params->phy_ulpi_ddr = val;
2952 }
2953 
dwc2_set_param_phy_ulpi_ext_vbus(struct dwc2_hsotg * hsotg,int val)2954 void dwc2_set_param_phy_ulpi_ext_vbus(struct dwc2_hsotg *hsotg, int val)
2955 {
2956 	if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) {
2957 		if (val >= 0) {
2958 			dev_err(hsotg->dev,
2959 				"Wrong value for phy_ulpi_ext_vbus\n");
2960 			dev_err(hsotg->dev,
2961 				"phy_ulpi_ext_vbus must be 0 or 1\n");
2962 		}
2963 		val = 0;
2964 		dev_dbg(hsotg->dev, "Setting phy_ulpi_ext_vbus to %d\n", val);
2965 	}
2966 
2967 	hsotg->core_params->phy_ulpi_ext_vbus = val;
2968 }
2969 
dwc2_set_param_phy_utmi_width(struct dwc2_hsotg * hsotg,int val)2970 void dwc2_set_param_phy_utmi_width(struct dwc2_hsotg *hsotg, int val)
2971 {
2972 	int valid = 0;
2973 
2974 	switch (hsotg->hw_params.utmi_phy_data_width) {
2975 	case GHWCFG4_UTMI_PHY_DATA_WIDTH_8:
2976 		valid = (val == 8);
2977 		break;
2978 	case GHWCFG4_UTMI_PHY_DATA_WIDTH_16:
2979 		valid = (val == 16);
2980 		break;
2981 	case GHWCFG4_UTMI_PHY_DATA_WIDTH_8_OR_16:
2982 		valid = (val == 8 || val == 16);
2983 		break;
2984 	}
2985 
2986 	if (!valid) {
2987 		if (val >= 0) {
2988 			dev_err(hsotg->dev,
2989 				"%d invalid for phy_utmi_width. Check HW configuration.\n",
2990 				val);
2991 		}
2992 		val = (hsotg->hw_params.utmi_phy_data_width ==
2993 		       GHWCFG4_UTMI_PHY_DATA_WIDTH_8) ? 8 : 16;
2994 		dev_dbg(hsotg->dev, "Setting phy_utmi_width to %d\n", val);
2995 	}
2996 
2997 	hsotg->core_params->phy_utmi_width = val;
2998 }
2999 
dwc2_set_param_ulpi_fs_ls(struct dwc2_hsotg * hsotg,int val)3000 void dwc2_set_param_ulpi_fs_ls(struct dwc2_hsotg *hsotg, int val)
3001 {
3002 	if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) {
3003 		if (val >= 0) {
3004 			dev_err(hsotg->dev, "Wrong value for ulpi_fs_ls\n");
3005 			dev_err(hsotg->dev, "ulpi_fs_ls must be 0 or 1\n");
3006 		}
3007 		val = 0;
3008 		dev_dbg(hsotg->dev, "Setting ulpi_fs_ls to %d\n", val);
3009 	}
3010 
3011 	hsotg->core_params->ulpi_fs_ls = val;
3012 }
3013 
dwc2_set_param_ts_dline(struct dwc2_hsotg * hsotg,int val)3014 void dwc2_set_param_ts_dline(struct dwc2_hsotg *hsotg, int val)
3015 {
3016 	if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) {
3017 		if (val >= 0) {
3018 			dev_err(hsotg->dev, "Wrong value for ts_dline\n");
3019 			dev_err(hsotg->dev, "ts_dline must be 0 or 1\n");
3020 		}
3021 		val = 0;
3022 		dev_dbg(hsotg->dev, "Setting ts_dline to %d\n", val);
3023 	}
3024 
3025 	hsotg->core_params->ts_dline = val;
3026 }
3027 
dwc2_set_param_i2c_enable(struct dwc2_hsotg * hsotg,int val)3028 void dwc2_set_param_i2c_enable(struct dwc2_hsotg *hsotg, int val)
3029 {
3030 	int valid = 1;
3031 
3032 	if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) {
3033 		if (val >= 0) {
3034 			dev_err(hsotg->dev, "Wrong value for i2c_enable\n");
3035 			dev_err(hsotg->dev, "i2c_enable must be 0 or 1\n");
3036 		}
3037 
3038 		valid = 0;
3039 	}
3040 
3041 	if (val == 1 && !(hsotg->hw_params.i2c_enable))
3042 		valid = 0;
3043 
3044 	if (!valid) {
3045 		if (val >= 0)
3046 			dev_err(hsotg->dev,
3047 				"%d invalid for i2c_enable. Check HW configuration.\n",
3048 				val);
3049 		val = hsotg->hw_params.i2c_enable;
3050 		dev_dbg(hsotg->dev, "Setting i2c_enable to %d\n", val);
3051 	}
3052 
3053 	hsotg->core_params->i2c_enable = val;
3054 }
3055 
dwc2_set_param_en_multiple_tx_fifo(struct dwc2_hsotg * hsotg,int val)3056 void dwc2_set_param_en_multiple_tx_fifo(struct dwc2_hsotg *hsotg, int val)
3057 {
3058 	int valid = 1;
3059 
3060 	if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) {
3061 		if (val >= 0) {
3062 			dev_err(hsotg->dev,
3063 				"Wrong value for en_multiple_tx_fifo,\n");
3064 			dev_err(hsotg->dev,
3065 				"en_multiple_tx_fifo must be 0 or 1\n");
3066 		}
3067 		valid = 0;
3068 	}
3069 
3070 	if (val == 1 && !hsotg->hw_params.en_multiple_tx_fifo)
3071 		valid = 0;
3072 
3073 	if (!valid) {
3074 		if (val >= 0)
3075 			dev_err(hsotg->dev,
3076 				"%d invalid for parameter en_multiple_tx_fifo. Check HW configuration.\n",
3077 				val);
3078 		val = hsotg->hw_params.en_multiple_tx_fifo;
3079 		dev_dbg(hsotg->dev, "Setting en_multiple_tx_fifo to %d\n", val);
3080 	}
3081 
3082 	hsotg->core_params->en_multiple_tx_fifo = val;
3083 }
3084 
dwc2_set_param_reload_ctl(struct dwc2_hsotg * hsotg,int val)3085 void dwc2_set_param_reload_ctl(struct dwc2_hsotg *hsotg, int val)
3086 {
3087 	int valid = 1;
3088 
3089 	if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) {
3090 		if (val >= 0) {
3091 			dev_err(hsotg->dev,
3092 				"'%d' invalid for parameter reload_ctl\n", val);
3093 			dev_err(hsotg->dev, "reload_ctl must be 0 or 1\n");
3094 		}
3095 		valid = 0;
3096 	}
3097 
3098 	if (val == 1 && hsotg->hw_params.snpsid < DWC2_CORE_REV_2_92a)
3099 		valid = 0;
3100 
3101 	if (!valid) {
3102 		if (val >= 0)
3103 			dev_err(hsotg->dev,
3104 				"%d invalid for parameter reload_ctl. Check HW configuration.\n",
3105 				val);
3106 		val = hsotg->hw_params.snpsid >= DWC2_CORE_REV_2_92a;
3107 		dev_dbg(hsotg->dev, "Setting reload_ctl to %d\n", val);
3108 	}
3109 
3110 	hsotg->core_params->reload_ctl = val;
3111 }
3112 
dwc2_set_param_ahbcfg(struct dwc2_hsotg * hsotg,int val)3113 void dwc2_set_param_ahbcfg(struct dwc2_hsotg *hsotg, int val)
3114 {
3115 	if (val != -1)
3116 		hsotg->core_params->ahbcfg = val;
3117 	else
3118 		hsotg->core_params->ahbcfg = GAHBCFG_HBSTLEN_INCR4 <<
3119 						GAHBCFG_HBSTLEN_SHIFT;
3120 }
3121 
dwc2_set_param_otg_ver(struct dwc2_hsotg * hsotg,int val)3122 void dwc2_set_param_otg_ver(struct dwc2_hsotg *hsotg, int val)
3123 {
3124 	if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) {
3125 		if (val >= 0) {
3126 			dev_err(hsotg->dev,
3127 				"'%d' invalid for parameter otg_ver\n", val);
3128 			dev_err(hsotg->dev,
3129 				"otg_ver must be 0 (for OTG 1.3 support) or 1 (for OTG 2.0 support)\n");
3130 		}
3131 		val = 0;
3132 		dev_dbg(hsotg->dev, "Setting otg_ver to %d\n", val);
3133 	}
3134 
3135 	hsotg->core_params->otg_ver = val;
3136 }
3137 
dwc2_set_param_uframe_sched(struct dwc2_hsotg * hsotg,int val)3138 static void dwc2_set_param_uframe_sched(struct dwc2_hsotg *hsotg, int val)
3139 {
3140 	if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) {
3141 		if (val >= 0) {
3142 			dev_err(hsotg->dev,
3143 				"'%d' invalid for parameter uframe_sched\n",
3144 				val);
3145 			dev_err(hsotg->dev, "uframe_sched must be 0 or 1\n");
3146 		}
3147 		val = 1;
3148 		dev_dbg(hsotg->dev, "Setting uframe_sched to %d\n", val);
3149 	}
3150 
3151 	hsotg->core_params->uframe_sched = val;
3152 }
3153 
dwc2_set_param_external_id_pin_ctl(struct dwc2_hsotg * hsotg,int val)3154 static void dwc2_set_param_external_id_pin_ctl(struct dwc2_hsotg *hsotg,
3155 		int val)
3156 {
3157 	if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) {
3158 		if (val >= 0) {
3159 			dev_err(hsotg->dev,
3160 				"'%d' invalid for parameter external_id_pin_ctl\n",
3161 				val);
3162 			dev_err(hsotg->dev, "external_id_pin_ctl must be 0 or 1\n");
3163 		}
3164 		val = 0;
3165 		dev_dbg(hsotg->dev, "Setting external_id_pin_ctl to %d\n", val);
3166 	}
3167 
3168 	hsotg->core_params->external_id_pin_ctl = val;
3169 }
3170 
dwc2_set_param_hibernation(struct dwc2_hsotg * hsotg,int val)3171 static void dwc2_set_param_hibernation(struct dwc2_hsotg *hsotg,
3172 		int val)
3173 {
3174 	if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) {
3175 		if (val >= 0) {
3176 			dev_err(hsotg->dev,
3177 				"'%d' invalid for parameter hibernation\n",
3178 				val);
3179 			dev_err(hsotg->dev, "hibernation must be 0 or 1\n");
3180 		}
3181 		val = 0;
3182 		dev_dbg(hsotg->dev, "Setting hibernation to %d\n", val);
3183 	}
3184 
3185 	hsotg->core_params->hibernation = val;
3186 }
3187 
3188 /*
3189  * This function is called during module intialization to pass module parameters
3190  * for the DWC_otg core.
3191  */
dwc2_set_parameters(struct dwc2_hsotg * hsotg,const struct dwc2_core_params * params)3192 void dwc2_set_parameters(struct dwc2_hsotg *hsotg,
3193 			 const struct dwc2_core_params *params)
3194 {
3195 	dev_dbg(hsotg->dev, "%s()\n", __func__);
3196 
3197 	dwc2_set_param_otg_cap(hsotg, params->otg_cap);
3198 	dwc2_set_param_dma_enable(hsotg, params->dma_enable);
3199 	dwc2_set_param_dma_desc_enable(hsotg, params->dma_desc_enable);
3200 	dwc2_set_param_dma_desc_fs_enable(hsotg, params->dma_desc_fs_enable);
3201 	dwc2_set_param_host_support_fs_ls_low_power(hsotg,
3202 			params->host_support_fs_ls_low_power);
3203 	dwc2_set_param_enable_dynamic_fifo(hsotg,
3204 			params->enable_dynamic_fifo);
3205 	dwc2_set_param_host_rx_fifo_size(hsotg,
3206 			params->host_rx_fifo_size);
3207 	dwc2_set_param_host_nperio_tx_fifo_size(hsotg,
3208 			params->host_nperio_tx_fifo_size);
3209 	dwc2_set_param_host_perio_tx_fifo_size(hsotg,
3210 			params->host_perio_tx_fifo_size);
3211 	dwc2_set_param_max_transfer_size(hsotg,
3212 			params->max_transfer_size);
3213 	dwc2_set_param_max_packet_count(hsotg,
3214 			params->max_packet_count);
3215 	dwc2_set_param_host_channels(hsotg, params->host_channels);
3216 	dwc2_set_param_phy_type(hsotg, params->phy_type);
3217 	dwc2_set_param_speed(hsotg, params->speed);
3218 	dwc2_set_param_host_ls_low_power_phy_clk(hsotg,
3219 			params->host_ls_low_power_phy_clk);
3220 	dwc2_set_param_phy_ulpi_ddr(hsotg, params->phy_ulpi_ddr);
3221 	dwc2_set_param_phy_ulpi_ext_vbus(hsotg,
3222 			params->phy_ulpi_ext_vbus);
3223 	dwc2_set_param_phy_utmi_width(hsotg, params->phy_utmi_width);
3224 	dwc2_set_param_ulpi_fs_ls(hsotg, params->ulpi_fs_ls);
3225 	dwc2_set_param_ts_dline(hsotg, params->ts_dline);
3226 	dwc2_set_param_i2c_enable(hsotg, params->i2c_enable);
3227 	dwc2_set_param_en_multiple_tx_fifo(hsotg,
3228 			params->en_multiple_tx_fifo);
3229 	dwc2_set_param_reload_ctl(hsotg, params->reload_ctl);
3230 	dwc2_set_param_ahbcfg(hsotg, params->ahbcfg);
3231 	dwc2_set_param_otg_ver(hsotg, params->otg_ver);
3232 	dwc2_set_param_uframe_sched(hsotg, params->uframe_sched);
3233 	dwc2_set_param_external_id_pin_ctl(hsotg, params->external_id_pin_ctl);
3234 	dwc2_set_param_hibernation(hsotg, params->hibernation);
3235 }
3236 
3237 /*
3238  * Forces either host or device mode if the controller is not
3239  * currently in that mode.
3240  *
3241  * Returns true if the mode was forced.
3242  */
dwc2_force_mode_if_needed(struct dwc2_hsotg * hsotg,bool host)3243 static bool dwc2_force_mode_if_needed(struct dwc2_hsotg *hsotg, bool host)
3244 {
3245 	if (host && dwc2_is_host_mode(hsotg))
3246 		return false;
3247 	else if (!host && dwc2_is_device_mode(hsotg))
3248 		return false;
3249 
3250 	return dwc2_force_mode(hsotg, host);
3251 }
3252 
3253 /*
3254  * Gets host hardware parameters. Forces host mode if not currently in
3255  * host mode. Should be called immediately after a core soft reset in
3256  * order to get the reset values.
3257  */
dwc2_get_host_hwparams(struct dwc2_hsotg * hsotg)3258 static void dwc2_get_host_hwparams(struct dwc2_hsotg *hsotg)
3259 {
3260 	struct dwc2_hw_params *hw = &hsotg->hw_params;
3261 	u32 gnptxfsiz;
3262 	u32 hptxfsiz;
3263 	bool forced;
3264 
3265 	if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL)
3266 		return;
3267 
3268 	forced = dwc2_force_mode_if_needed(hsotg, true);
3269 
3270 	gnptxfsiz = DWC2_READ_4(hsotg, GNPTXFSIZ);
3271 	hptxfsiz = DWC2_READ_4(hsotg, HPTXFSIZ);
3272 	dev_dbg(hsotg->dev, "gnptxfsiz=%08x\n", gnptxfsiz);
3273 	dev_dbg(hsotg->dev, "hptxfsiz=%08x\n", hptxfsiz);
3274 
3275 	if (forced)
3276 		dwc2_clear_force_mode(hsotg);
3277 
3278 	hw->host_nperio_tx_fifo_size = (gnptxfsiz & FIFOSIZE_DEPTH_MASK) >>
3279 				       FIFOSIZE_DEPTH_SHIFT;
3280 	hw->host_perio_tx_fifo_size = (hptxfsiz & FIFOSIZE_DEPTH_MASK) >>
3281 				      FIFOSIZE_DEPTH_SHIFT;
3282 }
3283 
3284 /*
3285  * Gets device hardware parameters. Forces device mode if not
3286  * currently in device mode. Should be called immediately after a core
3287  * soft reset in order to get the reset values.
3288  */
dwc2_get_dev_hwparams(struct dwc2_hsotg * hsotg)3289 static void dwc2_get_dev_hwparams(struct dwc2_hsotg *hsotg)
3290 {
3291 	struct dwc2_hw_params *hw = &hsotg->hw_params;
3292 	bool forced;
3293 	u32 gnptxfsiz;
3294 
3295 	if (hsotg->dr_mode == USB_DR_MODE_HOST)
3296 		return;
3297 
3298 	forced = dwc2_force_mode_if_needed(hsotg, false);
3299 
3300 	gnptxfsiz = DWC2_READ_4(hsotg, GNPTXFSIZ);
3301 	dev_dbg(hsotg->dev, "gnptxfsiz=%08x\n", gnptxfsiz);
3302 
3303 	if (forced)
3304 		dwc2_clear_force_mode(hsotg);
3305 
3306 	hw->dev_nperio_tx_fifo_size = (gnptxfsiz & FIFOSIZE_DEPTH_MASK) >>
3307 				       FIFOSIZE_DEPTH_SHIFT;
3308 }
3309 
3310 /**
3311  * During device initialization, read various hardware configuration
3312  * registers and interpret the contents.
3313  */
dwc2_get_hwparams(struct dwc2_hsotg * hsotg)3314 int dwc2_get_hwparams(struct dwc2_hsotg *hsotg)
3315 {
3316 	struct dwc2_hw_params *hw = &hsotg->hw_params;
3317 	unsigned width;
3318 	u32 hwcfg1, hwcfg2, hwcfg3, hwcfg4;
3319 	u32 grxfsiz;
3320 
3321 	/*
3322 	 * Attempt to ensure this device is really a DWC_otg Controller.
3323 	 * Read and verify the GSNPSID register contents. The value should be
3324 	 * 0x45f42xxx or 0x45f43xxx, which corresponds to either "OT2" or "OT3",
3325 	 * as in "OTG version 2.xx" or "OTG version 3.xx".
3326 	 */
3327 	hw->snpsid = DWC2_READ_4(hsotg, GSNPSID);
3328 	if ((hw->snpsid & 0xfffff000) != 0x4f542000 &&
3329 	    (hw->snpsid & 0xfffff000) != 0x4f543000) {
3330 		dev_err(hsotg->dev, "Bad value for GSNPSID: 0x%08x\n",
3331 			hw->snpsid);
3332 		return -ENODEV;
3333 	}
3334 
3335 	dev_dbg(hsotg->dev, "Core Release: %1x.%1x%1x%1x (snpsid=%x)\n",
3336 		hw->snpsid >> 12 & 0xf, hw->snpsid >> 8 & 0xf,
3337 		hw->snpsid >> 4 & 0xf, hw->snpsid & 0xf, hw->snpsid);
3338 
3339 	hwcfg1 = DWC2_READ_4(hsotg, GHWCFG1);
3340 	hwcfg2 = DWC2_READ_4(hsotg, GHWCFG2);
3341 	hwcfg3 = DWC2_READ_4(hsotg, GHWCFG3);
3342 	hwcfg4 = DWC2_READ_4(hsotg, GHWCFG4);
3343 	grxfsiz = DWC2_READ_4(hsotg, GRXFSIZ);
3344 
3345 	dev_dbg(hsotg->dev, "hwcfg1=%08x\n", hwcfg1);
3346 	dev_dbg(hsotg->dev, "hwcfg2=%08x\n", hwcfg2);
3347 	dev_dbg(hsotg->dev, "hwcfg3=%08x\n", hwcfg3);
3348 	dev_dbg(hsotg->dev, "hwcfg4=%08x\n", hwcfg4);
3349 	dev_dbg(hsotg->dev, "grxfsiz=%08x\n", grxfsiz);
3350 
3351 	/*
3352 	 * Host specific hardware parameters. Reading these parameters
3353 	 * requires the controller to be in host mode. The mode will
3354 	 * be forced, if necessary, to read these values.
3355 	 */
3356 	dwc2_get_host_hwparams(hsotg);
3357 	dwc2_get_dev_hwparams(hsotg);
3358 
3359 	/* hwcfg1 */
3360 	hw->dev_ep_dirs = hwcfg1;
3361 
3362 	/* hwcfg2 */
3363 	hw->op_mode = (hwcfg2 & GHWCFG2_OP_MODE_MASK) >>
3364 		      GHWCFG2_OP_MODE_SHIFT;
3365 	hw->arch = (hwcfg2 & GHWCFG2_ARCHITECTURE_MASK) >>
3366 		   GHWCFG2_ARCHITECTURE_SHIFT;
3367 	hw->enable_dynamic_fifo = !!(hwcfg2 & GHWCFG2_DYNAMIC_FIFO);
3368 	hw->host_channels = 1 + ((hwcfg2 & GHWCFG2_NUM_HOST_CHAN_MASK) >>
3369 				GHWCFG2_NUM_HOST_CHAN_SHIFT);
3370 	hw->hs_phy_type = (hwcfg2 & GHWCFG2_HS_PHY_TYPE_MASK) >>
3371 			  GHWCFG2_HS_PHY_TYPE_SHIFT;
3372 	hw->fs_phy_type = (hwcfg2 & GHWCFG2_FS_PHY_TYPE_MASK) >>
3373 			  GHWCFG2_FS_PHY_TYPE_SHIFT;
3374 	hw->num_dev_ep = (hwcfg2 & GHWCFG2_NUM_DEV_EP_MASK) >>
3375 			 GHWCFG2_NUM_DEV_EP_SHIFT;
3376 	hw->nperio_tx_q_depth =
3377 		(hwcfg2 & GHWCFG2_NONPERIO_TX_Q_DEPTH_MASK) >>
3378 		GHWCFG2_NONPERIO_TX_Q_DEPTH_SHIFT << 1;
3379 	hw->host_perio_tx_q_depth =
3380 		(hwcfg2 & GHWCFG2_HOST_PERIO_TX_Q_DEPTH_MASK) >>
3381 		GHWCFG2_HOST_PERIO_TX_Q_DEPTH_SHIFT << 1;
3382 	hw->dev_token_q_depth =
3383 		(hwcfg2 & GHWCFG2_DEV_TOKEN_Q_DEPTH_MASK) >>
3384 		GHWCFG2_DEV_TOKEN_Q_DEPTH_SHIFT;
3385 
3386 	/* hwcfg3 */
3387 	width = (hwcfg3 & GHWCFG3_XFER_SIZE_CNTR_WIDTH_MASK) >>
3388 		GHWCFG3_XFER_SIZE_CNTR_WIDTH_SHIFT;
3389 	hw->max_transfer_size = (1 << (width + 11)) - 1;
3390 	/*
3391 	 * Clip max_transfer_size to 65535. dwc2_hc_setup_align_buf() allocates
3392 	 * coherent buffers with this size, and if it's too large we can
3393 	 * exhaust the coherent DMA pool.
3394 	 */
3395 	if (hw->max_transfer_size > 65535)
3396 		hw->max_transfer_size = 65535;
3397 	width = (hwcfg3 & GHWCFG3_PACKET_SIZE_CNTR_WIDTH_MASK) >>
3398 		GHWCFG3_PACKET_SIZE_CNTR_WIDTH_SHIFT;
3399 	hw->max_packet_count = (1 << (width + 4)) - 1;
3400 	hw->i2c_enable = !!(hwcfg3 & GHWCFG3_I2C);
3401 	hw->total_fifo_size = (hwcfg3 & GHWCFG3_DFIFO_DEPTH_MASK) >>
3402 			      GHWCFG3_DFIFO_DEPTH_SHIFT;
3403 
3404 	/* hwcfg4 */
3405 	hw->en_multiple_tx_fifo = !!(hwcfg4 & GHWCFG4_DED_FIFO_EN);
3406 	hw->num_dev_perio_in_ep = (hwcfg4 & GHWCFG4_NUM_DEV_PERIO_IN_EP_MASK) >>
3407 				  GHWCFG4_NUM_DEV_PERIO_IN_EP_SHIFT;
3408 	hw->dma_desc_enable = !!(hwcfg4 & GHWCFG4_DESC_DMA);
3409 	hw->power_optimized = !!(hwcfg4 & GHWCFG4_POWER_OPTIMIZ);
3410 	hw->utmi_phy_data_width = (hwcfg4 & GHWCFG4_UTMI_PHY_DATA_WIDTH_MASK) >>
3411 				  GHWCFG4_UTMI_PHY_DATA_WIDTH_SHIFT;
3412 
3413 	/* fifo sizes */
3414 	hw->host_rx_fifo_size = (grxfsiz & GRXFSIZ_DEPTH_MASK) >>
3415 				GRXFSIZ_DEPTH_SHIFT;
3416 
3417 	dev_dbg(hsotg->dev, "Detected values from hardware:\n");
3418 	dev_dbg(hsotg->dev, "  op_mode=%d\n",
3419 		hw->op_mode);
3420 	dev_dbg(hsotg->dev, "  arch=%d\n",
3421 		hw->arch);
3422 	dev_dbg(hsotg->dev, "  dma_desc_enable=%d\n",
3423 		hw->dma_desc_enable);
3424 	dev_dbg(hsotg->dev, "  power_optimized=%d\n",
3425 		hw->power_optimized);
3426 	dev_dbg(hsotg->dev, "  i2c_enable=%d\n",
3427 		hw->i2c_enable);
3428 	dev_dbg(hsotg->dev, "  hs_phy_type=%d\n",
3429 		hw->hs_phy_type);
3430 	dev_dbg(hsotg->dev, "  fs_phy_type=%d\n",
3431 		hw->fs_phy_type);
3432 	dev_dbg(hsotg->dev, "  utmi_phy_data_width=%d\n",
3433 		hw->utmi_phy_data_width);
3434 	dev_dbg(hsotg->dev, "  num_dev_ep=%d\n",
3435 		hw->num_dev_ep);
3436 	dev_dbg(hsotg->dev, "  num_dev_perio_in_ep=%d\n",
3437 		hw->num_dev_perio_in_ep);
3438 	dev_dbg(hsotg->dev, "  host_channels=%d\n",
3439 		hw->host_channels);
3440 	dev_dbg(hsotg->dev, "  max_transfer_size=%d\n",
3441 		hw->max_transfer_size);
3442 	dev_dbg(hsotg->dev, "  max_packet_count=%d\n",
3443 		hw->max_packet_count);
3444 	dev_dbg(hsotg->dev, "  nperio_tx_q_depth=0x%0x\n",
3445 		hw->nperio_tx_q_depth);
3446 	dev_dbg(hsotg->dev, "  host_perio_tx_q_depth=0x%0x\n",
3447 		hw->host_perio_tx_q_depth);
3448 	dev_dbg(hsotg->dev, "  dev_token_q_depth=0x%0x\n",
3449 		hw->dev_token_q_depth);
3450 	dev_dbg(hsotg->dev, "  enable_dynamic_fifo=%d\n",
3451 		hw->enable_dynamic_fifo);
3452 	dev_dbg(hsotg->dev, "  en_multiple_tx_fifo=%d\n",
3453 		hw->en_multiple_tx_fifo);
3454 	dev_dbg(hsotg->dev, "  total_fifo_size=%d\n",
3455 		hw->total_fifo_size);
3456 	dev_dbg(hsotg->dev, "  host_rx_fifo_size=%d\n",
3457 		hw->host_rx_fifo_size);
3458 	dev_dbg(hsotg->dev, "  host_nperio_tx_fifo_size=%d\n",
3459 		hw->host_nperio_tx_fifo_size);
3460 	dev_dbg(hsotg->dev, "  host_perio_tx_fifo_size=%d\n",
3461 		hw->host_perio_tx_fifo_size);
3462 	dev_dbg(hsotg->dev, "\n");
3463 
3464 	return 0;
3465 }
3466 
3467 /*
3468  * Sets all parameters to the given value.
3469  *
3470  * Assumes that the dwc2_core_params struct contains only integers.
3471  */
dwc2_set_all_params(struct dwc2_core_params * params,int value)3472 void dwc2_set_all_params(struct dwc2_core_params *params, int value)
3473 {
3474 	int *p = (int *)params;
3475 	size_t size = sizeof(*params) / sizeof(*p);
3476 	int i;
3477 
3478 	for (i = 0; i < size; i++)
3479 		p[i] = value;
3480 }
3481 
3482 
dwc2_get_otg_version(struct dwc2_hsotg * hsotg)3483 u16 dwc2_get_otg_version(struct dwc2_hsotg *hsotg)
3484 {
3485 	return hsotg->core_params->otg_ver == 1 ? 0x0200 : 0x0103;
3486 }
3487 
dwc2_is_controller_alive(struct dwc2_hsotg * hsotg)3488 bool dwc2_is_controller_alive(struct dwc2_hsotg *hsotg)
3489 {
3490 	if (DWC2_READ_4(hsotg, GSNPSID) == 0xffffffff)
3491 		return false;
3492 	else
3493 		return true;
3494 }
3495 
3496 /**
3497  * dwc2_enable_global_interrupts() - Enables the controller's Global
3498  * Interrupt in the AHB Config register
3499  *
3500  * @hsotg: Programming view of DWC_otg controller
3501  */
dwc2_enable_global_interrupts(struct dwc2_hsotg * hsotg)3502 void dwc2_enable_global_interrupts(struct dwc2_hsotg *hsotg)
3503 {
3504 	u32 ahbcfg = DWC2_READ_4(hsotg, GAHBCFG);
3505 
3506 	ahbcfg |= GAHBCFG_GLBL_INTR_EN;
3507 	DWC2_WRITE_4(hsotg, GAHBCFG, ahbcfg);
3508 }
3509 
3510 /**
3511  * dwc2_disable_global_interrupts() - Disables the controller's Global
3512  * Interrupt in the AHB Config register
3513  *
3514  * @hsotg: Programming view of DWC_otg controller
3515  */
dwc2_disable_global_interrupts(struct dwc2_hsotg * hsotg)3516 void dwc2_disable_global_interrupts(struct dwc2_hsotg *hsotg)
3517 {
3518 	u32 ahbcfg = DWC2_READ_4(hsotg, GAHBCFG);
3519 
3520 	ahbcfg &= ~GAHBCFG_GLBL_INTR_EN;
3521 	DWC2_WRITE_4(hsotg, GAHBCFG, ahbcfg);
3522 }
3523 
3524 /* Returns the controller's GHWCFG2.OTG_MODE. */
dwc2_op_mode(struct dwc2_hsotg * hsotg)3525 unsigned dwc2_op_mode(struct dwc2_hsotg *hsotg)
3526 {
3527 	u32 ghwcfg2 = DWC2_READ_4(hsotg, GHWCFG2);
3528 
3529 	return (ghwcfg2 & GHWCFG2_OP_MODE_MASK) >>
3530 		GHWCFG2_OP_MODE_SHIFT;
3531 }
3532 
3533 /* Returns true if the controller is capable of DRD. */
dwc2_hw_is_otg(struct dwc2_hsotg * hsotg)3534 bool dwc2_hw_is_otg(struct dwc2_hsotg *hsotg)
3535 {
3536 	unsigned op_mode = dwc2_op_mode(hsotg);
3537 
3538 	return (op_mode == GHWCFG2_OP_MODE_HNP_SRP_CAPABLE) ||
3539 		(op_mode == GHWCFG2_OP_MODE_SRP_ONLY_CAPABLE) ||
3540 		(op_mode == GHWCFG2_OP_MODE_NO_HNP_SRP_CAPABLE);
3541 }
3542 
3543 /* Returns true if the controller is host-only. */
dwc2_hw_is_host(struct dwc2_hsotg * hsotg)3544 bool dwc2_hw_is_host(struct dwc2_hsotg *hsotg)
3545 {
3546 	unsigned op_mode = dwc2_op_mode(hsotg);
3547 
3548 	return (op_mode == GHWCFG2_OP_MODE_SRP_CAPABLE_HOST) ||
3549 		(op_mode == GHWCFG2_OP_MODE_NO_SRP_CAPABLE_HOST);
3550 }
3551 
3552 /* Returns true if the controller is device-only. */
dwc2_hw_is_device(struct dwc2_hsotg * hsotg)3553 bool dwc2_hw_is_device(struct dwc2_hsotg *hsotg)
3554 {
3555 	unsigned op_mode = dwc2_op_mode(hsotg);
3556 
3557 	return (op_mode == GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE) ||
3558 		(op_mode == GHWCFG2_OP_MODE_NO_SRP_CAPABLE_DEVICE);
3559 }
3560