1 /*        $NetBSD: dwc2_hcd.c,v 1.26 2021/12/21 09:51:22 skrll Exp $  */
2 
3 /*
4  * hcd.c - DesignWare HS OTG Controller host-mode routines
5  *
6  * Copyright (C) 2004-2013 Synopsys, Inc.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions, and the following disclaimer,
13  *    without modification.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  * 3. The names of the above-listed copyright holders may not be used
18  *    to endorse or promote products derived from this software without
19  *    specific prior written permission.
20  *
21  * ALTERNATIVELY, this software may be distributed under the terms of the
22  * GNU General Public License ("GPL") as published by the Free Software
23  * Foundation; either version 2 of the License, or (at your option) any
24  * later version.
25  *
26  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
27  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
28  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
30  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37  */
38 
39 /*
40  * This file contains the core HCD code, and implements the Linux hc_driver
41  * API
42  */
43 
44 #include <sys/cdefs.h>
45 __KERNEL_RCSID(0, "$NetBSD: dwc2_hcd.c,v 1.26 2021/12/21 09:51:22 skrll Exp $");
46 
47 #include <sys/types.h>
48 #include <sys/kmem.h>
49 #include <sys/proc.h>
50 #include <sys/pool.h>
51 
52 #include <dev/usb/usb.h>
53 #include <dev/usb/usbdi.h>
54 #include <dev/usb/usbdivar.h>
55 #include <dev/usb/usb_mem.h>
56 
57 #include <linux/kernel.h>
58 #include <linux/list.h>
59 #include <linux/err.h>
60 #include <linux/workqueue.h>
61 
62 #include <dwc2/dwc2.h>
63 #include <dwc2/dwc2var.h>
64 
65 #include "dwc2_core.h"
66 #include "dwc2_hcd.h"
67 
68 /**
69  * dwc2_dump_channel_info() - Prints the state of a host channel
70  *
71  * @hsotg: Programming view of DWC_otg controller
72  * @chan:  Pointer to the channel to dump
73  *
74  * Must be called with interrupt disabled and spinlock held
75  *
76  * NOTE: This function will be removed once the peripheral controller code
77  * is integrated and the driver is stable
78  */
79 #ifdef VERBOSE_DEBUG
dwc2_dump_channel_info(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan)80 static void dwc2_dump_channel_info(struct dwc2_hsotg *hsotg,
81                                            struct dwc2_host_chan *chan)
82 {
83           int num_channels = hsotg->core_params->host_channels;
84           struct dwc2_qh *qh;
85           u32 hcchar;
86           u32 hcsplt;
87           u32 hctsiz;
88           u32 hc_dma;
89           int i;
90 
91           if (chan == NULL)
92                     return;
93 
94           hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num));
95           hcsplt = DWC2_READ_4(hsotg, HCSPLT(chan->hc_num));
96           hctsiz = DWC2_READ_4(hsotg, HCTSIZ(chan->hc_num));
97           hc_dma = DWC2_READ_4(hsotg, HCDMA(chan->hc_num));
98 
99           dev_dbg(hsotg->dev, "  Assigned to channel %p:\n", chan);
100           dev_dbg(hsotg->dev, "    hcchar 0x%08x, hcsplt 0x%08x\n",
101                     hcchar, hcsplt);
102           dev_dbg(hsotg->dev, "    hctsiz 0x%08x, hc_dma 0x%08x\n",
103                     hctsiz, hc_dma);
104           dev_dbg(hsotg->dev, "    dev_addr: %d, ep_num: %d, ep_is_in: %d\n",
105                     chan->dev_addr, chan->ep_num, chan->ep_is_in);
106           dev_dbg(hsotg->dev, "    ep_type: %d\n", chan->ep_type);
107           dev_dbg(hsotg->dev, "    max_packet: %d\n", chan->max_packet);
108           dev_dbg(hsotg->dev, "    data_pid_start: %d\n", chan->data_pid_start);
109           dev_dbg(hsotg->dev, "    xfer_started: %d\n", chan->xfer_started);
110           dev_dbg(hsotg->dev, "    halt_status: %d\n", chan->halt_status);
111           dev_dbg(hsotg->dev, "    xfer_buf: %p\n", chan->xfer_buf);
112           dev_dbg(hsotg->dev, "    xfer_dma: %08lx\n",
113                     (unsigned long)chan->xfer_dma);
114           dev_dbg(hsotg->dev, "    xfer_len: %d\n", chan->xfer_len);
115           dev_dbg(hsotg->dev, "    qh: %p\n", chan->qh);
116           dev_dbg(hsotg->dev, "  NP inactive sched:\n");
117           list_for_each_entry(qh, &hsotg->non_periodic_sched_inactive,
118                                   qh_list_entry)
119                     dev_dbg(hsotg->dev, "    %p\n", qh);
120           dev_dbg(hsotg->dev, "  NP waiting sched:\n");
121           list_for_each_entry(qh, &hsotg->non_periodic_sched_waiting,
122                                   qh_list_entry)
123                     dev_dbg(hsotg->dev, "    %p\n", qh);
124           dev_dbg(hsotg->dev, "  NP active sched:\n");
125           list_for_each_entry(qh, &hsotg->non_periodic_sched_active,
126                                   qh_list_entry)
127                     dev_dbg(hsotg->dev, "    %p\n", qh);
128           dev_dbg(hsotg->dev, "  Channels:\n");
129           for (i = 0; i < num_channels; i++) {
130                     struct dwc2_host_chan *ch = hsotg->hc_ptr_array[i];
131 
132                     dev_dbg(hsotg->dev, "    %2d: %p\n", i, ch);
133           }
134 }
135 #endif /* VERBOSE_DEBUG */
136 
137 /*
138  * Processes all the URBs in a single list of QHs. Completes them with
139  * -ETIMEDOUT and frees the QTD.
140  *
141  * Must be called with interrupt disabled and spinlock held
142  */
dwc2_kill_urbs_in_qh_list(struct dwc2_hsotg * hsotg,struct list_head * qh_list)143 static void dwc2_kill_urbs_in_qh_list(struct dwc2_hsotg *hsotg,
144                                               struct list_head *qh_list)
145 {
146           struct dwc2_qh *qh, *qh_tmp;
147           struct dwc2_qtd *qtd, *qtd_tmp;
148 
149           list_for_each_entry_safe(qh, qh_tmp, qh_list, qh_list_entry) {
150                     list_for_each_entry_safe(qtd, qtd_tmp, &qh->qtd_list,
151                                                    qtd_list_entry) {
152                               dwc2_host_complete(hsotg, qtd, -ECONNRESET);
153                               dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh);
154                     }
155           }
156 }
157 
dwc2_qh_list_free(struct dwc2_hsotg * hsotg,struct list_head * qh_list)158 static void dwc2_qh_list_free(struct dwc2_hsotg *hsotg,
159                                     struct list_head *qh_list)
160 {
161           struct dwc2_qtd *qtd, *qtd_tmp;
162           struct dwc2_qh *qh, *qh_tmp;
163           unsigned long flags;
164 
165           if (!qh_list->next)
166                     /* The list hasn't been initialized yet */
167                     return;
168 
169           spin_lock_irqsave(&hsotg->lock, flags);
170 
171           /* Ensure there are no QTDs or URBs left */
172           dwc2_kill_urbs_in_qh_list(hsotg, qh_list);
173 
174           list_for_each_entry_safe(qh, qh_tmp, qh_list, qh_list_entry) {
175                     dwc2_hcd_qh_unlink(hsotg, qh);
176 
177                     /* Free each QTD in the QH's QTD list */
178                     list_for_each_entry_safe(qtd, qtd_tmp, &qh->qtd_list,
179                                                    qtd_list_entry)
180                               dwc2_hcd_qtd_unlink_and_free(hsotg, qtd, qh);
181 
182                     spin_unlock_irqrestore(&hsotg->lock, flags);
183                     dwc2_hcd_qh_free(hsotg, qh);
184                     spin_lock_irqsave(&hsotg->lock, flags);
185           }
186 
187           spin_unlock_irqrestore(&hsotg->lock, flags);
188 }
189 
190 /*
191  * Responds with an error status of -ETIMEDOUT to all URBs in the non-periodic
192  * and periodic schedules. The QTD associated with each URB is removed from
193  * the schedule and freed. This function may be called when a disconnect is
194  * detected or when the HCD is being stopped.
195  *
196  * Must be called with interrupt disabled and spinlock held
197  */
dwc2_kill_all_urbs(struct dwc2_hsotg * hsotg)198 static void dwc2_kill_all_urbs(struct dwc2_hsotg *hsotg)
199 {
200           dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->non_periodic_sched_inactive);
201           dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->non_periodic_sched_waiting);
202           dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->non_periodic_sched_active);
203           dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->periodic_sched_inactive);
204           dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->periodic_sched_ready);
205           dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->periodic_sched_assigned);
206           dwc2_kill_urbs_in_qh_list(hsotg, &hsotg->periodic_sched_queued);
207 }
208 
209 /**
210  * dwc2_hcd_start() - Starts the HCD when switching to Host mode
211  *
212  * @hsotg: Pointer to struct dwc2_hsotg
213  */
dwc2_hcd_start(struct dwc2_hsotg * hsotg)214 void dwc2_hcd_start(struct dwc2_hsotg *hsotg)
215 {
216           u32 hprt0;
217 
218           if (hsotg->op_state == OTG_STATE_B_HOST) {
219                     /*
220                      * Reset the port. During a HNP mode switch the reset
221                      * needs to occur within 1ms and have a duration of at
222                      * least 50ms.
223                      */
224                     hprt0 = dwc2_read_hprt0(hsotg);
225                     hprt0 |= HPRT0_RST;
226                     DWC2_WRITE_4(hsotg, HPRT0, hprt0);
227           }
228 
229           queue_delayed_work(hsotg->wq_otg, &hsotg->start_work,
230                                  msecs_to_jiffies(50));
231 }
232 
233 /* Must be called with interrupt disabled and spinlock held */
dwc2_hcd_cleanup_channels(struct dwc2_hsotg * hsotg)234 static void dwc2_hcd_cleanup_channels(struct dwc2_hsotg *hsotg)
235 {
236           int num_channels = hsotg->core_params->host_channels;
237           struct dwc2_host_chan *channel;
238           u32 hcchar;
239           int i;
240 
241           if (hsotg->core_params->dma_enable <= 0) {
242                     /* Flush out any channel requests in slave mode */
243                     for (i = 0; i < num_channels; i++) {
244                               channel = hsotg->hc_ptr_array[i];
245                               if (!list_empty(&channel->hc_list_entry))
246                                         continue;
247                               hcchar = DWC2_READ_4(hsotg, HCCHAR(i));
248                               if (hcchar & HCCHAR_CHENA) {
249                                         hcchar &= ~(HCCHAR_CHENA | HCCHAR_EPDIR);
250                                         hcchar |= HCCHAR_CHDIS;
251                                         DWC2_WRITE_4(hsotg, HCCHAR(i), hcchar);
252                               }
253                     }
254           }
255 
256           for (i = 0; i < num_channels; i++) {
257                     channel = hsotg->hc_ptr_array[i];
258                     if (!list_empty(&channel->hc_list_entry))
259                               continue;
260                     hcchar = DWC2_READ_4(hsotg, HCCHAR(i));
261                     if (hcchar & HCCHAR_CHENA) {
262                               /* Halt the channel */
263                               hcchar |= HCCHAR_CHDIS;
264                               DWC2_WRITE_4(hsotg, HCCHAR(i), hcchar);
265                     }
266 
267                     dwc2_hc_cleanup(hsotg, channel);
268                     list_add_tail(&channel->hc_list_entry, &hsotg->free_hc_list);
269                     /*
270                      * Added for Descriptor DMA to prevent channel double cleanup in
271                      * release_channel_ddma(), which is called from ep_disable when
272                      * device disconnects
273                      */
274                     channel->qh = NULL;
275           }
276           /* All channels have been freed, mark them available */
277           if (hsotg->core_params->uframe_sched > 0) {
278                     hsotg->available_host_channels =
279                               hsotg->core_params->host_channels;
280           } else {
281                     hsotg->non_periodic_channels = 0;
282                     hsotg->periodic_channels = 0;
283           }
284 }
285 
286 /**
287  * dwc2_hcd_connect() - Handles connect of the HCD
288  *
289  * @hsotg: Pointer to struct dwc2_hsotg
290  *
291  * Must be called with interrupt disabled and spinlock held
292  */
dwc2_hcd_connect(struct dwc2_hsotg * hsotg)293 void dwc2_hcd_connect(struct dwc2_hsotg *hsotg)
294 {
295           if (hsotg->lx_state != DWC2_L0)
296                     usb_hcd_resume_root_hub(hsotg->priv);
297 
298           hsotg->flags.b.port_connect_status_change = 1;
299           hsotg->flags.b.port_connect_status = 1;
300 }
301 
302 /**
303  * dwc2_hcd_disconnect() - Handles disconnect of the HCD
304  *
305  * @hsotg: Pointer to struct dwc2_hsotg
306  * @force: If true, we won't try to reconnect even if we see device connected.
307  *
308  * Must be called with interrupt disabled and spinlock held
309  */
dwc2_hcd_disconnect(struct dwc2_hsotg * hsotg,bool force)310 void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg, bool force)
311 {
312           u32 intr;
313           u32 hprt0;
314 
315           /* Set status flags for the hub driver */
316           hsotg->flags.b.port_connect_status_change = 1;
317           hsotg->flags.b.port_connect_status = 0;
318 
319           /*
320            * Shutdown any transfers in process by clearing the Tx FIFO Empty
321            * interrupt mask and status bits and disabling subsequent host
322            * channel interrupts.
323            */
324           intr = DWC2_READ_4(hsotg, GINTMSK);
325           intr &= ~(GINTSTS_NPTXFEMP | GINTSTS_PTXFEMP | GINTSTS_HCHINT);
326           DWC2_WRITE_4(hsotg, GINTMSK, intr);
327           intr = GINTSTS_NPTXFEMP | GINTSTS_PTXFEMP | GINTSTS_HCHINT;
328           DWC2_WRITE_4(hsotg, GINTSTS, intr);
329 
330           /*
331            * Turn off the vbus power only if the core has transitioned to device
332            * mode. If still in host mode, need to keep power on to detect a
333            * reconnection.
334            */
335           if (dwc2_is_device_mode(hsotg)) {
336                     if (hsotg->op_state != OTG_STATE_A_SUSPEND) {
337                               dev_dbg(hsotg->dev, "Disconnect: PortPower off\n");
338                               DWC2_WRITE_4(hsotg, HPRT0, 0);
339                     }
340 
341                     dwc2_disable_host_interrupts(hsotg);
342           }
343 
344           /* Respond with an error status to all URBs in the schedule */
345           dwc2_kill_all_urbs(hsotg);
346 
347           if (dwc2_is_host_mode(hsotg))
348                     /* Clean up any host channels that were in use */
349                     dwc2_hcd_cleanup_channels(hsotg);
350 
351           dwc2_host_disconnect(hsotg);
352 
353           dwc2_root_intr(hsotg->hsotg_sc);
354 
355           /*
356            * Add an extra check here to see if we're actually connected but
357            * we don't have a detection interrupt pending.  This can happen if:
358            *   1. hardware sees connect
359            *   2. hardware sees disconnect
360            *   3. hardware sees connect
361            *   4. dwc2_port_intr() - clears connect interrupt
362            *   5. dwc2_handle_common_intr() - calls here
363            *
364            * Without the extra check here we will end calling disconnect
365            * and won't get any future interrupts to handle the connect.
366            */
367           if (!force) {
368                     hprt0 = DWC2_READ_4(hsotg, HPRT0);
369                     if (!(hprt0 & HPRT0_CONNDET) && (hprt0 & HPRT0_CONNSTS))
370                               dwc2_hcd_connect(hsotg);
371           }
372 }
373 
374 /**
375  * dwc2_hcd_rem_wakeup() - Handles Remote Wakeup
376  *
377  * @hsotg: Pointer to struct dwc2_hsotg
378  */
dwc2_hcd_rem_wakeup(struct dwc2_hsotg * hsotg)379 static void dwc2_hcd_rem_wakeup(struct dwc2_hsotg *hsotg)
380 {
381           if (hsotg->bus_suspended) {
382                     hsotg->flags.b.port_suspend_change = 1;
383                     usb_hcd_resume_root_hub(hsotg->priv);
384           }
385 
386           if (hsotg->lx_state == DWC2_L1)
387                     hsotg->flags.b.port_l1_change = 1;
388 
389           dwc2_root_intr(hsotg->hsotg_sc);
390 }
391 
392 /**
393  * dwc2_hcd_stop() - Halts the DWC_otg host mode operations in a clean manner
394  *
395  * @hsotg: Pointer to struct dwc2_hsotg
396  *
397  * Must be called with interrupt disabled and spinlock held
398  */
dwc2_hcd_stop(struct dwc2_hsotg * hsotg)399 void dwc2_hcd_stop(struct dwc2_hsotg *hsotg)
400 {
401           dev_dbg(hsotg->dev, "DWC OTG HCD STOP\n");
402 
403           /*
404            * The root hub should be disconnected before this function is called.
405            * The disconnect will clear the QTD lists (via ..._hcd_urb_dequeue)
406            * and the QH lists (via ..._hcd_endpoint_disable).
407            */
408 
409           /* Turn off all host-specific interrupts */
410           dwc2_disable_host_interrupts(hsotg);
411 
412           /* Turn off the vbus power */
413           dev_dbg(hsotg->dev, "PortPower off\n");
414           DWC2_WRITE_4(hsotg, HPRT0, 0);
415 }
416 
417 /* Caller must hold driver lock */
dwc2_hcd_urb_enqueue(struct dwc2_hsotg * hsotg,struct dwc2_hcd_urb * urb,struct dwc2_qh * qh,struct dwc2_qtd * qtd)418 int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg,
419                                         struct dwc2_hcd_urb *urb, struct dwc2_qh *qh,
420                                         struct dwc2_qtd *qtd)
421 {
422           u32 intr_mask;
423           int retval;
424           int dev_speed;
425 
426           if (!hsotg->flags.b.port_connect_status) {
427                     /* No longer connected */
428                     dev_err(hsotg->dev, "Not connected\n");
429                     return -ENODEV;
430           }
431 
432           dev_speed = dwc2_host_get_speed(hsotg, urb->priv);
433 
434           /* Some configurations cannot support LS traffic on a FS root port */
435           if ((dev_speed == USB_SPEED_LOW) &&
436               (hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED) &&
437               (hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI)) {
438                     u32 hprt0 = DWC2_READ_4(hsotg, HPRT0);
439                     u32 prtspd = (hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
440 
441                     if (prtspd == HPRT0_SPD_FULL_SPEED) {
442                               dev_err(hsotg->dev,
443                                         "DWC OTG HCD URB Enqueue unsupported\n");
444                               return -ENODEV;
445                     }
446           }
447 
448           if (!qtd)
449                     return -EINVAL;
450 
451           memset(qtd, 0, sizeof(*qtd));
452 
453           dwc2_hcd_qtd_init(qtd, urb);
454           retval = dwc2_hcd_qtd_add(hsotg, qtd, qh);
455           if (retval) {
456                     dev_err(hsotg->dev,
457                               "DWC OTG HCD URB Enqueue failed adding QTD. Error status %d\n",
458                               retval);
459                     return retval;
460           }
461 
462           intr_mask = DWC2_READ_4(hsotg, GINTMSK);
463           if (!(intr_mask & GINTSTS_SOF)) {
464                     enum dwc2_transaction_type tr_type;
465 
466                     if (qtd->qh->ep_type == USB_ENDPOINT_XFER_BULK &&
467                         !(qtd->urb->flags & URB_GIVEBACK_ASAP))
468                               /*
469                                * Do not schedule SG transactions until qtd has
470                                * URB_GIVEBACK_ASAP set
471                                */
472                               return 0;
473 
474                     tr_type = dwc2_hcd_select_transactions(hsotg);
475                     if (tr_type != DWC2_TRANSACTION_NONE)
476                               dwc2_hcd_queue_transactions(hsotg, tr_type);
477           }
478 
479           return 0;
480 }
481 
482 /* Must be called with interrupt disabled and spinlock held */
483 int
dwc2_hcd_urb_dequeue(struct dwc2_hsotg * hsotg,struct dwc2_hcd_urb * urb)484 dwc2_hcd_urb_dequeue(struct dwc2_hsotg *hsotg,
485                                         struct dwc2_hcd_urb *urb)
486 {
487           struct dwc2_qh *qh;
488           struct dwc2_qtd *urb_qtd;
489 
490           urb_qtd = urb->qtd;
491           if (!urb_qtd) {
492                     dev_dbg(hsotg->dev, "## Urb QTD is NULL ##\n");
493                     return -EINVAL;
494           }
495 
496           qh = urb_qtd->qh;
497           if (!qh) {
498                     dev_dbg(hsotg->dev, "## Urb QTD QH is NULL ##\n");
499                     return -EINVAL;
500           }
501 
502           urb->priv = NULL;
503 
504           if (urb_qtd->in_process && qh->channel) {
505 #ifdef VERBOSE_DEBUG
506                     dwc2_dump_channel_info(hsotg, qh->channel);
507 #endif
508                     /* The QTD is in process (it has been assigned to a channel) */
509                     if (hsotg->flags.b.port_connect_status)
510                               /*
511                                * If still connected (i.e. in host mode), halt the
512                                * channel so it can be used for other transfers. If
513                                * no longer connected, the host registers can't be
514                                * written to halt the channel since the core is in
515                                * device mode.
516                                */
517                               dwc2_hc_halt(hsotg, qh->channel,
518                                              DWC2_HC_XFER_URB_DEQUEUE);
519           }
520 
521           /*
522            * Free the QTD and clean up the associated QH. Leave the QH in the
523            * schedule if it has any remaining QTDs.
524            */
525           if (hsotg->core_params->dma_desc_enable <= 0) {
526                     u8 in_process = urb_qtd->in_process;
527 
528                     dwc2_hcd_qtd_unlink_and_free(hsotg, urb_qtd, qh);
529                     if (in_process) {
530                               dwc2_hcd_qh_deactivate(hsotg, qh, 0);
531                               qh->channel = NULL;
532                     } else if (list_empty(&qh->qtd_list)) {
533                               dwc2_hcd_qh_unlink(hsotg, qh);
534                     }
535           } else {
536                     dwc2_hcd_qtd_unlink_and_free(hsotg, urb_qtd, qh);
537           }
538 
539           return 0;
540 }
541 
542 
543 /*
544  * Initializes dynamic portions of the DWC_otg HCD state
545  *
546  * Must be called with interrupt disabled and spinlock held
547  */
548 void
dwc2_hcd_reinit(struct dwc2_hsotg * hsotg)549 dwc2_hcd_reinit(struct dwc2_hsotg *hsotg)
550 {
551           struct dwc2_host_chan *chan, *chan_tmp;
552           int num_channels;
553           int i;
554 
555           hsotg->flags.d32 = 0;
556           hsotg->non_periodic_qh_ptr = &hsotg->non_periodic_sched_active;
557 
558           if (hsotg->core_params->uframe_sched > 0) {
559                     hsotg->available_host_channels =
560                               hsotg->core_params->host_channels;
561           } else {
562                     hsotg->non_periodic_channels = 0;
563                     hsotg->periodic_channels = 0;
564           }
565 
566           /*
567            * Put all channels in the free channel list and clean up channel
568            * states
569            */
570           list_for_each_entry_safe(chan, chan_tmp, &hsotg->free_hc_list,
571                                          hc_list_entry)
572                     list_del_init(&chan->hc_list_entry);
573 
574           num_channels = hsotg->core_params->host_channels;
575           for (i = 0; i < num_channels; i++) {
576                     chan = hsotg->hc_ptr_array[i];
577                     list_add_tail(&chan->hc_list_entry, &hsotg->free_hc_list);
578                     dwc2_hc_cleanup(hsotg, chan);
579           }
580 
581           /* Initialize the DWC core for host mode operation */
582           dwc2_core_host_init(hsotg);
583 }
584 
dwc2_hc_init_split(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan,struct dwc2_qtd * qtd,struct dwc2_hcd_urb * urb)585 static void dwc2_hc_init_split(struct dwc2_hsotg *hsotg,
586                                      struct dwc2_host_chan *chan,
587                                      struct dwc2_qtd *qtd, struct dwc2_hcd_urb *urb)
588 {
589           int hub_addr, hub_port;
590 
591           chan->do_split = 1;
592           chan->xact_pos = qtd->isoc_split_pos;
593           chan->complete_split = qtd->complete_split;
594           dwc2_host_hub_info(hsotg, urb->priv, &hub_addr, &hub_port);
595           chan->hub_addr = (u8)hub_addr;
596           chan->hub_port = (u8)hub_port;
597 }
598 
dwc2_hc_init_xfer_data(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan,struct dwc2_qtd * qtd,struct dwc2_hcd_urb * urb)599 static void *dwc2_hc_init_xfer_data(struct dwc2_hsotg *hsotg,
600                                      struct dwc2_host_chan *chan,
601                                      struct dwc2_qtd *qtd, struct dwc2_hcd_urb *urb)
602 {
603           if (hsotg->core_params->dma_enable > 0) {
604                     chan->xfer_dma = DMAADDR(urb->usbdma, urb->actual_length);
605 
606                     /* For non-dword aligned case */
607                     if (hsotg->core_params->dma_desc_enable <= 0 &&
608                         (chan->xfer_dma & 0x3))
609                               return (u8 *)urb->buf + urb->actual_length;
610           } else {
611                     chan->xfer_buf = (u8 *)urb->buf + urb->actual_length;
612           }
613 
614           return NULL;
615 }
616 
dwc2_hc_init_xfer(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan,struct dwc2_qtd * qtd,struct dwc2_hcd_urb * urb)617 static void *dwc2_hc_init_xfer(struct dwc2_hsotg *hsotg,
618                                      struct dwc2_host_chan *chan,
619                                      struct dwc2_qtd *qtd, struct dwc2_hcd_urb *urb)
620 {
621           struct dwc2_hcd_iso_packet_desc *frame_desc;
622           void *bufptr = NULL;
623 
624           switch (dwc2_hcd_get_pipe_type(&urb->pipe_info)) {
625           case USB_ENDPOINT_XFER_CONTROL:
626                     chan->ep_type = USB_ENDPOINT_XFER_CONTROL;
627 
628                     switch (qtd->control_phase) {
629                     case DWC2_CONTROL_SETUP:
630                               dev_vdbg(hsotg->dev, "  Control setup transaction\n");
631                               chan->do_ping = 0;
632                               chan->ep_is_in = 0;
633                               chan->data_pid_start = DWC2_HC_PID_SETUP;
634                               if (hsotg->core_params->dma_enable > 0)
635                                         chan->xfer_dma = urb->setup_dma;
636                               else
637                                         chan->xfer_buf = urb->setup_packet;
638                               chan->xfer_len = 8;
639                               break;
640 
641                     case DWC2_CONTROL_DATA:
642                               dev_vdbg(hsotg->dev, "  Control data transaction\n");
643                               chan->data_pid_start = qtd->data_toggle;
644                               bufptr = dwc2_hc_init_xfer_data(hsotg, chan, qtd, urb);
645                               break;
646 
647                     case DWC2_CONTROL_STATUS:
648                               /*
649                                * Direction is opposite of data direction or IN if no
650                                * data
651                                */
652                               dev_vdbg(hsotg->dev, "  Control status transaction\n");
653                               if (urb->length == 0)
654                                         chan->ep_is_in = 1;
655                               else
656                                         chan->ep_is_in =
657                                                   dwc2_hcd_is_pipe_out(&urb->pipe_info);
658                               if (chan->ep_is_in)
659                                         chan->do_ping = 0;
660                               chan->data_pid_start = DWC2_HC_PID_DATA1;
661                               chan->xfer_len = 0;
662                               if (hsotg->core_params->dma_enable > 0)
663                                         chan->xfer_dma = hsotg->status_buf_dma;
664                               else
665                                         chan->xfer_buf = hsotg->status_buf;
666                               break;
667                     }
668                     break;
669 
670           case USB_ENDPOINT_XFER_BULK:
671                     chan->ep_type = USB_ENDPOINT_XFER_BULK;
672                     bufptr = dwc2_hc_init_xfer_data(hsotg, chan, qtd, urb);
673                     break;
674 
675           case USB_ENDPOINT_XFER_INT:
676                     chan->ep_type = USB_ENDPOINT_XFER_INT;
677                     bufptr = dwc2_hc_init_xfer_data(hsotg, chan, qtd, urb);
678                     break;
679 
680           case USB_ENDPOINT_XFER_ISOC:
681                     chan->ep_type = USB_ENDPOINT_XFER_ISOC;
682                     if (hsotg->core_params->dma_desc_enable > 0)
683                               break;
684 
685                     frame_desc = &urb->iso_descs[qtd->isoc_frame_index];
686                     frame_desc->status = 0;
687 
688                     if (hsotg->core_params->dma_enable > 0) {
689                               chan->xfer_dma = urb->dma;
690                               chan->xfer_dma += frame_desc->offset +
691                                                   qtd->isoc_split_offset;
692                     } else {
693                               chan->xfer_buf = urb->buf;
694                               chan->xfer_buf += frame_desc->offset +
695                                                   qtd->isoc_split_offset;
696                     }
697 
698                     chan->xfer_len = frame_desc->length - qtd->isoc_split_offset;
699 
700                     /* For non-dword aligned buffers */
701                     if (hsotg->core_params->dma_enable > 0 &&
702                         (chan->xfer_dma & 0x3))
703                               bufptr = (u8 *)urb->buf + frame_desc->offset +
704                                                   qtd->isoc_split_offset;
705 
706                     if (chan->xact_pos == DWC2_HCSPLT_XACTPOS_ALL) {
707                               if (chan->xfer_len <= 188)
708                                         chan->xact_pos = DWC2_HCSPLT_XACTPOS_ALL;
709                               else
710                                         chan->xact_pos = DWC2_HCSPLT_XACTPOS_BEGIN;
711                     }
712                     break;
713           }
714 
715           return bufptr;
716 }
717 
dwc2_hc_setup_align_buf(struct dwc2_hsotg * hsotg,struct dwc2_qh * qh,struct dwc2_host_chan * chan,struct dwc2_hcd_urb * urb,void * bufptr)718 static int dwc2_hc_setup_align_buf(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh,
719                                            struct dwc2_host_chan *chan,
720                                            struct dwc2_hcd_urb *urb, void *bufptr)
721 {
722           u32 buf_size;
723 
724           if (!qh->dw_align_buf) {
725                     int err;
726 
727                     if (chan->ep_type != USB_ENDPOINT_XFER_ISOC)
728                               buf_size = hsotg->core_params->max_transfer_size;
729                     else
730                               /* 3072 = 3 max-size Isoc packets */
731                               buf_size = 3072;
732 
733                     qh->dw_align_buf = NULL;
734                     qh->dw_align_buf_dma = 0;
735                     err = usb_allocmem(hsotg->hsotg_sc->sc_bus.ub_dmatag,
736                         buf_size, 0, USBMALLOC_COHERENT, &qh->dw_align_buf_usbdma);
737                     if (!err) {
738                               usb_dma_t *ud = &qh->dw_align_buf_usbdma;
739 
740                               qh->dw_align_buf = KERNADDR(ud, 0);
741                               qh->dw_align_buf_dma = DMAADDR(ud, 0);
742                     }
743                     if (!qh->dw_align_buf)
744                               return -ENOMEM;
745                     qh->dw_align_buf_size = buf_size;
746           }
747 
748           if (chan->xfer_len) {
749                     dev_vdbg(hsotg->dev, "%s(): non-aligned buffer\n", __func__);
750                     void *usb_urb = urb->priv;
751 
752                     if (usb_urb) {
753                               if (!chan->ep_is_in) {
754                                         memcpy(qh->dw_align_buf, bufptr,
755                                                chan->xfer_len);
756                               }
757                     } else {
758                               dev_warn(hsotg->dev, "no URB in dwc2_urb\n");
759                     }
760           }
761 
762           usb_syncmem(&qh->dw_align_buf_usbdma, 0, qh->dw_align_buf_size,
763               chan->ep_is_in ?  BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE);
764 
765           chan->align_buf = qh->dw_align_buf_dma;
766           return 0;
767 }
768 
769 /**
770  * dwc2_assign_and_init_hc() - Assigns transactions from a QTD to a free host
771  * channel and initializes the host channel to perform the transactions. The
772  * host channel is removed from the free list.
773  *
774  * @hsotg: The HCD state structure
775  * @qh:    Transactions from the first QTD for this QH are selected and assigned
776  *         to a free host channel
777  */
dwc2_assign_and_init_hc(struct dwc2_hsotg * hsotg,struct dwc2_qh * qh)778 static int dwc2_assign_and_init_hc(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)
779 {
780           struct dwc2_host_chan *chan;
781           struct dwc2_hcd_urb *urb;
782           struct dwc2_qtd *qtd;
783           void *bufptr = NULL;
784 
785           if (dbg_qh(qh))
786                     dev_vdbg(hsotg->dev, "%s(%p,%p)\n", __func__, hsotg, qh);
787 
788           if (list_empty(&qh->qtd_list)) {
789                     dev_dbg(hsotg->dev, "No QTDs in QH list\n");
790                     return -ENOMEM;
791           }
792 
793           if (list_empty(&hsotg->free_hc_list)) {
794                     dev_dbg(hsotg->dev, "No free channel to assign\n");
795                     return -ENOMEM;
796           }
797 
798           chan = list_first_entry(&hsotg->free_hc_list, struct dwc2_host_chan,
799                                         hc_list_entry);
800 
801           /* Remove host channel from free list */
802           list_del_init(&chan->hc_list_entry);
803 
804           qtd = list_first_entry(&qh->qtd_list, struct dwc2_qtd, qtd_list_entry);
805           urb = qtd->urb;
806           qh->channel = chan;
807           qtd->in_process = 1;
808 
809           /*
810            * Use usb_pipedevice to determine device address. This address is
811            * 0 before the SET_ADDRESS command and the correct address afterward.
812            */
813           chan->dev_addr = dwc2_hcd_get_dev_addr(&urb->pipe_info);
814           chan->ep_num = dwc2_hcd_get_ep_num(&urb->pipe_info);
815           chan->speed = qh->dev_speed;
816           chan->max_packet = dwc2_max_packet(qh->maxp);
817 
818           chan->xfer_started = 0;
819           chan->halt_status = DWC2_HC_XFER_NO_HALT_STATUS;
820           chan->error_state = (qtd->error_count > 0);
821           chan->halt_on_queue = 0;
822           chan->halt_pending = 0;
823           chan->requests = 0;
824 
825           /*
826            * The following values may be modified in the transfer type section
827            * below. The xfer_len value may be reduced when the transfer is
828            * started to accommodate the max widths of the XferSize and PktCnt
829            * fields in the HCTSIZn register.
830            */
831 
832           chan->ep_is_in = (dwc2_hcd_is_pipe_in(&urb->pipe_info) != 0);
833           if (chan->ep_is_in)
834                     chan->do_ping = 0;
835           else
836                     chan->do_ping = qh->ping_state;
837 
838           chan->data_pid_start = qh->data_toggle;
839           chan->multi_count = 1;
840 
841           if (urb->actual_length > urb->length &&
842                     !dwc2_hcd_is_pipe_in(&urb->pipe_info))
843                     urb->actual_length = urb->length;
844 
845           chan->xfer_len = urb->length - urb->actual_length;
846           chan->xfer_count = 0;
847 
848           /* Set the split attributes if required */
849           if (qh->do_split)
850                     dwc2_hc_init_split(hsotg, chan, qtd, urb);
851           else
852                     chan->do_split = 0;
853 
854           /* Set the transfer attributes */
855           bufptr = dwc2_hc_init_xfer(hsotg, chan, qtd, urb);
856 
857           /* Non DWORD-aligned buffer case */
858           if (bufptr) {
859                     dev_vdbg(hsotg->dev, "Non-aligned buffer\n");
860                     if (dwc2_hc_setup_align_buf(hsotg, qh, chan, urb, bufptr)) {
861                               dev_err(hsotg->dev,
862                                         "%s: Failed to allocate memory to handle non-dword aligned buffer\n",
863                                         __func__);
864                               /* Add channel back to free list */
865                               chan->align_buf = 0;
866                               chan->multi_count = 0;
867                               list_add_tail(&chan->hc_list_entry,
868                                               &hsotg->free_hc_list);
869                               qtd->in_process = 0;
870                               qh->channel = NULL;
871                               return -ENOMEM;
872                     }
873           } else {
874                     chan->align_buf = 0;
875           }
876 
877           if (chan->ep_type == USB_ENDPOINT_XFER_INT ||
878               chan->ep_type == USB_ENDPOINT_XFER_ISOC)
879                     /*
880                      * This value may be modified when the transfer is started
881                      * to reflect the actual transfer length
882                      */
883                     chan->multi_count = dwc2_hb_mult(qh->maxp);
884 
885           if (hsotg->core_params->dma_desc_enable > 0) {
886                     chan->desc_list_usbdma = qh->desc_list_usbdma;
887                     chan->desc_list_addr = qh->desc_list_dma;
888                     chan->desc_list_sz = qh->desc_list_sz;
889           }
890 
891           dwc2_hc_init(hsotg, chan);
892           chan->qh = qh;
893 
894           return 0;
895 }
896 
897 /**
898  * dwc2_hcd_select_transactions() - Selects transactions from the HCD transfer
899  * schedule and assigns them to available host channels. Called from the HCD
900  * interrupt handler functions.
901  *
902  * @hsotg: The HCD state structure
903  *
904  * Return: The types of new transactions that were assigned to host channels
905  */
dwc2_hcd_select_transactions(struct dwc2_hsotg * hsotg)906 enum dwc2_transaction_type dwc2_hcd_select_transactions(
907                     struct dwc2_hsotg *hsotg)
908 {
909           enum dwc2_transaction_type ret_val = DWC2_TRANSACTION_NONE;
910           struct list_head *qh_ptr;
911           struct dwc2_qh *qh;
912           int num_channels;
913 
914 #ifdef DWC2_DEBUG_SOF
915           dev_vdbg(hsotg->dev, "  Select Transactions\n");
916 #endif
917 
918           /* Process entries in the periodic ready list */
919           qh_ptr = hsotg->periodic_sched_ready.next;
920           while (qh_ptr != &hsotg->periodic_sched_ready) {
921                     if (list_empty(&hsotg->free_hc_list))
922                               break;
923                     if (hsotg->core_params->uframe_sched > 0) {
924                               if (hsotg->available_host_channels <= 1)
925                                         break;
926                               hsotg->available_host_channels--;
927                     }
928                     qh = list_entry(qh_ptr, struct dwc2_qh, qh_list_entry);
929                     if (dwc2_assign_and_init_hc(hsotg, qh))
930                               break;
931 
932                     /*
933                      * Move the QH from the periodic ready schedule to the
934                      * periodic assigned schedule
935                      */
936                     qh_ptr = qh_ptr->next;
937                     list_move(&qh->qh_list_entry, &hsotg->periodic_sched_assigned);
938                     ret_val = DWC2_TRANSACTION_PERIODIC;
939           }
940 
941           /*
942            * Process entries in the inactive portion of the non-periodic
943            * schedule. Some free host channels may not be used if they are
944            * reserved for periodic transfers.
945            */
946           num_channels = hsotg->core_params->host_channels;
947           qh_ptr = hsotg->non_periodic_sched_inactive.next;
948           while (qh_ptr != &hsotg->non_periodic_sched_inactive) {
949                     if (hsotg->core_params->uframe_sched <= 0 &&
950                         hsotg->non_periodic_channels >= num_channels -
951                                                             hsotg->periodic_channels)
952                               break;
953                     if (list_empty(&hsotg->free_hc_list))
954                               break;
955                     qh = list_entry(qh_ptr, struct dwc2_qh, qh_list_entry);
956 
957                     /*
958                      * Check to see if this is a NAK'd retransmit, in which case
959                      * ignore for retransmission. We hold off on bulk/control
960                      * retransmissions to reduce NAK interrupt overhead for
961                      * cheeky devices that just hold off using NAKs.
962                      */
963                     if (qh->nak_frame != 0xffff &&
964                         dwc2_full_frame_num(qh->nak_frame) ==
965                         dwc2_full_frame_num(dwc2_hcd_get_frame_number(hsotg))) {
966                               qh_ptr = qh_ptr->next;
967                               continue;
968                     } else {
969                               qh->nak_frame = 0xffff;
970                     }
971 
972                     if (hsotg->core_params->uframe_sched > 0) {
973                               if (hsotg->available_host_channels < 1)
974                                         break;
975                               hsotg->available_host_channels--;
976                     }
977 
978                     if (dwc2_assign_and_init_hc(hsotg, qh))
979                               break;
980 
981                     /*
982                      * Move the QH from the non-periodic inactive schedule to the
983                      * non-periodic active schedule
984                      */
985                     qh_ptr = qh_ptr->next;
986                     list_move(&qh->qh_list_entry,
987                                 &hsotg->non_periodic_sched_active);
988 
989                     if (ret_val == DWC2_TRANSACTION_NONE)
990                               ret_val = DWC2_TRANSACTION_NON_PERIODIC;
991                     else
992                               ret_val = DWC2_TRANSACTION_ALL;
993 
994                     if (hsotg->core_params->uframe_sched <= 0)
995                               hsotg->non_periodic_channels++;
996           }
997 
998           return ret_val;
999 }
1000 
1001 /**
1002  * dwc2_queue_transaction() - Attempts to queue a single transaction request for
1003  * a host channel associated with either a periodic or non-periodic transfer
1004  *
1005  * @hsotg: The HCD state structure
1006  * @chan:  Host channel descriptor associated with either a periodic or
1007  *         non-periodic transfer
1008  * @fifo_dwords_avail: Number of DWORDs available in the periodic Tx FIFO
1009  *                     for periodic transfers or the non-periodic Tx FIFO
1010  *                     for non-periodic transfers
1011  *
1012  * Return: 1 if a request is queued and more requests may be needed to
1013  * complete the transfer, 0 if no more requests are required for this
1014  * transfer, -1 if there is insufficient space in the Tx FIFO
1015  *
1016  * This function assumes that there is space available in the appropriate
1017  * request queue. For an OUT transfer or SETUP transaction in Slave mode,
1018  * it checks whether space is available in the appropriate Tx FIFO.
1019  *
1020  * Must be called with interrupt disabled and spinlock held
1021  */
dwc2_queue_transaction(struct dwc2_hsotg * hsotg,struct dwc2_host_chan * chan,u16 fifo_dwords_avail)1022 static int dwc2_queue_transaction(struct dwc2_hsotg *hsotg,
1023                                           struct dwc2_host_chan *chan,
1024                                           u16 fifo_dwords_avail)
1025 {
1026           int retval = 0;
1027 
1028           if (hsotg->core_params->dma_enable > 0) {
1029                     if (hsotg->core_params->dma_desc_enable > 0) {
1030                               if (!chan->xfer_started ||
1031                                   chan->ep_type == USB_ENDPOINT_XFER_ISOC) {
1032                                         dwc2_hcd_start_xfer_ddma(hsotg, chan->qh);
1033                                         chan->qh->ping_state = 0;
1034                               }
1035                     } else if (!chan->xfer_started) {
1036                               dwc2_hc_start_transfer(hsotg, chan);
1037                               chan->qh->ping_state = 0;
1038                     }
1039           } else if (chan->halt_pending) {
1040                     /* Don't queue a request if the channel has been halted */
1041           } else if (chan->halt_on_queue) {
1042                     dwc2_hc_halt(hsotg, chan, chan->halt_status);
1043           } else if (chan->do_ping) {
1044                     if (!chan->xfer_started)
1045                               dwc2_hc_start_transfer(hsotg, chan);
1046           } else if (!chan->ep_is_in ||
1047                        chan->data_pid_start == DWC2_HC_PID_SETUP) {
1048                     if ((fifo_dwords_avail * 4) >= chan->max_packet) {
1049                               if (!chan->xfer_started) {
1050                                         dwc2_hc_start_transfer(hsotg, chan);
1051                                         retval = 1;
1052                               } else {
1053                                         retval = dwc2_hc_continue_transfer(hsotg, chan);
1054                               }
1055                     } else {
1056                               retval = -1;
1057                     }
1058           } else {
1059                     if (!chan->xfer_started) {
1060                               dwc2_hc_start_transfer(hsotg, chan);
1061                               retval = 1;
1062                     } else {
1063                               retval = dwc2_hc_continue_transfer(hsotg, chan);
1064                     }
1065           }
1066 
1067           return retval;
1068 }
1069 
1070 /*
1071  * Processes periodic channels for the next frame and queues transactions for
1072  * these channels to the DWC_otg controller. After queueing transactions, the
1073  * Periodic Tx FIFO Empty interrupt is enabled if there are more transactions
1074  * to queue as Periodic Tx FIFO or request queue space becomes available.
1075  * Otherwise, the Periodic Tx FIFO Empty interrupt is disabled.
1076  *
1077  * Must be called with interrupt disabled and spinlock held
1078  */
dwc2_process_periodic_channels(struct dwc2_hsotg * hsotg)1079 static void dwc2_process_periodic_channels(struct dwc2_hsotg *hsotg)
1080 {
1081           struct list_head *qh_ptr;
1082           struct dwc2_qh *qh;
1083           u32 tx_status;
1084           u32 fspcavail;
1085           u32 gintmsk;
1086           int status;
1087           int no_queue_space = 0;
1088           int no_fifo_space = 0;
1089           u32 qspcavail;
1090 
1091           if (dbg_perio())
1092                     dev_vdbg(hsotg->dev, "Queue periodic transactions\n");
1093 
1094           tx_status = DWC2_READ_4(hsotg, HPTXSTS);
1095           qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
1096                         TXSTS_QSPCAVAIL_SHIFT;
1097           fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
1098                         TXSTS_FSPCAVAIL_SHIFT;
1099 
1100           if (dbg_perio()) {
1101                     dev_vdbg(hsotg->dev, "  P Tx Req Queue Space Avail (before queue): %d\n",
1102                                qspcavail);
1103                     dev_vdbg(hsotg->dev, "  P Tx FIFO Space Avail (before queue): %d\n",
1104                                fspcavail);
1105           }
1106 
1107           qh_ptr = hsotg->periodic_sched_assigned.next;
1108           while (qh_ptr != &hsotg->periodic_sched_assigned) {
1109                     tx_status = DWC2_READ_4(hsotg, HPTXSTS);
1110                     qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
1111                                   TXSTS_QSPCAVAIL_SHIFT;
1112                     if (qspcavail == 0) {
1113                               no_queue_space = 1;
1114                               break;
1115                     }
1116 
1117                     qh = list_entry(qh_ptr, struct dwc2_qh, qh_list_entry);
1118                     if (!qh->channel) {
1119                               qh_ptr = qh_ptr->next;
1120                               continue;
1121                     }
1122 
1123                     /* Make sure EP's TT buffer is clean before queueing qtds */
1124                     if (qh->tt_buffer_dirty) {
1125                               qh_ptr = qh_ptr->next;
1126                               continue;
1127                     }
1128 
1129                     /*
1130                      * Set a flag if we're queuing high-bandwidth in slave mode.
1131                      * The flag prevents any halts to get into the request queue in
1132                      * the middle of multiple high-bandwidth packets getting queued.
1133                      */
1134                     if (hsotg->core_params->dma_enable <= 0 &&
1135                                         qh->channel->multi_count > 1)
1136                               hsotg->queuing_high_bandwidth = 1;
1137 
1138                     fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
1139                                   TXSTS_FSPCAVAIL_SHIFT;
1140                     status = dwc2_queue_transaction(hsotg, qh->channel, fspcavail);
1141                     if (status < 0) {
1142                               no_fifo_space = 1;
1143                               break;
1144                     }
1145 
1146                     /*
1147                      * In Slave mode, stay on the current transfer until there is
1148                      * nothing more to do or the high-bandwidth request count is
1149                      * reached. In DMA mode, only need to queue one request. The
1150                      * controller automatically handles multiple packets for
1151                      * high-bandwidth transfers.
1152                      */
1153                     if (hsotg->core_params->dma_enable > 0 || status == 0 ||
1154                         qh->channel->requests == qh->channel->multi_count) {
1155                               qh_ptr = qh_ptr->next;
1156                               /*
1157                                * Move the QH from the periodic assigned schedule to
1158                                * the periodic queued schedule
1159                                */
1160                               list_move(&qh->qh_list_entry,
1161                                           &hsotg->periodic_sched_queued);
1162 
1163                               /* done queuing high bandwidth */
1164                               hsotg->queuing_high_bandwidth = 0;
1165                     }
1166           }
1167 
1168           if (hsotg->core_params->dma_enable <= 0) {
1169                     tx_status = DWC2_READ_4(hsotg, HPTXSTS);
1170                     qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
1171                                   TXSTS_QSPCAVAIL_SHIFT;
1172                     fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
1173                                   TXSTS_FSPCAVAIL_SHIFT;
1174                     if (dbg_perio()) {
1175                               dev_vdbg(hsotg->dev,
1176                                          "  P Tx Req Queue Space Avail (after queue): %d\n",
1177                                          qspcavail);
1178                               dev_vdbg(hsotg->dev,
1179                                          "  P Tx FIFO Space Avail (after queue): %d\n",
1180                                          fspcavail);
1181                     }
1182 
1183                     if (!list_empty(&hsotg->periodic_sched_assigned) ||
1184                         no_queue_space || no_fifo_space) {
1185                               /*
1186                                * May need to queue more transactions as the request
1187                                * queue or Tx FIFO empties. Enable the periodic Tx
1188                                * FIFO empty interrupt. (Always use the half-empty
1189                                * level to ensure that new requests are loaded as
1190                                * soon as possible.)
1191                                */
1192                               gintmsk = DWC2_READ_4(hsotg, GINTMSK);
1193                               gintmsk |= GINTSTS_PTXFEMP;
1194                               DWC2_WRITE_4(hsotg, GINTMSK, gintmsk);
1195                     } else {
1196                               /*
1197                                * Disable the Tx FIFO empty interrupt since there are
1198                                * no more transactions that need to be queued right
1199                                * now. This function is called from interrupt
1200                                * handlers to queue more transactions as transfer
1201                                * states change.
1202                                */
1203                               gintmsk = DWC2_READ_4(hsotg, GINTMSK);
1204                               gintmsk &= ~GINTSTS_PTXFEMP;
1205                               DWC2_WRITE_4(hsotg, GINTMSK, gintmsk);
1206                     }
1207           }
1208 }
1209 
1210 /*
1211  * Processes active non-periodic channels and queues transactions for these
1212  * channels to the DWC_otg controller. After queueing transactions, the NP Tx
1213  * FIFO Empty interrupt is enabled if there are more transactions to queue as
1214  * NP Tx FIFO or request queue space becomes available. Otherwise, the NP Tx
1215  * FIFO Empty interrupt is disabled.
1216  *
1217  * Must be called with interrupt disabled and spinlock held
1218  */
dwc2_process_non_periodic_channels(struct dwc2_hsotg * hsotg)1219 static void dwc2_process_non_periodic_channels(struct dwc2_hsotg *hsotg)
1220 {
1221           struct list_head *orig_qh_ptr;
1222           struct dwc2_qh *qh;
1223           u32 tx_status;
1224           u32 qspcavail;
1225           u32 fspcavail;
1226           u32 gintmsk;
1227           int status;
1228           int no_queue_space = 0;
1229           int no_fifo_space = 0;
1230           int more_to_do = 0;
1231 
1232           dev_vdbg(hsotg->dev, "Queue non-periodic transactions\n");
1233 
1234           tx_status = DWC2_READ_4(hsotg, GNPTXSTS);
1235           qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
1236                         TXSTS_QSPCAVAIL_SHIFT;
1237           fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
1238                         TXSTS_FSPCAVAIL_SHIFT;
1239           dev_vdbg(hsotg->dev, "  NP Tx Req Queue Space Avail (before queue): %d\n",
1240                      qspcavail);
1241           dev_vdbg(hsotg->dev, "  NP Tx FIFO Space Avail (before queue): %d\n",
1242                      fspcavail);
1243 
1244           /*
1245            * Keep track of the starting point. Skip over the start-of-list
1246            * entry.
1247            */
1248           if (hsotg->non_periodic_qh_ptr == &hsotg->non_periodic_sched_active)
1249                     hsotg->non_periodic_qh_ptr = hsotg->non_periodic_qh_ptr->next;
1250           orig_qh_ptr = hsotg->non_periodic_qh_ptr;
1251 
1252           /*
1253            * Process once through the active list or until no more space is
1254            * available in the request queue or the Tx FIFO
1255            */
1256           do {
1257                     tx_status = DWC2_READ_4(hsotg, GNPTXSTS);
1258                     qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
1259                                   TXSTS_QSPCAVAIL_SHIFT;
1260                     if (hsotg->core_params->dma_enable <= 0 && qspcavail == 0) {
1261                               no_queue_space = 1;
1262                               break;
1263                     }
1264 
1265                     qh = list_entry(hsotg->non_periodic_qh_ptr, struct dwc2_qh,
1266                                         qh_list_entry);
1267                     if (!qh->channel)
1268                               goto next;
1269 
1270                     /* Make sure EP's TT buffer is clean before queueing qtds */
1271                     if (qh->tt_buffer_dirty)
1272                               goto next;
1273 
1274                     fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
1275                                   TXSTS_FSPCAVAIL_SHIFT;
1276                     status = dwc2_queue_transaction(hsotg, qh->channel, fspcavail);
1277 
1278                     if (status > 0) {
1279                               more_to_do = 1;
1280                     } else if (status < 0) {
1281                               no_fifo_space = 1;
1282                               break;
1283                     }
1284 next:
1285                     /* Advance to next QH, skipping start-of-list entry */
1286                     hsotg->non_periodic_qh_ptr = hsotg->non_periodic_qh_ptr->next;
1287                     if (hsotg->non_periodic_qh_ptr ==
1288                                         &hsotg->non_periodic_sched_active)
1289                               hsotg->non_periodic_qh_ptr =
1290                                                   hsotg->non_periodic_qh_ptr->next;
1291           } while (hsotg->non_periodic_qh_ptr != orig_qh_ptr);
1292 
1293           if (hsotg->core_params->dma_enable <= 0) {
1294                     tx_status = DWC2_READ_4(hsotg, GNPTXSTS);
1295                     qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
1296                                   TXSTS_QSPCAVAIL_SHIFT;
1297                     fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
1298                                   TXSTS_FSPCAVAIL_SHIFT;
1299                     dev_vdbg(hsotg->dev,
1300                                "  NP Tx Req Queue Space Avail (after queue): %d\n",
1301                                qspcavail);
1302                     dev_vdbg(hsotg->dev,
1303                                "  NP Tx FIFO Space Avail (after queue): %d\n",
1304                                fspcavail);
1305 
1306                     if (more_to_do || no_queue_space || no_fifo_space) {
1307                               /*
1308                                * May need to queue more transactions as the request
1309                                * queue or Tx FIFO empties. Enable the non-periodic
1310                                * Tx FIFO empty interrupt. (Always use the half-empty
1311                                * level to ensure that new requests are loaded as
1312                                * soon as possible.)
1313                                */
1314                               gintmsk = DWC2_READ_4(hsotg, GINTMSK);
1315                               gintmsk |= GINTSTS_NPTXFEMP;
1316                               DWC2_WRITE_4(hsotg, GINTMSK, gintmsk);
1317                     } else {
1318                               /*
1319                                * Disable the Tx FIFO empty interrupt since there are
1320                                * no more transactions that need to be queued right
1321                                * now. This function is called from interrupt
1322                                * handlers to queue more transactions as transfer
1323                                * states change.
1324                                */
1325                               gintmsk = DWC2_READ_4(hsotg, GINTMSK);
1326                               gintmsk &= ~GINTSTS_NPTXFEMP;
1327                               DWC2_WRITE_4(hsotg, GINTMSK, gintmsk);
1328                     }
1329           }
1330 }
1331 
1332 /**
1333  * dwc2_hcd_queue_transactions() - Processes the currently active host channels
1334  * and queues transactions for these channels to the DWC_otg controller. Called
1335  * from the HCD interrupt handler functions.
1336  *
1337  * @hsotg:   The HCD state structure
1338  * @tr_type: The type(s) of transactions to queue (non-periodic, periodic,
1339  *           or both)
1340  *
1341  * Must be called with interrupt disabled and spinlock held
1342  */
dwc2_hcd_queue_transactions(struct dwc2_hsotg * hsotg,enum dwc2_transaction_type tr_type)1343 void dwc2_hcd_queue_transactions(struct dwc2_hsotg *hsotg,
1344                                          enum dwc2_transaction_type tr_type)
1345 {
1346 #ifdef DWC2_DEBUG_SOF
1347           dev_vdbg(hsotg->dev, "Queue Transactions\n");
1348 #endif
1349           /* Process host channels associated with periodic transfers */
1350           if ((tr_type == DWC2_TRANSACTION_PERIODIC ||
1351                tr_type == DWC2_TRANSACTION_ALL) &&
1352               !list_empty(&hsotg->periodic_sched_assigned))
1353                     dwc2_process_periodic_channels(hsotg);
1354 
1355           /* Process host channels associated with non-periodic transfers */
1356           if (tr_type == DWC2_TRANSACTION_NON_PERIODIC ||
1357               tr_type == DWC2_TRANSACTION_ALL) {
1358                     if (!list_empty(&hsotg->non_periodic_sched_active)) {
1359                               dwc2_process_non_periodic_channels(hsotg);
1360                     } else {
1361                               /*
1362                                * Ensure NP Tx FIFO empty interrupt is disabled when
1363                                * there are no non-periodic transfers to process
1364                                */
1365                               u32 gintmsk = DWC2_READ_4(hsotg, GINTMSK);
1366 
1367                               gintmsk &= ~GINTSTS_NPTXFEMP;
1368                               DWC2_WRITE_4(hsotg, GINTMSK, gintmsk);
1369                     }
1370           }
1371 }
1372 
dwc2_conn_id_status_change(struct work_struct * work)1373 static void dwc2_conn_id_status_change(struct work_struct *work)
1374 {
1375           struct dwc2_hsotg *hsotg = container_of(work, struct dwc2_hsotg,
1376                                                             wf_otg);
1377           u32 count = 0;
1378           u32 gotgctl;
1379           unsigned long flags;
1380 
1381           dev_dbg(hsotg->dev, "%s()\n", __func__);
1382 
1383           gotgctl = DWC2_READ_4(hsotg, GOTGCTL);
1384           dev_dbg(hsotg->dev, "gotgctl=%0x\n", gotgctl);
1385           dev_dbg(hsotg->dev, "gotgctl.b.conidsts=%d\n",
1386                     !!(gotgctl & GOTGCTL_CONID_B));
1387 
1388           /* B-Device connector (Device Mode) */
1389           if (gotgctl & GOTGCTL_CONID_B) {
1390                     /* Wait for switch to device mode */
1391                     dev_dbg(hsotg->dev, "connId B\n");
1392                     while (!dwc2_is_device_mode(hsotg)) {
1393                               dev_info(hsotg->dev,
1394                                          "Waiting for Peripheral Mode, Mode=%s\n",
1395                                          dwc2_is_host_mode(hsotg) ? "Host" :
1396                                          "Peripheral");
1397                               usleep_range(20000, 40000);
1398                               if (++count > 250)
1399                                         break;
1400                     }
1401                     if (count > 250)
1402                               dev_err(hsotg->dev,
1403                                         "Connection id status change timed out\n");
1404                     hsotg->op_state = OTG_STATE_B_PERIPHERAL;
1405                     dwc2_core_init(hsotg, false);
1406                     dwc2_enable_global_interrupts(hsotg);
1407                     spin_lock_irqsave(&hsotg->lock, flags);
1408                     dwc2_hsotg_core_init_disconnected(hsotg, false);
1409                     spin_unlock_irqrestore(&hsotg->lock, flags);
1410                     dwc2_hsotg_core_connect(hsotg);
1411           } else {
1412                     /* A-Device connector (Host Mode) */
1413                     dev_dbg(hsotg->dev, "connId A\n");
1414                     while (!dwc2_is_host_mode(hsotg)) {
1415                               dev_info(hsotg->dev, "Waiting for Host Mode, Mode=%s\n",
1416                                          dwc2_is_host_mode(hsotg) ?
1417                                          "Host" : "Peripheral");
1418                               usleep_range(20000, 40000);
1419                               if (++count > 250)
1420                                         break;
1421                     }
1422                     if (count > 250)
1423                               dev_err(hsotg->dev,
1424                                         "Connection id status change timed out\n");
1425                     hsotg->op_state = OTG_STATE_A_HOST;
1426 
1427                     /* Initialize the Core for Host mode */
1428                     dwc2_core_init(hsotg, false);
1429                     dwc2_enable_global_interrupts(hsotg);
1430                     dwc2_hcd_start(hsotg);
1431           }
1432 }
1433 
dwc2_wakeup_detected(void * data)1434 void dwc2_wakeup_detected(void *data)
1435 {
1436           struct dwc2_hsotg *hsotg = (struct dwc2_hsotg *)data;
1437           u32 hprt0;
1438 
1439           dev_dbg(hsotg->dev, "%s()\n", __func__);
1440 
1441           /*
1442            * Clear the Resume after 70ms. (Need 20 ms minimum. Use 70 ms
1443            * so that OPT tests pass with all PHYs.)
1444            */
1445           hprt0 = dwc2_read_hprt0(hsotg);
1446           dev_dbg(hsotg->dev, "Resume: HPRT0=%0x\n", hprt0);
1447           hprt0 &= ~HPRT0_RES;
1448           DWC2_WRITE_4(hsotg, HPRT0, hprt0);
1449           dev_dbg(hsotg->dev, "Clear Resume: HPRT0=%0x\n",
1450                     DWC2_READ_4(hsotg, HPRT0));
1451 
1452           dwc2_hcd_rem_wakeup(hsotg);
1453           hsotg->bus_suspended = 0;
1454 
1455           /* Change to L0 state */
1456           hsotg->lx_state = DWC2_L0;
1457 }
1458 
1459 /* Must NOT be called with interrupt disabled or spinlock held */
dwc2_port_suspend(struct dwc2_hsotg * hsotg,u16 windex)1460 static void dwc2_port_suspend(struct dwc2_hsotg *hsotg, u16 windex)
1461 {
1462           unsigned long flags;
1463           u32 hprt0;
1464           u32 pcgctl;
1465           u32 gotgctl;
1466 
1467           dev_dbg(hsotg->dev, "%s()\n", __func__);
1468 
1469           spin_lock_irqsave(&hsotg->lock, flags);
1470 
1471           if (windex == hsotg->otg_port && dwc2_host_is_b_hnp_enabled(hsotg)) {
1472                     gotgctl = DWC2_READ_4(hsotg, GOTGCTL);
1473                     gotgctl |= GOTGCTL_HSTSETHNPEN;
1474                     DWC2_WRITE_4(hsotg, GOTGCTL, gotgctl);
1475                     hsotg->op_state = OTG_STATE_A_SUSPEND;
1476           }
1477 
1478           hprt0 = dwc2_read_hprt0(hsotg);
1479           hprt0 |= HPRT0_SUSP;
1480           DWC2_WRITE_4(hsotg, HPRT0, hprt0);
1481 
1482           hsotg->bus_suspended = 1;
1483 
1484           /*
1485            * If hibernation is supported, Phy clock will be suspended
1486            * after registers are backuped.
1487            */
1488           if (!hsotg->core_params->hibernation) {
1489                     /* Suspend the Phy Clock */
1490                     pcgctl = DWC2_READ_4(hsotg, PCGCTL);
1491                     pcgctl |= PCGCTL_STOPPCLK;
1492                     DWC2_WRITE_4(hsotg, PCGCTL, pcgctl);
1493                     udelay(10);
1494           }
1495 
1496           /* For HNP the bus must be suspended for at least 200ms */
1497           if (dwc2_host_is_b_hnp_enabled(hsotg)) {
1498                     pcgctl = DWC2_READ_4(hsotg, PCGCTL);
1499                     pcgctl &= ~PCGCTL_STOPPCLK;
1500                     DWC2_WRITE_4(hsotg, PCGCTL, pcgctl);
1501 
1502                     spin_unlock_irqrestore(&hsotg->lock, flags);
1503 
1504                     usleep_range(200000, 250000);
1505           } else {
1506                     spin_unlock_irqrestore(&hsotg->lock, flags);
1507           }
1508 }
1509 
1510 /* Must NOT be called with interrupt disabled or spinlock held */
dwc2_port_resume(struct dwc2_hsotg * hsotg)1511 static void dwc2_port_resume(struct dwc2_hsotg *hsotg)
1512 {
1513           unsigned long flags;
1514           u32 hprt0;
1515           u32 pcgctl;
1516 
1517           spin_lock_irqsave(&hsotg->lock, flags);
1518 
1519           /*
1520            * If hibernation is supported, Phy clock is already resumed
1521            * after registers restore.
1522            */
1523           if (!hsotg->core_params->hibernation) {
1524                     pcgctl = DWC2_READ_4(hsotg, PCGCTL);
1525                     pcgctl &= ~PCGCTL_STOPPCLK;
1526                     DWC2_WRITE_4(hsotg, PCGCTL, pcgctl);
1527                     spin_unlock_irqrestore(&hsotg->lock, flags);
1528                     usleep_range(20000, 40000);
1529                     spin_lock_irqsave(&hsotg->lock, flags);
1530           }
1531 
1532           hprt0 = dwc2_read_hprt0(hsotg);
1533           hprt0 |= HPRT0_RES;
1534           hprt0 &= ~HPRT0_SUSP;
1535           DWC2_WRITE_4(hsotg, HPRT0, hprt0);
1536           spin_unlock_irqrestore(&hsotg->lock, flags);
1537 
1538           msleep(USB_RESUME_TIMEOUT);
1539 
1540           spin_lock_irqsave(&hsotg->lock, flags);
1541           hprt0 = dwc2_read_hprt0(hsotg);
1542           hprt0 &= ~(HPRT0_RES | HPRT0_SUSP);
1543           DWC2_WRITE_4(hsotg, HPRT0, hprt0);
1544           hsotg->bus_suspended = 0;
1545           spin_unlock_irqrestore(&hsotg->lock, flags);
1546 }
1547 
1548 /* Handles hub class-specific requests */
1549 int
dwc2_hcd_hub_control(struct dwc2_hsotg * hsotg,u16 typereq,u16 wvalue,u16 windex,char * buf,u16 wlength)1550 dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,
1551                                         u16 wvalue, u16 windex, char *buf, u16 wlength)
1552 {
1553           usb_hub_descriptor_t *hub_desc;
1554           usb_port_status_t ps;
1555           int retval = 0;
1556           u32 hprt0;
1557           u32 port_status;
1558           u32 speed;
1559           u32 pcgctl;
1560 
1561           switch (typereq) {
1562           case ClearHubFeature:
1563                     dev_dbg(hsotg->dev, "ClearHubFeature %1xh\n", wvalue);
1564 
1565                     switch (wvalue) {
1566                     case C_HUB_LOCAL_POWER:
1567                     case C_HUB_OVER_CURRENT:
1568                               /* Nothing required here */
1569                               break;
1570 
1571                     default:
1572                               retval = -EINVAL;
1573                               dev_err(hsotg->dev,
1574                                         "ClearHubFeature request %1xh unknown\n",
1575                                         wvalue);
1576                     }
1577                     break;
1578 
1579           case ClearPortFeature:
1580 //                  if (wvalue != USB_PORT_FEAT_L1)
1581                               if (!windex || windex > 1)
1582                                         goto error;
1583                     switch (wvalue) {
1584                     case USB_PORT_FEAT_ENABLE:
1585                               dev_dbg(hsotg->dev,
1586                                         "ClearPortFeature USB_PORT_FEAT_ENABLE\n");
1587                               hprt0 = dwc2_read_hprt0(hsotg);
1588                               hprt0 |= HPRT0_ENA;
1589                               DWC2_WRITE_4(hsotg, HPRT0, hprt0);
1590                               break;
1591 
1592                     case USB_PORT_FEAT_SUSPEND:
1593                               dev_dbg(hsotg->dev,
1594                                         "ClearPortFeature USB_PORT_FEAT_SUSPEND\n");
1595                               if (hsotg->bus_suspended)
1596                                         dwc2_port_resume(hsotg);
1597                               break;
1598 
1599                     case USB_PORT_FEAT_POWER:
1600                               dev_dbg(hsotg->dev,
1601                                         "ClearPortFeature USB_PORT_FEAT_POWER\n");
1602                               hprt0 = dwc2_read_hprt0(hsotg);
1603                               hprt0 &= ~HPRT0_PWR;
1604                               DWC2_WRITE_4(hsotg, HPRT0, hprt0);
1605                               break;
1606 
1607                     case USB_PORT_FEAT_INDICATOR:
1608                               dev_dbg(hsotg->dev,
1609                                         "ClearPortFeature USB_PORT_FEAT_INDICATOR\n");
1610                               /* Port indicator not supported */
1611                               break;
1612 
1613                     case USB_PORT_FEAT_C_CONNECTION:
1614                               /*
1615                                * Clears driver's internal Connect Status Change flag
1616                                */
1617                               dev_dbg(hsotg->dev,
1618                                         "ClearPortFeature USB_PORT_FEAT_C_CONNECTION\n");
1619                               hsotg->flags.b.port_connect_status_change = 0;
1620                               break;
1621 
1622                     case USB_PORT_FEAT_C_RESET:
1623                               /* Clears driver's internal Port Reset Change flag */
1624                               dev_dbg(hsotg->dev,
1625                                         "ClearPortFeature USB_PORT_FEAT_C_RESET\n");
1626                               hsotg->flags.b.port_reset_change = 0;
1627                               break;
1628 
1629                     case USB_PORT_FEAT_C_ENABLE:
1630                               /*
1631                                * Clears the driver's internal Port Enable/Disable
1632                                * Change flag
1633                                */
1634                               dev_dbg(hsotg->dev,
1635                                         "ClearPortFeature USB_PORT_FEAT_C_ENABLE\n");
1636                               hsotg->flags.b.port_enable_change = 0;
1637                               break;
1638 
1639                     case USB_PORT_FEAT_C_SUSPEND:
1640                               /*
1641                                * Clears the driver's internal Port Suspend Change
1642                                * flag, which is set when resume signaling on the host
1643                                * port is complete
1644                                */
1645                               dev_dbg(hsotg->dev,
1646                                         "ClearPortFeature USB_PORT_FEAT_C_SUSPEND\n");
1647                               hsotg->flags.b.port_suspend_change = 0;
1648                               break;
1649 
1650                     case USB_PORT_FEAT_C_PORT_L1:
1651                               dev_dbg(hsotg->dev,
1652                                         "ClearPortFeature USB_PORT_FEAT_C_PORT_L1\n");
1653                               hsotg->flags.b.port_l1_change = 0;
1654                               break;
1655 
1656                     case USB_PORT_FEAT_C_OVER_CURRENT:
1657                               dev_dbg(hsotg->dev,
1658                                         "ClearPortFeature USB_PORT_FEAT_C_OVER_CURRENT\n");
1659                               hsotg->flags.b.port_over_current_change = 0;
1660                               break;
1661 
1662                     default:
1663                               retval = -EINVAL;
1664                               dev_err(hsotg->dev,
1665                                         "ClearPortFeature request %1xh unknown or unsupported\n",
1666                                         wvalue);
1667                     }
1668                     break;
1669 
1670           case GetHubDescriptor:
1671                     dev_dbg(hsotg->dev, "GetHubDescriptor\n");
1672                     hub_desc = (usb_hub_descriptor_t *)buf;
1673                     hub_desc->bDescLength = 9;
1674                     hub_desc->bDescriptorType = USB_DT_HUB;
1675                     hub_desc->bNbrPorts = 1;
1676                     USETW(hub_desc->wHubCharacteristics, HUB_CHAR_COMMON_LPSM |
1677                                             HUB_CHAR_INDV_PORT_OCPM);
1678                     hub_desc->bPwrOn2PwrGood = 1;
1679                     hub_desc->bHubContrCurrent = 0;
1680                     hub_desc->DeviceRemovable[0] = 0;
1681                     hub_desc->DeviceRemovable[1] = 0xff;
1682                     break;
1683 
1684           case GetHubStatus:
1685                     dev_dbg(hsotg->dev, "GetHubStatus\n");
1686                     memset(buf, 0, 4);
1687                     break;
1688 
1689           case GetPortStatus:
1690                     dev_vdbg(hsotg->dev,
1691                                "GetPortStatus wIndex=0x%04x flags=0x%08x\n", windex,
1692                                hsotg->flags.d32);
1693                     if (!windex || windex > 1)
1694                               goto error;
1695 
1696                     port_status = 0;
1697                     if (hsotg->flags.b.port_connect_status_change)
1698                               port_status |= USB_PORT_STAT_C_CONNECTION;
1699                     if (hsotg->flags.b.port_enable_change)
1700                               port_status |= USB_PORT_STAT_C_ENABLE;
1701                     if (hsotg->flags.b.port_suspend_change)
1702                               port_status |= USB_PORT_STAT_C_SUSPEND;
1703                     if (hsotg->flags.b.port_l1_change)
1704                               port_status |= USB_PORT_STAT_C_L1;
1705                     if (hsotg->flags.b.port_reset_change)
1706                               port_status |= USB_PORT_STAT_C_RESET;
1707                     if (hsotg->flags.b.port_over_current_change) {
1708                               dev_warn(hsotg->dev, "Overcurrent change detected\n");
1709                               port_status |= USB_PORT_STAT_C_OVERCURRENT;
1710                     }
1711                     USETW(ps.wPortChange, port_status);
1712 
1713                     dev_vdbg(hsotg->dev, "wPortChange=%04x\n", port_status);
1714                     if (!hsotg->flags.b.port_connect_status) {
1715                               /*
1716                                * The port is disconnected, which means the core is
1717                                * either in device mode or it soon will be. Just
1718                                * return 0's for the remainder of the port status
1719                                * since the port register can't be read if the core
1720                                * is in device mode.
1721                                */
1722                               USETW(ps.wPortStatus, 0);
1723                               memcpy(buf, &ps, sizeof(ps));
1724                               break;
1725                     }
1726 
1727                     port_status = 0;
1728                     hprt0 = DWC2_READ_4(hsotg, HPRT0);
1729                     dev_vdbg(hsotg->dev, "  HPRT0: 0x%08x\n", hprt0);
1730 
1731                     if (hprt0 & HPRT0_CONNSTS)
1732                               port_status |= USB_PORT_STAT_CONNECTION;
1733                     if (hprt0 & HPRT0_ENA)
1734                               port_status |= USB_PORT_STAT_ENABLE;
1735                     if (hprt0 & HPRT0_SUSP)
1736                               port_status |= USB_PORT_STAT_SUSPEND;
1737                     if (hprt0 & HPRT0_OVRCURRACT)
1738                               port_status |= USB_PORT_STAT_OVERCURRENT;
1739                     if (hprt0 & HPRT0_RST)
1740                               port_status |= USB_PORT_STAT_RESET;
1741                     if (hprt0 & HPRT0_PWR)
1742                               port_status |= USB_PORT_STAT_POWER;
1743 
1744                     speed = (hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
1745                     if (speed == HPRT0_SPD_HIGH_SPEED)
1746                               port_status |= USB_PORT_STAT_HIGH_SPEED;
1747                     else if (speed == HPRT0_SPD_LOW_SPEED)
1748                               port_status |= USB_PORT_STAT_LOW_SPEED;
1749 
1750                     if (hprt0 & HPRT0_TSTCTL_MASK)
1751                               port_status |= USB_PORT_STAT_TEST;
1752                     /* USB_PORT_FEAT_INDICATOR unsupported always 0 */
1753                     USETW(ps.wPortStatus, port_status);
1754 
1755                     if (hsotg->core_params->dma_desc_fs_enable) {
1756                               /*
1757                                * Enable descriptor DMA only if a full speed
1758                                * device is connected.
1759                                */
1760                               if (hsotg->new_connection &&
1761                                   ((port_status &
1762                                     (USB_PORT_STAT_CONNECTION |
1763                                      USB_PORT_STAT_HIGH_SPEED |
1764                                      USB_PORT_STAT_LOW_SPEED)) ==
1765                                      USB_PORT_STAT_CONNECTION)) {
1766                                         u32 hcfg;
1767 
1768                                         dev_info(hsotg->dev, "Enabling descriptor DMA mode\n");
1769                                         hsotg->core_params->dma_desc_enable = 1;
1770                                         hcfg = DWC2_READ_4(hsotg, HCFG);
1771                                         hcfg |= HCFG_DESCDMA;
1772                                         DWC2_WRITE_4(hsotg, HCFG, hcfg);
1773                                         hsotg->new_connection = false;
1774                               }
1775                     }
1776                     dev_vdbg(hsotg->dev, "wPortStatus=%04x\n", port_status);
1777                     memcpy(buf, &ps, sizeof(ps));
1778                     break;
1779 
1780           case SetHubFeature:
1781                     dev_dbg(hsotg->dev, "SetHubFeature\n");
1782                     /* No HUB features supported */
1783                     break;
1784 
1785           case SetPortFeature:
1786                     dev_dbg(hsotg->dev, "SetPortFeature\n");
1787                     if (wvalue != USB_PORT_FEAT_TEST && (!windex || windex > 1))
1788                               goto error;
1789 
1790                     if (!hsotg->flags.b.port_connect_status) {
1791                               /*
1792                                * The port is disconnected, which means the core is
1793                                * either in device mode or it soon will be. Just
1794                                * return without doing anything since the port
1795                                * register can't be written if the core is in device
1796                                * mode.
1797                                */
1798                               break;
1799                     }
1800 
1801                     switch (wvalue) {
1802                     case USB_PORT_FEAT_SUSPEND:
1803                               dev_dbg(hsotg->dev,
1804                                         "SetPortFeature - USB_PORT_FEAT_SUSPEND\n");
1805                               if (windex != hsotg->otg_port)
1806                                         goto error;
1807                               dwc2_port_suspend(hsotg, windex);
1808                               break;
1809 
1810                     case USB_PORT_FEAT_POWER:
1811                               dev_dbg(hsotg->dev,
1812                                         "SetPortFeature - USB_PORT_FEAT_POWER\n");
1813                               hprt0 = dwc2_read_hprt0(hsotg);
1814                               hprt0 |= HPRT0_PWR;
1815                               DWC2_WRITE_4(hsotg, HPRT0, hprt0);
1816                               break;
1817 
1818                     case USB_PORT_FEAT_RESET:
1819                               hprt0 = dwc2_read_hprt0(hsotg);
1820                               dev_dbg(hsotg->dev,
1821                                         "SetPortFeature - USB_PORT_FEAT_RESET\n");
1822                               pcgctl = DWC2_READ_4(hsotg, PCGCTL);
1823                               pcgctl &= ~(PCGCTL_ENBL_SLEEP_GATING | PCGCTL_STOPPCLK);
1824                               DWC2_WRITE_4(hsotg, PCGCTL, pcgctl);
1825                               /* ??? Original driver does this */
1826                               DWC2_WRITE_4(hsotg, PCGCTL, 0);
1827 
1828                               hprt0 = dwc2_read_hprt0(hsotg);
1829                               /* Clear suspend bit if resetting from suspend state */
1830                               hprt0 &= ~HPRT0_SUSP;
1831 
1832                               /*
1833                                * When B-Host the Port reset bit is set in the Start
1834                                * HCD Callback function, so that the reset is started
1835                                * within 1ms of the HNP success interrupt
1836                                */
1837                               if (!dwc2_hcd_is_b_host(hsotg)) {
1838                                         hprt0 |= HPRT0_PWR | HPRT0_RST;
1839                                         dev_dbg(hsotg->dev,
1840                                                   "In host mode, hprt0=%08x\n", hprt0);
1841                                         DWC2_WRITE_4(hsotg, HPRT0, hprt0);
1842                               }
1843 
1844                               /* Clear reset bit in 10ms (FS/LS) or 50ms (HS) */
1845                               usleep_range(50000, 70000);
1846                               hprt0 &= ~HPRT0_RST;
1847                               DWC2_WRITE_4(hsotg, HPRT0, hprt0);
1848                               hsotg->lx_state = DWC2_L0; /* Now back to On state */
1849                               break;
1850 
1851                     case USB_PORT_FEAT_INDICATOR:
1852                               dev_dbg(hsotg->dev,
1853                                         "SetPortFeature - USB_PORT_FEAT_INDICATOR\n");
1854                               /* Not supported */
1855                               break;
1856 
1857                     case USB_PORT_FEAT_TEST:
1858                               hprt0 = dwc2_read_hprt0(hsotg);
1859                               dev_dbg(hsotg->dev,
1860                                         "SetPortFeature - USB_PORT_FEAT_TEST\n");
1861                               hprt0 &= ~HPRT0_TSTCTL_MASK;
1862                               hprt0 |= (windex >> 8) << HPRT0_TSTCTL_SHIFT;
1863                               DWC2_WRITE_4(hsotg, HPRT0, hprt0);
1864                               break;
1865 
1866                     default:
1867                               retval = -EINVAL;
1868                               dev_err(hsotg->dev,
1869                                         "SetPortFeature %1xh unknown or unsupported\n",
1870                                         wvalue);
1871                               break;
1872                     }
1873                     break;
1874 
1875           default:
1876 error:
1877                     retval = -EINVAL;
1878                     dev_dbg(hsotg->dev,
1879                               "Unknown hub control request: %1xh wIndex: %1xh wValue: %1xh\n",
1880                               typereq, windex, wvalue);
1881                     break;
1882           }
1883 
1884           return retval;
1885 }
1886 
dwc2_hcd_get_frame_number(struct dwc2_hsotg * hsotg)1887 int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg)
1888 {
1889           u32 hfnum = DWC2_READ_4(hsotg, HFNUM);
1890 
1891 #ifdef DWC2_DEBUG_SOF
1892           dev_vdbg(hsotg->dev, "DWC OTG HCD GET FRAME NUMBER %d\n",
1893                      (hfnum & HFNUM_FRNUM_MASK) >> HFNUM_FRNUM_SHIFT);
1894 #endif
1895           return (hfnum & HFNUM_FRNUM_MASK) >> HFNUM_FRNUM_SHIFT;
1896 }
1897 
dwc2_hcd_is_b_host(struct dwc2_hsotg * hsotg)1898 int dwc2_hcd_is_b_host(struct dwc2_hsotg *hsotg)
1899 {
1900           return hsotg->op_state == OTG_STATE_B_HOST;
1901 }
1902 
1903 struct dwc2_hcd_urb *
dwc2_hcd_urb_alloc(struct dwc2_hsotg * hsotg,int iso_desc_count,gfp_t mem_flags)1904 dwc2_hcd_urb_alloc(struct dwc2_hsotg *hsotg, int iso_desc_count,
1905                        gfp_t mem_flags)
1906 {
1907           struct dwc2_hcd_urb *urb;
1908           u32 size = sizeof(*urb) + iso_desc_count *
1909                        sizeof(struct dwc2_hcd_iso_packet_desc);
1910           int kmem_flag;
1911 
1912           if ((mem_flags & __GFP_WAIT) == __GFP_WAIT)
1913                     kmem_flag = KM_SLEEP;
1914           else
1915                     kmem_flag = KM_NOSLEEP;
1916 
1917           urb = kmem_zalloc(size, kmem_flag);
1918           if (urb)
1919                     urb->packet_count = iso_desc_count;
1920           return urb;
1921 }
1922 
1923 void
dwc2_hcd_urb_free(struct dwc2_hsotg * hsotg,struct dwc2_hcd_urb * urb,int iso_desc_count)1924 dwc2_hcd_urb_free(struct dwc2_hsotg *hsotg, struct dwc2_hcd_urb *urb,
1925     int iso_desc_count)
1926 {
1927 
1928           u32 size = sizeof(*urb) + iso_desc_count *
1929                        sizeof(struct dwc2_hcd_iso_packet_desc);
1930 
1931           kmem_free(urb, size);
1932 }
1933 
1934 void
dwc2_hcd_urb_set_pipeinfo(struct dwc2_hsotg * hsotg,struct dwc2_hcd_urb * urb,u8 dev_addr,u8 ep_num,u8 ep_type,u8 ep_dir,u16 mps)1935 dwc2_hcd_urb_set_pipeinfo(struct dwc2_hsotg *hsotg, struct dwc2_hcd_urb *urb,
1936                                 u8 dev_addr, u8 ep_num, u8 ep_type, u8 ep_dir,
1937                                 u16 mps)
1938 {
1939           if (dbg_perio() ||
1940               ep_type == USB_ENDPOINT_XFER_BULK ||
1941               ep_type == USB_ENDPOINT_XFER_CONTROL)
1942                     dev_dbg(hsotg->dev, "urb=%p, xfer=%p\n", urb, urb->priv);
1943           urb->pipe_info.dev_addr = dev_addr;
1944           urb->pipe_info.ep_num = ep_num;
1945           urb->pipe_info.pipe_type = ep_type;
1946           urb->pipe_info.pipe_dir = ep_dir;
1947           urb->pipe_info.mps = mps;
1948 }
1949 
1950 /*
1951  * NOTE: This function will be removed once the peripheral controller code
1952  * is integrated and the driver is stable
1953  */
dwc2_hcd_dump_state(struct dwc2_hsotg * hsotg)1954 void dwc2_hcd_dump_state(struct dwc2_hsotg *hsotg)
1955 {
1956 #ifdef DWC2_DEBUG
1957           struct dwc2_host_chan *chan;
1958           struct dwc2_hcd_urb *urb;
1959           struct dwc2_qtd *qtd;
1960           int num_channels;
1961           u32 np_tx_status;
1962           u32 p_tx_status;
1963           int i;
1964 
1965           num_channels = hsotg->core_params->host_channels;
1966           dev_dbg(hsotg->dev, "\n");
1967           dev_dbg(hsotg->dev,
1968                     "************************************************************\n");
1969           dev_dbg(hsotg->dev, "HCD State:\n");
1970           dev_dbg(hsotg->dev, "  Num channels: %d\n", num_channels);
1971 
1972           for (i = 0; i < num_channels; i++) {
1973                     chan = hsotg->hc_ptr_array[i];
1974                     dev_dbg(hsotg->dev, "  Channel %d:\n", i);
1975                     dev_dbg(hsotg->dev,
1976                               "    dev_addr: %d, ep_num: %d, ep_is_in: %d\n",
1977                               chan->dev_addr, chan->ep_num, chan->ep_is_in);
1978                     dev_dbg(hsotg->dev, "    speed: %d\n", chan->speed);
1979                     dev_dbg(hsotg->dev, "    ep_type: %d\n", chan->ep_type);
1980                     dev_dbg(hsotg->dev, "    max_packet: %d\n", chan->max_packet);
1981                     dev_dbg(hsotg->dev, "    data_pid_start: %d\n",
1982                               chan->data_pid_start);
1983                     dev_dbg(hsotg->dev, "    multi_count: %d\n", chan->multi_count);
1984                     dev_dbg(hsotg->dev, "    xfer_started: %d\n",
1985                               chan->xfer_started);
1986                     dev_dbg(hsotg->dev, "    xfer_buf: %p\n", chan->xfer_buf);
1987                     dev_dbg(hsotg->dev, "    xfer_dma: %08lx\n",
1988                               (unsigned long)chan->xfer_dma);
1989                     dev_dbg(hsotg->dev, "    xfer_len: %d\n", chan->xfer_len);
1990                     dev_dbg(hsotg->dev, "    xfer_count: %d\n", chan->xfer_count);
1991                     dev_dbg(hsotg->dev, "    halt_on_queue: %d\n",
1992                               chan->halt_on_queue);
1993                     dev_dbg(hsotg->dev, "    halt_pending: %d\n",
1994                               chan->halt_pending);
1995                     dev_dbg(hsotg->dev, "    halt_status: %d\n", chan->halt_status);
1996                     dev_dbg(hsotg->dev, "    do_split: %d\n", chan->do_split);
1997                     dev_dbg(hsotg->dev, "    complete_split: %d\n",
1998                               chan->complete_split);
1999                     dev_dbg(hsotg->dev, "    hub_addr: %d\n", chan->hub_addr);
2000                     dev_dbg(hsotg->dev, "    hub_port: %d\n", chan->hub_port);
2001                     dev_dbg(hsotg->dev, "    xact_pos: %d\n", chan->xact_pos);
2002                     dev_dbg(hsotg->dev, "    requests: %d\n", chan->requests);
2003                     dev_dbg(hsotg->dev, "    qh: %p\n", chan->qh);
2004 
2005                     if (chan->xfer_started) {
2006                               dev_dbg(hsotg->dev, "    hfnum: 0x%08x\n",
2007                                   DWC2_READ_4(hsotg, HFNUM));
2008                               dev_dbg(hsotg->dev, "    hcchar: 0x%08x\n",
2009                                   DWC2_READ_4(hsotg, HCCHAR(i)));
2010                               dev_dbg(hsotg->dev, "    hctsiz: 0x%08x\n",
2011                                   DWC2_READ_4(hsotg, HCTSIZ(i)));
2012                               dev_dbg(hsotg->dev, "    hcint: 0x%08x\n",
2013                                   DWC2_READ_4(hsotg, HCINT(i)));
2014                               dev_dbg(hsotg->dev, "    hcintmsk: 0x%08x\n",
2015                                   DWC2_READ_4(hsotg, HCINTMSK(i)));
2016                     }
2017 
2018                     if (!(chan->xfer_started && chan->qh))
2019                               continue;
2020 
2021                     list_for_each_entry(qtd, &chan->qh->qtd_list, qtd_list_entry) {
2022                               if (!qtd->in_process)
2023                                         break;
2024                               urb = qtd->urb;
2025                               dev_dbg(hsotg->dev, "    URB Info:\n");
2026                               dev_dbg(hsotg->dev, "      qtd: %p, urb: %p\n",
2027                                         qtd, urb);
2028                               if (urb) {
2029                                         dev_dbg(hsotg->dev,
2030                                                   "      Dev: %d, EP: %d %s\n",
2031                                                   dwc2_hcd_get_dev_addr(&urb->pipe_info),
2032                                                   dwc2_hcd_get_ep_num(&urb->pipe_info),
2033                                                   dwc2_hcd_is_pipe_in(&urb->pipe_info) ?
2034                                                   "IN" : "OUT");
2035                                         dev_dbg(hsotg->dev,
2036                                                   "      Max packet size: %d\n",
2037                                                   dwc2_hcd_get_mps(&urb->pipe_info));
2038                                         dev_dbg(hsotg->dev,
2039                                                   "      transfer_buffer: %p\n",
2040                                                   urb->buf);
2041                                         dev_dbg(hsotg->dev,
2042                                                   "      transfer_dma: %08lx\n",
2043                                                   (unsigned long)urb->dma);
2044                                         dev_dbg(hsotg->dev,
2045                                                   "      transfer_buffer_length: %d\n",
2046                                                   urb->length);
2047                                         dev_dbg(hsotg->dev, "      actual_length: %d\n",
2048                                                   urb->actual_length);
2049                               }
2050                     }
2051           }
2052 
2053           dev_dbg(hsotg->dev, "  non_periodic_channels: %d\n",
2054                     hsotg->non_periodic_channels);
2055           dev_dbg(hsotg->dev, "  periodic_channels: %d\n",
2056                     hsotg->periodic_channels);
2057           dev_dbg(hsotg->dev, "  periodic_usecs: %d\n", hsotg->periodic_usecs);
2058           np_tx_status = DWC2_READ_4(hsotg, GNPTXSTS);
2059           dev_dbg(hsotg->dev, "  NP Tx Req Queue Space Avail: %d\n",
2060                     (np_tx_status & TXSTS_QSPCAVAIL_MASK) >> TXSTS_QSPCAVAIL_SHIFT);
2061           dev_dbg(hsotg->dev, "  NP Tx FIFO Space Avail: %d\n",
2062                     (np_tx_status & TXSTS_FSPCAVAIL_MASK) >> TXSTS_FSPCAVAIL_SHIFT);
2063           p_tx_status = DWC2_READ_4(hsotg, HPTXSTS);
2064           dev_dbg(hsotg->dev, "  P Tx Req Queue Space Avail: %d\n",
2065                     (p_tx_status & TXSTS_QSPCAVAIL_MASK) >> TXSTS_QSPCAVAIL_SHIFT);
2066           dev_dbg(hsotg->dev, "  P Tx FIFO Space Avail: %d\n",
2067                     (p_tx_status & TXSTS_FSPCAVAIL_MASK) >> TXSTS_FSPCAVAIL_SHIFT);
2068           dwc2_hcd_dump_frrem(hsotg);
2069 
2070           dwc2_dump_global_registers(hsotg);
2071           dwc2_dump_host_registers(hsotg);
2072           dev_dbg(hsotg->dev,
2073                     "************************************************************\n");
2074           dev_dbg(hsotg->dev, "\n");
2075 #endif
2076 }
2077 
2078 /*
2079  * NOTE: This function will be removed once the peripheral controller code
2080  * is integrated and the driver is stable
2081  */
dwc2_hcd_dump_frrem(struct dwc2_hsotg * hsotg)2082 void dwc2_hcd_dump_frrem(struct dwc2_hsotg *hsotg)
2083 {
2084 #ifdef DWC2_DUMP_FRREM
2085           dev_dbg(hsotg->dev, "Frame remaining at SOF:\n");
2086           dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
2087                     hsotg->frrem_samples, hsotg->frrem_accum,
2088                     hsotg->frrem_samples > 0 ?
2089                     hsotg->frrem_accum / hsotg->frrem_samples : 0);
2090           dev_dbg(hsotg->dev, "\n");
2091           dev_dbg(hsotg->dev, "Frame remaining at start_transfer (uframe 7):\n");
2092           dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
2093                     hsotg->hfnum_7_samples,
2094                     hsotg->hfnum_7_frrem_accum,
2095                     hsotg->hfnum_7_samples > 0 ?
2096                     hsotg->hfnum_7_frrem_accum / hsotg->hfnum_7_samples : 0);
2097           dev_dbg(hsotg->dev, "Frame remaining at start_transfer (uframe 0):\n");
2098           dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
2099                     hsotg->hfnum_0_samples,
2100                     hsotg->hfnum_0_frrem_accum,
2101                     hsotg->hfnum_0_samples > 0 ?
2102                     hsotg->hfnum_0_frrem_accum / hsotg->hfnum_0_samples : 0);
2103           dev_dbg(hsotg->dev, "Frame remaining at start_transfer (uframe 1-6):\n");
2104           dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
2105                     hsotg->hfnum_other_samples,
2106                     hsotg->hfnum_other_frrem_accum,
2107                     hsotg->hfnum_other_samples > 0 ?
2108                     hsotg->hfnum_other_frrem_accum / hsotg->hfnum_other_samples :
2109                     0);
2110           dev_dbg(hsotg->dev, "\n");
2111           dev_dbg(hsotg->dev, "Frame remaining at sample point A (uframe 7):\n");
2112           dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
2113                     hsotg->hfnum_7_samples_a, hsotg->hfnum_7_frrem_accum_a,
2114                     hsotg->hfnum_7_samples_a > 0 ?
2115                     hsotg->hfnum_7_frrem_accum_a / hsotg->hfnum_7_samples_a : 0);
2116           dev_dbg(hsotg->dev, "Frame remaining at sample point A (uframe 0):\n");
2117           dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
2118                     hsotg->hfnum_0_samples_a, hsotg->hfnum_0_frrem_accum_a,
2119                     hsotg->hfnum_0_samples_a > 0 ?
2120                     hsotg->hfnum_0_frrem_accum_a / hsotg->hfnum_0_samples_a : 0);
2121           dev_dbg(hsotg->dev, "Frame remaining at sample point A (uframe 1-6):\n");
2122           dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
2123                     hsotg->hfnum_other_samples_a, hsotg->hfnum_other_frrem_accum_a,
2124                     hsotg->hfnum_other_samples_a > 0 ?
2125                     hsotg->hfnum_other_frrem_accum_a / hsotg->hfnum_other_samples_a
2126                     : 0);
2127           dev_dbg(hsotg->dev, "\n");
2128           dev_dbg(hsotg->dev, "Frame remaining at sample point B (uframe 7):\n");
2129           dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
2130                     hsotg->hfnum_7_samples_b, hsotg->hfnum_7_frrem_accum_b,
2131                     hsotg->hfnum_7_samples_b > 0 ?
2132                     hsotg->hfnum_7_frrem_accum_b / hsotg->hfnum_7_samples_b : 0);
2133           dev_dbg(hsotg->dev, "Frame remaining at sample point B (uframe 0):\n");
2134           dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
2135                     hsotg->hfnum_0_samples_b, hsotg->hfnum_0_frrem_accum_b,
2136                     (hsotg->hfnum_0_samples_b > 0) ?
2137                     hsotg->hfnum_0_frrem_accum_b / hsotg->hfnum_0_samples_b : 0);
2138           dev_dbg(hsotg->dev, "Frame remaining at sample point B (uframe 1-6):\n");
2139           dev_dbg(hsotg->dev, "  samples %u, accum %llu, avg %llu\n",
2140                     hsotg->hfnum_other_samples_b, hsotg->hfnum_other_frrem_accum_b,
2141                     (hsotg->hfnum_other_samples_b > 0) ?
2142                     hsotg->hfnum_other_frrem_accum_b / hsotg->hfnum_other_samples_b
2143                     : 0);
2144 #endif
2145 }
2146 
2147 struct wrapper_priv_data {
2148           struct dwc2_hsotg *hsotg;
2149 };
2150 
2151 
dwc2_host_start(struct dwc2_hsotg * hsotg)2152 void dwc2_host_start(struct dwc2_hsotg *hsotg)
2153 {
2154 //        struct usb_hcd *hcd = dwc2_hsotg_to_hcd(hsotg);
2155 
2156 //        hcd->self.is_b_host = dwc2_hcd_is_b_host(hsotg);
2157           _dwc2_hcd_start(hsotg);
2158 }
2159 
dwc2_host_disconnect(struct dwc2_hsotg * hsotg)2160 void dwc2_host_disconnect(struct dwc2_hsotg *hsotg)
2161 {
2162 //        struct usb_hcd *hcd = dwc2_hsotg_to_hcd(hsotg);
2163 
2164 //        hcd->self.is_b_host = 0;
2165 }
2166 
2167 /*
2168  * Work queue function for starting the HCD when A-Cable is connected
2169  */
dwc2_hcd_start_func(struct work_struct * work)2170 static void dwc2_hcd_start_func(struct work_struct *work)
2171 {
2172           struct dwc2_hsotg *hsotg = container_of(work, struct dwc2_hsotg,
2173                                                             start_work.work);
2174 
2175           dev_dbg(hsotg->dev, "%s() %p\n", __func__, hsotg);
2176           dwc2_host_start(hsotg);
2177 }
2178 
2179 /*
2180  * Reset work queue function
2181  */
dwc2_hcd_reset_func(struct work_struct * work)2182 static void dwc2_hcd_reset_func(struct work_struct *work)
2183 {
2184           struct dwc2_hsotg *hsotg = container_of(work, struct dwc2_hsotg,
2185                                                             reset_work.work);
2186           unsigned long flags;
2187           u32 hprt0;
2188 
2189           dev_dbg(hsotg->dev, "USB RESET function called\n");
2190 
2191           spin_lock_irqsave(&hsotg->lock, flags);
2192 
2193           hprt0 = dwc2_read_hprt0(hsotg);
2194           hprt0 &= ~HPRT0_RST;
2195           DWC2_WRITE_4(hsotg, HPRT0, hprt0);
2196           hsotg->flags.b.port_reset_change = 1;
2197 
2198           dwc2_root_intr(hsotg->hsotg_sc);
2199 
2200           spin_unlock_irqrestore(&hsotg->lock, flags);
2201 }
2202 
2203 /*
2204  * =========================================================================
2205  *  Linux HC Driver Functions
2206  * =========================================================================
2207  */
2208 
2209 /*
2210  * Initializes the DWC_otg controller and its root hub and prepares it for host
2211  * mode operation. Activates the root port. Returns 0 on success and a negative
2212  * error code on failure.
2213  */
2214 
2215 /*
2216  * Frees secondary storage associated with the dwc2_hsotg structure contained
2217  * in the struct usb_hcd field
2218  */
dwc2_hcd_free(struct dwc2_hsotg * hsotg)2219 static void dwc2_hcd_free(struct dwc2_hsotg *hsotg)
2220 {
2221           u32 ahbcfg;
2222           u32 dctl;
2223           int i;
2224 
2225           dev_dbg(hsotg->dev, "DWC OTG HCD FREE\n");
2226 
2227           /* Free memory for QH/QTD lists */
2228           dwc2_qh_list_free(hsotg, &hsotg->non_periodic_sched_inactive);
2229           dwc2_qh_list_free(hsotg, &hsotg->non_periodic_sched_waiting);
2230           dwc2_qh_list_free(hsotg, &hsotg->non_periodic_sched_active);
2231           dwc2_qh_list_free(hsotg, &hsotg->periodic_sched_inactive);
2232           dwc2_qh_list_free(hsotg, &hsotg->periodic_sched_ready);
2233           dwc2_qh_list_free(hsotg, &hsotg->periodic_sched_assigned);
2234           dwc2_qh_list_free(hsotg, &hsotg->periodic_sched_queued);
2235 
2236           /* Free memory for the host channels */
2237           for (i = 0; i < MAX_EPS_CHANNELS; i++) {
2238                     struct dwc2_host_chan *chan = hsotg->hc_ptr_array[i];
2239 
2240                     if (chan != NULL) {
2241                               dev_dbg(hsotg->dev, "HCD Free channel #%i, chan=%p\n",
2242                                         i, chan);
2243                               hsotg->hc_ptr_array[i] = NULL;
2244                               kmem_free(chan, sizeof(*chan));
2245                     }
2246           }
2247 
2248           if (hsotg->core_params->dma_enable > 0) {
2249                     if (hsotg->status_buf) {
2250                               usb_freemem(&hsotg->status_buf_usbdma);
2251                               hsotg->status_buf = NULL;
2252                     }
2253           } else {
2254                     kmem_free(hsotg->status_buf,DWC2_HCD_STATUS_BUF_SIZE);
2255                     hsotg->status_buf = NULL;
2256           }
2257 
2258           ahbcfg = DWC2_READ_4(hsotg, GAHBCFG);
2259 
2260           /* Disable all interrupts */
2261           ahbcfg &= ~GAHBCFG_GLBL_INTR_EN;
2262           DWC2_WRITE_4(hsotg, GAHBCFG, ahbcfg);
2263           DWC2_WRITE_4(hsotg, GINTMSK, 0);
2264 
2265           if (hsotg->hw_params.snpsid >= DWC2_CORE_REV_3_00a) {
2266                     dctl = DWC2_READ_4(hsotg, DCTL);
2267                     dctl |= DCTL_SFTDISCON;
2268                     DWC2_WRITE_4(hsotg, DCTL, dctl);
2269           }
2270 
2271           if (hsotg->wq_otg) {
2272                     if (!cancel_work_sync(&hsotg->wf_otg))
2273                               flush_workqueue(hsotg->wq_otg);
2274                     destroy_workqueue(hsotg->wq_otg);
2275           }
2276 
2277           kmem_free(hsotg->core_params, sizeof(*hsotg->core_params));
2278           hsotg->core_params = NULL;
2279           callout_destroy(&hsotg->wkp_timer);
2280 }
2281 
dwc2_hcd_release(struct dwc2_hsotg * hsotg)2282 static void dwc2_hcd_release(struct dwc2_hsotg *hsotg)
2283 {
2284           /* Turn off all host-specific interrupts */
2285           dwc2_disable_host_interrupts(hsotg);
2286 
2287           dwc2_hcd_free(hsotg);
2288 }
2289 
2290 /*
2291  * Initializes the HCD. This function allocates memory for and initializes the
2292  * static parts of the usb_hcd and dwc2_hsotg structures. It also registers the
2293  * USB bus with the core and calls the hc_driver->start() function. It returns
2294  * a negative error on failure.
2295  */
dwc2_hcd_init(struct dwc2_hsotg * hsotg)2296 int dwc2_hcd_init(struct dwc2_hsotg *hsotg)
2297 {
2298           struct dwc2_host_chan *channel;
2299           int i, num_channels;
2300           int retval;
2301 
2302           if (usb_disabled())
2303                     return -ENODEV;
2304 
2305           dev_dbg(hsotg->dev, "DWC OTG HCD INIT\n");
2306 
2307           retval = -ENOMEM;
2308 
2309           dev_dbg(hsotg->dev, "hcfg=%08x\n", DWC2_READ_4(hsotg, HCFG));
2310 
2311 #ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
2312           hsotg->frame_num_array = kmem_zalloc(sizeof(*hsotg->frame_num_array) *
2313                                                    FRAME_NUM_ARRAY_SIZE, KM_SLEEP);
2314           if (!hsotg->frame_num_array)
2315                     goto error1;
2316           hsotg->last_frame_num_array = kmem_zalloc(
2317                               sizeof(*hsotg->last_frame_num_array) *
2318                               FRAME_NUM_ARRAY_SIZE, KM_SLEEP);
2319           if (!hsotg->last_frame_num_array)
2320                     goto error1;
2321           hsotg->last_frame_num = HFNUM_MAX_FRNUM;
2322 #endif
2323 
2324           spin_lock_init(&hsotg->lock);
2325 
2326           /*
2327            * Disable the global interrupt until all the interrupt handlers are
2328            * installed
2329            */
2330           dwc2_disable_global_interrupts(hsotg);
2331 
2332           /* Initialize the DWC_otg core, and select the Phy type */
2333           retval = dwc2_core_init(hsotg, true);
2334           if (retval)
2335                     goto error2;
2336 
2337           /* Create new workqueue and init work */
2338           retval = -ENOMEM;
2339           hsotg->wq_otg = create_singlethread_workqueue("dwc2");
2340           if (!hsotg->wq_otg) {
2341                     dev_err(hsotg->dev, "Failed to create workqueue\n");
2342                     goto error2;
2343           }
2344           INIT_WORK(&hsotg->wf_otg, dwc2_conn_id_status_change);
2345 
2346           callout_init(&hsotg->wkp_timer, CALLOUT_MPSAFE);
2347           callout_setfunc(&hsotg->wkp_timer, dwc2_wakeup_detected, hsotg);
2348 
2349           /* Initialize the non-periodic schedule */
2350           INIT_LIST_HEAD(&hsotg->non_periodic_sched_inactive);
2351           INIT_LIST_HEAD(&hsotg->non_periodic_sched_waiting);
2352           INIT_LIST_HEAD(&hsotg->non_periodic_sched_active);
2353 
2354           /* Initialize the periodic schedule */
2355           INIT_LIST_HEAD(&hsotg->periodic_sched_inactive);
2356           INIT_LIST_HEAD(&hsotg->periodic_sched_ready);
2357           INIT_LIST_HEAD(&hsotg->periodic_sched_assigned);
2358           INIT_LIST_HEAD(&hsotg->periodic_sched_queued);
2359 
2360           /*
2361            * Create a host channel descriptor for each host channel implemented
2362            * in the controller. Initialize the channel descriptor array.
2363            */
2364           INIT_LIST_HEAD(&hsotg->free_hc_list);
2365           num_channels = hsotg->core_params->host_channels;
2366           memset(&hsotg->hc_ptr_array[0], 0, sizeof(hsotg->hc_ptr_array));
2367 
2368           for (i = 0; i < num_channels; i++) {
2369                     channel = kmem_zalloc(sizeof(*channel), KM_SLEEP);
2370                     if (channel == NULL)
2371                               goto error3;
2372                     channel->hc_num = i;
2373                     hsotg->hc_ptr_array[i] = channel;
2374           }
2375 
2376           if (hsotg->core_params->uframe_sched > 0)
2377                     dwc2_hcd_init_usecs(hsotg);
2378 
2379           /* Initialize hsotg start work */
2380           INIT_DELAYED_WORK(&hsotg->start_work, dwc2_hcd_start_func);
2381 
2382           /* Initialize port reset work */
2383           INIT_DELAYED_WORK(&hsotg->reset_work, dwc2_hcd_reset_func);
2384 
2385           /*
2386            * Allocate space for storing data on status transactions. Normally no
2387            * data is sent, but this space acts as a bit bucket. This must be
2388            * done after usb_add_hcd since that function allocates the DMA buffer
2389            * pool.
2390            */
2391           hsotg->status_buf = NULL;
2392           if (hsotg->core_params->dma_enable > 0) {
2393                     int error = usb_allocmem(hsotg->hsotg_sc->sc_bus.ub_dmatag,
2394                         DWC2_HCD_STATUS_BUF_SIZE, 0, USBMALLOC_COHERENT,
2395                         &hsotg->status_buf_usbdma);
2396                     if (!error) {
2397                               hsotg->status_buf = KERNADDR(&hsotg->status_buf_usbdma, 0);
2398                               hsotg->status_buf_dma = DMAADDR(&hsotg->status_buf_usbdma, 0);
2399                     }
2400           } else
2401                     hsotg->status_buf = kmem_zalloc(DWC2_HCD_STATUS_BUF_SIZE,
2402                                                     KM_SLEEP);
2403 
2404           /* retval is already -ENOMEM */
2405           if (!hsotg->status_buf)
2406                     goto error3;
2407 
2408           hsotg->otg_port = 1;
2409           hsotg->frame_list = NULL;
2410           hsotg->frame_list_dma = 0;
2411           hsotg->periodic_qh_count = 0;
2412 
2413           /* Initiate lx_state to L3 disconnected state */
2414           hsotg->lx_state = DWC2_L3;
2415 
2416           _dwc2_hcd_start(hsotg);
2417 
2418           dwc2_hcd_dump_state(hsotg);
2419 
2420           dwc2_enable_global_interrupts(hsotg);
2421 
2422           return 0;
2423 
2424 error3:
2425           dwc2_hcd_release(hsotg);
2426 error2:
2427           if (hsotg->core_params != NULL)
2428                     kmem_free(hsotg->core_params, sizeof(*hsotg->core_params));
2429 
2430 #ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
2431           if (hsotg->last_frame_num_array != NULL)
2432                     kmem_free(hsotg->last_frame_num_array,
2433                           sizeof(*hsotg->last_frame_num_array) * FRAME_NUM_ARRAY_SIZE);
2434           if (hsotg->frame_num_array != NULL)
2435                     kmem_free(hsotg->frame_num_array,
2436                                 sizeof(*hsotg->frame_num_array) * FRAME_NUM_ARRAY_SIZE);
2437 #endif
2438 
2439           dev_err(hsotg->dev, "%s() FAILED, returning %d\n", __func__, retval);
2440           return retval;
2441 }
2442 
2443 /*
2444  * Removes the HCD.
2445  * Frees memory and resources associated with the HCD and deregisters the bus.
2446  */
dwc2_hcd_remove(struct dwc2_hsotg * hsotg)2447 void dwc2_hcd_remove(struct dwc2_hsotg *hsotg)
2448 {
2449           struct usb_hcd *hcd;
2450 
2451           dev_dbg(hsotg->dev, "DWC OTG HCD REMOVE\n");
2452 
2453           hcd = dwc2_hsotg_to_hcd(hsotg);
2454           dev_dbg(hsotg->dev, "hsotg->hcd = %p\n", hcd);
2455 
2456           if (!hcd) {
2457                     dev_dbg(hsotg->dev, "%s: dwc2_hsotg_to_hcd(hsotg) NULL!\n",
2458                               __func__);
2459                     return;
2460           }
2461           hsotg->priv = NULL;
2462 
2463           dwc2_hcd_release(hsotg);
2464 
2465 #ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
2466           kmem_free(hsotg->last_frame_num_array, sizeof(*hsotg->last_frame_num_array) * FRAME_NUM_ARRAY_SIZE);
2467           kmem_free(hsotg->frame_num_array, sizeof(*hsotg->frame_num_array) * FRAME_NUM_ARRAY_SIZE);
2468 #endif
2469 }
2470