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 */
77static 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 */
105static 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
134static inline int dwc2_backup_host_registers(struct dwc2_hsotg *hsotg)
135{ return 0; }
136
137static 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 */
150static 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 */
202static 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
245static inline int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg)
246{ return 0; }
247
248static 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 */
259static 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 */
289static 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 */
326int 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 */
379int 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 */
440static 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 */
468static 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 */
494int 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 */
556static 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 */
600static 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 */
619void 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 */
645int 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
657static 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
714static 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
765static 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
801static 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
857static 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 */
899int 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 */
986void 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 */
1010void 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 */
1027static 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
1086static 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 */
1156void 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
1274static 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
1352static 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
1389static 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 */
1430void 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 */
1545void 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 */
1691void 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 */
1717static 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
1728static 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 */
1764static 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 */
1837void 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 */
2057void 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 */
2153int 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 */
2223void 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 */
2253u32 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 */
2300void 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 */
2327void 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 */
2399void 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 */
2490void 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 */
2522void 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 */
2549void 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
2602void 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
2623void 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
2646void 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
2669void 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
2687void 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
2708void 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
2727void 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
2747void 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
2767void 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
2786void 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
2805void 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
2824void 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
2872static int dwc2_get_param_phy_type(struct dwc2_hsotg *hsotg)
2873{
2874	return hsotg->core_params->phy_type;
2875}
2876
2877void 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
2906void 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
2940void 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
2954void 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
2970void 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
3000void 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
3014void 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
3028void 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
3056void 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
3085void 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
3113void 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
3122void 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
3138static 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
3154static 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
3171static 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 */
3192void 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 */
3243static 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 */
3258static 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 */
3289static 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 */
3314int 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 */
3472void 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
3483u16 dwc2_get_otg_version(struct dwc2_hsotg *hsotg)
3484{
3485	return hsotg->core_params->otg_ver == 1 ? 0x0200 : 0x0103;
3486}
3487
3488bool 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 */
3502void 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 */
3516void 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. */
3525unsigned 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. */
3534bool 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. */
3544bool 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. */
3553bool 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