]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/staging/dwc2/hcd.c
32b52ad5f74fa17a866ee9f5f780d730977a0b38
[karo-tx-linux.git] / drivers / staging / dwc2 / hcd.c
1 /*
2  * hcd.c - DesignWare HS OTG Controller host-mode routines
3  *
4  * Copyright (C) 2004-2013 Synopsys, Inc.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions, and the following disclaimer,
11  *    without modification.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. The names of the above-listed copyright holders may not be used
16  *    to endorse or promote products derived from this software without
17  *    specific prior written permission.
18  *
19  * ALTERNATIVELY, this software may be distributed under the terms of the
20  * GNU General Public License ("GPL") as published by the Free Software
21  * Foundation; either version 2 of the License, or (at your option) any
22  * later version.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
25  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
26  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
27  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
28  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
29  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
30  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
31  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
32  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
33  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
34  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35  */
36
37 /*
38  * This file contains the core HCD code, and implements the Linux hc_driver
39  * API
40  */
41 #include <linux/kernel.h>
42 #include <linux/module.h>
43 #include <linux/spinlock.h>
44 #include <linux/interrupt.h>
45 #include <linux/dma-mapping.h>
46 #include <linux/delay.h>
47 #include <linux/io.h>
48 #include <linux/slab.h>
49 #include <linux/usb.h>
50
51 #include <linux/usb/hcd.h>
52 #include <linux/usb/ch11.h>
53
54 #include "core.h"
55 #include "hcd.h"
56
57 /**
58  * dwc2_dump_channel_info() - Prints the state of a host channel
59  *
60  * @hsotg: Programming view of DWC_otg controller
61  * @chan:  Pointer to the channel to dump
62  *
63  * Must be called with interrupt disabled and spinlock held
64  *
65  * NOTE: This function will be removed once the peripheral controller code
66  * is integrated and the driver is stable
67  */
68 static void dwc2_dump_channel_info(struct dwc2_hsotg *hsotg,
69                                    struct dwc2_host_chan *chan)
70 {
71 #ifdef VERBOSE_DEBUG
72         int num_channels = hsotg->core_params->host_channels;
73         struct dwc2_qh *qh;
74         u32 hcchar;
75         u32 hcsplt;
76         u32 hctsiz;
77         u32 hc_dma;
78         int i;
79
80         if (chan == NULL)
81                 return;
82
83         hcchar = readl(hsotg->regs + HCCHAR(chan->hc_num));
84         hcsplt = readl(hsotg->regs + HCSPLT(chan->hc_num));
85         hctsiz = readl(hsotg->regs + HCTSIZ(chan->hc_num));
86         hc_dma = readl(hsotg->regs + HCDMA(chan->hc_num));
87
88         dev_dbg(hsotg->dev, "  Assigned to channel %p:\n", chan);
89         dev_dbg(hsotg->dev, "    hcchar 0x%08x, hcsplt 0x%08x\n",
90                 hcchar, hcsplt);
91         dev_dbg(hsotg->dev, "    hctsiz 0x%08x, hc_dma 0x%08x\n",
92                 hctsiz, hc_dma);
93         dev_dbg(hsotg->dev, "    dev_addr: %d, ep_num: %d, ep_is_in: %d\n",
94                 chan->dev_addr, chan->ep_num, chan->ep_is_in);
95         dev_dbg(hsotg->dev, "    ep_type: %d\n", chan->ep_type);
96         dev_dbg(hsotg->dev, "    max_packet: %d\n", chan->max_packet);
97         dev_dbg(hsotg->dev, "    data_pid_start: %d\n", chan->data_pid_start);
98         dev_dbg(hsotg->dev, "    xfer_started: %d\n", chan->xfer_started);
99         dev_dbg(hsotg->dev, "    halt_status: %d\n", chan->halt_status);
100         dev_dbg(hsotg->dev, "    xfer_buf: %p\n", chan->xfer_buf);
101         dev_dbg(hsotg->dev, "    xfer_dma: %08lx\n",
102                 (unsigned long)chan->xfer_dma);
103         dev_dbg(hsotg->dev, "    xfer_len: %d\n", chan->xfer_len);
104         dev_dbg(hsotg->dev, "    qh: %p\n", chan->qh);
105         dev_dbg(hsotg->dev, "  NP inactive sched:\n");
106         list_for_each_entry(qh, &hsotg->non_periodic_sched_inactive,
107                             qh_list_entry)
108                 dev_dbg(hsotg->dev, "    %p\n", qh);
109         dev_dbg(hsotg->dev, "  NP active sched:\n");
110         list_for_each_entry(qh, &hsotg->non_periodic_sched_active,
111                             qh_list_entry)
112                 dev_dbg(hsotg->dev, "    %p\n", qh);
113         dev_dbg(hsotg->dev, "  Channels:\n");
114         for (i = 0; i < num_channels; i++) {
115                 struct dwc2_host_chan *chan = hsotg->hc_ptr_array[i];
116
117                 dev_dbg(hsotg->dev, "    %2d: %p\n", i, chan);
118         }
119 #endif /* VERBOSE_DEBUG */
120 }
121
122 /*
123  * Processes all the URBs in a single list of QHs. Completes them with
124  * -ETIMEDOUT and frees the QTD.
125  *
126  * Must be called with interrupt disabled and spinlock held
127  */
128 static void dwc2_kill_urbs_in_qh_list(struct dwc2_hsotg *hsotg,
129                                       struct list_head *qh_list)
130 {
131         struct dwc2_qh *qh, *qh_tmp;
132         struct dwc2_qtd *qtd, *qtd_tmp;
133
134         list_for_each_entry_safe(qh, qh_tmp, qh_list, qh_list_entry) {
135                 list_for_each_entry_safe(qtd, qtd_tmp, &qh->qtd_list,
136                                          qtd_list_entry) {
137                         dwc2_host_complete(hsotg, qtd, -ETIMEDOUT);
138                         dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh);
139                 }
140         }
141 }
142
143 static void dwc2_qh_list_free(struct dwc2_hsotg *hsotg,
144                               struct list_head *qh_list)
145 {
146         struct dwc2_qtd *qtd, *qtd_tmp;
147         struct dwc2_qh *qh, *qh_tmp;
148         unsigned long flags;
149
150         if (!qh_list->next)
151                 /* The list hasn't been initialized yet */
152                 return;
153
154         spin_lock_irqsave(&hsotg->lock, flags);
155
156         /* Ensure there are no QTDs or URBs left */
157         dwc2_kill_urbs_in_qh_list(hsotg, qh_list);
158
159         list_for_each_entry_safe(qh, qh_tmp, qh_list, qh_list_entry) {
160                 dwc2_hcd_qh_unlink(hsotg, qh);
161
162                 /* Free each QTD in the QH's QTD list */
163                 list_for_each_entry_safe(qtd, qtd_tmp, &qh->qtd_list,
164                                          qtd_list_entry)
165                         dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh);
166
167                 spin_unlock_irqrestore(&hsotg->lock, flags);
168                 dwc2_hcd_qh_free(hsotg, qh);
169                 spin_lock_irqsave(&hsotg->lock, flags);
170         }
171
172         spin_unlock_irqrestore(&hsotg->lock, flags);
173 }
174
175 /*
176  * Responds with an error status of -ETIMEDOUT to all URBs in the non-periodic
177  * and periodic schedules. The QTD associated with each URB is removed from
178  * the schedule and freed. This function may be called when a disconnect is
179  * detected or when the HCD is being stopped.
180  *
181  * Must be called with interrupt disabled and spinlock held
182  */
183 static void dwc2_kill_all_urbs(struct dwc2_hsotg *hsotg)
184 {
185         dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->non_periodic_sched_inactive);
186         dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->non_periodic_sched_active);
187         dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->periodic_sched_inactive);
188         dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->periodic_sched_ready);
189         dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->periodic_sched_assigned);
190         dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->periodic_sched_queued);
191 }
192
193 /**
194  * dwc2_hcd_start() - Starts the HCD when switching to Host mode
195  *
196  * @hsotg: Pointer to struct dwc2_hsotg
197  */
198 void dwc2_hcd_start(struct dwc2_hsotg *hsotg)
199 {
200         u32 hprt0;
201
202         if (hsotg->op_state == OTG_STATE_B_HOST) {
203                 /*
204                  * Reset the port. During a HNP mode switch the reset
205                  * needs to occur within 1ms and have a duration of at
206                  * least 50ms.
207                  */
208                 hprt0 = dwc2_read_hprt0(hsotg);
209                 hprt0 |= HPRT0_RST;
210                 writel(hprt0, hsotg->regs + HPRT0);
211         }
212
213         queue_delayed_work(hsotg->wq_otg, &hsotg->start_work,
214                            msecs_to_jiffies(50));
215 }
216
217 /* Must be called with interrupt disabled and spinlock held */
218 static void dwc2_hcd_cleanup_channels(struct dwc2_hsotg *hsotg)
219 {
220         int num_channels = hsotg->core_params->host_channels;
221         struct dwc2_host_chan *channel;
222         u32 hcchar;
223         int i;
224
225         if (hsotg->core_params->dma_enable <= 0) {
226                 /* Flush out any channel requests in slave mode */
227                 for (i = 0; i < num_channels; i++) {
228                         channel = hsotg->hc_ptr_array[i];
229                         if (!list_empty(&channel->hc_list_entry))
230                                 continue;
231                         hcchar = readl(hsotg->regs + HCCHAR(i));
232                         if (hcchar & HCCHAR_CHENA) {
233                                 hcchar &= ~(HCCHAR_CHENA | HCCHAR_EPDIR);
234                                 hcchar |= HCCHAR_CHDIS;
235                                 writel(hcchar, hsotg->regs + HCCHAR(i));
236                         }
237                 }
238         }
239
240         for (i = 0; i < num_channels; i++) {
241                 channel = hsotg->hc_ptr_array[i];
242                 if (!list_empty(&channel->hc_list_entry))
243                         continue;
244                 hcchar = readl(hsotg->regs + HCCHAR(i));
245                 if (hcchar & HCCHAR_CHENA) {
246                         /* Halt the channel */
247                         hcchar |= HCCHAR_CHDIS;
248                         writel(hcchar, hsotg->regs + HCCHAR(i));
249                 }
250
251                 dwc2_hc_cleanup(hsotg, channel);
252                 list_add_tail(&channel->hc_list_entry, &hsotg->free_hc_list);
253                 /*
254                  * Added for Descriptor DMA to prevent channel double cleanup in
255                  * release_channel_ddma(), which is called from ep_disable when
256                  * device disconnects
257                  */
258                 channel->qh = NULL;
259         }
260 }
261
262 /**
263  * dwc2_hcd_disconnect() - Handles disconnect of the HCD
264  *
265  * @hsotg: Pointer to struct dwc2_hsotg
266  *
267  * Must be called with interrupt disabled and spinlock held
268  */
269 void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg)
270 {
271         u32 intr;
272
273         /* Set status flags for the hub driver */
274         hsotg->flags.b.port_connect_status_change = 1;
275         hsotg->flags.b.port_connect_status = 0;
276
277         /*
278          * Shutdown any transfers in process by clearing the Tx FIFO Empty
279          * interrupt mask and status bits and disabling subsequent host
280          * channel interrupts.
281          */
282         intr = readl(hsotg->regs + GINTMSK);
283         intr &= ~(GINTSTS_NPTXFEMP | GINTSTS_PTXFEMP | GINTSTS_HCHINT);
284         writel(intr, hsotg->regs + GINTMSK);
285         intr = GINTSTS_NPTXFEMP | GINTSTS_PTXFEMP | GINTSTS_HCHINT;
286         writel(intr, hsotg->regs + GINTSTS);
287
288         /*
289          * Turn off the vbus power only if the core has transitioned to device
290          * mode. If still in host mode, need to keep power on to detect a
291          * reconnection.
292          */
293         if (dwc2_is_device_mode(hsotg)) {
294                 if (hsotg->op_state != OTG_STATE_A_SUSPEND) {
295                         dev_dbg(hsotg->dev, "Disconnect: PortPower off\n");
296                         writel(0, hsotg->regs + HPRT0);
297                 }
298
299                 dwc2_disable_host_interrupts(hsotg);
300         }
301
302         /* Respond with an error status to all URBs in the schedule */
303         dwc2_kill_all_urbs(hsotg);
304
305         if (dwc2_is_host_mode(hsotg))
306                 /* Clean up any host channels that were in use */
307                 dwc2_hcd_cleanup_channels(hsotg);
308
309         dwc2_host_disconnect(hsotg);
310 }
311
312 /**
313  * dwc2_hcd_rem_wakeup() - Handles Remote Wakeup
314  *
315  * @hsotg: Pointer to struct dwc2_hsotg
316  */
317 static void dwc2_hcd_rem_wakeup(struct dwc2_hsotg *hsotg)
318 {
319         if (hsotg->lx_state == DWC2_L2)
320                 hsotg->flags.b.port_suspend_change = 1;
321         else
322                 hsotg->flags.b.port_l1_change = 1;
323 }
324
325 /**
326  * dwc2_hcd_stop() - Halts the DWC_otg host mode operations in a clean manner
327  *
328  * @hsotg: Pointer to struct dwc2_hsotg
329  *
330  * Must be called with interrupt disabled and spinlock held
331  */
332 void dwc2_hcd_stop(struct dwc2_hsotg *hsotg)
333 {
334         dev_dbg(hsotg->dev, "DWC OTG HCD STOP\n");
335
336         /*
337          * The root hub should be disconnected before this function is called.
338          * The disconnect will clear the QTD lists (via ..._hcd_urb_dequeue)
339          * and the QH lists (via ..._hcd_endpoint_disable).
340          */
341
342         /* Turn off all host-specific interrupts */
343         dwc2_disable_host_interrupts(hsotg);
344
345         /* Turn off the vbus power */
346         dev_dbg(hsotg->dev, "PortPower off\n");
347         writel(0, hsotg->regs + HPRT0);
348 }
349
350 static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg,
351                                 struct dwc2_hcd_urb *urb, void **ep_handle,
352                                 gfp_t mem_flags)
353 {
354         struct dwc2_qtd *qtd;
355         unsigned long flags;
356         u32 intr_mask;
357         int retval;
358
359         if (!hsotg->flags.b.port_connect_status) {
360                 /* No longer connected */
361                 dev_err(hsotg->dev, "Not connected\n");
362                 return -ENODEV;
363         }
364
365         qtd = kzalloc(sizeof(*qtd), mem_flags);
366         if (!qtd)
367                 return -ENOMEM;
368
369         dwc2_hcd_qtd_init(qtd, urb);
370         retval = dwc2_hcd_qtd_add(hsotg, qtd, (struct dwc2_qh **)ep_handle,
371                                   mem_flags);
372         if (retval < 0) {
373                 dev_err(hsotg->dev,
374                         "DWC OTG HCD URB Enqueue failed adding QTD. Error status %d\n",
375                         retval);
376                 kfree(qtd);
377                 return retval;
378         }
379
380         intr_mask = readl(hsotg->regs + GINTMSK);
381         if (!(intr_mask & GINTSTS_SOF) && retval == 0) {
382                 enum dwc2_transaction_type tr_type;
383
384                 if (qtd->qh->ep_type == USB_ENDPOINT_XFER_BULK &&
385                     !(qtd->urb->flags & URB_GIVEBACK_ASAP))
386                         /*
387                          * Do not schedule SG transactions until qtd has
388                          * URB_GIVEBACK_ASAP set
389                          */
390                         return 0;
391
392                 spin_lock_irqsave(&hsotg->lock, flags);
393                 tr_type = dwc2_hcd_select_transactions(hsotg);
394                 if (tr_type != DWC2_TRANSACTION_NONE)
395                         dwc2_hcd_queue_transactions(hsotg, tr_type);
396                 spin_unlock_irqrestore(&hsotg->lock, flags);
397         }
398
399         return retval;
400 }
401
402 /* Must be called with interrupt disabled and spinlock held */
403 static int dwc2_hcd_urb_dequeue(struct dwc2_hsotg *hsotg,
404                                 struct dwc2_hcd_urb *urb)
405 {
406         struct dwc2_qh *qh;
407         struct dwc2_qtd *urb_qtd;
408
409         urb_qtd = urb->qtd;
410         if (!urb_qtd) {
411                 dev_dbg(hsotg->dev, "## Urb QTD is NULL ##\n");
412                 return -EINVAL;
413         }
414
415         qh = urb_qtd->qh;
416         if (!qh) {
417                 dev_dbg(hsotg->dev, "## Urb QTD QH is NULL ##\n");
418                 return -EINVAL;
419         }
420
421         urb->priv = NULL;
422
423         if (urb_qtd->in_process && qh->channel) {
424                 dwc2_dump_channel_info(hsotg, qh->channel);
425
426                 /* The QTD is in process (it has been assigned to a channel) */
427                 if (hsotg->flags.b.port_connect_status)
428                         /*
429                          * If still connected (i.e. in host mode), halt the
430                          * channel so it can be used for other transfers. If
431                          * no longer connected, the host registers can't be
432                          * written to halt the channel since the core is in
433                          * device mode.
434                          */
435                         dwc2_hc_halt(hsotg, qh->channel,
436                                      DWC2_HC_XFER_URB_DEQUEUE);
437         }
438
439         /*
440          * Free the QTD and clean up the associated QH. Leave the QH in the
441          * schedule if it has any remaining QTDs.
442          */
443         if (hsotg->core_params->dma_desc_enable <= 0) {
444                 u8 in_process = urb_qtd->in_process;
445
446                 dwc2_hcd_qtd_unlink_and_free(hsotg, urb_qtd, qh);
447                 if (in_process) {
448                         dwc2_hcd_qh_deactivate(hsotg, qh, 0);
449                         qh->channel = NULL;
450                 } else if (list_empty(&qh->qtd_list)) {
451                         dwc2_hcd_qh_unlink(hsotg, qh);
452                 }
453         } else {
454                 dwc2_hcd_qtd_unlink_and_free(hsotg, urb_qtd, qh);
455         }
456
457         return 0;
458 }
459
460 /* Must NOT be called with interrupt disabled or spinlock held */
461 static int dwc2_hcd_endpoint_disable(struct dwc2_hsotg *hsotg,
462                                      struct usb_host_endpoint *ep, int retry)
463 {
464         struct dwc2_qtd *qtd, *qtd_tmp;
465         struct dwc2_qh *qh;
466         unsigned long flags;
467         int rc;
468
469         spin_lock_irqsave(&hsotg->lock, flags);
470
471         qh = ep->hcpriv;
472         if (!qh) {
473                 rc = -EINVAL;
474                 goto err;
475         }
476
477         while (!list_empty(&qh->qtd_list) && retry--) {
478                 if (retry == 0) {
479                         dev_err(hsotg->dev,
480                                 "## timeout in dwc2_hcd_endpoint_disable() ##\n");
481                         rc = -EBUSY;
482                         goto err;
483                 }
484
485                 spin_unlock_irqrestore(&hsotg->lock, flags);
486                 usleep_range(20000, 40000);
487                 spin_lock_irqsave(&hsotg->lock, flags);
488                 qh = ep->hcpriv;
489                 if (!qh) {
490                         rc = -EINVAL;
491                         goto err;
492                 }
493         }
494
495         dwc2_hcd_qh_unlink(hsotg, qh);
496
497         /* Free each QTD in the QH's QTD list */
498         list_for_each_entry_safe(qtd, qtd_tmp, &qh->qtd_list, qtd_list_entry)
499                 dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh);
500
501         ep->hcpriv = NULL;
502         spin_unlock_irqrestore(&hsotg->lock, flags);
503         dwc2_hcd_qh_free(hsotg, qh);
504
505         return 0;
506
507 err:
508         ep->hcpriv = NULL;
509         spin_unlock_irqrestore(&hsotg->lock, flags);
510
511         return rc;
512 }
513
514 /* Must be called with interrupt disabled and spinlock held */
515 static int dwc2_hcd_endpoint_reset(struct dwc2_hsotg *hsotg,
516                                    struct usb_host_endpoint *ep)
517 {
518         struct dwc2_qh *qh = ep->hcpriv;
519
520         if (!qh)
521                 return -EINVAL;
522
523         qh->data_toggle = DWC2_HC_PID_DATA0;
524
525         return 0;
526 }
527
528 /*
529  * Initializes dynamic portions of the DWC_otg HCD state
530  *
531  * Must be called with interrupt disabled and spinlock held
532  */
533 static void dwc2_hcd_reinit(struct dwc2_hsotg *hsotg)
534 {
535         struct dwc2_host_chan *chan, *chan_tmp;
536         int num_channels;
537         int i;
538
539         hsotg->flags.d32 = 0;
540
541         hsotg->non_periodic_qh_ptr = &hsotg->non_periodic_sched_active;
542         hsotg->non_periodic_channels = 0;
543         hsotg->periodic_channels = 0;
544
545         /*
546          * Put all channels in the free channel list and clean up channel
547          * states
548          */
549         list_for_each_entry_safe(chan, chan_tmp, &hsotg->free_hc_list,
550                                  hc_list_entry)
551                 list_del_init(&chan->hc_list_entry);
552
553         num_channels = hsotg->core_params->host_channels;
554         for (i = 0; i < num_channels; i++) {
555                 chan = hsotg->hc_ptr_array[i];
556                 list_add_tail(&chan->hc_list_entry, &hsotg->free_hc_list);
557                 dwc2_hc_cleanup(hsotg, chan);
558         }
559
560         /* Initialize the DWC core for host mode operation */
561         dwc2_core_host_init(hsotg);
562 }
563
564 static void dwc2_hc_init_split(struct dwc2_hsotg *hsotg,
565                                struct dwc2_host_chan *chan,
566                                struct dwc2_qtd *qtd, struct dwc2_hcd_urb *urb)
567 {
568         int hub_addr, hub_port;
569
570         chan->do_split = 1;
571         chan->xact_pos = qtd->isoc_split_pos;
572         chan->complete_split = qtd->complete_split;
573         dwc2_host_hub_info(hsotg, urb->priv, &hub_addr, &hub_port);
574         chan->hub_addr = (u8)hub_addr;
575         chan->hub_port = (u8)hub_port;
576 }
577
578 static void *dwc2_hc_init_xfer(struct dwc2_hsotg *hsotg,
579                                struct dwc2_host_chan *chan,
580                                struct dwc2_qtd *qtd, void *bufptr)
581 {
582         struct dwc2_hcd_urb *urb = qtd->urb;
583         struct dwc2_hcd_iso_packet_desc *frame_desc;
584
585         switch (dwc2_hcd_get_pipe_type(&urb->pipe_info)) {
586         case USB_ENDPOINT_XFER_CONTROL:
587                 chan->ep_type = USB_ENDPOINT_XFER_CONTROL;
588
589                 switch (qtd->control_phase) {
590                 case DWC2_CONTROL_SETUP:
591                         dev_vdbg(hsotg->dev, "  Control setup transaction\n");
592                         chan->do_ping = 0;
593                         chan->ep_is_in = 0;
594                         chan->data_pid_start = DWC2_HC_PID_SETUP;
595                         if (hsotg->core_params->dma_enable > 0)
596                                 chan->xfer_dma = urb->setup_dma;
597                         else
598                                 chan->xfer_buf = urb->setup_packet;
599                         chan->xfer_len = 8;
600                         bufptr = NULL;
601                         break;
602
603                 case DWC2_CONTROL_DATA:
604                         dev_vdbg(hsotg->dev, "  Control data transaction\n");
605                         chan->data_pid_start = qtd->data_toggle;
606                         break;
607
608                 case DWC2_CONTROL_STATUS:
609                         /*
610                          * Direction is opposite of data direction or IN if no
611                          * data
612                          */
613                         dev_vdbg(hsotg->dev, "  Control status transaction\n");
614                         if (urb->length == 0)
615                                 chan->ep_is_in = 1;
616                         else
617                                 chan->ep_is_in =
618                                         dwc2_hcd_is_pipe_out(&urb->pipe_info);
619                         if (chan->ep_is_in)
620                                 chan->do_ping = 0;
621                         chan->data_pid_start = DWC2_HC_PID_DATA1;
622                         chan->xfer_len = 0;
623                         if (hsotg->core_params->dma_enable > 0)
624                                 chan->xfer_dma = hsotg->status_buf_dma;
625                         else
626                                 chan->xfer_buf = hsotg->status_buf;
627                         bufptr = NULL;
628                         break;
629                 }
630                 break;
631
632         case USB_ENDPOINT_XFER_BULK:
633                 chan->ep_type = USB_ENDPOINT_XFER_BULK;
634                 break;
635
636         case USB_ENDPOINT_XFER_INT:
637                 chan->ep_type = USB_ENDPOINT_XFER_INT;
638                 break;
639
640         case USB_ENDPOINT_XFER_ISOC:
641                 chan->ep_type = USB_ENDPOINT_XFER_ISOC;
642                 if (hsotg->core_params->dma_desc_enable > 0)
643                         break;
644
645                 frame_desc = &urb->iso_descs[qtd->isoc_frame_index];
646                 frame_desc->status = 0;
647
648                 if (hsotg->core_params->dma_enable > 0) {
649                         chan->xfer_dma = urb->dma;
650                         chan->xfer_dma += frame_desc->offset +
651                                         qtd->isoc_split_offset;
652                 } else {
653                         chan->xfer_buf = urb->buf;
654                         chan->xfer_buf += frame_desc->offset +
655                                         qtd->isoc_split_offset;
656                 }
657
658                 chan->xfer_len = frame_desc->length - qtd->isoc_split_offset;
659
660                 /* For non-dword aligned buffers */
661                 if (hsotg->core_params->dma_enable > 0 &&
662                     (chan->xfer_dma & 0x3))
663                         bufptr = (u8 *)urb->buf + frame_desc->offset +
664                                         qtd->isoc_split_offset;
665                 else
666                         bufptr = NULL;
667
668                 if (chan->xact_pos == DWC2_HCSPLT_XACTPOS_ALL) {
669                         if (chan->xfer_len <= 188)
670                                 chan->xact_pos = DWC2_HCSPLT_XACTPOS_ALL;
671                         else
672                                 chan->xact_pos = DWC2_HCSPLT_XACTPOS_BEGIN;
673                 }
674                 break;
675         }
676
677         return bufptr;
678 }
679
680 static int dwc2_hc_setup_align_buf(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh,
681                                    struct dwc2_host_chan *chan, void *bufptr)
682 {
683         u32 buf_size;
684
685         if (chan->ep_type != USB_ENDPOINT_XFER_ISOC)
686                 buf_size = hsotg->core_params->max_transfer_size;
687         else
688                 buf_size = 4096;
689
690         if (!qh->dw_align_buf) {
691                 qh->dw_align_buf = dma_alloc_coherent(hsotg->dev, buf_size,
692                                                       &qh->dw_align_buf_dma,
693                                                       GFP_ATOMIC);
694                 if (!qh->dw_align_buf)
695                         return -ENOMEM;
696         }
697
698         if (!chan->ep_is_in && chan->xfer_len) {
699                 dma_sync_single_for_cpu(hsotg->dev, chan->xfer_dma, buf_size,
700                                         DMA_TO_DEVICE);
701                 memcpy(qh->dw_align_buf, bufptr, chan->xfer_len);
702                 dma_sync_single_for_device(hsotg->dev, chan->xfer_dma, buf_size,
703                                            DMA_TO_DEVICE);
704         }
705
706         chan->align_buf = qh->dw_align_buf_dma;
707         return 0;
708 }
709
710 /**
711  * dwc2_assign_and_init_hc() - Assigns transactions from a QTD to a free host
712  * channel and initializes the host channel to perform the transactions. The
713  * host channel is removed from the free list.
714  *
715  * @hsotg: The HCD state structure
716  * @qh:    Transactions from the first QTD for this QH are selected and assigned
717  *         to a free host channel
718  */
719 static void dwc2_assign_and_init_hc(struct dwc2_hsotg *hsotg,
720                                     struct dwc2_qh *qh)
721 {
722         struct dwc2_host_chan *chan;
723         struct dwc2_hcd_urb *urb;
724         struct dwc2_qtd *qtd;
725         void *bufptr = NULL;
726
727         if (dbg_qh(qh))
728                 dev_vdbg(hsotg->dev, "%s(%p,%p)\n", __func__, hsotg, qh);
729
730         if (list_empty(&qh->qtd_list)) {
731                 dev_dbg(hsotg->dev, "No QTDs in QH list\n");
732                 return;
733         }
734
735         if (list_empty(&hsotg->free_hc_list)) {
736                 dev_dbg(hsotg->dev, "No free channel to assign\n");
737                 return;
738         }
739
740         chan = list_first_entry(&hsotg->free_hc_list, struct dwc2_host_chan,
741                                 hc_list_entry);
742
743         /* Remove the host channel from the free list */
744         list_del_init(&chan->hc_list_entry);
745
746         qtd = list_first_entry(&qh->qtd_list, struct dwc2_qtd, qtd_list_entry);
747         urb = qtd->urb;
748         qh->channel = chan;
749         qtd->in_process = 1;
750
751         /*
752          * Use usb_pipedevice to determine device address. This address is
753          * 0 before the SET_ADDRESS command and the correct address afterward.
754          */
755         chan->dev_addr = dwc2_hcd_get_dev_addr(&urb->pipe_info);
756         chan->ep_num = dwc2_hcd_get_ep_num(&urb->pipe_info);
757         chan->speed = qh->dev_speed;
758         chan->max_packet = dwc2_max_packet(qh->maxp);
759
760         chan->xfer_started = 0;
761         chan->halt_status = DWC2_HC_XFER_NO_HALT_STATUS;
762         chan->error_state = (qtd->error_count > 0);
763         chan->halt_on_queue = 0;
764         chan->halt_pending = 0;
765         chan->requests = 0;
766
767         /*
768          * The following values may be modified in the transfer type section
769          * below. The xfer_len value may be reduced when the transfer is
770          * started to accommodate the max widths of the XferSize and PktCnt
771          * fields in the HCTSIZn register.
772          */
773
774         chan->ep_is_in = (dwc2_hcd_is_pipe_in(&urb->pipe_info) != 0);
775         if (chan->ep_is_in)
776                 chan->do_ping = 0;
777         else
778                 chan->do_ping = qh->ping_state;
779
780         chan->data_pid_start = qh->data_toggle;
781         chan->multi_count = 1;
782
783         if (hsotg->core_params->dma_enable > 0) {
784                 chan->xfer_dma = urb->dma + urb->actual_length;
785
786                 /* For non-dword aligned case */
787                 if (hsotg->core_params->dma_desc_enable <= 0 &&
788                     (chan->xfer_dma & 0x3))
789                         bufptr = (u8 *)urb->buf + urb->actual_length;
790         } else {
791                 chan->xfer_buf = (u8 *)urb->buf + urb->actual_length;
792         }
793
794         chan->xfer_len = urb->length - urb->actual_length;
795         chan->xfer_count = 0;
796
797         /* Set the split attributes if required */
798         if (qh->do_split)
799                 dwc2_hc_init_split(hsotg, chan, qtd, urb);
800         else
801                 chan->do_split = 0;
802
803         /* Set the transfer attributes */
804         bufptr = dwc2_hc_init_xfer(hsotg, chan, qtd, bufptr);
805
806         /* Non DWORD-aligned buffer case */
807         if (bufptr) {
808                 dev_vdbg(hsotg->dev, "Non-aligned buffer\n");
809                 if (dwc2_hc_setup_align_buf(hsotg, qh, chan, bufptr)) {
810                         dev_err(hsotg->dev,
811                                 "%s: Failed to allocate memory to handle non-dword aligned buffer\n",
812                                 __func__);
813                         /* Add channel back to free list */
814                         chan->align_buf = 0;
815                         chan->multi_count = 0;
816                         list_add_tail(&chan->hc_list_entry,
817                                       &hsotg->free_hc_list);
818                         qtd->in_process = 0;
819                         qh->channel = NULL;
820                         return;
821                 }
822         } else {
823                 chan->align_buf = 0;
824         }
825
826         if (chan->ep_type == USB_ENDPOINT_XFER_INT ||
827             chan->ep_type == USB_ENDPOINT_XFER_ISOC)
828                 /*
829                  * This value may be modified when the transfer is started
830                  * to reflect the actual transfer length
831                  */
832                 chan->multi_count = dwc2_hb_mult(qh->maxp);
833
834         if (hsotg->core_params->dma_desc_enable > 0)
835                 chan->desc_list_addr = qh->desc_list_dma;
836
837         dwc2_hc_init(hsotg, chan);
838         chan->qh = qh;
839 }
840
841 /**
842  * dwc2_hcd_select_transactions() - Selects transactions from the HCD transfer
843  * schedule and assigns them to available host channels. Called from the HCD
844  * interrupt handler functions.
845  *
846  * @hsotg: The HCD state structure
847  *
848  * Return: The types of new transactions that were assigned to host channels
849  */
850 enum dwc2_transaction_type dwc2_hcd_select_transactions(
851                 struct dwc2_hsotg *hsotg)
852 {
853         enum dwc2_transaction_type ret_val = DWC2_TRANSACTION_NONE;
854         struct list_head *qh_ptr;
855         struct dwc2_qh *qh;
856         int num_channels;
857
858 #ifdef DWC2_DEBUG_SOF
859         dev_vdbg(hsotg->dev, "  Select Transactions\n");
860 #endif
861
862         /* Process entries in the periodic ready list */
863         qh_ptr = hsotg->periodic_sched_ready.next;
864         while (qh_ptr != &hsotg->periodic_sched_ready) {
865                 if (list_empty(&hsotg->free_hc_list))
866                         break;
867                 qh = list_entry(qh_ptr, struct dwc2_qh, qh_list_entry);
868                 dwc2_assign_and_init_hc(hsotg, qh);
869
870                 /*
871                  * Move the QH from the periodic ready schedule to the
872                  * periodic assigned schedule
873                  */
874                 qh_ptr = qh_ptr->next;
875                 list_move(&qh->qh_list_entry, &hsotg->periodic_sched_assigned);
876                 ret_val = DWC2_TRANSACTION_PERIODIC;
877         }
878
879         /*
880          * Process entries in the inactive portion of the non-periodic
881          * schedule. Some free host channels may not be used if they are
882          * reserved for periodic transfers.
883          */
884         num_channels = hsotg->core_params->host_channels;
885         qh_ptr = hsotg->non_periodic_sched_inactive.next;
886         while (qh_ptr != &hsotg->non_periodic_sched_inactive) {
887                 if (hsotg->non_periodic_channels >= num_channels -
888                                                 hsotg->periodic_channels)
889                         break;
890                 if (list_empty(&hsotg->free_hc_list))
891                         break;
892                 qh = list_entry(qh_ptr, struct dwc2_qh, qh_list_entry);
893                 dwc2_assign_and_init_hc(hsotg, qh);
894
895                 /*
896                  * Move the QH from the non-periodic inactive schedule to the
897                  * non-periodic active schedule
898                  */
899                 qh_ptr = qh_ptr->next;
900                 list_move(&qh->qh_list_entry,
901                           &hsotg->non_periodic_sched_active);
902
903                 if (ret_val == DWC2_TRANSACTION_NONE)
904                         ret_val = DWC2_TRANSACTION_NON_PERIODIC;
905                 else
906                         ret_val = DWC2_TRANSACTION_ALL;
907
908                 hsotg->non_periodic_channels++;
909         }
910
911         return ret_val;
912 }
913
914 /**
915  * dwc2_queue_transaction() - Attempts to queue a single transaction request for
916  * a host channel associated with either a periodic or non-periodic transfer
917  *
918  * @hsotg: The HCD state structure
919  * @chan:  Host channel descriptor associated with either a periodic or
920  *         non-periodic transfer
921  * @fifo_dwords_avail: Number of DWORDs available in the periodic Tx FIFO
922  *                     for periodic transfers or the non-periodic Tx FIFO
923  *                     for non-periodic transfers
924  *
925  * Return: 1 if a request is queued and more requests may be needed to
926  * complete the transfer, 0 if no more requests are required for this
927  * transfer, -1 if there is insufficient space in the Tx FIFO
928  *
929  * This function assumes that there is space available in the appropriate
930  * request queue. For an OUT transfer or SETUP transaction in Slave mode,
931  * it checks whether space is available in the appropriate Tx FIFO.
932  *
933  * Must be called with interrupt disabled and spinlock held
934  */
935 static int dwc2_queue_transaction(struct dwc2_hsotg *hsotg,
936                                   struct dwc2_host_chan *chan,
937                                   u16 fifo_dwords_avail)
938 {
939         int retval = 0;
940
941         if (hsotg->core_params->dma_enable > 0) {
942                 if (hsotg->core_params->dma_desc_enable > 0) {
943                         if (!chan->xfer_started ||
944                             chan->ep_type == USB_ENDPOINT_XFER_ISOC) {
945                                 dwc2_hcd_start_xfer_ddma(hsotg, chan->qh);
946                                 chan->qh->ping_state = 0;
947                         }
948                 } else if (!chan->xfer_started) {
949                         dwc2_hc_start_transfer(hsotg, chan);
950                         chan->qh->ping_state = 0;
951                 }
952         } else if (chan->halt_pending) {
953                 /* Don't queue a request if the channel has been halted */
954         } else if (chan->halt_on_queue) {
955                 dwc2_hc_halt(hsotg, chan, chan->halt_status);
956         } else if (chan->do_ping) {
957                 if (!chan->xfer_started)
958                         dwc2_hc_start_transfer(hsotg, chan);
959         } else if (!chan->ep_is_in ||
960                    chan->data_pid_start == DWC2_HC_PID_SETUP) {
961                 if ((fifo_dwords_avail * 4) >= chan->max_packet) {
962                         if (!chan->xfer_started) {
963                                 dwc2_hc_start_transfer(hsotg, chan);
964                                 retval = 1;
965                         } else {
966                                 retval = dwc2_hc_continue_transfer(hsotg, chan);
967                         }
968                 } else {
969                         retval = -1;
970                 }
971         } else {
972                 if (!chan->xfer_started) {
973                         dwc2_hc_start_transfer(hsotg, chan);
974                         retval = 1;
975                 } else {
976                         retval = dwc2_hc_continue_transfer(hsotg, chan);
977                 }
978         }
979
980         return retval;
981 }
982
983 /*
984  * Processes periodic channels for the next frame and queues transactions for
985  * these channels to the DWC_otg controller. After queueing transactions, the
986  * Periodic Tx FIFO Empty interrupt is enabled if there are more transactions
987  * to queue as Periodic Tx FIFO or request queue space becomes available.
988  * Otherwise, the Periodic Tx FIFO Empty interrupt is disabled.
989  *
990  * Must be called with interrupt disabled and spinlock held
991  */
992 static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
993 {
994         struct list_head *qh_ptr;
995         struct dwc2_qh *qh;
996         u32 tx_status;
997         u32 fspcavail;
998         u32 gintmsk;
999         int status;
1000         int no_queue_space = 0;
1001         int no_fifo_space = 0;
1002         u32 qspcavail;
1003
1004         if (dbg_perio())
1005                 dev_vdbg(hsotg->dev, "Queue periodic transactions\n");
1006
1007         tx_status = readl(hsotg->regs + HPTXSTS);
1008         qspcavail = tx_status >> TXSTS_QSPCAVAIL_SHIFT &
1009                     TXSTS_QSPCAVAIL_MASK >> TXSTS_QSPCAVAIL_SHIFT;
1010         fspcavail = tx_status >> TXSTS_FSPCAVAIL_SHIFT &
1011                     TXSTS_FSPCAVAIL_MASK >> TXSTS_FSPCAVAIL_SHIFT;
1012
1013         if (dbg_perio()) {
1014                 dev_vdbg(hsotg->dev, "  P Tx Req Queue Space Avail (before queue): %d\n",
1015                          qspcavail);
1016                 dev_vdbg(hsotg->dev, "  P Tx FIFO Space Avail (before queue): %d\n",
1017                          fspcavail);
1018         }
1019
1020         qh_ptr = hsotg->periodic_sched_assigned.next;
1021         while (qh_ptr != &hsotg->periodic_sched_assigned) {
1022                 tx_status = readl(hsotg->regs + HPTXSTS);
1023                 if ((tx_status & TXSTS_QSPCAVAIL_MASK) == 0) {
1024                         no_queue_space = 1;
1025                         break;
1026                 }
1027
1028                 qh = list_entry(qh_ptr, struct dwc2_qh, qh_list_entry);
1029                 if (!qh->channel) {
1030                         qh_ptr = qh_ptr->next;
1031                         continue;
1032                 }
1033
1034                 /* Make sure EP's TT buffer is clean before queueing qtds */
1035                 if (qh->tt_buffer_dirty) {
1036                         qh_ptr = qh_ptr->next;
1037                         continue;
1038                 }
1039
1040                 /*
1041                  * Set a flag if we're queuing high-bandwidth in slave mode.
1042                  * The flag prevents any halts to get into the request queue in
1043                  * the middle of multiple high-bandwidth packets getting queued.
1044                  */
1045                 if (hsotg->core_params->dma_enable <= 0 &&
1046                                 qh->channel->multi_count > 1)
1047                         hsotg->queuing_high_bandwidth = 1;
1048
1049                 fspcavail = tx_status >> TXSTS_FSPCAVAIL_SHIFT &
1050                             TXSTS_FSPCAVAIL_MASK >> TXSTS_FSPCAVAIL_SHIFT;
1051                 status = dwc2_queue_transaction(hsotg, qh->channel, fspcavail);
1052                 if (status < 0) {
1053                         no_fifo_space = 1;
1054                         break;
1055                 }
1056
1057                 /*
1058                  * In Slave mode, stay on the current transfer until there is
1059                  * nothing more to do or the high-bandwidth request count is
1060                  * reached. In DMA mode, only need to queue one request. The
1061                  * controller automatically handles multiple packets for
1062                  * high-bandwidth transfers.
1063                  */
1064                 if (hsotg->core_params->dma_enable > 0 || status == 0 ||
1065                     qh->channel->requests == qh->channel->multi_count) {
1066                         qh_ptr = qh_ptr->next;
1067                         /*
1068                          * Move the QH from the periodic assigned schedule to
1069                          * the periodic queued schedule
1070                          */
1071                         list_move(&qh->qh_list_entry,
1072                                   &hsotg->periodic_sched_queued);
1073
1074                         /* done queuing high bandwidth */
1075                         hsotg->queuing_high_bandwidth = 0;
1076                 }
1077         }
1078
1079         if (hsotg->core_params->dma_enable <= 0) {
1080                 tx_status = readl(hsotg->regs + HPTXSTS);
1081                 qspcavail = tx_status >> TXSTS_QSPCAVAIL_SHIFT &
1082                             TXSTS_QSPCAVAIL_MASK >> TXSTS_QSPCAVAIL_SHIFT;
1083                 fspcavail = tx_status >> TXSTS_FSPCAVAIL_SHIFT &
1084                             TXSTS_FSPCAVAIL_MASK >> TXSTS_FSPCAVAIL_SHIFT;
1085                 if (dbg_perio()) {
1086                         dev_vdbg(hsotg->dev,
1087                                  "  P Tx Req Queue Space Avail (after queue): %d\n",
1088                                  qspcavail);
1089                         dev_vdbg(hsotg->dev,
1090                                  "  P Tx FIFO Space Avail (after queue): %d\n",
1091                                  fspcavail);
1092                 }
1093
1094                 if (!list_empty(&hsotg->periodic_sched_assigned) ||
1095                     no_queue_space || no_fifo_space) {
1096                         /*
1097                          * May need to queue more transactions as the request
1098                          * queue or Tx FIFO empties. Enable the periodic Tx
1099                          * FIFO empty interrupt. (Always use the half-empty
1100                          * level to ensure that new requests are loaded as
1101                          * soon as possible.)
1102                          */
1103                         gintmsk = readl(hsotg->regs + GINTMSK);
1104                         gintmsk |= GINTSTS_PTXFEMP;
1105                         writel(gintmsk, hsotg->regs + GINTMSK);
1106                 } else {
1107                         /*
1108                          * Disable the Tx FIFO empty interrupt since there are
1109                          * no more transactions that need to be queued right
1110                          * now. This function is called from interrupt
1111                          * handlers to queue more transactions as transfer
1112                          * states change.
1113                          */
1114                         gintmsk = readl(hsotg->regs + GINTMSK);
1115                         gintmsk &= ~GINTSTS_PTXFEMP;
1116                         writel(gintmsk, hsotg->regs + GINTMSK);
1117                 }
1118         }
1119 }
1120
1121 /*
1122  * Processes active non-periodic channels and queues transactions for these
1123  * channels to the DWC_otg controller. After queueing transactions, the NP Tx
1124  * FIFO Empty interrupt is enabled if there are more transactions to queue as
1125  * NP Tx FIFO or request queue space becomes available. Otherwise, the NP Tx
1126  * FIFO Empty interrupt is disabled.
1127  *
1128  * Must be called with interrupt disabled and spinlock held
1129  */
1130 static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg)
1131 {
1132         struct list_head *orig_qh_ptr;
1133         struct dwc2_qh *qh;
1134         u32 tx_status;
1135         u32 qspcavail;
1136         u32 fspcavail;
1137         u32 gintmsk;
1138         int status;
1139         int no_queue_space = 0;
1140         int no_fifo_space = 0;
1141         int more_to_do = 0;
1142
1143         dev_vdbg(hsotg->dev, "Queue non-periodic transactions\n");
1144
1145         tx_status = readl(hsotg->regs + GNPTXSTS);
1146         qspcavail = tx_status >> TXSTS_QSPCAVAIL_SHIFT &
1147                     TXSTS_QSPCAVAIL_MASK >> TXSTS_QSPCAVAIL_SHIFT;
1148         fspcavail = tx_status >> TXSTS_FSPCAVAIL_SHIFT &
1149                     TXSTS_FSPCAVAIL_MASK >> TXSTS_FSPCAVAIL_SHIFT;
1150         dev_vdbg(hsotg->dev, "  NP Tx Req Queue Space Avail (before queue): %d\n",
1151                  qspcavail);
1152         dev_vdbg(hsotg->dev, "  NP Tx FIFO Space Avail (before queue): %d\n",
1153                  fspcavail);
1154
1155         /*
1156          * Keep track of the starting point. Skip over the start-of-list
1157          * entry.
1158          */
1159         if (hsotg->non_periodic_qh_ptr == &hsotg->non_periodic_sched_active)
1160                 hsotg->non_periodic_qh_ptr = hsotg->non_periodic_qh_ptr->next;
1161         orig_qh_ptr = hsotg->non_periodic_qh_ptr;
1162
1163         /*
1164          * Process once through the active list or until no more space is
1165          * available in the request queue or the Tx FIFO
1166          */
1167         do {
1168                 tx_status = readl(hsotg->regs + GNPTXSTS);
1169                 qspcavail = tx_status >> TXSTS_QSPCAVAIL_SHIFT &
1170                             TXSTS_QSPCAVAIL_MASK >> TXSTS_QSPCAVAIL_SHIFT;
1171                 if (hsotg->core_params->dma_enable <= 0 && qspcavail == 0) {
1172                         no_queue_space = 1;
1173                         break;
1174                 }
1175
1176                 qh = list_entry(hsotg->non_periodic_qh_ptr, struct dwc2_qh,
1177                                 qh_list_entry);
1178                 if (!qh->channel)
1179                         goto next;
1180
1181                 /* Make sure EP's TT buffer is clean before queueing qtds */
1182                 if (qh->tt_buffer_dirty)
1183                         goto next;
1184
1185                 fspcavail = tx_status >> TXSTS_FSPCAVAIL_SHIFT &
1186                             TXSTS_FSPCAVAIL_MASK >> TXSTS_FSPCAVAIL_SHIFT;
1187                 status = dwc2_queue_transaction(hsotg, qh->channel, fspcavail);
1188
1189                 if (status > 0) {
1190                         more_to_do = 1;
1191                 } else if (status < 0) {
1192                         no_fifo_space = 1;
1193                         break;
1194                 }
1195 next:
1196                 /* Advance to next QH, skipping start-of-list entry */
1197                 hsotg->non_periodic_qh_ptr = hsotg->non_periodic_qh_ptr->next;
1198                 if (hsotg->non_periodic_qh_ptr ==
1199                                 &hsotg->non_periodic_sched_active)
1200                         hsotg->non_periodic_qh_ptr =
1201                                         hsotg->non_periodic_qh_ptr->next;
1202         } while (hsotg->non_periodic_qh_ptr != orig_qh_ptr);
1203
1204         if (hsotg->core_params->dma_enable <= 0) {
1205                 tx_status = readl(hsotg->regs + GNPTXSTS);
1206                 qspcavail = tx_status >> TXSTS_QSPCAVAIL_SHIFT &
1207                             TXSTS_QSPCAVAIL_MASK >> TXSTS_QSPCAVAIL_SHIFT;
1208                 fspcavail = tx_status >> TXSTS_FSPCAVAIL_SHIFT &
1209                             TXSTS_FSPCAVAIL_MASK >> TXSTS_FSPCAVAIL_SHIFT;
1210                 dev_vdbg(hsotg->dev,
1211                          "  NP Tx Req Queue Space Avail (after queue): %d\n",
1212                          qspcavail);
1213                 dev_vdbg(hsotg->dev,
1214                          "  NP Tx FIFO Space Avail (after queue): %d\n",
1215                          fspcavail);
1216
1217                 if (more_to_do || no_queue_space || no_fifo_space) {
1218                         /*
1219                          * May need to queue more transactions as the request
1220                          * queue or Tx FIFO empties. Enable the non-periodic
1221                          * Tx FIFO empty interrupt. (Always use the half-empty
1222                          * level to ensure that new requests are loaded as
1223                          * soon as possible.)
1224                          */
1225                         gintmsk = readl(hsotg->regs + GINTMSK);
1226                         gintmsk |= GINTSTS_NPTXFEMP;
1227                         writel(gintmsk, hsotg->regs + GINTMSK);
1228                 } else {
1229                         /*
1230                          * Disable the Tx FIFO empty interrupt since there are
1231                          * no more transactions that need to be queued right
1232                          * now. This function is called from interrupt
1233                          * handlers to queue more transactions as transfer
1234                          * states change.
1235                          */
1236                         gintmsk = readl(hsotg->regs + GINTMSK);
1237                         gintmsk &= ~GINTSTS_NPTXFEMP;
1238                         writel(gintmsk, hsotg->regs + GINTMSK);
1239                 }
1240         }
1241 }
1242
1243 /**
1244  * dwc2_hcd_queue_transactions() - Processes the currently active host channels
1245  * and queues transactions for these channels to the DWC_otg controller. Called
1246  * from the HCD interrupt handler functions.
1247  *
1248  * @hsotg:   The HCD state structure
1249  * @tr_type: The type(s) of transactions to queue (non-periodic, periodic,
1250  *           or both)
1251  *
1252  * Must be called with interrupt disabled and spinlock held
1253  */
1254 void dwc2_hcd_queue_transactions(struct dwc2_hsotg *hsotg,
1255                                  enum dwc2_transaction_type tr_type)
1256 {
1257 #ifdef DWC2_DEBUG_SOF
1258         dev_vdbg(hsotg->dev, "Queue Transactions\n");
1259 #endif
1260         /* Process host channels associated with periodic transfers */
1261         if ((tr_type == DWC2_TRANSACTION_PERIODIC ||
1262              tr_type == DWC2_TRANSACTION_ALL) &&
1263             !list_empty(&hsotg->periodic_sched_assigned))
1264                 dwc2_process_periodic_channels(hsotg);
1265
1266         /* Process host channels associated with non-periodic transfers */
1267         if (tr_type == DWC2_TRANSACTION_NON_PERIODIC ||
1268             tr_type == DWC2_TRANSACTION_ALL) {
1269                 if (!list_empty(&hsotg->non_periodic_sched_active)) {
1270                         dwc2_process_non_periodic_channels(hsotg);
1271                 } else {
1272                         /*
1273                          * Ensure NP Tx FIFO empty interrupt is disabled when
1274                          * there are no non-periodic transfers to process
1275                          */
1276                         u32 gintmsk = readl(hsotg->regs + GINTMSK);
1277
1278                         gintmsk &= ~GINTSTS_NPTXFEMP;
1279                         writel(gintmsk, hsotg->regs + GINTMSK);
1280                 }
1281         }
1282 }
1283
1284 static void dwc2_conn_id_status_change(struct work_struct *work)
1285 {
1286         struct dwc2_hsotg *hsotg = container_of(work, struct dwc2_hsotg,
1287                                                 wf_otg);
1288         u32 count = 0;
1289         u32 gotgctl;
1290
1291         dev_dbg(hsotg->dev, "%s()\n", __func__);
1292
1293         gotgctl = readl(hsotg->regs + GOTGCTL);
1294         dev_dbg(hsotg->dev, "gotgctl=%0x\n", gotgctl);
1295         dev_dbg(hsotg->dev, "gotgctl.b.conidsts=%d\n",
1296                 !!(gotgctl & GOTGCTL_CONID_B));
1297
1298         /* B-Device connector (Device Mode) */
1299         if (gotgctl & GOTGCTL_CONID_B) {
1300                 /* Wait for switch to device mode */
1301                 dev_dbg(hsotg->dev, "connId B\n");
1302                 while (!dwc2_is_device_mode(hsotg)) {
1303                         dev_info(hsotg->dev,
1304                                  "Waiting for Peripheral Mode, Mode=%s\n",
1305                                  dwc2_is_host_mode(hsotg) ? "Host" :
1306                                  "Peripheral");
1307                         usleep_range(20000, 40000);
1308                         if (++count > 250)
1309                                 break;
1310                 }
1311                 if (count > 250)
1312                         dev_err(hsotg->dev,
1313                                 "Connection id status change timed out\n");
1314                 hsotg->op_state = OTG_STATE_B_PERIPHERAL;
1315                 dwc2_core_init(hsotg, false, -1);
1316                 dwc2_enable_global_interrupts(hsotg);
1317         } else {
1318                 /* A-Device connector (Host Mode) */
1319                 dev_dbg(hsotg->dev, "connId A\n");
1320                 while (!dwc2_is_host_mode(hsotg)) {
1321                         dev_info(hsotg->dev, "Waiting for Host Mode, Mode=%s\n",
1322                                  dwc2_is_host_mode(hsotg) ?
1323                                  "Host" : "Peripheral");
1324                         usleep_range(20000, 40000);
1325                         if (++count > 250)
1326                                 break;
1327                 }
1328                 if (count > 250)
1329                         dev_err(hsotg->dev,
1330                                 "Connection id status change timed out\n");
1331                 hsotg->op_state = OTG_STATE_A_HOST;
1332
1333                 /* Initialize the Core for Host mode */
1334                 dwc2_core_init(hsotg, false, -1);
1335                 dwc2_enable_global_interrupts(hsotg);
1336                 dwc2_hcd_start(hsotg);
1337         }
1338 }
1339
1340 static void dwc2_wakeup_detected(unsigned long data)
1341 {
1342         struct dwc2_hsotg *hsotg = (struct dwc2_hsotg *)data;
1343         u32 hprt0;
1344
1345         dev_dbg(hsotg->dev, "%s()\n", __func__);
1346
1347         /*
1348          * Clear the Resume after 70ms. (Need 20 ms minimum. Use 70 ms
1349          * so that OPT tests pass with all PHYs.)
1350          */
1351         hprt0 = dwc2_read_hprt0(hsotg);
1352         dev_dbg(hsotg->dev, "Resume: HPRT0=%0x\n", hprt0);
1353         hprt0 &= ~HPRT0_RES;
1354         writel(hprt0, hsotg->regs + HPRT0);
1355         dev_dbg(hsotg->dev, "Clear Resume: HPRT0=%0x\n",
1356                 readl(hsotg->regs + HPRT0));
1357
1358         dwc2_hcd_rem_wakeup(hsotg);
1359
1360         /* Change to L0 state */
1361         hsotg->lx_state = DWC2_L0;
1362 }
1363
1364 static int dwc2_host_is_b_hnp_enabled(struct dwc2_hsotg *hsotg)
1365 {
1366         struct usb_hcd *hcd = dwc2_hsotg_to_hcd(hsotg);
1367
1368         return hcd->self.b_hnp_enable;
1369 }
1370
1371 /* Must NOT be called with interrupt disabled or spinlock held */
1372 static void dwc2_port_suspend(struct dwc2_hsotg *hsotg, u16 windex)
1373 {
1374         unsigned long flags;
1375         u32 hprt0;
1376         u32 pcgctl;
1377         u32 gotgctl;
1378
1379         dev_dbg(hsotg->dev, "%s()\n", __func__);
1380
1381         spin_lock_irqsave(&hsotg->lock, flags);
1382
1383         if (windex == hsotg->otg_port && dwc2_host_is_b_hnp_enabled(hsotg)) {
1384                 gotgctl = readl(hsotg->regs + GOTGCTL);
1385                 gotgctl |= GOTGCTL_HSTSETHNPEN;
1386                 writel(gotgctl, hsotg->regs + GOTGCTL);
1387                 hsotg->op_state = OTG_STATE_A_SUSPEND;
1388         }
1389
1390         hprt0 = dwc2_read_hprt0(hsotg);
1391         hprt0 |= HPRT0_SUSP;
1392         writel(hprt0, hsotg->regs + HPRT0);
1393
1394         /* Update lx_state */
1395         hsotg->lx_state = DWC2_L2;
1396
1397         /* Suspend the Phy Clock */
1398         pcgctl = readl(hsotg->regs + PCGCTL);
1399         pcgctl |= PCGCTL_STOPPCLK;
1400         writel(pcgctl, hsotg->regs + PCGCTL);
1401         udelay(10);
1402
1403         /* For HNP the bus must be suspended for at least 200ms */
1404         if (dwc2_host_is_b_hnp_enabled(hsotg)) {
1405                 pcgctl = readl(hsotg->regs + PCGCTL);
1406                 pcgctl &= ~PCGCTL_STOPPCLK;
1407                 writel(pcgctl, hsotg->regs + PCGCTL);
1408
1409                 spin_unlock_irqrestore(&hsotg->lock, flags);
1410
1411                 usleep_range(200000, 250000);
1412         } else {
1413                 spin_unlock_irqrestore(&hsotg->lock, flags);
1414         }
1415 }
1416
1417 /* Handles hub class-specific requests */
1418 static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
1419                                 u16 wvalue, u16 windex, char *buf, u16 wlength)
1420 {
1421         struct usb_hub_descriptor *hub_desc;
1422         int retval = 0;
1423         u32 hprt0;
1424         u32 port_status;
1425         u32 speed;
1426         u32 pcgctl;
1427
1428         switch (typereq) {
1429         case ClearHubFeature:
1430                 dev_dbg(hsotg->dev, "ClearHubFeature %1xh\n", wvalue);
1431
1432                 switch (wvalue) {
1433                 case C_HUB_LOCAL_POWER:
1434                 case C_HUB_OVER_CURRENT:
1435                         /* Nothing required here */
1436                         break;
1437
1438                 default:
1439                         retval = -EINVAL;
1440                         dev_err(hsotg->dev,
1441                                 "ClearHubFeature request %1xh unknown\n",
1442                                 wvalue);
1443                 }
1444                 break;
1445
1446         case ClearPortFeature:
1447                 if (wvalue != USB_PORT_FEAT_L1)
1448                         if (!windex || windex > 1)
1449                                 goto error;
1450                 switch (wvalue) {
1451                 case USB_PORT_FEAT_ENABLE:
1452                         dev_dbg(hsotg->dev,
1453                                 "ClearPortFeature USB_PORT_FEAT_ENABLE\n");
1454                         hprt0 = dwc2_read_hprt0(hsotg);
1455                         hprt0 |= HPRT0_ENA;
1456                         writel(hprt0, hsotg->regs + HPRT0);
1457                         break;
1458
1459                 case USB_PORT_FEAT_SUSPEND:
1460                         dev_dbg(hsotg->dev,
1461                                 "ClearPortFeature USB_PORT_FEAT_SUSPEND\n");
1462                         writel(0, hsotg->regs + PCGCTL);
1463                         usleep_range(20000, 40000);
1464
1465                         hprt0 = dwc2_read_hprt0(hsotg);
1466                         hprt0 |= HPRT0_RES;
1467                         writel(hprt0, hsotg->regs + HPRT0);
1468                         hprt0 &= ~HPRT0_SUSP;
1469                         usleep_range(100000, 150000);
1470
1471                         hprt0 &= ~HPRT0_RES;
1472                         writel(hprt0, hsotg->regs + HPRT0);
1473                         break;
1474
1475                 case USB_PORT_FEAT_POWER:
1476                         dev_dbg(hsotg->dev,
1477                                 "ClearPortFeature USB_PORT_FEAT_POWER\n");
1478                         hprt0 = dwc2_read_hprt0(hsotg);
1479                         hprt0 &= ~HPRT0_PWR;
1480                         writel(hprt0, hsotg->regs + HPRT0);
1481                         break;
1482
1483                 case USB_PORT_FEAT_INDICATOR:
1484                         dev_dbg(hsotg->dev,
1485                                 "ClearPortFeature USB_PORT_FEAT_INDICATOR\n");
1486                         /* Port indicator not supported */
1487                         break;
1488
1489                 case USB_PORT_FEAT_C_CONNECTION:
1490                         /*
1491                          * Clears driver's internal Connect Status Change flag
1492                          */
1493                         dev_dbg(hsotg->dev,
1494                                 "ClearPortFeature USB_PORT_FEAT_C_CONNECTION\n");
1495                         hsotg->flags.b.port_connect_status_change = 0;
1496                         break;
1497
1498                 case USB_PORT_FEAT_C_RESET:
1499                         /* Clears driver's internal Port Reset Change flag */
1500                         dev_dbg(hsotg->dev,
1501                                 "ClearPortFeature USB_PORT_FEAT_C_RESET\n");
1502                         hsotg->flags.b.port_reset_change = 0;
1503                         break;
1504
1505                 case USB_PORT_FEAT_C_ENABLE:
1506                         /*
1507                          * Clears the driver's internal Port Enable/Disable
1508                          * Change flag
1509                          */
1510                         dev_dbg(hsotg->dev,
1511                                 "ClearPortFeature USB_PORT_FEAT_C_ENABLE\n");
1512                         hsotg->flags.b.port_enable_change = 0;
1513                         break;
1514
1515                 case USB_PORT_FEAT_C_SUSPEND:
1516                         /*
1517                          * Clears the driver's internal Port Suspend Change
1518                          * flag, which is set when resume signaling on the host
1519                          * port is complete
1520                          */
1521                         dev_dbg(hsotg->dev,
1522                                 "ClearPortFeature USB_PORT_FEAT_C_SUSPEND\n");
1523                         hsotg->flags.b.port_suspend_change = 0;
1524                         break;
1525
1526                 case USB_PORT_FEAT_C_PORT_L1:
1527                         dev_dbg(hsotg->dev,
1528                                 "ClearPortFeature USB_PORT_FEAT_C_PORT_L1\n");
1529                         hsotg->flags.b.port_l1_change = 0;
1530                         break;
1531
1532                 case USB_PORT_FEAT_C_OVER_CURRENT:
1533                         dev_dbg(hsotg->dev,
1534                                 "ClearPortFeature USB_PORT_FEAT_C_OVER_CURRENT\n");
1535                         hsotg->flags.b.port_over_current_change = 0;
1536                         break;
1537
1538                 default:
1539                         retval = -EINVAL;
1540                         dev_err(hsotg->dev,
1541                                 "ClearPortFeature request %1xh unknown or unsupported\n",
1542                                 wvalue);
1543                 }
1544                 break;
1545
1546         case GetHubDescriptor:
1547                 dev_dbg(hsotg->dev, "GetHubDescriptor\n");
1548                 hub_desc = (struct usb_hub_descriptor *)buf;
1549                 hub_desc->bDescLength = 9;
1550                 hub_desc->bDescriptorType = 0x29;
1551                 hub_desc->bNbrPorts = 1;
1552                 hub_desc->wHubCharacteristics = cpu_to_le16(0x08);
1553                 hub_desc->bPwrOn2PwrGood = 1;
1554                 hub_desc->bHubContrCurrent = 0;
1555                 hub_desc->u.hs.DeviceRemovable[0] = 0;
1556                 hub_desc->u.hs.DeviceRemovable[1] = 0xff;
1557                 break;
1558
1559         case GetHubStatus:
1560                 dev_dbg(hsotg->dev, "GetHubStatus\n");
1561                 memset(buf, 0, 4);
1562                 break;
1563
1564         case GetPortStatus:
1565                 dev_vdbg(hsotg->dev,
1566                          "GetPortStatus wIndex=0x%04x flags=0x%08x\n", windex,
1567                          hsotg->flags.d32);
1568                 if (!windex || windex > 1)
1569                         goto error;
1570
1571                 port_status = 0;
1572                 if (hsotg->flags.b.port_connect_status_change)
1573                         port_status |= USB_PORT_STAT_C_CONNECTION << 16;
1574                 if (hsotg->flags.b.port_enable_change)
1575                         port_status |= USB_PORT_STAT_C_ENABLE << 16;
1576                 if (hsotg->flags.b.port_suspend_change)
1577                         port_status |= USB_PORT_STAT_C_SUSPEND << 16;
1578                 if (hsotg->flags.b.port_l1_change)
1579                         port_status |= USB_PORT_STAT_C_L1 << 16;
1580                 if (hsotg->flags.b.port_reset_change)
1581                         port_status |= USB_PORT_STAT_C_RESET << 16;
1582                 if (hsotg->flags.b.port_over_current_change) {
1583                         dev_warn(hsotg->dev, "Overcurrent change detected\n");
1584                         port_status |= USB_PORT_STAT_C_OVERCURRENT << 16;
1585                 }
1586
1587                 if (!hsotg->flags.b.port_connect_status) {
1588                         /*
1589                          * The port is disconnected, which means the core is
1590                          * either in device mode or it soon will be. Just
1591                          * return 0's for the remainder of the port status
1592                          * since the port register can't be read if the core
1593                          * is in device mode.
1594                          */
1595                         *(__le32 *)buf = cpu_to_le32(port_status);
1596                         break;
1597                 }
1598
1599                 hprt0 = readl(hsotg->regs + HPRT0);
1600                 dev_vdbg(hsotg->dev, "  HPRT0: 0x%08x\n", hprt0);
1601
1602                 if (hprt0 & HPRT0_CONNSTS)
1603                         port_status |= USB_PORT_STAT_CONNECTION;
1604                 if (hprt0 & HPRT0_ENA)
1605                         port_status |= USB_PORT_STAT_ENABLE;
1606                 if (hprt0 & HPRT0_SUSP)
1607                         port_status |= USB_PORT_STAT_SUSPEND;
1608                 if (hprt0 & HPRT0_OVRCURRACT)
1609                         port_status |= USB_PORT_STAT_OVERCURRENT;
1610                 if (hprt0 & HPRT0_RST)
1611                         port_status |= USB_PORT_STAT_RESET;
1612                 if (hprt0 & HPRT0_PWR)
1613                         port_status |= USB_PORT_STAT_POWER;
1614
1615                 speed = hprt0 & HPRT0_SPD_MASK;
1616                 if (speed == HPRT0_SPD_HIGH_SPEED)
1617                         port_status |= USB_PORT_STAT_HIGH_SPEED;
1618                 else if (speed == HPRT0_SPD_LOW_SPEED)
1619                         port_status |= USB_PORT_STAT_LOW_SPEED;
1620
1621                 if (hprt0 & HPRT0_TSTCTL_MASK)
1622                         port_status |= USB_PORT_STAT_TEST;
1623                 /* USB_PORT_FEAT_INDICATOR unsupported always 0 */
1624
1625                 dev_vdbg(hsotg->dev, "port_status=%08x\n", port_status);
1626                 *(__le32 *)buf = cpu_to_le32(port_status);
1627                 break;
1628
1629         case SetHubFeature:
1630                 dev_dbg(hsotg->dev, "SetHubFeature\n");
1631                 /* No HUB features supported */
1632                 break;
1633
1634         case SetPortFeature:
1635                 dev_dbg(hsotg->dev, "SetPortFeature\n");
1636                 if (wvalue != USB_PORT_FEAT_TEST && (!windex || windex > 1))
1637                         goto error;
1638
1639                 if (!hsotg->flags.b.port_connect_status) {
1640                         /*
1641                          * The port is disconnected, which means the core is
1642                          * either in device mode or it soon will be. Just
1643                          * return without doing anything since the port
1644                          * register can't be written if the core is in device
1645                          * mode.
1646                          */
1647                         break;
1648                 }
1649
1650                 switch (wvalue) {
1651                 case USB_PORT_FEAT_SUSPEND:
1652                         dev_dbg(hsotg->dev,
1653                                 "SetPortFeature - USB_PORT_FEAT_SUSPEND\n");
1654                         if (windex != hsotg->otg_port)
1655                                 goto error;
1656                         dwc2_port_suspend(hsotg, windex);
1657                         break;
1658
1659                 case USB_PORT_FEAT_POWER:
1660                         dev_dbg(hsotg->dev,
1661                                 "SetPortFeature - USB_PORT_FEAT_POWER\n");
1662                         hprt0 = dwc2_read_hprt0(hsotg);
1663                         hprt0 |= HPRT0_PWR;
1664                         writel(hprt0, hsotg->regs + HPRT0);
1665                         break;
1666
1667                 case USB_PORT_FEAT_RESET:
1668                         hprt0 = dwc2_read_hprt0(hsotg);
1669                         dev_dbg(hsotg->dev,
1670                                 "SetPortFeature - USB_PORT_FEAT_RESET\n");
1671                         pcgctl = readl(hsotg->regs + PCGCTL);
1672                         pcgctl &= ~(PCGCTL_ENBL_SLEEP_GATING | PCGCTL_STOPPCLK);
1673                         writel(pcgctl, hsotg->regs + PCGCTL);
1674                         /* ??? Original driver does this */
1675                         writel(0, hsotg->regs + PCGCTL);
1676
1677                         hprt0 = dwc2_read_hprt0(hsotg);
1678                         /* Clear suspend bit if resetting from suspend state */
1679                         hprt0 &= ~HPRT0_SUSP;
1680
1681                         /*
1682                          * When B-Host the Port reset bit is set in the Start
1683                          * HCD Callback function, so that the reset is started
1684                          * within 1ms of the HNP success interrupt
1685                          */
1686                         if (!dwc2_hcd_is_b_host(hsotg)) {
1687                                 hprt0 |= HPRT0_PWR | HPRT0_RST;
1688                                 dev_dbg(hsotg->dev,
1689                                         "In host mode, hprt0=%08x\n", hprt0);
1690                                 writel(hprt0, hsotg->regs + HPRT0);
1691                         }
1692
1693                         /* Clear reset bit in 10ms (FS/LS) or 50ms (HS) */
1694                         usleep_range(50000, 70000);
1695                         hprt0 &= ~HPRT0_RST;
1696                         writel(hprt0, hsotg->regs + HPRT0);
1697                         hsotg->lx_state = DWC2_L0; /* Now back to On state */
1698                         break;
1699
1700                 case USB_PORT_FEAT_INDICATOR:
1701                         dev_dbg(hsotg->dev,
1702                                 "SetPortFeature - USB_PORT_FEAT_INDICATOR\n");
1703                         /* Not supported */
1704                         break;
1705
1706                 default:
1707                         retval = -EINVAL;
1708                         dev_err(hsotg->dev,
1709                                 "SetPortFeature %1xh unknown or unsupported\n",
1710                                 wvalue);
1711                         break;
1712                 }
1713                 break;
1714
1715         default:
1716 error:
1717                 retval = -EINVAL;
1718                 dev_dbg(hsotg->dev,
1719                         "Unknown hub control request: %1xh wIndex: %1xh wValue: %1xh\n",
1720                         typereq, windex, wvalue);
1721                 break;
1722         }
1723
1724         return retval;
1725 }
1726
1727 static int dwc2_hcd_is_status_changed(struct dwc2_hsotg *hsotg, int port)
1728 {
1729         int retval;
1730
1731         if (port != 1)
1732                 return -EINVAL;
1733
1734         retval = (hsotg->flags.b.port_connect_status_change ||
1735                   hsotg->flags.b.port_reset_change ||
1736                   hsotg->flags.b.port_enable_change ||
1737                   hsotg->flags.b.port_suspend_change ||
1738                   hsotg->flags.b.port_over_current_change);
1739
1740         if (retval) {
1741                 dev_dbg(hsotg->dev,
1742                         "DWC OTG HCD HUB STATUS DATA: Root port status changed\n");
1743                 dev_dbg(hsotg->dev, "  port_connect_status_change: %d\n",
1744                         hsotg->flags.b.port_connect_status_change);
1745                 dev_dbg(hsotg->dev, "  port_reset_change: %d\n",
1746                         hsotg->flags.b.port_reset_change);
1747                 dev_dbg(hsotg->dev, "  port_enable_change: %d\n",
1748                         hsotg->flags.b.port_enable_change);
1749                 dev_dbg(hsotg->dev, "  port_suspend_change: %d\n",
1750                         hsotg->flags.b.port_suspend_change);
1751                 dev_dbg(hsotg->dev, "  port_over_current_change: %d\n",
1752                         hsotg->flags.b.port_over_current_change);
1753         }
1754
1755         return retval;
1756 }
1757
1758 int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg)
1759 {
1760         u32 hfnum = readl(hsotg->regs + HFNUM);
1761
1762 #ifdef DWC2_DEBUG_SOF
1763         dev_vdbg(hsotg->dev, "DWC OTG HCD GET FRAME NUMBER %d\n",
1764                  hfnum >> HFNUM_FRNUM_SHIFT &
1765                  HFNUM_FRNUM_MASK >> HFNUM_FRNUM_SHIFT);
1766 #endif
1767         return hfnum >> HFNUM_FRNUM_SHIFT &
1768                HFNUM_FRNUM_MASK >> HFNUM_FRNUM_SHIFT;
1769 }
1770
1771 int dwc2_hcd_is_b_host(struct dwc2_hsotg *hsotg)
1772 {
1773         return (hsotg->op_state == OTG_STATE_B_HOST);
1774 }
1775
1776 static struct dwc2_hcd_urb *dwc2_hcd_urb_alloc(struct dwc2_hsotg *hsotg,
1777                                                int iso_desc_count,
1778                                                gfp_t mem_flags)
1779 {
1780         struct dwc2_hcd_urb *urb;
1781         u32 size = sizeof(*urb) + iso_desc_count *
1782                    sizeof(struct dwc2_hcd_iso_packet_desc);
1783
1784         urb = kzalloc(size, mem_flags);
1785         if (urb)
1786                 urb->packet_count = iso_desc_count;
1787         return urb;
1788 }
1789
1790 static void dwc2_hcd_urb_set_pipeinfo(struct dwc2_hsotg *hsotg,
1791                                       struct dwc2_hcd_urb *urb, u8 dev_addr,
1792                                       u8 ep_num, u8 ep_type, u8 ep_dir, u16 mps)
1793 {
1794         if (dbg_perio() ||
1795             ep_type == USB_ENDPOINT_XFER_BULK ||
1796             ep_type == USB_ENDPOINT_XFER_CONTROL)
1797                 dev_vdbg(hsotg->dev,
1798                          "addr=%d, ep_num=%d, ep_dir=%1x, ep_type=%1x, mps=%d\n",
1799                          dev_addr, ep_num, ep_dir, ep_type, mps);
1800         urb->pipe_info.dev_addr = dev_addr;
1801         urb->pipe_info.ep_num = ep_num;
1802         urb->pipe_info.pipe_type = ep_type;
1803         urb->pipe_info.pipe_dir = ep_dir;
1804         urb->pipe_info.mps = mps;
1805 }
1806
1807 /*
1808  * NOTE: This function will be removed once the peripheral controller code
1809  * is integrated and the driver is stable
1810  */
1811 void dwc2_hcd_dump_state(struct dwc2_hsotg *hsotg)
1812 {
1813 #ifdef DEBUG
1814         struct dwc2_host_chan *chan;
1815         struct dwc2_hcd_urb *urb;
1816         struct dwc2_qtd *qtd;
1817         int num_channels;
1818         u32 np_tx_status;
1819         u32 p_tx_status;
1820         int i;
1821
1822         num_channels = hsotg->core_params->host_channels;
1823         dev_dbg(hsotg->dev, "\n");
1824         dev_dbg(hsotg->dev,
1825                 "************************************************************\n");
1826         dev_dbg(hsotg->dev, "HCD State:\n");
1827         dev_dbg(hsotg->dev, "  Num channels: %d\n", num_channels);
1828
1829         for (i = 0; i < num_channels; i++) {
1830                 chan = hsotg->hc_ptr_array[i];
1831                 dev_dbg(hsotg->dev, "  Channel %d:\n", i);
1832                 dev_dbg(hsotg->dev,
1833                         "    dev_addr: %d, ep_num: %d, ep_is_in: %d\n",
1834                         chan->dev_addr, chan->ep_num, chan->ep_is_in);
1835                 dev_dbg(hsotg->dev, "    speed: %d\n", chan->speed);
1836                 dev_dbg(hsotg->dev, "    ep_type: %d\n", chan->ep_type);
1837                 dev_dbg(hsotg->dev, "    max_packet: %d\n", chan->max_packet);
1838                 dev_dbg(hsotg->dev, "    data_pid_start: %d\n",
1839                         chan->data_pid_start);
1840                 dev_dbg(hsotg->dev, "    multi_count: %d\n", chan->multi_count);
1841                 dev_dbg(hsotg->dev, "    xfer_started: %d\n",
1842                         chan->xfer_started);
1843                 dev_dbg(hsotg->dev, "    xfer_buf: %p\n", chan->xfer_buf);
1844                 dev_dbg(hsotg->dev, "    xfer_dma: %08lx\n",
1845                         (unsigned long)chan->xfer_dma);
1846                 dev_dbg(hsotg->dev, "    xfer_len: %d\n", chan->xfer_len);
1847                 dev_dbg(hsotg->dev, "    xfer_count: %d\n", chan->xfer_count);
1848                 dev_dbg(hsotg->dev, "    halt_on_queue: %d\n",
1849                         chan->halt_on_queue);
1850                 dev_dbg(hsotg->dev, "    halt_pending: %d\n",
1851                         chan->halt_pending);
1852                 dev_dbg(hsotg->dev, "    halt_status: %d\n", chan->halt_status);
1853                 dev_dbg(hsotg->dev, "    do_split: %d\n", chan->do_split);
1854                 dev_dbg(hsotg->dev, "    complete_split: %d\n",
1855                         chan->complete_split);
1856                 dev_dbg(hsotg->dev, "    hub_addr: %d\n", chan->hub_addr);
1857                 dev_dbg(hsotg->dev, "    hub_port: %d\n", chan->hub_port);
1858                 dev_dbg(hsotg->dev, "    xact_pos: %d\n", chan->xact_pos);
1859                 dev_dbg(hsotg->dev, "    requests: %d\n", chan->requests);
1860                 dev_dbg(hsotg->dev, "    qh: %p\n", chan->qh);
1861
1862                 if (chan->xfer_started) {
1863                         u32 hfnum, hcchar, hctsiz, hcint, hcintmsk;
1864
1865                         hfnum = readl(hsotg->regs + HFNUM);
1866                         hcchar = readl(hsotg->regs + HCCHAR(i));
1867                         hctsiz = readl(hsotg->regs + HCTSIZ(i));
1868                         hcint = readl(hsotg->regs + HCINT(i));
1869                         hcintmsk = readl(hsotg->regs + HCINTMSK(i));
1870                         dev_dbg(hsotg->dev, "    hfnum: 0x%08x\n", hfnum);
1871                         dev_dbg(hsotg->dev, "    hcchar: 0x%08x\n", hcchar);
1872                         dev_dbg(hsotg->dev, "    hctsiz: 0x%08x\n", hctsiz);
1873                         dev_dbg(hsotg->dev, "    hcint: 0x%08x\n", hcint);
1874                         dev_dbg(hsotg->dev, "    hcintmsk: 0x%08x\n", hcintmsk);
1875                 }
1876
1877                 if (!(chan->xfer_started && chan->qh))
1878                         continue;
1879
1880                 list_for_each_entry(qtd, &chan->qh->qtd_list, qtd_list_entry) {
1881                         if (!qtd->in_process)
1882                                 break;
1883                         urb = qtd->urb;
1884                         dev_dbg(hsotg->dev, "    URB Info:\n");
1885                         dev_dbg(hsotg->dev, "      qtd: %p, urb: %p\n",
1886                                 qtd, urb);
1887                         if (urb) {
1888                                 dev_dbg(hsotg->dev,
1889                                         "      Dev: %d, EP: %d %s\n",
1890                                         dwc2_hcd_get_dev_addr(&urb->pipe_info),
1891                                         dwc2_hcd_get_ep_num(&urb->pipe_info),
1892                                         dwc2_hcd_is_pipe_in(&urb->pipe_info) ?
1893                                         "IN" : "OUT");
1894                                 dev_dbg(hsotg->dev,
1895                                         "      Max packet size: %d\n",
1896                                         dwc2_hcd_get_mps(&urb->pipe_info));
1897                                 dev_dbg(hsotg->dev,
1898                                         "      transfer_buffer: %p\n",
1899                                         urb->buf);
1900                                 dev_dbg(hsotg->dev,
1901                                         "      transfer_dma: %08lx\n",
1902                                         (unsigned long)urb->dma);
1903                                 dev_dbg(hsotg->dev,
1904                                         "      transfer_buffer_length: %d\n",
1905                                         urb->length);
1906                                 dev_dbg(hsotg->dev, "      actual_length: %d\n",
1907                                         urb->actual_length);
1908                         }
1909                 }
1910         }
1911
1912         dev_dbg(hsotg->dev, "  non_periodic_channels: %d\n",
1913                 hsotg->non_periodic_channels);
1914         dev_dbg(hsotg->dev, "  periodic_channels: %d\n",
1915                 hsotg->periodic_channels);
1916         dev_dbg(hsotg->dev, "  periodic_usecs: %d\n", hsotg->periodic_usecs);
1917         np_tx_status = readl(hsotg->regs + GNPTXSTS);
1918         dev_dbg(hsotg->dev, "  NP Tx Req Queue Space Avail: %d\n",
1919                 np_tx_status >> TXSTS_QSPCAVAIL_SHIFT &
1920                 TXSTS_QSPCAVAIL_MASK >> TXSTS_QSPCAVAIL_SHIFT);
1921         dev_dbg(hsotg->dev, "  NP Tx FIFO Space Avail: %d\n",
1922                 np_tx_status >> TXSTS_FSPCAVAIL_SHIFT &
1923                 TXSTS_FSPCAVAIL_MASK >> TXSTS_FSPCAVAIL_SHIFT);
1924         p_tx_status = readl(hsotg->regs + HPTXSTS);
1925         dev_dbg(hsotg->dev, "  P Tx Req Queue Space Avail: %d\n",
1926                 p_tx_status >> TXSTS_QSPCAVAIL_SHIFT &
1927                 TXSTS_QSPCAVAIL_MASK >> TXSTS_QSPCAVAIL_SHIFT);
1928         dev_dbg(hsotg->dev, "  P Tx FIFO Space Avail: %d\n",
1929                 p_tx_status >> TXSTS_FSPCAVAIL_SHIFT &
1930                 TXSTS_FSPCAVAIL_MASK >> TXSTS_FSPCAVAIL_SHIFT);
1931         dwc2_hcd_dump_frrem(hsotg);
1932         dwc2_dump_global_registers(hsotg);
1933         dwc2_dump_host_registers(hsotg);
1934         dev_dbg(hsotg->dev,
1935                 "************************************************************\n");
1936         dev_dbg(hsotg->dev, "\n");
1937 #endif
1938 }
1939
1940 /*
1941  * NOTE: This function will be removed once the peripheral controller code
1942  * is integrated and the driver is stable
1943  */
1944 void dwc2_hcd_dump_frrem(struct dwc2_hsotg *hsotg)
1945 {
1946 #ifdef DWC2_DUMP_FRREM
1947         dev_dbg(hsotg->dev, "Frame remaining at SOF:\n");
1948         dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
1949                 hsotg->frrem_samples, hsotg->frrem_accum,
1950                 hsotg->frrem_samples > 0 ?
1951                 hsotg->frrem_accum / hsotg->frrem_samples : 0);
1952         dev_dbg(hsotg->dev, "\n");
1953         dev_dbg(hsotg->dev, "Frame remaining at start_transfer (uframe 7):\n");
1954         dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
1955                 hsotg->hfnum_7_samples,
1956                 hsotg->hfnum_7_frrem_accum,
1957                 hsotg->hfnum_7_samples > 0 ?
1958                 hsotg->hfnum_7_frrem_accum / hsotg->hfnum_7_samples : 0);
1959         dev_dbg(hsotg->dev, "Frame remaining at start_transfer (uframe 0):\n");
1960         dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
1961                 hsotg->hfnum_0_samples,
1962                 hsotg->hfnum_0_frrem_accum,
1963                 hsotg->hfnum_0_samples > 0 ?
1964                 hsotg->hfnum_0_frrem_accum / hsotg->hfnum_0_samples : 0);
1965         dev_dbg(hsotg->dev, "Frame remaining at start_transfer (uframe 1-6):\n");
1966         dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
1967                 hsotg->hfnum_other_samples,
1968                 hsotg->hfnum_other_frrem_accum,
1969                 hsotg->hfnum_other_samples > 0 ?
1970                 hsotg->hfnum_other_frrem_accum / hsotg->hfnum_other_samples :
1971                 0);
1972         dev_dbg(hsotg->dev, "\n");
1973         dev_dbg(hsotg->dev, "Frame remaining at sample point A (uframe 7):\n");
1974         dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
1975                 hsotg->hfnum_7_samples_a, hsotg->hfnum_7_frrem_accum_a,
1976                 hsotg->hfnum_7_samples_a > 0 ?
1977                 hsotg->hfnum_7_frrem_accum_a / hsotg->hfnum_7_samples_a : 0);
1978         dev_dbg(hsotg->dev, "Frame remaining at sample point A (uframe 0):\n");
1979         dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
1980                 hsotg->hfnum_0_samples_a, hsotg->hfnum_0_frrem_accum_a,
1981                 hsotg->hfnum_0_samples_a > 0 ?
1982                 hsotg->hfnum_0_frrem_accum_a / hsotg->hfnum_0_samples_a : 0);
1983         dev_dbg(hsotg->dev, "Frame remaining at sample point A (uframe 1-6):\n");
1984         dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
1985                 hsotg->hfnum_other_samples_a, hsotg->hfnum_other_frrem_accum_a,
1986                 hsotg->hfnum_other_samples_a > 0 ?
1987                 hsotg->hfnum_other_frrem_accum_a / hsotg->hfnum_other_samples_a
1988                 : 0);
1989         dev_dbg(hsotg->dev, "\n");
1990         dev_dbg(hsotg->dev, "Frame remaining at sample point B (uframe 7):\n");
1991         dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
1992                 hsotg->hfnum_7_samples_b, hsotg->hfnum_7_frrem_accum_b,
1993                 hsotg->hfnum_7_samples_b > 0 ?
1994                 hsotg->hfnum_7_frrem_accum_b / hsotg->hfnum_7_samples_b : 0);
1995         dev_dbg(hsotg->dev, "Frame remaining at sample point B (uframe 0):\n");
1996         dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
1997                 hsotg->hfnum_0_samples_b, hsotg->hfnum_0_frrem_accum_b,
1998                 (hsotg->hfnum_0_samples_b > 0) ?
1999                 hsotg->hfnum_0_frrem_accum_b / hsotg->hfnum_0_samples_b : 0);
2000         dev_dbg(hsotg->dev, "Frame remaining at sample point B (uframe 1-6):\n");
2001         dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
2002                 hsotg->hfnum_other_samples_b, hsotg->hfnum_other_frrem_accum_b,
2003                 (hsotg->hfnum_other_samples_b > 0) ?
2004                 hsotg->hfnum_other_frrem_accum_b / hsotg->hfnum_other_samples_b
2005                 : 0);
2006 #endif
2007 }
2008
2009 struct wrapper_priv_data {
2010         struct dwc2_hsotg *hsotg;
2011 };
2012
2013 /* Gets the dwc2_hsotg from a usb_hcd */
2014 static struct dwc2_hsotg *dwc2_hcd_to_hsotg(struct usb_hcd *hcd)
2015 {
2016         struct wrapper_priv_data *p;
2017
2018         p = (struct wrapper_priv_data *) &hcd->hcd_priv;
2019         return p->hsotg;
2020 }
2021
2022 static int _dwc2_hcd_start(struct usb_hcd *hcd);
2023
2024 void dwc2_host_start(struct dwc2_hsotg *hsotg)
2025 {
2026         struct usb_hcd *hcd = dwc2_hsotg_to_hcd(hsotg);
2027
2028         hcd->self.is_b_host = dwc2_hcd_is_b_host(hsotg);
2029         _dwc2_hcd_start(hcd);
2030 }
2031
2032 void dwc2_host_disconnect(struct dwc2_hsotg *hsotg)
2033 {
2034         struct usb_hcd *hcd = dwc2_hsotg_to_hcd(hsotg);
2035
2036         hcd->self.is_b_host = 0;
2037 }
2038
2039 void dwc2_host_hub_info(struct dwc2_hsotg *hsotg, void *context, int *hub_addr,
2040                         int *hub_port)
2041 {
2042         struct urb *urb = context;
2043
2044         if (urb->dev->tt)
2045                 *hub_addr = urb->dev->tt->hub->devnum;
2046         else
2047                 *hub_addr = 0;
2048         *hub_port = urb->dev->ttport;
2049 }
2050
2051 int dwc2_host_get_speed(struct dwc2_hsotg *hsotg, void *context)
2052 {
2053         struct urb *urb = context;
2054
2055         return urb->dev->speed;
2056 }
2057
2058 static void dwc2_allocate_bus_bandwidth(struct usb_hcd *hcd, u16 bw,
2059                                         struct urb *urb)
2060 {
2061         struct usb_bus *bus = hcd_to_bus(hcd);
2062
2063         if (urb->interval)
2064                 bus->bandwidth_allocated += bw / urb->interval;
2065         if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS)
2066                 bus->bandwidth_isoc_reqs++;
2067         else
2068                 bus->bandwidth_int_reqs++;
2069 }
2070
2071 static void dwc2_free_bus_bandwidth(struct usb_hcd *hcd, u16 bw,
2072                                     struct urb *urb)
2073 {
2074         struct usb_bus *bus = hcd_to_bus(hcd);
2075
2076         if (urb->interval)
2077                 bus->bandwidth_allocated -= bw / urb->interval;
2078         if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS)
2079                 bus->bandwidth_isoc_reqs--;
2080         else
2081                 bus->bandwidth_int_reqs--;
2082 }
2083
2084 /*
2085  * Sets the final status of an URB and returns it to the upper layer. Any
2086  * required cleanup of the URB is performed.
2087  *
2088  * Must be called with interrupt disabled and spinlock held
2089  */
2090 void dwc2_host_complete(struct dwc2_hsotg *hsotg, struct dwc2_qtd *qtd,
2091                         int status)
2092 {
2093         struct urb *urb;
2094         int i;
2095
2096         if (!qtd) {
2097                 dev_dbg(hsotg->dev, "## %s: qtd is NULL ##\n", __func__);
2098                 return;
2099         }
2100
2101         if (!qtd->urb) {
2102                 dev_dbg(hsotg->dev, "## %s: qtd->urb is NULL ##\n", __func__);
2103                 return;
2104         }
2105
2106         urb = qtd->urb->priv;
2107         if (!urb) {
2108                 dev_dbg(hsotg->dev, "## %s: urb->priv is NULL ##\n", __func__);
2109                 return;
2110         }
2111
2112         urb->actual_length = dwc2_hcd_urb_get_actual_length(qtd->urb);
2113
2114         if (dbg_urb(urb))
2115                 dev_vdbg(hsotg->dev,
2116                          "%s: urb %p device %d ep %d-%s status %d actual %d\n",
2117                          __func__, urb, usb_pipedevice(urb->pipe),
2118                          usb_pipeendpoint(urb->pipe),
2119                          usb_pipein(urb->pipe) ? "IN" : "OUT", status,
2120                          urb->actual_length);
2121
2122         if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS && dbg_perio()) {
2123                 for (i = 0; i < urb->number_of_packets; i++)
2124                         dev_vdbg(hsotg->dev, " ISO Desc %d status %d\n",
2125                                  i, urb->iso_frame_desc[i].status);
2126         }
2127
2128         if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
2129                 urb->error_count = dwc2_hcd_urb_get_error_count(qtd->urb);
2130                 for (i = 0; i < urb->number_of_packets; ++i) {
2131                         urb->iso_frame_desc[i].actual_length =
2132                                 dwc2_hcd_urb_get_iso_desc_actual_length(
2133                                                 qtd->urb, i);
2134                         urb->iso_frame_desc[i].status =
2135                                 dwc2_hcd_urb_get_iso_desc_status(qtd->urb, i);
2136                 }
2137         }
2138
2139         urb->status = status;
2140         if (!status) {
2141                 if ((urb->transfer_flags & URB_SHORT_NOT_OK) &&
2142                     urb->actual_length < urb->transfer_buffer_length)
2143                         urb->status = -EREMOTEIO;
2144         }
2145
2146         if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS ||
2147             usb_pipetype(urb->pipe) == PIPE_INTERRUPT) {
2148                 struct usb_host_endpoint *ep = urb->ep;
2149
2150                 if (ep)
2151                         dwc2_free_bus_bandwidth(dwc2_hsotg_to_hcd(hsotg),
2152                                         dwc2_hcd_get_ep_bandwidth(hsotg, ep),
2153                                         urb);
2154         }
2155
2156         usb_hcd_unlink_urb_from_ep(dwc2_hsotg_to_hcd(hsotg), urb);
2157         urb->hcpriv = NULL;
2158         kfree(qtd->urb);
2159         qtd->urb = NULL;
2160
2161         spin_unlock(&hsotg->lock);
2162         usb_hcd_giveback_urb(dwc2_hsotg_to_hcd(hsotg), urb, status);
2163         spin_lock(&hsotg->lock);
2164 }
2165
2166 /*
2167  * Work queue function for starting the HCD when A-Cable is connected
2168  */
2169 static void dwc2_hcd_start_func(struct work_struct *work)
2170 {
2171         struct dwc2_hsotg *hsotg = container_of(work, struct dwc2_hsotg,
2172                                                 start_work.work);
2173
2174         dev_dbg(hsotg->dev, "%s() %p\n", __func__, hsotg);
2175         dwc2_host_start(hsotg);
2176 }
2177
2178 /*
2179  * Reset work queue function
2180  */
2181 static void dwc2_hcd_reset_func(struct work_struct *work)
2182 {
2183         struct dwc2_hsotg *hsotg = container_of(work, struct dwc2_hsotg,
2184                                                 reset_work.work);
2185         u32 hprt0;
2186
2187         dev_dbg(hsotg->dev, "USB RESET function called\n");
2188         hprt0 = dwc2_read_hprt0(hsotg);
2189         hprt0 &= ~HPRT0_RST;
2190         writel(hprt0, hsotg->regs + HPRT0);
2191         hsotg->flags.b.port_reset_change = 1;
2192 }
2193
2194 /*
2195  * =========================================================================
2196  *  Linux HC Driver Functions
2197  * =========================================================================
2198  */
2199
2200 /*
2201  * Initializes the DWC_otg controller and its root hub and prepares it for host
2202  * mode operation. Activates the root port. Returns 0 on success and a negative
2203  * error code on failure.
2204  */
2205 static int _dwc2_hcd_start(struct usb_hcd *hcd)
2206 {
2207         struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
2208         struct usb_bus *bus = hcd_to_bus(hcd);
2209         unsigned long flags;
2210
2211         dev_dbg(hsotg->dev, "DWC OTG HCD START\n");
2212
2213         spin_lock_irqsave(&hsotg->lock, flags);
2214
2215         hcd->state = HC_STATE_RUNNING;
2216
2217         if (dwc2_is_device_mode(hsotg)) {
2218                 spin_unlock_irqrestore(&hsotg->lock, flags);
2219                 return 0;       /* why 0 ?? */
2220         }
2221
2222         dwc2_hcd_reinit(hsotg);
2223
2224         /* Initialize and connect root hub if one is not already attached */
2225         if (bus->root_hub) {
2226                 dev_dbg(hsotg->dev, "DWC OTG HCD Has Root Hub\n");
2227                 /* Inform the HUB driver to resume */
2228                 usb_hcd_resume_root_hub(hcd);
2229         }
2230
2231         spin_unlock_irqrestore(&hsotg->lock, flags);
2232         return 0;
2233 }
2234
2235 /*
2236  * Halts the DWC_otg host mode operations in a clean manner. USB transfers are
2237  * stopped.
2238  */
2239 static void _dwc2_hcd_stop(struct usb_hcd *hcd)
2240 {
2241         struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
2242         unsigned long flags;
2243
2244         spin_lock_irqsave(&hsotg->lock, flags);
2245         dwc2_hcd_stop(hsotg);
2246         spin_unlock_irqrestore(&hsotg->lock, flags);
2247
2248         usleep_range(1000, 3000);
2249 }
2250
2251 /* Returns the current frame number */
2252 static int _dwc2_hcd_get_frame_number(struct usb_hcd *hcd)
2253 {
2254         struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
2255
2256         return dwc2_hcd_get_frame_number(hsotg);
2257 }
2258
2259 static void dwc2_dump_urb_info(struct usb_hcd *hcd, struct urb *urb,
2260                                char *fn_name)
2261 {
2262 #ifdef VERBOSE_DEBUG
2263         struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
2264         char *pipetype;
2265         char *speed;
2266
2267         dev_vdbg(hsotg->dev, "%s, urb %p\n", fn_name, urb);
2268         dev_vdbg(hsotg->dev, "  Device address: %d\n",
2269                  usb_pipedevice(urb->pipe));
2270         dev_vdbg(hsotg->dev, "  Endpoint: %d, %s\n",
2271                  usb_pipeendpoint(urb->pipe),
2272                  usb_pipein(urb->pipe) ? "IN" : "OUT");
2273
2274         switch (usb_pipetype(urb->pipe)) {
2275         case PIPE_CONTROL:
2276                 pipetype = "CONTROL";
2277                 break;
2278         case PIPE_BULK:
2279                 pipetype = "BULK";
2280                 break;
2281         case PIPE_INTERRUPT:
2282                 pipetype = "INTERRUPT";
2283                 break;
2284         case PIPE_ISOCHRONOUS:
2285                 pipetype = "ISOCHRONOUS";
2286                 break;
2287         default:
2288                 pipetype = "UNKNOWN";
2289                 break;
2290         }
2291
2292         dev_vdbg(hsotg->dev, "  Endpoint type: %s %s (%s)\n", pipetype,
2293                  usb_urb_dir_in(urb) ? "IN" : "OUT", usb_pipein(urb->pipe) ?
2294                  "IN" : "OUT");
2295
2296         switch (urb->dev->speed) {
2297         case USB_SPEED_HIGH:
2298                 speed = "HIGH";
2299                 break;
2300         case USB_SPEED_FULL:
2301                 speed = "FULL";
2302                 break;
2303         case USB_SPEED_LOW:
2304                 speed = "LOW";
2305                 break;
2306         default:
2307                 speed = "UNKNOWN";
2308                 break;
2309         }
2310
2311         dev_vdbg(hsotg->dev, "  Speed: %s\n", speed);
2312         dev_vdbg(hsotg->dev, "  Max packet size: %d\n",
2313                  usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe)));
2314         dev_vdbg(hsotg->dev, "  Data buffer length: %d\n",
2315                  urb->transfer_buffer_length);
2316         dev_vdbg(hsotg->dev, "  Transfer buffer: %p, Transfer DMA: %08lx\n",
2317                  urb->transfer_buffer, (unsigned long)urb->transfer_dma);
2318         dev_vdbg(hsotg->dev, "  Setup buffer: %p, Setup DMA: %08lx\n",
2319                  urb->setup_packet, (unsigned long)urb->setup_dma);
2320         dev_vdbg(hsotg->dev, "  Interval: %d\n", urb->interval);
2321
2322         if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
2323                 int i;
2324
2325                 for (i = 0; i < urb->number_of_packets; i++) {
2326                         dev_vdbg(hsotg->dev, "  ISO Desc %d:\n", i);
2327                         dev_vdbg(hsotg->dev, "    offset: %d, length %d\n",
2328                                  urb->iso_frame_desc[i].offset,
2329                                  urb->iso_frame_desc[i].length);
2330                 }
2331         }
2332 #endif
2333 }
2334
2335 /*
2336  * Starts processing a USB transfer request specified by a USB Request Block
2337  * (URB). mem_flags indicates the type of memory allocation to use while
2338  * processing this URB.
2339  */
2340 static int _dwc2_hcd_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
2341                                  gfp_t mem_flags)
2342 {
2343         struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
2344         struct usb_host_endpoint *ep = urb->ep;
2345         struct dwc2_hcd_urb *dwc2_urb;
2346         int i;
2347         int retval;
2348         int alloc_bandwidth = 0;
2349         u8 ep_type = 0;
2350         u32 tflags = 0;
2351         void *buf;
2352         unsigned long flags;
2353
2354         if (dbg_urb(urb)) {
2355                 dev_vdbg(hsotg->dev, "DWC OTG HCD URB Enqueue\n");
2356                 dwc2_dump_urb_info(hcd, urb, "urb_enqueue");
2357         }
2358
2359         if (ep == NULL)
2360                 return -EINVAL;
2361
2362         if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS ||
2363             usb_pipetype(urb->pipe) == PIPE_INTERRUPT) {
2364                 spin_lock_irqsave(&hsotg->lock, flags);
2365                 if (!dwc2_hcd_is_bandwidth_allocated(hsotg, ep))
2366                         alloc_bandwidth = 1;
2367                 spin_unlock_irqrestore(&hsotg->lock, flags);
2368         }
2369
2370         switch (usb_pipetype(urb->pipe)) {
2371         case PIPE_CONTROL:
2372                 ep_type = USB_ENDPOINT_XFER_CONTROL;
2373                 break;
2374         case PIPE_ISOCHRONOUS:
2375                 ep_type = USB_ENDPOINT_XFER_ISOC;
2376                 break;
2377         case PIPE_BULK:
2378                 ep_type = USB_ENDPOINT_XFER_BULK;
2379                 break;
2380         case PIPE_INTERRUPT:
2381                 ep_type = USB_ENDPOINT_XFER_INT;
2382                 break;
2383         default:
2384                 dev_warn(hsotg->dev, "Wrong ep type\n");
2385         }
2386
2387         dwc2_urb = dwc2_hcd_urb_alloc(hsotg, urb->number_of_packets,
2388                                       mem_flags);
2389         if (!dwc2_urb)
2390                 return -ENOMEM;
2391
2392         dwc2_hcd_urb_set_pipeinfo(hsotg, dwc2_urb, usb_pipedevice(urb->pipe),
2393                                   usb_pipeendpoint(urb->pipe), ep_type,
2394                                   usb_pipein(urb->pipe),
2395                                   usb_maxpacket(urb->dev, urb->pipe,
2396                                                 !(usb_pipein(urb->pipe))));
2397
2398         buf = urb->transfer_buffer;
2399
2400         if (hcd->self.uses_dma) {
2401                 if (!buf && (urb->transfer_dma & 3)) {
2402                         dev_err(hsotg->dev,
2403                                 "%s: unaligned transfer with no transfer_buffer",
2404                                 __func__);
2405                         retval = -EINVAL;
2406                         goto fail1;
2407                 }
2408         }
2409
2410         if (!(urb->transfer_flags & URB_NO_INTERRUPT))
2411                 tflags |= URB_GIVEBACK_ASAP;
2412         if (urb->transfer_flags & URB_ZERO_PACKET)
2413                 tflags |= URB_SEND_ZERO_PACKET;
2414
2415         dwc2_urb->priv = urb;
2416         dwc2_urb->buf = buf;
2417         dwc2_urb->dma = urb->transfer_dma;
2418         dwc2_urb->length = urb->transfer_buffer_length;
2419         dwc2_urb->setup_packet = urb->setup_packet;
2420         dwc2_urb->setup_dma = urb->setup_dma;
2421         dwc2_urb->flags = tflags;
2422         dwc2_urb->interval = urb->interval;
2423         dwc2_urb->status = -EINPROGRESS;
2424
2425         for (i = 0; i < urb->number_of_packets; ++i)
2426                 dwc2_hcd_urb_set_iso_desc_params(dwc2_urb, i,
2427                                                  urb->iso_frame_desc[i].offset,
2428                                                  urb->iso_frame_desc[i].length);
2429
2430         urb->hcpriv = dwc2_urb;
2431
2432         spin_lock_irqsave(&hsotg->lock, flags);
2433         retval = usb_hcd_link_urb_to_ep(hcd, urb);
2434         spin_unlock_irqrestore(&hsotg->lock, flags);
2435         if (retval)
2436                 goto fail1;
2437
2438         retval = dwc2_hcd_urb_enqueue(hsotg, dwc2_urb, &ep->hcpriv, mem_flags);
2439         if (retval)
2440                 goto fail2;
2441
2442         if (alloc_bandwidth) {
2443                 spin_lock_irqsave(&hsotg->lock, flags);
2444                 dwc2_allocate_bus_bandwidth(hcd,
2445                                 dwc2_hcd_get_ep_bandwidth(hsotg, ep),
2446                                 urb);
2447                 spin_unlock_irqrestore(&hsotg->lock, flags);
2448         }
2449
2450         return 0;
2451
2452 fail2:
2453         spin_lock_irqsave(&hsotg->lock, flags);
2454         dwc2_urb->priv = NULL;
2455         usb_hcd_unlink_urb_from_ep(hcd, urb);
2456         spin_unlock_irqrestore(&hsotg->lock, flags);
2457 fail1:
2458         urb->hcpriv = NULL;
2459         kfree(dwc2_urb);
2460
2461         return retval;
2462 }
2463
2464 /*
2465  * Aborts/cancels a USB transfer request. Always returns 0 to indicate success.
2466  */
2467 static int _dwc2_hcd_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
2468                                  int status)
2469 {
2470         struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
2471         int rc;
2472         unsigned long flags;
2473
2474         dev_dbg(hsotg->dev, "DWC OTG HCD URB Dequeue\n");
2475         dwc2_dump_urb_info(hcd, urb, "urb_dequeue");
2476
2477         spin_lock_irqsave(&hsotg->lock, flags);
2478
2479         rc = usb_hcd_check_unlink_urb(hcd, urb, status);
2480         if (rc)
2481                 goto out;
2482
2483         if (!urb->hcpriv) {
2484                 dev_dbg(hsotg->dev, "## urb->hcpriv is NULL ##\n");
2485                 goto out;
2486         }
2487
2488         rc = dwc2_hcd_urb_dequeue(hsotg, urb->hcpriv);
2489
2490         usb_hcd_unlink_urb_from_ep(hcd, urb);
2491
2492         kfree(urb->hcpriv);
2493         urb->hcpriv = NULL;
2494
2495         /* Higher layer software sets URB status */
2496         spin_unlock(&hsotg->lock);
2497         usb_hcd_giveback_urb(hcd, urb, status);
2498         spin_lock(&hsotg->lock);
2499
2500         dev_dbg(hsotg->dev, "Called usb_hcd_giveback_urb()\n");
2501         dev_dbg(hsotg->dev, "  urb->status = %d\n", urb->status);
2502 out:
2503         spin_unlock_irqrestore(&hsotg->lock, flags);
2504
2505         return rc;
2506 }
2507
2508 /*
2509  * Frees resources in the DWC_otg controller related to a given endpoint. Also
2510  * clears state in the HCD related to the endpoint. Any URBs for the endpoint
2511  * must already be dequeued.
2512  */
2513 static void _dwc2_hcd_endpoint_disable(struct usb_hcd *hcd,
2514                                        struct usb_host_endpoint *ep)
2515 {
2516         struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
2517
2518         dev_dbg(hsotg->dev,
2519                 "DWC OTG HCD EP DISABLE: bEndpointAddress=0x%02x, ep->hcpriv=%p\n",
2520                 ep->desc.bEndpointAddress, ep->hcpriv);
2521         dwc2_hcd_endpoint_disable(hsotg, ep, 250);
2522 }
2523
2524 /*
2525  * Resets endpoint specific parameter values, in current version used to reset
2526  * the data toggle (as a WA). This function can be called from usb_clear_halt
2527  * routine.
2528  */
2529 static void _dwc2_hcd_endpoint_reset(struct usb_hcd *hcd,
2530                                      struct usb_host_endpoint *ep)
2531 {
2532         struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
2533         int is_control = usb_endpoint_xfer_control(&ep->desc);
2534         int is_out = usb_endpoint_dir_out(&ep->desc);
2535         int epnum = usb_endpoint_num(&ep->desc);
2536         struct usb_device *udev;
2537         unsigned long flags;
2538
2539         dev_dbg(hsotg->dev,
2540                 "DWC OTG HCD EP RESET: bEndpointAddress=0x%02x\n",
2541                 ep->desc.bEndpointAddress);
2542
2543         udev = to_usb_device(hsotg->dev);
2544
2545         spin_lock_irqsave(&hsotg->lock, flags);
2546
2547         usb_settoggle(udev, epnum, is_out, 0);
2548         if (is_control)
2549                 usb_settoggle(udev, epnum, !is_out, 0);
2550         dwc2_hcd_endpoint_reset(hsotg, ep);
2551
2552         spin_unlock_irqrestore(&hsotg->lock, flags);
2553 }
2554
2555 /*
2556  * Handles host mode interrupts for the DWC_otg controller. Returns IRQ_NONE if
2557  * there was no interrupt to handle. Returns IRQ_HANDLED if there was a valid
2558  * interrupt.
2559  *
2560  * This function is called by the USB core when an interrupt occurs
2561  */
2562 static irqreturn_t _dwc2_hcd_irq(struct usb_hcd *hcd)
2563 {
2564         struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
2565
2566         return dwc2_handle_hcd_intr(hsotg);
2567 }
2568
2569 /*
2570  * Creates Status Change bitmap for the root hub and root port. The bitmap is
2571  * returned in buf. Bit 0 is the status change indicator for the root hub. Bit 1
2572  * is the status change indicator for the single root port. Returns 1 if either
2573  * change indicator is 1, otherwise returns 0.
2574  */
2575 static int _dwc2_hcd_hub_status_data(struct usb_hcd *hcd, char *buf)
2576 {
2577         struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
2578
2579         buf[0] = dwc2_hcd_is_status_changed(hsotg, 1) << 1;
2580         return buf[0] != 0;
2581 }
2582
2583 /* Handles hub class-specific requests */
2584 static int _dwc2_hcd_hub_control(struct usb_hcd *hcd, u16 typereq, u16 wvalue,
2585                                  u16 windex, char *buf, u16 wlength)
2586 {
2587         int retval = dwc2_hcd_hub_control(dwc2_hcd_to_hsotg(hcd), typereq,
2588                                           wvalue, windex, buf, wlength);
2589         return retval;
2590 }
2591
2592 /* Handles hub TT buffer clear completions */
2593 static void _dwc2_hcd_clear_tt_buffer_complete(struct usb_hcd *hcd,
2594                                                struct usb_host_endpoint *ep)
2595 {
2596         struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
2597         struct dwc2_qh *qh;
2598         unsigned long flags;
2599
2600         qh = ep->hcpriv;
2601         if (!qh)
2602                 return;
2603
2604         spin_lock_irqsave(&hsotg->lock, flags);
2605         qh->tt_buffer_dirty = 0;
2606
2607         if (hsotg->flags.b.port_connect_status)
2608                 dwc2_hcd_queue_transactions(hsotg, DWC2_TRANSACTION_ALL);
2609
2610         spin_unlock_irqrestore(&hsotg->lock, flags);
2611 }
2612
2613 static struct hc_driver dwc2_hc_driver = {
2614         .description = "dwc2_hsotg",
2615         .product_desc = "DWC OTG Controller",
2616         .hcd_priv_size = sizeof(struct wrapper_priv_data),
2617
2618         .irq = _dwc2_hcd_irq,
2619         .flags = HCD_MEMORY | HCD_USB2,
2620
2621         .start = _dwc2_hcd_start,
2622         .stop = _dwc2_hcd_stop,
2623         .urb_enqueue = _dwc2_hcd_urb_enqueue,
2624         .urb_dequeue = _dwc2_hcd_urb_dequeue,
2625         .endpoint_disable = _dwc2_hcd_endpoint_disable,
2626         .endpoint_reset = _dwc2_hcd_endpoint_reset,
2627         .get_frame_number = _dwc2_hcd_get_frame_number,
2628
2629         .hub_status_data = _dwc2_hcd_hub_status_data,
2630         .hub_control = _dwc2_hcd_hub_control,
2631         .clear_tt_buffer_complete = _dwc2_hcd_clear_tt_buffer_complete,
2632 };
2633
2634 /*
2635  * Frees secondary storage associated with the dwc2_hsotg structure contained
2636  * in the struct usb_hcd field
2637  */
2638 static void dwc2_hcd_free(struct dwc2_hsotg *hsotg)
2639 {
2640         u32 ahbcfg;
2641         u32 dctl;
2642         int i;
2643
2644         dev_dbg(hsotg->dev, "DWC OTG HCD FREE\n");
2645
2646         /* Free memory for QH/QTD lists */
2647         dwc2_qh_list_free(hsotg, &hsotg->non_periodic_sched_inactive);
2648         dwc2_qh_list_free(hsotg, &hsotg->non_periodic_sched_active);
2649         dwc2_qh_list_free(hsotg, &hsotg->periodic_sched_inactive);
2650         dwc2_qh_list_free(hsotg, &hsotg->periodic_sched_ready);
2651         dwc2_qh_list_free(hsotg, &hsotg->periodic_sched_assigned);
2652         dwc2_qh_list_free(hsotg, &hsotg->periodic_sched_queued);
2653
2654         /* Free memory for the host channels */
2655         for (i = 0; i < MAX_EPS_CHANNELS; i++) {
2656                 struct dwc2_host_chan *chan = hsotg->hc_ptr_array[i];
2657
2658                 if (chan != NULL) {
2659                         dev_dbg(hsotg->dev, "HCD Free channel #%i, chan=%p\n",
2660                                 i, chan);
2661                         hsotg->hc_ptr_array[i] = NULL;
2662                         kfree(chan);
2663                 }
2664         }
2665
2666         if (hsotg->core_params->dma_enable > 0) {
2667                 if (hsotg->status_buf) {
2668                         dma_free_coherent(hsotg->dev, DWC2_HCD_STATUS_BUF_SIZE,
2669                                           hsotg->status_buf,
2670                                           hsotg->status_buf_dma);
2671                         hsotg->status_buf = NULL;
2672                 }
2673         } else {
2674                 kfree(hsotg->status_buf);
2675                 hsotg->status_buf = NULL;
2676         }
2677
2678         ahbcfg = readl(hsotg->regs + GAHBCFG);
2679
2680         /* Disable all interrupts */
2681         ahbcfg &= ~GAHBCFG_GLBL_INTR_EN;
2682         writel(ahbcfg, hsotg->regs + GAHBCFG);
2683         writel(0, hsotg->regs + GINTMSK);
2684
2685         if (hsotg->snpsid >= DWC2_CORE_REV_3_00a) {
2686                 dctl = readl(hsotg->regs + DCTL);
2687                 dctl |= DCTL_SFTDISCON;
2688                 writel(dctl, hsotg->regs + DCTL);
2689         }
2690
2691         if (hsotg->wq_otg) {
2692                 if (!cancel_work_sync(&hsotg->wf_otg))
2693                         flush_workqueue(hsotg->wq_otg);
2694                 destroy_workqueue(hsotg->wq_otg);
2695         }
2696
2697         kfree(hsotg->core_params);
2698         hsotg->core_params = NULL;
2699         del_timer(&hsotg->wkp_timer);
2700 }
2701
2702 static void dwc2_hcd_release(struct dwc2_hsotg *hsotg)
2703 {
2704         /* Turn off all host-specific interrupts */
2705         dwc2_disable_host_interrupts(hsotg);
2706
2707         dwc2_hcd_free(hsotg);
2708 }
2709
2710 /*
2711  * Sets all parameters to the given value.
2712  *
2713  * Assumes that the dwc2_core_params struct contains only integers.
2714  */
2715 void dwc2_set_all_params(struct dwc2_core_params *params, int value)
2716 {
2717         int *p = (int *)params;
2718         size_t size = sizeof(*params) / sizeof(*p);
2719         int i;
2720
2721         for (i = 0; i < size; i++)
2722                 p[i] = value;
2723 }
2724 EXPORT_SYMBOL_GPL(dwc2_set_all_params);
2725
2726 /*
2727  * Initializes the HCD. This function allocates memory for and initializes the
2728  * static parts of the usb_hcd and dwc2_hsotg structures. It also registers the
2729  * USB bus with the core and calls the hc_driver->start() function. It returns
2730  * a negative error on failure.
2731  */
2732 int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
2733                   const struct dwc2_core_params *params)
2734 {
2735         struct usb_hcd *hcd;
2736         struct dwc2_host_chan *channel;
2737         u32 snpsid, gusbcfg, hcfg;
2738         int i, num_channels;
2739         int retval = -ENOMEM;
2740
2741         dev_dbg(hsotg->dev, "DWC OTG HCD INIT\n");
2742
2743         /*
2744          * Attempt to ensure this device is really a DWC_otg Controller.
2745          * Read and verify the GSNPSID register contents. The value should be
2746          * 0x45f42xxx or 0x45f43xxx, which corresponds to either "OT2" or "OT3",
2747          * as in "OTG version 2.xx" or "OTG version 3.xx".
2748          */
2749         snpsid = readl(hsotg->regs + GSNPSID);
2750         if ((snpsid & 0xfffff000) != 0x4f542000 &&
2751             (snpsid & 0xfffff000) != 0x4f543000) {
2752                 dev_err(hsotg->dev, "Bad value for GSNPSID: 0x%08x\n", snpsid);
2753                 retval = -ENODEV;
2754                 goto error1;
2755         }
2756
2757         /*
2758          * Store the contents of the hardware configuration registers here for
2759          * easy access later
2760          */
2761         hsotg->hwcfg1 = readl(hsotg->regs + GHWCFG1);
2762         hsotg->hwcfg2 = readl(hsotg->regs + GHWCFG2);
2763         hsotg->hwcfg3 = readl(hsotg->regs + GHWCFG3);
2764         hsotg->hwcfg4 = readl(hsotg->regs + GHWCFG4);
2765
2766         dev_dbg(hsotg->dev, "hwcfg1=%08x\n", hsotg->hwcfg1);
2767         dev_dbg(hsotg->dev, "hwcfg2=%08x\n", hsotg->hwcfg2);
2768         dev_dbg(hsotg->dev, "hwcfg3=%08x\n", hsotg->hwcfg3);
2769         dev_dbg(hsotg->dev, "hwcfg4=%08x\n", hsotg->hwcfg4);
2770
2771         /* Force host mode to get HPTXFSIZ exact power on value */
2772         gusbcfg = readl(hsotg->regs + GUSBCFG);
2773         gusbcfg |= GUSBCFG_FORCEHOSTMODE;
2774         writel(gusbcfg, hsotg->regs + GUSBCFG);
2775         usleep_range(100000, 150000);
2776
2777         hsotg->hptxfsiz = readl(hsotg->regs + HPTXFSIZ);
2778         dev_dbg(hsotg->dev, "hptxfsiz=%08x\n", hsotg->hptxfsiz);
2779         gusbcfg = readl(hsotg->regs + GUSBCFG);
2780         gusbcfg &= ~GUSBCFG_FORCEHOSTMODE;
2781         writel(gusbcfg, hsotg->regs + GUSBCFG);
2782         usleep_range(100000, 150000);
2783
2784         hcfg = readl(hsotg->regs + HCFG);
2785         dev_dbg(hsotg->dev, "hcfg=%08x\n", hcfg);
2786         dev_dbg(hsotg->dev, "op_mode=%0x\n",
2787                 hsotg->hwcfg2 >> GHWCFG2_OP_MODE_SHIFT &
2788                 GHWCFG2_OP_MODE_MASK >> GHWCFG2_OP_MODE_SHIFT);
2789         dev_dbg(hsotg->dev, "arch=%0x\n",
2790                 hsotg->hwcfg2 >> GHWCFG2_ARCHITECTURE_SHIFT &
2791                 GHWCFG2_ARCHITECTURE_MASK >> GHWCFG2_ARCHITECTURE_SHIFT);
2792         dev_dbg(hsotg->dev, "num_dev_ep=%d\n",
2793                 hsotg->hwcfg2 >> GHWCFG2_NUM_DEV_EP_SHIFT &
2794                 GHWCFG2_NUM_DEV_EP_MASK >> GHWCFG2_NUM_DEV_EP_SHIFT);
2795         dev_dbg(hsotg->dev, "max_host_chan=%d\n",
2796                 hsotg->hwcfg2 >> GHWCFG2_NUM_HOST_CHAN_SHIFT &
2797                 GHWCFG2_NUM_HOST_CHAN_MASK >> GHWCFG2_NUM_HOST_CHAN_SHIFT);
2798         dev_dbg(hsotg->dev, "nonperio_tx_q_depth=0x%0x\n",
2799                 hsotg->hwcfg2 >> GHWCFG2_NONPERIO_TX_Q_DEPTH_SHIFT &
2800                 GHWCFG2_NONPERIO_TX_Q_DEPTH_MASK >>
2801                                 GHWCFG2_NONPERIO_TX_Q_DEPTH_SHIFT);
2802         dev_dbg(hsotg->dev, "host_perio_tx_q_depth=0x%0x\n",
2803                 hsotg->hwcfg2 >> GHWCFG2_HOST_PERIO_TX_Q_DEPTH_SHIFT &
2804                 GHWCFG2_HOST_PERIO_TX_Q_DEPTH_MASK >>
2805                                 GHWCFG2_HOST_PERIO_TX_Q_DEPTH_SHIFT);
2806         dev_dbg(hsotg->dev, "dev_token_q_depth=0x%0x\n",
2807                 hsotg->hwcfg2 >> GHWCFG2_DEV_TOKEN_Q_DEPTH_SHIFT &
2808                 GHWCFG3_XFER_SIZE_CNTR_WIDTH_MASK >>
2809                                 GHWCFG3_XFER_SIZE_CNTR_WIDTH_SHIFT);
2810
2811 #ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
2812         hsotg->frame_num_array = kzalloc(sizeof(*hsotg->frame_num_array) *
2813                                          FRAME_NUM_ARRAY_SIZE, GFP_KERNEL);
2814         if (!hsotg->frame_num_array)
2815                 goto error1;
2816         hsotg->last_frame_num_array = kzalloc(
2817                         sizeof(*hsotg->last_frame_num_array) *
2818                         FRAME_NUM_ARRAY_SIZE, GFP_KERNEL);
2819         if (!hsotg->last_frame_num_array)
2820                 goto error1;
2821         hsotg->last_frame_num = HFNUM_MAX_FRNUM;
2822 #endif
2823
2824         hsotg->core_params = kzalloc(sizeof(*hsotg->core_params), GFP_KERNEL);
2825         if (!hsotg->core_params)
2826                 goto error1;
2827
2828         dwc2_set_all_params(hsotg->core_params, -1);
2829
2830         /* Validate parameter values */
2831         dwc2_set_parameters(hsotg, params);
2832
2833         /* Check if the bus driver or platform code has setup a dma_mask */
2834         if (hsotg->core_params->dma_enable > 0 &&
2835             hsotg->dev->dma_mask == NULL) {
2836                 dev_warn(hsotg->dev,
2837                          "dma_mask not set, disabling DMA\n");
2838                 hsotg->core_params->dma_enable = 0;
2839                 hsotg->core_params->dma_desc_enable = 0;
2840         }
2841
2842         /* Set device flags indicating whether the HCD supports DMA */
2843         if (hsotg->core_params->dma_enable > 0) {
2844                 if (dma_set_mask(hsotg->dev, DMA_BIT_MASK(32)) < 0)
2845                         dev_warn(hsotg->dev, "can't set DMA mask\n");
2846                 if (dma_set_coherent_mask(hsotg->dev, DMA_BIT_MASK(32)) < 0)
2847                         dev_warn(hsotg->dev, "can't set coherent DMA mask\n");
2848         }
2849
2850         hcd = usb_create_hcd(&dwc2_hc_driver, hsotg->dev, dev_name(hsotg->dev));
2851         if (!hcd)
2852                 goto error1;
2853
2854         if (hsotg->core_params->dma_enable <= 0)
2855                 hcd->self.uses_dma = 0;
2856
2857         hcd->has_tt = 1;
2858
2859         spin_lock_init(&hsotg->lock);
2860         ((struct wrapper_priv_data *) &hcd->hcd_priv)->hsotg = hsotg;
2861         hsotg->priv = hcd;
2862
2863         /*
2864          * Disable the global interrupt until all the interrupt handlers are
2865          * installed
2866          */
2867         dwc2_disable_global_interrupts(hsotg);
2868
2869         /* Initialize the DWC_otg core, and select the Phy type */
2870         retval = dwc2_core_init(hsotg, true, irq);
2871         if (retval)
2872                 goto error2;
2873
2874         /* Create new workqueue and init work */
2875         retval = -ENOMEM;
2876         hsotg->wq_otg = create_singlethread_workqueue("dwc2");
2877         if (!hsotg->wq_otg) {
2878                 dev_err(hsotg->dev, "Failed to create workqueue\n");
2879                 goto error2;
2880         }
2881         INIT_WORK(&hsotg->wf_otg, dwc2_conn_id_status_change);
2882
2883         hsotg->snpsid = readl(hsotg->regs + GSNPSID);
2884         dev_dbg(hsotg->dev, "Core Release: %1x.%1x%1x%1x\n",
2885                 hsotg->snpsid >> 12 & 0xf, hsotg->snpsid >> 8 & 0xf,
2886                 hsotg->snpsid >> 4 & 0xf, hsotg->snpsid & 0xf);
2887
2888         setup_timer(&hsotg->wkp_timer, dwc2_wakeup_detected,
2889                     (unsigned long)hsotg);
2890
2891         /* Initialize the non-periodic schedule */
2892         INIT_LIST_HEAD(&hsotg->non_periodic_sched_inactive);
2893         INIT_LIST_HEAD(&hsotg->non_periodic_sched_active);
2894
2895         /* Initialize the periodic schedule */
2896         INIT_LIST_HEAD(&hsotg->periodic_sched_inactive);
2897         INIT_LIST_HEAD(&hsotg->periodic_sched_ready);
2898         INIT_LIST_HEAD(&hsotg->periodic_sched_assigned);
2899         INIT_LIST_HEAD(&hsotg->periodic_sched_queued);
2900
2901         /*
2902          * Create a host channel descriptor for each host channel implemented
2903          * in the controller. Initialize the channel descriptor array.
2904          */
2905         INIT_LIST_HEAD(&hsotg->free_hc_list);
2906         num_channels = hsotg->core_params->host_channels;
2907         memset(&hsotg->hc_ptr_array[0], 0, sizeof(hsotg->hc_ptr_array));
2908
2909         for (i = 0; i < num_channels; i++) {
2910                 channel = kzalloc(sizeof(*channel), GFP_KERNEL);
2911                 if (channel == NULL)
2912                         goto error3;
2913                 channel->hc_num = i;
2914                 hsotg->hc_ptr_array[i] = channel;
2915         }
2916
2917         /* Initialize hsotg start work */
2918         INIT_DELAYED_WORK(&hsotg->start_work, dwc2_hcd_start_func);
2919
2920         /* Initialize port reset work */
2921         INIT_DELAYED_WORK(&hsotg->reset_work, dwc2_hcd_reset_func);
2922
2923         /*
2924          * Allocate space for storing data on status transactions. Normally no
2925          * data is sent, but this space acts as a bit bucket. This must be
2926          * done after usb_add_hcd since that function allocates the DMA buffer
2927          * pool.
2928          */
2929         if (hsotg->core_params->dma_enable > 0)
2930                 hsotg->status_buf = dma_alloc_coherent(hsotg->dev,
2931                                         DWC2_HCD_STATUS_BUF_SIZE,
2932                                         &hsotg->status_buf_dma, GFP_KERNEL);
2933         else
2934                 hsotg->status_buf = kzalloc(DWC2_HCD_STATUS_BUF_SIZE,
2935                                           GFP_KERNEL);
2936
2937         if (!hsotg->status_buf)
2938                 goto error3;
2939
2940         hsotg->otg_port = 1;
2941         hsotg->frame_list = NULL;
2942         hsotg->frame_list_dma = 0;
2943         hsotg->periodic_qh_count = 0;
2944
2945         /* Initiate lx_state to L3 disconnected state */
2946         hsotg->lx_state = DWC2_L3;
2947
2948         hcd->self.otg_port = hsotg->otg_port;
2949
2950         /* Don't support SG list at this point */
2951         hcd->self.sg_tablesize = 0;
2952
2953         /*
2954          * Finish generic HCD initialization and start the HCD. This function
2955          * allocates the DMA buffer pool, registers the USB bus, requests the
2956          * IRQ line, and calls hcd_start method.
2957          */
2958         retval = usb_add_hcd(hcd, irq, IRQF_SHARED);
2959         if (retval < 0)
2960                 goto error3;
2961
2962         dwc2_hcd_dump_state(hsotg);
2963
2964         dwc2_enable_global_interrupts(hsotg);
2965
2966         return 0;
2967
2968 error3:
2969         dwc2_hcd_release(hsotg);
2970 error2:
2971         usb_put_hcd(hcd);
2972 error1:
2973         kfree(hsotg->core_params);
2974
2975 #ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
2976         kfree(hsotg->last_frame_num_array);
2977         kfree(hsotg->frame_num_array);
2978 #endif
2979
2980         dev_err(hsotg->dev, "%s() FAILED, returning %d\n", __func__, retval);
2981         return retval;
2982 }
2983 EXPORT_SYMBOL_GPL(dwc2_hcd_init);
2984
2985 /*
2986  * Removes the HCD.
2987  * Frees memory and resources associated with the HCD and deregisters the bus.
2988  */
2989 void dwc2_hcd_remove(struct dwc2_hsotg *hsotg)
2990 {
2991         struct usb_hcd *hcd;
2992
2993         dev_dbg(hsotg->dev, "DWC OTG HCD REMOVE\n");
2994
2995         hcd = dwc2_hsotg_to_hcd(hsotg);
2996         dev_dbg(hsotg->dev, "hsotg->hcd = %p\n", hcd);
2997
2998         if (!hcd) {
2999                 dev_dbg(hsotg->dev, "%s: dwc2_hsotg_to_hcd(hsotg) NULL!\n",
3000                         __func__);
3001                 return;
3002         }
3003
3004         usb_remove_hcd(hcd);
3005         hsotg->priv = NULL;
3006         dwc2_hcd_release(hsotg);
3007         usb_put_hcd(hcd);
3008
3009 #ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
3010         kfree(hsotg->last_frame_num_array);
3011         kfree(hsotg->frame_num_array);
3012 #endif
3013 }
3014 EXPORT_SYMBOL_GPL(dwc2_hcd_remove);