diff mbox

[v2] usb: dwc3: add tracepoints to aid debugging

Message ID 20140826204137.GD4584@saruman.home
State New
Headers show

Commit Message

Felipe Balbi Aug. 26, 2014, 8:41 p.m. UTC
Hi,

On Fri, Aug 22, 2014 at 04:56:46PM -0500, Felipe Balbi wrote:
> > > diff --git a/drivers/usb/dwc3/debug.c b/drivers/usb/dwc3/debug.c
> > > new file mode 100644
> > > index 0000000..6d01e0c
> > > --- /dev/null
> > > +++ b/drivers/usb/dwc3/debug.c
> > > @@ -0,0 +1,33 @@
> > > +/**
> > > + * debug.c - DesignWare USB3 DRD Controller Debug/Trace Support
> > > + *
> > > + * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com
> > > + *
> > > + * Author: Felipe Balbi <balbi@ti.com>
> > > + *
> > > + * This program is free software: you can redistribute it and/or modify
> > > + * it under the terms of the GNU General Public License version 2  of
> > > + * the License as published by the Free Software Foundation.
> > > + *
> > > + * This program is distributed in the hope that it will be useful,
> > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > > + * GNU General Public License for more details.
> > > + */
> > > +
> > > +#include "debug.h"
> > > +
> > > +void dwc3_trace(void (*trace)(struct va_format *),
> > > +		const char *fmt, ...)
> > 
> > Unnecessary line wrap? It looks like this would fit on one line.
> 
> fixed all three instances
> 
> > > @@ -726,6 +732,8 @@ static void dwc3_ep0_inspect_setup(struct dwc3 *dwc,
> > >  	if (!dwc->gadget_driver)
> > >  		goto out;
> > > 
> > > +	trace_dwc3_ctrl_req(ctrl);
> > 
> > I don't see this function defined anywhere in this patch. Same for some
> > of the other trace functions. I guess these are automatically defined
> > by some tracing macro magic? Is there any way to see what the event
> 
> yup, you got it. If you look at trace.h, it defines all the trace points
> and on trace.c where we have:
> 
> #define CREATE_TRACE_POINTS
> #include "trace.h"
> 
> that'll cause the creation of all these functions.
> 
> > will look like short of running the code? These are probably dumb
> > questions, but I haven't done anything yet with the tracing API, so
> > I'm pretty clueless about it.
> 
> Next week I'll send you a sample output with all events enabled :-)
> 
> > Other than that, I can't think of anything else to be added at this
> > point. As you say, other trace points can be added later if desired.
> 
> Right, I wanted to have a way of using those debug registers (GDBG*) for
> tracing the internal HW blocks but there's no documentation about what
> those registers mean i.e. how to decode the data returned by them.
> 
> Other than that... we might want to, at some point, have a more granular
> tracing of the TRB/usb_request lifetime - right now we're only tracing
> alloc, queue, dequeue, free - but I guess tracing request accesses alone
> is already a pretty good deal, as it can help communicating with IP
> folks and giving them a sequence of events for writing RTL simulation
> :-)

yeah, it took longer than expected (been busy lately), but here's an
example trace with all trace points enabled:

# tracer: nop
#
# entries-in-buffer/entries-written: 1038/1038   #P:1
#
#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /     delay
#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
#              | |       |   ||||       |         |
          <idle>-0     [000] d.h.   155.653881: dwc3_readl: add fa39c40c value 00000004
          <idle>-0     [000] d.h.   155.653903: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.653908: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   155.653912: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   155.653915: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   155.653918: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   155.654660: dwc3_event: event 00000301

    irq/200-dwc3-765   [000] d...   155.654667: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.654679: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   155.654682: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.739475: dwc3_readl: add fa39c40c value 00000004
          <idle>-0     [000] d.h.   155.739485: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.739489: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   155.739492: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   155.739495: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   155.739501: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   155.739553: dwc3_event: event 00050301

    irq/200-dwc3-765   [000] d...   155.739556: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.739562: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   155.739565: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.742529: dwc3_readl: add fa39c40c value 00000004
          <idle>-0     [000] d.h.   155.742535: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.742538: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   155.742544: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   155.742547: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   155.742550: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   155.742580: dwc3_event: event 00030301

    irq/200-dwc3-765   [000] d...   155.742613: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.742617: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   155.742621: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.869413: dwc3_readl: add fa39c40c value 00000004
          <idle>-0     [000] d.h.   155.869420: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.869423: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   155.869427: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   155.869430: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   155.869433: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   155.869468: dwc3_event: event 00000101

    irq/200-dwc3-765   [000] d...   155.870011: dwc3_readl: add fa39c704 value 80000000
    irq/200-dwc3-765   [000] d...   155.870020: dwc3_writel: addr fa39c704 value 80000000
    irq/200-dwc3-765   [000] d...   155.870032: dwc3_readl: add fa39c700 value 00080800
    irq/200-dwc3-765   [000] d...   155.870035: dwc3_writel: addr fa39c700 value 00080800
    irq/200-dwc3-765   [000] d...   155.870039: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.870042: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   155.870045: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.880284: dwc3_readl: add fa39c40c value 00000008
          <idle>-0     [000] d.h.   155.880292: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.880298: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   155.880302: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   155.880305: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   155.880308: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   155.880358: dwc3_event: event 00000201

    irq/200-dwc3-765   [000] d...   155.880361: dwc3_readl: add fa39c70c value 00020000
    irq/200-dwc3-765   [000] d...   155.880366: dwc3_readl: add fa39c700 value 00080800
    irq/200-dwc3-765   [000] d...   155.880369: dwc3_writel: addr fa39c700 value 00480800
    irq/200-dwc3-765   [000] d...   155.880375: dwc3_readl: add fa39c704 value 80000000
    irq/200-dwc3-765   [000] d...   155.880378: dwc3_writel: addr fa39c704 value 8c000000
    irq/200-dwc3-765   [000] d...   155.880383: dwc3_writel: addr fa39c808 value 80000200
    irq/200-dwc3-765   [000] d...   155.880386: dwc3_writel: addr fa39c804 value 00000500
    irq/200-dwc3-765   [000] d...   155.880388: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   155.880391: dwc3_writel: addr fa39c80c value 00000401
    irq/200-dwc3-765   [000] d...   155.880394: dwc3_readl: add fa39c80c value 00000001
    irq/200-dwc3-765   [000] d...   155.880399: dwc3_writel: addr fa39c818 value 80000200
    irq/200-dwc3-765   [000] d...   155.880402: dwc3_writel: addr fa39c814 value 02000500
    irq/200-dwc3-765   [000] d...   155.880405: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   155.880408: dwc3_writel: addr fa39c81c value 00000401
    irq/200-dwc3-765   [000] d...   155.880411: dwc3_readl: add fa39c81c value 00000001
    irq/200-dwc3-765   [000] d...   155.880414: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.880417: dwc3_event: event 00000301

    irq/200-dwc3-765   [000] d...   155.880419: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.880424: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   155.880427: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.942202: dwc3_readl: add fa39c40c value 00000008
          <idle>-0     [000] d.h.   155.942210: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.942213: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   155.942217: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   155.942220: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   155.942225: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   155.942261: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   155.942266: dwc3_ep0: Transfer Complete while ep0out in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   155.942273: dwc3_ep0: Setup Phase
    irq/200-dwc3-765   [000] d...   155.942277: dwc3_ctrl_req: bRequestType 01 bRequest 0b wValue 0000 wIndex 0000 wLength 0
    irq/200-dwc3-765   [000] d...   155.942280: dwc3_ep0: Forwarding to gadget driver

    irq/200-dwc3-765   [000] d...   155.942290: dwc3_ep0: queueing request ed1e60c0 to ep0out length 18 state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   155.942305: dwc3_writel: addr fa39c818 value 00000000
    irq/200-dwc3-765   [000] d...   155.942308: dwc3_writel: addr fa39c814 value ae845000
    irq/200-dwc3-765   [000] d...   155.942314: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   155.942317: dwc3_writel: addr fa39c81c value 00000406
    irq/200-dwc3-765   [000] d...   155.942320: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   155.942324: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   155.942329: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.942332: dwc3_event: event 000010c2

    irq/200-dwc3-765   [000] d...   155.942334: dwc3_ep0: Transfer Not Ready while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   155.942338: dwc3_ep0: Control Data
    irq/200-dwc3-765   [000] d...   155.942343: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.942345: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   155.942348: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   155.942356: dwc3_readl: add fa39c40c value 00000008
    irq/200-dwc3-765   [000] d.h.   155.942360: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   155.942363: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   155.942366: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   155.942371: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   155.942374: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   155.942383: dwc3_event: event 0000c042

    irq/200-dwc3-765   [000] d...   155.942385: dwc3_ep0: Transfer Complete while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   155.942389: dwc3_ep0: Data Phase
    irq/200-dwc3-765   [000] d...   155.942395: dwc3_gadget_giveback: ep0out: req ed1e60c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   155.942399: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.942402: dwc3_event: event 000020c0

    irq/200-dwc3-765   [000] d...   155.942404: dwc3_ep0: Transfer Not Ready while ep0out in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   155.942407: dwc3_ep0: Control Status
    irq/200-dwc3-765   [000] d...   155.942412: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   155.942415: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   155.942418: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   155.942421: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   155.942424: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   155.942427: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   155.942429: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.942434: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   155.942437: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.942488: dwc3_readl: add fa39c40c value 00000004
          <idle>-0     [000] d.h.   155.942494: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.942497: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   155.942500: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   155.942503: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   155.942508: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   155.942540: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   155.942543: dwc3_ep0: Transfer Complete while ep0out in state 'Status Phase'
    irq/200-dwc3-765   [000] d...   155.942548: dwc3_ep0: Status Phase
    irq/200-dwc3-765   [000] d...   155.942551: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   155.942554: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   155.942557: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   155.942560: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   155.942565: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   155.942568: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   155.942571: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.942574: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   155.942577: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.945817: dwc3_readl: add fa39c40c value 00000004
          <idle>-0     [000] d.h.   155.945822: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.945828: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   155.945831: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   155.945834: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   155.945837: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   155.945867: dwc3_event: event 00050301

    irq/200-dwc3-765   [000] d...   155.945870: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.945874: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   155.945877: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.946319: dwc3_readl: add fa39c40c value 00000004
          <idle>-0     [000] d.h.   155.946323: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.946326: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   155.946329: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   155.946332: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   155.946335: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   155.946363: dwc3_event: event 00000101

    irq/200-dwc3-765   [000] d...   155.946701: dwc3_readl: add fa39c704 value 8c000000
    irq/200-dwc3-765   [000] d...   155.946715: dwc3_writel: addr fa39c704 value 8c000000
    irq/200-dwc3-765   [000] d...   155.946722: dwc3_readl: add fa39c700 value 00480800
    irq/200-dwc3-765   [000] d...   155.946725: dwc3_writel: addr fa39c700 value 00480800
    irq/200-dwc3-765   [000] d...   155.946729: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.946732: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   155.946735: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.953302: dwc3_readl: add fa39c40c value 00000008
          <idle>-0     [000] d.h.   155.953314: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   155.953317: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   155.953321: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   155.953324: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   155.953327: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   155.953375: dwc3_event: event 00000201

    irq/200-dwc3-765   [000] d...   155.953378: dwc3_readl: add fa39c70c value 0003ad98
    irq/200-dwc3-765   [000] d...   155.953383: dwc3_readl: add fa39c700 value 00480800
    irq/200-dwc3-765   [000] d...   155.953389: dwc3_writel: addr fa39c700 value 00480800
    irq/200-dwc3-765   [000] d...   155.953392: dwc3_readl: add fa39c704 value 8c000000
    irq/200-dwc3-765   [000] d...   155.953395: dwc3_writel: addr fa39c704 value 8c000000
    irq/200-dwc3-765   [000] d...   155.953400: dwc3_writel: addr fa39c808 value 80000200
    irq/200-dwc3-765   [000] d...   155.953403: dwc3_writel: addr fa39c804 value 00000500
    irq/200-dwc3-765   [000] d...   155.953405: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   155.953408: dwc3_writel: addr fa39c80c value 00000401
    irq/200-dwc3-765   [000] d...   155.953413: dwc3_readl: add fa39c80c value 00000001
    irq/200-dwc3-765   [000] d...   155.953417: dwc3_writel: addr fa39c818 value 80000200
    irq/200-dwc3-765   [000] d...   155.953420: dwc3_writel: addr fa39c814 value 02000500
    irq/200-dwc3-765   [000] d...   155.953423: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   155.953425: dwc3_writel: addr fa39c81c value 00000401
    irq/200-dwc3-765   [000] d...   155.953428: dwc3_readl: add fa39c81c value 00000001
    irq/200-dwc3-765   [000] d...   155.953431: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.953434: dwc3_event: event 00000301

    irq/200-dwc3-765   [000] d...   155.953438: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   155.953442: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   155.953445: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.015165: dwc3_readl: add fa39c40c value 00000008
          <idle>-0     [000] d.h.   156.015171: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.015174: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.015178: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.015183: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.015186: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.015226: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.015230: dwc3_ep0: Transfer Complete while ep0out in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.015236: dwc3_ep0: Setup Phase
    irq/200-dwc3-765   [000] d...   156.015239: dwc3_ctrl_req: bRequestType 01 bRequest 0b wValue 0000 wIndex 0000 wLength 0
    irq/200-dwc3-765   [000] d...   156.015243: dwc3_ep0: USB_REQ_SET_ADDRESS

    irq/200-dwc3-765   [000] d...   156.015246: dwc3_readl: add fa39c700 value 00480800
    irq/200-dwc3-765   [000] d...   156.015249: dwc3_writel: addr fa39c700 value 00480890
    irq/200-dwc3-765   [000] d...   156.015288: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.015292: dwc3_event: event 000020c2

    irq/200-dwc3-765   [000] d...   156.015294: dwc3_ep0: Transfer Not Ready while ep0in in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.015298: dwc3_ep0: Control Status
    irq/200-dwc3-765   [000] d...   156.015302: dwc3_writel: addr fa39c818 value 00000000
    irq/200-dwc3-765   [000] d...   156.015305: dwc3_writel: addr fa39c814 value ae845000
    irq/200-dwc3-765   [000] d...   156.015308: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   156.015311: dwc3_writel: addr fa39c81c value 00000406
    irq/200-dwc3-765   [000] d...   156.015316: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.015319: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.015322: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.015326: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.015328: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.015337: dwc3_readl: add fa39c40c value 00000004
    irq/200-dwc3-765   [000] d.h.   156.015340: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.015345: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.015348: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.015351: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.015354: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.015365: dwc3_event: event 0000c042

    irq/200-dwc3-765   [000] d...   156.015367: dwc3_ep0: Transfer Complete while ep0in in state 'Status Phase'
    irq/200-dwc3-765   [000] d...   156.015371: dwc3_ep0: Status Phase
    irq/200-dwc3-765   [000] d...   156.015373: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.015379: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.015381: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.015384: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.015387: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.015390: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.015393: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.015396: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.015401: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.025916: dwc3_readl: add fa39c40c value 00000008
          <idle>-0     [000] d.h.   156.025922: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.025926: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.025929: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.025932: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.025935: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.025970: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.025975: dwc3_ep0: Transfer Complete while ep0out in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.025979: dwc3_ep0: Setup Phase
    irq/200-dwc3-765   [000] d...   156.025981: dwc3_ctrl_req: bRequestType 01 bRequest 0b wValue 0000 wIndex 0000 wLength 0
    irq/200-dwc3-765   [000] d...   156.025984: dwc3_ep0: Forwarding to gadget driver

    irq/200-dwc3-765   [000] d...   156.025992: dwc3_ep0: queueing request ed1e60c0 to ep0out length 18 state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.026002: dwc3_writel: addr fa39c818 value 00000000
    irq/200-dwc3-765   [000] d...   156.026006: dwc3_writel: addr fa39c814 value ae845000
    irq/200-dwc3-765   [000] d...   156.026009: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   156.026014: dwc3_writel: addr fa39c81c value 00000406
    irq/200-dwc3-765   [000] d...   156.026017: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.026021: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.026025: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026028: dwc3_event: event 000010c2

    irq/200-dwc3-765   [000] d...   156.026030: dwc3_ep0: Transfer Not Ready while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.026034: dwc3_ep0: Control Data
    irq/200-dwc3-765   [000] d...   156.026036: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026041: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.026044: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.026051: dwc3_readl: add fa39c40c value 00000008
    irq/200-dwc3-765   [000] d.h.   156.026054: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.026057: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.026060: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.026063: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.026068: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.026077: dwc3_event: event 0000c042

    irq/200-dwc3-765   [000] d...   156.026079: dwc3_ep0: Transfer Complete while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.026082: dwc3_ep0: Data Phase
    irq/200-dwc3-765   [000] d...   156.026088: dwc3_gadget_giveback: ep0out: req ed1e60c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.026091: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026094: dwc3_event: event 000020c0

    irq/200-dwc3-765   [000] d...   156.026096: dwc3_ep0: Transfer Not Ready while ep0out in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.026099: dwc3_ep0: Control Status
    irq/200-dwc3-765   [000] d...   156.026101: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.026107: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.026109: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.026112: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.026115: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.026118: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.026121: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026124: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.026129: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.026135: dwc3_readl: add fa39c40c value 00000004
    irq/200-dwc3-765   [000] d.h.   156.026138: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.026141: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.026144: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.026147: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.026150: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.026158: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.026162: dwc3_ep0: Transfer Complete while ep0out in state 'Status Phase'
    irq/200-dwc3-765   [000] d...   156.026166: dwc3_ep0: Status Phase
    irq/200-dwc3-765   [000] d...   156.026168: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.026171: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.026174: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.026177: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.026180: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.026185: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.026188: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026191: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.026194: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.026233: dwc3_readl: add fa39c40c value 00000008
          <idle>-0     [000] d.h.   156.026238: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.026241: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.026247: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.026250: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.026252: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.026279: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.026282: dwc3_ep0: Transfer Complete while ep0out in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.026286: dwc3_ep0: Setup Phase
    irq/200-dwc3-765   [000] d...   156.026288: dwc3_ctrl_req: bRequestType 01 bRequest 0b wValue 0000 wIndex 0000 wLength 0
    irq/200-dwc3-765   [000] d...   156.026291: dwc3_ep0: Forwarding to gadget driver

    irq/200-dwc3-765   [000] d...   156.026296: dwc3_ep0: queueing request ed1e60c0 to ep0out length 5 state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.026305: dwc3_writel: addr fa39c818 value 00000000
    irq/200-dwc3-765   [000] d...   156.026308: dwc3_writel: addr fa39c814 value ae845000
    irq/200-dwc3-765   [000] d...   156.026311: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   156.026314: dwc3_writel: addr fa39c81c value 00000406
    irq/200-dwc3-765   [000] d...   156.026317: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.026320: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.026325: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026328: dwc3_event: event 000010c2

    irq/200-dwc3-765   [000] d...   156.026332: dwc3_ep0: Transfer Not Ready while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.026335: dwc3_ep0: Control Data
    irq/200-dwc3-765   [000] d...   156.026337: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026340: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.026343: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.026350: dwc3_readl: add fa39c40c value 00000008
    irq/200-dwc3-765   [000] d.h.   156.026354: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.026359: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.026362: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.026365: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.026368: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.026376: dwc3_event: event 0000c042

    irq/200-dwc3-765   [000] d...   156.026378: dwc3_ep0: Transfer Complete while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.026382: dwc3_ep0: Data Phase
    irq/200-dwc3-765   [000] d...   156.026385: dwc3_gadget_giveback: ep0out: req ed1e60c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.026388: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026391: dwc3_event: event 000020c0

    irq/200-dwc3-765   [000] d...   156.026395: dwc3_ep0: Transfer Not Ready while ep0out in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.026398: dwc3_ep0: Control Status
    irq/200-dwc3-765   [000] d...   156.026401: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.026403: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.026406: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.026409: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.026412: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.026417: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.026420: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026423: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.026426: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.026462: dwc3_readl: add fa39c40c value 00000004
          <idle>-0     [000] d.h.   156.026467: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.026470: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.026476: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.026478: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.026481: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.026507: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.026510: dwc3_ep0: Transfer Complete while ep0out in state 'Status Phase'
    irq/200-dwc3-765   [000] d...   156.026515: dwc3_ep0: Status Phase
    irq/200-dwc3-765   [000] d...   156.026517: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.026520: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.026526: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.026528: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.026532: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.026535: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.026538: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026541: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.026544: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.026553: dwc3_readl: add fa39c40c value 00000008
    irq/200-dwc3-765   [000] d.h.   156.026556: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.026559: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.026562: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.026565: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.026568: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.026575: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.026577: dwc3_ep0: Transfer Complete while ep0out in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.026583: dwc3_ep0: Setup Phase
    irq/200-dwc3-765   [000] d...   156.026585: dwc3_ctrl_req: bRequestType 01 bRequest 0b wValue 0000 wIndex 0000 wLength 0
    irq/200-dwc3-765   [000] d...   156.026588: dwc3_ep0: Forwarding to gadget driver

    irq/200-dwc3-765   [000] d...   156.026592: dwc3_ep0: queueing request ed1e60c0 to ep0out length 22 state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.026598: dwc3_writel: addr fa39c818 value 00000000
    irq/200-dwc3-765   [000] d...   156.026601: dwc3_writel: addr fa39c814 value ae845000
    irq/200-dwc3-765   [000] d...   156.026604: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   156.026607: dwc3_writel: addr fa39c81c value 00000406
    irq/200-dwc3-765   [000] d...   156.026612: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.026615: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.026619: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026622: dwc3_event: event 000010c2

    irq/200-dwc3-765   [000] d...   156.026624: dwc3_ep0: Transfer Not Ready while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.026627: dwc3_ep0: Control Data
    irq/200-dwc3-765   [000] d...   156.026629: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026632: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.026638: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.026644: dwc3_readl: add fa39c40c value 00000008
    irq/200-dwc3-765   [000] d.h.   156.026647: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.026650: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.026653: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.026656: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.026659: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.026667: dwc3_event: event 0000c042

    irq/200-dwc3-765   [000] d...   156.026670: dwc3_ep0: Transfer Complete while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.026674: dwc3_ep0: Data Phase
    irq/200-dwc3-765   [000] d...   156.026677: dwc3_gadget_giveback: ep0out: req ed1e60c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.026680: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026683: dwc3_event: event 000020c0

    irq/200-dwc3-765   [000] d...   156.026685: dwc3_ep0: Transfer Not Ready while ep0out in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.026688: dwc3_ep0: Control Status
    irq/200-dwc3-765   [000] d...   156.026690: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.026693: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.026698: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.026701: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.026704: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.026707: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.026710: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026713: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.026715: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.026763: dwc3_readl: add fa39c40c value 00000004
          <idle>-0     [000] d.h.   156.026768: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.026771: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.026774: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.026777: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.026780: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.026812: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.026814: dwc3_ep0: Transfer Complete while ep0out in state 'Status Phase'
    irq/200-dwc3-765   [000] d...   156.026821: dwc3_ep0: Status Phase
    irq/200-dwc3-765   [000] d...   156.026824: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.026827: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.026830: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.026832: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.026835: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.026838: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.026843: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026846: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.026849: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.026855: dwc3_readl: add fa39c40c value 00000008
    irq/200-dwc3-765   [000] d.h.   156.026859: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.026861: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.026864: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.026870: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.026872: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.026880: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.026882: dwc3_ep0: Transfer Complete while ep0out in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.026886: dwc3_ep0: Setup Phase
    irq/200-dwc3-765   [000] d...   156.026888: dwc3_ctrl_req: bRequestType 01 bRequest 0b wValue 0000 wIndex 0000 wLength 0
    irq/200-dwc3-765   [000] d...   156.026891: dwc3_ep0: Forwarding to gadget driver

    irq/200-dwc3-765   [000] d...   156.026898: dwc3_ep0: queueing request ed1e60c0 to ep0out length 9 state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.026905: dwc3_writel: addr fa39c818 value 00000000
    irq/200-dwc3-765   [000] d...   156.026911: dwc3_writel: addr fa39c814 value ae845000
    irq/200-dwc3-765   [000] d...   156.026913: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   156.026916: dwc3_writel: addr fa39c81c value 00000406
    irq/200-dwc3-765   [000] d...   156.026919: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.026922: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.026926: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026930: dwc3_event: event 000010c2

    irq/200-dwc3-765   [000] d...   156.026931: dwc3_ep0: Transfer Not Ready while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.026937: dwc3_ep0: Control Data
    irq/200-dwc3-765   [000] d...   156.026939: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026942: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.026945: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.026952: dwc3_readl: add fa39c40c value 0000000c
    irq/200-dwc3-765   [000] d.h.   156.026955: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.026958: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.026963: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.026966: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.026969: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.026976: dwc3_event: event 000090c2

    irq/200-dwc3-765   [000] d...   156.026978: dwc3_ep0: Transfer Not Ready while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.026982: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.026985: dwc3_event: event 0000c042

    irq/200-dwc3-765   [000] d...   156.026986: dwc3_ep0: Transfer Complete while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.026990: dwc3_ep0: Data Phase
    irq/200-dwc3-765   [000] d...   156.026993: dwc3_gadget_giveback: ep0out: req ed1e60c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.026998: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027001: dwc3_event: event 000020c0

    irq/200-dwc3-765   [000] d...   156.027002: dwc3_ep0: Transfer Not Ready while ep0out in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.027006: dwc3_ep0: Control Status
    irq/200-dwc3-765   [000] d...   156.027008: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.027011: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.027014: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.027016: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.027022: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.027025: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.027027: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027030: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.027033: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.027069: dwc3_readl: add fa39c40c value 00000004
          <idle>-0     [000] d.h.   156.027074: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.027080: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.027083: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.027086: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.027089: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.027114: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.027117: dwc3_ep0: Transfer Complete while ep0out in state 'Status Phase'
    irq/200-dwc3-765   [000] d...   156.027122: dwc3_ep0: Status Phase
    irq/200-dwc3-765   [000] d...   156.027124: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.027130: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.027133: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.027135: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.027139: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.027142: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.027144: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027147: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.027152: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.027159: dwc3_readl: add fa39c40c value 00000008
    irq/200-dwc3-765   [000] d.h.   156.027162: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.027165: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.027168: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.027171: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.027174: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.027181: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.027185: dwc3_ep0: Transfer Complete while ep0out in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.027189: dwc3_ep0: Setup Phase
    irq/200-dwc3-765   [000] d...   156.027191: dwc3_ctrl_req: bRequestType 01 bRequest 0b wValue 0000 wIndex 0000 wLength 0
    irq/200-dwc3-765   [000] d...   156.027194: dwc3_ep0: Forwarding to gadget driver

    irq/200-dwc3-765   [000] d...   156.027200: dwc3_ep0: queueing request ed1e60c0 to ep0out length 32 state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.027205: dwc3_writel: addr fa39c818 value 00000000
    irq/200-dwc3-765   [000] d...   156.027209: dwc3_writel: addr fa39c814 value ae845000
    irq/200-dwc3-765   [000] d...   156.027212: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   156.027217: dwc3_writel: addr fa39c81c value 00000406
    irq/200-dwc3-765   [000] d...   156.027220: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.027223: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.027227: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027230: dwc3_event: event 000010c2

    irq/200-dwc3-765   [000] d...   156.027232: dwc3_ep0: Transfer Not Ready while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.027236: dwc3_ep0: Control Data
    irq/200-dwc3-765   [000] d...   156.027237: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027243: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.027245: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.027265: dwc3_readl: add fa39c40c value 00000008
          <idle>-0     [000] d.h.   156.027269: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.027272: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.027275: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.027278: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.027283: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.027299: dwc3_event: event 0000c042

    irq/200-dwc3-765   [000] d...   156.027302: dwc3_ep0: Transfer Complete while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.027305: dwc3_ep0: Data Phase
    irq/200-dwc3-765   [000] d...   156.027309: dwc3_gadget_giveback: ep0out: req ed1e60c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.027311: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027315: dwc3_event: event 000020c0

    irq/200-dwc3-765   [000] d...   156.027316: dwc3_ep0: Transfer Not Ready while ep0out in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.027320: dwc3_ep0: Control Status
    irq/200-dwc3-765   [000] d...   156.027322: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.027327: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.027330: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.027333: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.027336: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.027339: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.027342: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027345: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.027350: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.027388: dwc3_readl: add fa39c40c value 00000004
          <idle>-0     [000] d.h.   156.027393: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.027397: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.027400: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.027403: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.027406: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.027435: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.027439: dwc3_ep0: Transfer Complete while ep0out in state 'Status Phase'
    irq/200-dwc3-765   [000] d...   156.027444: dwc3_ep0: Status Phase
    irq/200-dwc3-765   [000] d...   156.027446: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.027449: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.027452: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.027455: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.027458: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.027463: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.027466: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027469: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.027471: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.027502: dwc3_readl: add fa39c40c value 00000008
          <idle>-0     [000] d.h.   156.027507: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.027509: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.027515: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.027518: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.027521: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.027546: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.027548: dwc3_ep0: Transfer Complete while ep0out in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.027553: dwc3_ep0: Setup Phase
    irq/200-dwc3-765   [000] d...   156.027555: dwc3_ctrl_req: bRequestType 01 bRequest 0b wValue 0000 wIndex 0000 wLength 0
    irq/200-dwc3-765   [000] d...   156.027557: dwc3_ep0: Forwarding to gadget driver

    irq/200-dwc3-765   [000] d...   156.027563: dwc3_ep0: queueing request ed1e60c0 to ep0out length 4 state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.027572: dwc3_writel: addr fa39c818 value 00000000
    irq/200-dwc3-765   [000] d...   156.027575: dwc3_writel: addr fa39c814 value ae845000
    irq/200-dwc3-765   [000] d...   156.027578: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   156.027580: dwc3_writel: addr fa39c81c value 00000406
    irq/200-dwc3-765   [000] d...   156.027584: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.027587: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.027591: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027594: dwc3_event: event 000010c2

    irq/200-dwc3-765   [000] d...   156.027598: dwc3_ep0: Transfer Not Ready while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.027601: dwc3_ep0: Control Data
    irq/200-dwc3-765   [000] d...   156.027603: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027606: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.027609: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.027616: dwc3_readl: add fa39c40c value 00000008
    irq/200-dwc3-765   [000] d.h.   156.027619: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.027625: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.027628: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.027631: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.027634: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.027642: dwc3_event: event 0000c042

    irq/200-dwc3-765   [000] d...   156.027644: dwc3_ep0: Transfer Complete while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.027647: dwc3_ep0: Data Phase
    irq/200-dwc3-765   [000] d...   156.027650: dwc3_gadget_giveback: ep0out: req ed1e60c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.027654: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027657: dwc3_event: event 000020c0

    irq/200-dwc3-765   [000] d...   156.027660: dwc3_ep0: Transfer Not Ready while ep0out in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.027664: dwc3_ep0: Control Status
    irq/200-dwc3-765   [000] d...   156.027666: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.027669: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.027672: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.027674: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.027678: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.027682: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.027685: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027688: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.027691: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.027738: dwc3_readl: add fa39c40c value 00000004
          <idle>-0     [000] d.h.   156.027743: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.027746: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.027752: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.027755: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.027758: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.027788: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.027791: dwc3_ep0: Transfer Complete while ep0out in state 'Status Phase'
    irq/200-dwc3-765   [000] d...   156.027795: dwc3_ep0: Status Phase
    irq/200-dwc3-765   [000] d...   156.027798: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.027801: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.027806: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.027809: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.027812: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.027815: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.027818: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027821: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.027824: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.027843: dwc3_readl: add fa39c40c value 00000008
          <idle>-0     [000] d.h.   156.027847: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.027850: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.027853: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.027856: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.027859: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.027875: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.027877: dwc3_ep0: Transfer Complete while ep0out in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.027884: dwc3_ep0: Setup Phase
    irq/200-dwc3-765   [000] d...   156.027885: dwc3_ctrl_req: bRequestType 01 bRequest 0b wValue 0000 wIndex 0000 wLength 0
    irq/200-dwc3-765   [000] d...   156.027888: dwc3_ep0: Forwarding to gadget driver

    irq/200-dwc3-765   [000] d...   156.027896: dwc3_ep0: queueing request ed1e60c0 to ep0out length 32 state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.027903: dwc3_writel: addr fa39c818 value 00000000
    irq/200-dwc3-765   [000] d...   156.027906: dwc3_writel: addr fa39c814 value ae845000
    irq/200-dwc3-765   [000] d...   156.027909: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   156.027912: dwc3_writel: addr fa39c81c value 00000406
    irq/200-dwc3-765   [000] d...   156.027917: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.027920: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.027925: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027928: dwc3_event: event 000010c2

    irq/200-dwc3-765   [000] d...   156.027929: dwc3_ep0: Transfer Not Ready while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.027933: dwc3_ep0: Control Data
    irq/200-dwc3-765   [000] d...   156.027935: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027938: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.027943: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.027949: dwc3_readl: add fa39c40c value 00000008
    irq/200-dwc3-765   [000] d.h.   156.027952: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.027955: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.027958: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.027961: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.027964: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.027971: dwc3_event: event 0000c042

    irq/200-dwc3-765   [000] d...   156.027975: dwc3_ep0: Transfer Complete while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.027979: dwc3_ep0: Data Phase
    irq/200-dwc3-765   [000] d...   156.027982: dwc3_gadget_giveback: ep0out: req ed1e60c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.027985: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.027988: dwc3_event: event 000020c0

    irq/200-dwc3-765   [000] d...   156.027989: dwc3_ep0: Transfer Not Ready while ep0out in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.027993: dwc3_ep0: Control Status
    irq/200-dwc3-765   [000] d...   156.027995: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.027998: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.028003: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.028006: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.028009: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.028012: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.028015: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.028018: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.028020: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.028063: dwc3_readl: add fa39c40c value 00000004
          <idle>-0     [000] d.h.   156.028068: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.028071: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.028074: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.028077: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.028080: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.028112: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.028114: dwc3_ep0: Transfer Complete while ep0out in state 'Status Phase'
    irq/200-dwc3-765   [000] d...   156.028121: dwc3_ep0: Status Phase
    irq/200-dwc3-765   [000] d...   156.028124: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.028127: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.028130: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.028133: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.028136: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.028139: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.028144: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.028147: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.028150: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.028157: dwc3_readl: add fa39c40c value 00000008
    irq/200-dwc3-765   [000] d.h.   156.028160: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.028163: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.028166: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.028171: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.028174: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.028181: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.028183: dwc3_ep0: Transfer Complete while ep0out in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.028187: dwc3_ep0: Setup Phase
    irq/200-dwc3-765   [000] d...   156.028189: dwc3_ctrl_req: bRequestType 01 bRequest 0b wValue 0000 wIndex 0000 wLength 0
    irq/200-dwc3-765   [000] d...   156.028192: dwc3_ep0: Forwarding to gadget driver

    irq/200-dwc3-765   [000] d...   156.028199: dwc3_ep0: queueing request ed1e60c0 to ep0out length 110 state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.028205: dwc3_writel: addr fa39c818 value 00000000
    irq/200-dwc3-765   [000] d...   156.028211: dwc3_writel: addr fa39c814 value ae845000
    irq/200-dwc3-765   [000] d...   156.028214: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   156.028216: dwc3_writel: addr fa39c81c value 00000406
    irq/200-dwc3-765   [000] d...   156.028219: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.028222: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.028227: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.028230: dwc3_event: event 000010c2

    irq/200-dwc3-765   [000] d...   156.028232: dwc3_ep0: Transfer Not Ready while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.028237: dwc3_ep0: Control Data
    irq/200-dwc3-765   [000] d...   156.028239: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.028243: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.028245: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.028252: dwc3_readl: add fa39c40c value 00000008
    irq/200-dwc3-765   [000] d.h.   156.028255: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.028258: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.028263: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.028266: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.028269: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.028277: dwc3_event: event 0000c042

    irq/200-dwc3-765   [000] d...   156.028279: dwc3_ep0: Transfer Complete while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.028282: dwc3_ep0: Data Phase
    irq/200-dwc3-765   [000] d...   156.028285: dwc3_gadget_giveback: ep0out: req ed1e60c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.028288: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.028291: dwc3_event: event 000020c0

    irq/200-dwc3-765   [000] d...   156.028293: dwc3_ep0: Transfer Not Ready while ep0out in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.028299: dwc3_ep0: Control Status
    irq/200-dwc3-765   [000] d...   156.028301: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.028304: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.028306: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.028309: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.028312: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.028315: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.028321: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.028323: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.028326: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.028369: dwc3_readl: add fa39c40c value 00000004
          <idle>-0     [000] d.h.   156.028373: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.028376: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.028379: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.028385: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.028388: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.028418: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.028421: dwc3_ep0: Transfer Complete while ep0out in state 'Status Phase'
    irq/200-dwc3-765   [000] d...   156.028425: dwc3_ep0: Status Phase
    irq/200-dwc3-765   [000] d...   156.028428: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.028431: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.028434: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.028439: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.028442: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.028445: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.028448: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.028451: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.028454: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.028956: dwc3_readl: add fa39c40c value 00000008
          <idle>-0     [000] d.h.   156.028963: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.028966: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.028969: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.028972: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.028975: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.029005: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.029008: dwc3_ep0: Transfer Complete while ep0out in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.029012: dwc3_ep0: Setup Phase
    irq/200-dwc3-765   [000] d...   156.029014: dwc3_ctrl_req: bRequestType 01 bRequest 0b wValue 0000 wIndex 0000 wLength 0
    irq/200-dwc3-765   [000] d...   156.029019: dwc3_ep0: USB_REQ_SET_CONFIGURATION

    irq/200-dwc3-765   [000] d...   156.036387: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.036395: dwc3_writel: addr fa39c804 value 00000000
    irq/200-dwc3-765   [000] d...   156.036399: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.036401: dwc3_writel: addr fa39c80c value 00020409
    irq/200-dwc3-765   [000] d...   156.036405: dwc3_readl: add fa39c80c value 00020009
    irq/200-dwc3-765   [000] d...   156.036409: dwc3_writel: addr fa39c838 value 00021004
    irq/200-dwc3-765   [000] d...   156.036415: dwc3_writel: addr fa39c834 value 06000500
    irq/200-dwc3-765   [000] d...   156.036418: dwc3_writel: addr fa39c830 value 00000000
    irq/200-dwc3-765   [000] d...   156.036421: dwc3_writel: addr fa39c83c value 00000401
    irq/200-dwc3-765   [000] d...   156.036424: dwc3_readl: add fa39c83c value 00000001
    irq/200-dwc3-765   [000] d...   156.036427: dwc3_writel: addr fa39c838 value 00000001
    irq/200-dwc3-765   [000] d...   156.036430: dwc3_writel: addr fa39c834 value 00000000
    irq/200-dwc3-765   [000] d...   156.036432: dwc3_writel: addr fa39c830 value 00000000
    irq/200-dwc3-765   [000] d...   156.036437: dwc3_writel: addr fa39c83c value 00000402
    irq/200-dwc3-765   [000] d...   156.036440: dwc3_readl: add fa39c83c value 00030002
    irq/200-dwc3-765   [000] d...   156.036443: dwc3_readl: add fa39c720 value 00000003
    irq/200-dwc3-765   [000] d...   156.036446: dwc3_writel: addr fa39c720 value 0000000b
    irq/200-dwc3-765   [000] d...   156.036452: dwc3_writel: addr fa39c828 value 00001004
    irq/200-dwc3-765   [000] d...   156.036455: dwc3_writel: addr fa39c824 value 04000500
    irq/200-dwc3-765   [000] d...   156.036458: dwc3_writel: addr fa39c820 value 00000000
    irq/200-dwc3-765   [000] d...   156.036463: dwc3_writel: addr fa39c82c value 00000401
    irq/200-dwc3-765   [000] d...   156.036466: dwc3_readl: add fa39c82c value 00000001
    irq/200-dwc3-765   [000] d...   156.036469: dwc3_writel: addr fa39c828 value 00000001
    irq/200-dwc3-765   [000] d...   156.036471: dwc3_writel: addr fa39c824 value 00000000
    irq/200-dwc3-765   [000] d...   156.036474: dwc3_writel: addr fa39c820 value 00000000
    irq/200-dwc3-765   [000] d...   156.036477: dwc3_writel: addr fa39c82c value 00000402
    irq/200-dwc3-765   [000] d...   156.036480: dwc3_readl: add fa39c82c value 00040002
    irq/200-dwc3-765   [000] d...   156.036485: dwc3_readl: add fa39c720 value 0000000b
    irq/200-dwc3-765   [000] d...   156.036487: dwc3_writel: addr fa39c720 value 0000000f
    irq/200-dwc3-765   [000] d...   156.036785: dwc3_alloc_request: ep1out-bulk: req ed4b53c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036789: dwc3_alloc_request: ep1out-bulk: req ed4b52c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036791: dwc3_alloc_request: ep1out-bulk: req ed4b51c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036793: dwc3_alloc_request: ep1out-bulk: req ed4b5040 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036795: dwc3_alloc_request: ep1out-bulk: req ed3e5c40 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036797: dwc3_alloc_request: ep1out-bulk: req ed3e5b40 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036799: dwc3_alloc_request: ep1out-bulk: req ed3e5a40 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036800: dwc3_alloc_request: ep1out-bulk: req ed3e58c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036802: dwc3_alloc_request: ep1out-bulk: req ed3e57c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036804: dwc3_alloc_request: ep1out-bulk: req ed3e56c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036806: dwc3_alloc_request: ep1in-bulk: req ed3e55c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036808: dwc3_alloc_request: ep1in-bulk: req ed3e54c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036810: dwc3_alloc_request: ep1in-bulk: req ed3e53c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036812: dwc3_alloc_request: ep1in-bulk: req ed3e52c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036814: dwc3_alloc_request: ep1in-bulk: req ed3e51c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036816: dwc3_alloc_request: ep1in-bulk: req ed3e50c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036824: dwc3_alloc_request: ep1in-bulk: req ed693040 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036826: dwc3_alloc_request: ep1in-bulk: req ed5cda40 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036828: dwc3_alloc_request: ep1in-bulk: req ed5cd940 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.036829: dwc3_alloc_request: ep1in-bulk: req ed5cd9c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.037037: dwc3_ep0: queueing request ed1e60c0 to ep0out length 0 state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.037052: dwc3_readl: add fa39c704 value 8c000000
    irq/200-dwc3-765   [000] d...   156.037059: dwc3_writel: addr fa39c704 value 8c000a00
    irq/200-dwc3-765   [000] d...   156.037062: dwc3_ep0: resize FIFOs flag SET
    irq/200-dwc3-765   [000] d...   156.037067: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.037071: dwc3_event: event 000020c2

    irq/200-dwc3-765   [000] d...   156.037077: dwc3_ep0: Transfer Not Ready while ep0in in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.037081: dwc3_ep0: Control Status
    irq/200-dwc3-765   [000] d...   156.037083: dwc3_ep0: Resizing FIFOs
    irq/200-dwc3-765   [000] d...   156.037087: dwc3_writel: addr fa39c818 value 00000000
    irq/200-dwc3-765   [000] d...   156.037090: dwc3_writel: addr fa39c814 value ae845000
    irq/200-dwc3-765   [000] d...   156.037093: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   156.037096: dwc3_writel: addr fa39c81c value 00000406
    irq/200-dwc3-765   [000] d...   156.037101: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.037105: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.037107: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.037110: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.037113: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.H.   156.037244: dwc3_readl: add fa39c40c value 00000004
    irq/200-dwc3-765   [000] d.H.   156.037252: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.H.   156.037259: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.H.   156.037262: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.H.   156.037265: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.H.   156.037268: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.037287: dwc3_event: event 0000c042

    irq/200-dwc3-765   [000] d...   156.037290: dwc3_ep0: Transfer Complete while ep0in in state 'Status Phase'
    irq/200-dwc3-765   [000] d...   156.037294: dwc3_ep0: Status Phase
    irq/200-dwc3-765   [000] d...   156.037298: dwc3_gadget_giveback: ep0out: req ed1e60c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.037303: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.037308: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.037311: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.037314: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.037317: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.037321: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.037324: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.037327: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.037332: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.037340: dwc3_readl: add fa39c40c value 00000008
    irq/200-dwc3-765   [000] d.h.   156.037343: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.037346: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.037349: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.037352: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.037355: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.037363: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.037367: dwc3_ep0: Transfer Complete while ep0out in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.037371: dwc3_ep0: Setup Phase
    irq/200-dwc3-765   [000] d...   156.037375: dwc3_ctrl_req: bRequestType 01 bRequest 0b wValue 0000 wIndex 0000 wLength 0
    irq/200-dwc3-765   [000] d...   156.037377: dwc3_ep0: Forwarding to gadget driver

    irq/200-dwc3-765   [000] d...   156.037386: dwc3_ep0: queueing request ed1e60c0 to ep0out length 70 state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.037397: dwc3_writel: addr fa39c818 value 00000000
    irq/200-dwc3-765   [000] d...   156.037400: dwc3_writel: addr fa39c814 value ae845000
    irq/200-dwc3-765   [000] d...   156.037403: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   156.037408: dwc3_writel: addr fa39c81c value 00000406
    irq/200-dwc3-765   [000] d...   156.037411: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.037414: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.037419: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.037422: dwc3_event: event 000010c2

    irq/200-dwc3-765   [000] d...   156.037424: dwc3_ep0: Transfer Not Ready while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.037428: dwc3_ep0: Control Data
    irq/200-dwc3-765   [000] d...   156.037430: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.037435: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.037438: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.037445: dwc3_readl: add fa39c40c value 00000008
    irq/200-dwc3-765   [000] d.h.   156.037449: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.037451: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.037455: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.037458: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.037463: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.037470: dwc3_event: event 0000c042

    irq/200-dwc3-765   [000] d...   156.037472: dwc3_ep0: Transfer Complete while ep0in in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.037476: dwc3_ep0: Data Phase
    irq/200-dwc3-765   [000] d...   156.037479: dwc3_gadget_giveback: ep0out: req ed1e60c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.037482: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.037485: dwc3_event: event 000020c0

    irq/200-dwc3-765   [000] d...   156.037487: dwc3_ep0: Transfer Not Ready while ep0out in state 'Data Phase'
    irq/200-dwc3-765   [000] d...   156.037490: dwc3_ep0: Control Status
    irq/200-dwc3-765   [000] d...   156.037493: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.037498: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.037500: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.037503: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.037506: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.037509: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.037512: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.037515: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.037520: dwc3_writel: addr fa39c408 value 00000100
     kworker/0:2-732   [000] d.h.   156.037566: dwc3_readl: add fa39c40c value 00000004
     kworker/0:2-732   [000] d.h.   156.037571: dwc3_readl: add fa39c408 value 00000100
     kworker/0:2-732   [000] d.h.   156.037573: dwc3_writel: addr fa39c408 value 80000100
     kworker/0:2-732   [000] d.h.   156.037577: dwc3_readl: add fa39c41c value 00000000
     kworker/0:2-732   [000] d.h.   156.037580: dwc3_readl: add fa39c42c value 00000000
     kworker/0:2-732   [000] d.h.   156.037583: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.037615: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.037620: dwc3_ep0: Transfer Complete while ep0out in state 'Status Phase'
    irq/200-dwc3-765   [000] d...   156.037625: dwc3_ep0: Status Phase
    irq/200-dwc3-765   [000] d...   156.037628: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.037631: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.037634: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.037637: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.037640: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.037645: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.037648: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.037651: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.037654: dwc3_writel: addr fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.231093: dwc3_readl: add fa39c40c value 00000008
          <idle>-0     [000] d.h.   156.231106: dwc3_readl: add fa39c408 value 00000100
          <idle>-0     [000] d.h.   156.231111: dwc3_writel: addr fa39c408 value 80000100
          <idle>-0     [000] d.h.   156.231117: dwc3_readl: add fa39c41c value 00000000
          <idle>-0     [000] d.h.   156.231120: dwc3_readl: add fa39c42c value 00000000
          <idle>-0     [000] d.h.   156.231123: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.231180: dwc3_event: event 0000c040

    irq/200-dwc3-765   [000] d...   156.231185: dwc3_ep0: Transfer Complete while ep0out in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.231192: dwc3_ep0: Setup Phase
    irq/200-dwc3-765   [000] d...   156.231195: dwc3_ctrl_req: bRequestType 01 bRequest 0b wValue 0000 wIndex 0000 wLength 0
    irq/200-dwc3-765   [000] d...   156.231198: dwc3_ep0: Forwarding to gadget driver

    irq/200-dwc3-765   [000] d...   156.231632: dwc3_readl: add fa39c720 value 0000000f
    irq/200-dwc3-765   [000] d...   156.231644: dwc3_writel: addr fa39c720 value 00000007
    irq/200-dwc3-765   [000] d...   156.231651: dwc3_free_request: ep1out-bulk: req ed3e56c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231657: dwc3_free_request: ep1out-bulk: req ed3e57c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231660: dwc3_free_request: ep1out-bulk: req ed3e58c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231662: dwc3_free_request: ep1out-bulk: req ed3e5a40 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231664: dwc3_free_request: ep1out-bulk: req ed3e5b40 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231667: dwc3_free_request: ep1out-bulk: req ed3e5c40 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231669: dwc3_free_request: ep1out-bulk: req ed4b5040 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231672: dwc3_free_request: ep1out-bulk: req ed4b51c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231674: dwc3_free_request: ep1out-bulk: req ed4b52c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231676: dwc3_free_request: ep1out-bulk: req ed4b53c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231682: dwc3_readl: add fa39c720 value 00000007
    irq/200-dwc3-765   [000] d...   156.231685: dwc3_writel: addr fa39c720 value 00000003
    irq/200-dwc3-765   [000] d...   156.231689: dwc3_free_request: ep1in-bulk: req ed5cd9c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231692: dwc3_free_request: ep1in-bulk: req ed5cd940 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231695: dwc3_free_request: ep1in-bulk: req ed5cda40 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231697: dwc3_free_request: ep1in-bulk: req ed693040 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231700: dwc3_free_request: ep1in-bulk: req ed3e50c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231702: dwc3_free_request: ep1in-bulk: req ed3e51c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231705: dwc3_free_request: ep1in-bulk: req ed3e52c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231707: dwc3_free_request: ep1in-bulk: req ed3e53c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231710: dwc3_free_request: ep1in-bulk: req ed3e54c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231712: dwc3_free_request: ep1in-bulk: req ed3e55c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231747: dwc3_writel: addr fa39c838 value 00021004
    irq/200-dwc3-765   [000] d...   156.231751: dwc3_writel: addr fa39c834 value 06000500
    irq/200-dwc3-765   [000] d...   156.231754: dwc3_writel: addr fa39c830 value 00000000
    irq/200-dwc3-765   [000] d...   156.231757: dwc3_writel: addr fa39c83c value 00000401
    irq/200-dwc3-765   [000] d...   156.231762: dwc3_readl: add fa39c83c value 00000001
    irq/200-dwc3-765   [000] d...   156.231766: dwc3_writel: addr fa39c838 value 00000001
    irq/200-dwc3-765   [000] d...   156.231768: dwc3_writel: addr fa39c834 value 00000000
    irq/200-dwc3-765   [000] d...   156.231771: dwc3_writel: addr fa39c830 value 00000000
    irq/200-dwc3-765   [000] d...   156.231774: dwc3_writel: addr fa39c83c value 00000402
    irq/200-dwc3-765   [000] d...   156.231777: dwc3_readl: add fa39c83c value 00050002
    irq/200-dwc3-765   [000] d...   156.231780: dwc3_readl: add fa39c720 value 00000003
    irq/200-dwc3-765   [000] d...   156.231785: dwc3_writel: addr fa39c720 value 0000000b
    irq/200-dwc3-765   [000] d...   156.231789: dwc3_writel: addr fa39c828 value 00001004
    irq/200-dwc3-765   [000] d...   156.231792: dwc3_writel: addr fa39c824 value 04000500
    irq/200-dwc3-765   [000] d...   156.231795: dwc3_writel: addr fa39c820 value 00000000
    irq/200-dwc3-765   [000] d...   156.231798: dwc3_writel: addr fa39c82c value 00000401
    irq/200-dwc3-765   [000] d...   156.231801: dwc3_readl: add fa39c82c value 00000001
    irq/200-dwc3-765   [000] d...   156.231803: dwc3_writel: addr fa39c828 value 00000001
    irq/200-dwc3-765   [000] d...   156.231808: dwc3_writel: addr fa39c824 value 00000000
    irq/200-dwc3-765   [000] d...   156.231811: dwc3_writel: addr fa39c820 value 00000000
    irq/200-dwc3-765   [000] d...   156.231814: dwc3_writel: addr fa39c82c value 00000402
    irq/200-dwc3-765   [000] d...   156.231817: dwc3_readl: add fa39c82c value 00060002
    irq/200-dwc3-765   [000] d...   156.231820: dwc3_readl: add fa39c720 value 0000000b
    irq/200-dwc3-765   [000] d...   156.231822: dwc3_writel: addr fa39c720 value 0000000f
    irq/200-dwc3-765   [000] d...   156.231830: dwc3_alloc_request: ep1in-bulk: req ed3e55c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231832: dwc3_alloc_request: ep1in-bulk: req ed3e54c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231834: dwc3_alloc_request: ep1in-bulk: req ed3e53c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231836: dwc3_alloc_request: ep1in-bulk: req ed3e52c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231837: dwc3_alloc_request: ep1in-bulk: req ed3e51c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231839: dwc3_alloc_request: ep1in-bulk: req ed3e50c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231841: dwc3_alloc_request: ep1in-bulk: req ed693040 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231843: dwc3_alloc_request: ep1in-bulk: req ed5cda40 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231844: dwc3_alloc_request: ep1in-bulk: req ed5cd940 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231846: dwc3_alloc_request: ep1in-bulk: req ed5cd9c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231848: dwc3_alloc_request: ep1out-bulk: req ed4b53c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231850: dwc3_alloc_request: ep1out-bulk: req ed4b52c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231851: dwc3_alloc_request: ep1out-bulk: req ed4b51c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231853: dwc3_alloc_request: ep1out-bulk: req ed4b5040 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231855: dwc3_alloc_request: ep1out-bulk: req ed3e5c40 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231857: dwc3_alloc_request: ep1out-bulk: req ed3e5b40 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231859: dwc3_alloc_request: ep1out-bulk: req ed3e5a40 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231860: dwc3_alloc_request: ep1out-bulk: req ed3e58c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231862: dwc3_alloc_request: ep1out-bulk: req ed3e57c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231864: dwc3_alloc_request: ep1out-bulk: req ed3e56c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231881: dwc3_ep0: queueing request ed1e60c0 to ep0out length 0 state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.231892: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.231895: dwc3_event: event 000020c2

    irq/200-dwc3-765   [000] d...   156.231897: dwc3_ep0: Transfer Not Ready while ep0in in state 'Setup Phase'
    irq/200-dwc3-765   [000] d...   156.231901: dwc3_ep0: Control Status
    irq/200-dwc3-765   [000] d...   156.231904: dwc3_writel: addr fa39c818 value 00000000
    irq/200-dwc3-765   [000] d...   156.231907: dwc3_writel: addr fa39c814 value ae845000
    irq/200-dwc3-765   [000] d...   156.231910: dwc3_writel: addr fa39c810 value 00000000
    irq/200-dwc3-765   [000] d...   156.231912: dwc3_writel: addr fa39c81c value 00000406
    irq/200-dwc3-765   [000] d...   156.231918: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.231921: dwc3_readl: add fa39c81c value 00010006
    irq/200-dwc3-765   [000] d...   156.231924: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.231927: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.231930: dwc3_writel: addr fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.231944: dwc3_readl: add fa39c40c value 00000004
    irq/200-dwc3-765   [000] d.h.   156.231949: dwc3_readl: add fa39c408 value 00000100
    irq/200-dwc3-765   [000] d.h.   156.231954: dwc3_writel: addr fa39c408 value 80000100
    irq/200-dwc3-765   [000] d.h.   156.231957: dwc3_readl: add fa39c41c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.231960: dwc3_readl: add fa39c42c value 00000000
    irq/200-dwc3-765   [000] d.h.   156.231963: dwc3_readl: add fa39c43c value 00000000
    irq/200-dwc3-765   [000] d...   156.231978: dwc3_event: event 0000c042

    irq/200-dwc3-765   [000] d...   156.231980: dwc3_ep0: Transfer Complete while ep0in in state 'Status Phase'
    irq/200-dwc3-765   [000] d...   156.231985: dwc3_ep0: Status Phase
    irq/200-dwc3-765   [000] d...   156.231989: dwc3_gadget_giveback: ep0out: req ed1e60c0 length 0/0 ==> 0
    irq/200-dwc3-765   [000] d...   156.231993: dwc3_writel: addr fa39c808 value 00000000
    irq/200-dwc3-765   [000] d...   156.231998: dwc3_writel: addr fa39c804 value ae845000
    irq/200-dwc3-765   [000] d...   156.232001: dwc3_writel: addr fa39c800 value 00000000
    irq/200-dwc3-765   [000] d...   156.232004: dwc3_writel: addr fa39c80c value 00000406
    irq/200-dwc3-765   [000] d...   156.232007: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.232010: dwc3_readl: add fa39c80c value 00000006
    irq/200-dwc3-765   [000] d...   156.232013: dwc3_writel: addr fa39c40c value 00000004
    irq/200-dwc3-765   [000] d...   156.232016: dwc3_readl: add fa39c408 value 80000100
    irq/200-dwc3-765   [000] d...   156.232021: dwc3_writel: addr fa39c408 value 00000100

And here's latest patch (it would be nice if I can get a Reviewed-by :-)

8<----------------------------------------------------------------------------------------
From 72af1d7830c85a19821bc32360376b3a2859ac9e Mon Sep 17 00:00:00 2001
From: Felipe Balbi <balbi@ti.com>
Date: Wed, 30 Apr 2014 17:45:10 -0500
Subject: [PATCH] usb: dwc3: add tracepoints to aid debugging

When we're debugging hard-to-reproduce and time-sensitive
use cases, printk() poses too much overhead. That's when
the kernel's tracing infrastructure comes into play.

This patch implements a few initial tracepoints for the
dwc3 driver. More traces can be added as necessary in order
to ease the task of debugging dwc3.

Signed-off-by: Felipe Balbi <balbi@ti.com>
---
 drivers/usb/dwc3/Makefile |   5 +-
 drivers/usb/dwc3/core.h   |   2 +
 drivers/usb/dwc3/debug.c  |  32 +++++++++++
 drivers/usb/dwc3/debug.h  |   2 +
 drivers/usb/dwc3/ep0.c    |  64 ++++++++++++---------
 drivers/usb/dwc3/gadget.c |  24 +++-----
 drivers/usb/dwc3/io.h     |  30 +++++++++-
 drivers/usb/dwc3/trace.c  |  19 ++++++
 drivers/usb/dwc3/trace.h  | 143 ++++++++++++++++++++++++++++++++++++++++++++++
 9 files changed, 274 insertions(+), 47 deletions(-)
 create mode 100644 drivers/usb/dwc3/debug.c
 create mode 100644 drivers/usb/dwc3/trace.c
 create mode 100644 drivers/usb/dwc3/trace.h

Comments

Paul Zimmerman Aug. 26, 2014, 9:21 p.m. UTC | #1
> From: Felipe Balbi [mailto:balbi@ti.com]
> Sent: Tuesday, August 26, 2014 1:42 PM
> 
> On Fri, Aug 22, 2014 at 04:56:46PM -0500, Felipe Balbi wrote:

...

> yeah, it took longer than expected (been busy lately), but here's an
> example trace with all trace points enabled:
> 
> # tracer: nop
> #
> # entries-in-buffer/entries-written: 1038/1038   #P:1
> #
> #                              _-----=> irqs-off
> #                             / _----=> need-resched
> #                            | / _---=> hardirq/softirq
> #                            || / _--=> preempt-depth
> #                            ||| /     delay
> #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
> #              | |       |   ||||       |         |
>           <idle>-0     [000] d.h.   155.653881: dwc3_readl: add fa39c40c value 00000004
>           <idle>-0     [000] d.h.   155.653903: dwc3_readl: add fa39c408 value 00000100
>           <idle>-0     [000] d.h.   155.653908: dwc3_writel: addr fa39c408 value 80000100

Looks like there is an inconsistency between readl/writel (add vs. addr).

Other than that, I really like this.

Reviewed-by: Paul Zimmerman <paulz@synopsys.com>

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Felipe Balbi Aug. 26, 2014, 9:26 p.m. UTC | #2
Hi,

On Tue, Aug 26, 2014 at 09:21:55PM +0000, Paul Zimmerman wrote:
> > From: Felipe Balbi [mailto:balbi@ti.com]
> > Sent: Tuesday, August 26, 2014 1:42 PM
> > 
> > On Fri, Aug 22, 2014 at 04:56:46PM -0500, Felipe Balbi wrote:
> 
> ...
> 
> > yeah, it took longer than expected (been busy lately), but here's an
> > example trace with all trace points enabled:
> > 
> > # tracer: nop
> > #
> > # entries-in-buffer/entries-written: 1038/1038   #P:1
> > #
> > #                              _-----=> irqs-off
> > #                             / _----=> need-resched
> > #                            | / _---=> hardirq/softirq
> > #                            || / _--=> preempt-depth
> > #                            ||| /     delay
> > #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
> > #              | |       |   ||||       |         |
> >           <idle>-0     [000] d.h.   155.653881: dwc3_readl: add fa39c40c value 00000004
> >           <idle>-0     [000] d.h.   155.653903: dwc3_readl: add fa39c408 value 00000100
> >           <idle>-0     [000] d.h.   155.653908: dwc3_writel: addr fa39c408 value 80000100
> 
> Looks like there is an inconsistency between readl/writel (add vs.
> addr).

eagle eyes :-)

> Other than that, I really like this.
> 
> Reviewed-by: Paul Zimmerman <paulz@synopsys.com>

thanks, pushed to my dwc3-tracepoints branch with your Reviewed-by, if
nobody makes any other comments until Friday, I'll promote it to
testing/next and later to next.

cheers
Pratyush Anand Sept. 3, 2014, 6:28 a.m. UTC | #3
On Wed, Aug 27, 2014 at 05:26:37AM +0800, Felipe Balbi wrote:

Hi Felipe,

> Hi,
> 
> On Tue, Aug 26, 2014 at 09:21:55PM +0000, Paul Zimmerman wrote:
> > > From: Felipe Balbi [mailto:balbi@ti.com]
> > > Sent: Tuesday, August 26, 2014 1:42 PM
> > > 
> > > On Fri, Aug 22, 2014 at 04:56:46PM -0500, Felipe Balbi wrote:
> > 
> > ...
> > 
> > > yeah, it took longer than expected (been busy lately), but here's an
> > > example trace with all trace points enabled:
> > > 
> > > # tracer: nop
> > > #
> > > # entries-in-buffer/entries-written: 1038/1038   #P:1
> > > #
> > > #                              _-----=> irqs-off
> > > #                             / _----=> need-resched
> > > #                            | / _---=> hardirq/softirq
> > > #                            || / _--=> preempt-depth
> > > #                            ||| /     delay
> > > #           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
> > > #              | |       |   ||||       |         |
> > >           <idle>-0     [000] d.h.   155.653881: dwc3_readl: add fa39c40c value 00000004
> > >           <idle>-0     [000] d.h.   155.653903: dwc3_readl: add fa39c408 value 00000100
> > >           <idle>-0     [000] d.h.   155.653908: dwc3_writel: addr fa39c408 value 80000100
> > 
> > Looks like there is an inconsistency between readl/writel (add vs.
> > addr).
> 
> eagle eyes :-)
> 
> > Other than that, I really like this.
> > 
> > Reviewed-by: Paul Zimmerman <paulz@synopsys.com>
> 
> thanks, pushed to my dwc3-tracepoints branch with your Reviewed-by, if
> nobody makes any other comments until Friday, I'll promote it to
> testing/next and later to next.

If we can also add following two items:
-- depcmd: trace depcmd params and cmd in dwc3_send_gadget_ep_cmd 
-- TRB: trace trb fields, trb address and ep number for which trb has
been prepared in dwc3_prepare_one_trb

These items were pretty helpful in debugging isoc issues.

~Pratyush

> 
> cheers
> 
> -- 
> balbi


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/usb/dwc3/Makefile b/drivers/usb/dwc3/Makefile
index 10ac3e7..7793e6c 100644
--- a/drivers/usb/dwc3/Makefile
+++ b/drivers/usb/dwc3/Makefile
@@ -1,9 +1,12 @@ 
+# define_trace.h needs to know how to find our header
+CFLAGS_trace.o				:= -I$(src)
+
 ccflags-$(CONFIG_USB_DWC3_DEBUG)	:= -DDEBUG
 ccflags-$(CONFIG_USB_DWC3_VERBOSE)	+= -DVERBOSE_DEBUG
 
 obj-$(CONFIG_USB_DWC3)			+= dwc3.o
 
-dwc3-y					:= core.o
+dwc3-y					:= core.o debug.o trace.o
 
 ifneq ($(filter y,$(CONFIG_USB_DWC3_HOST) $(CONFIG_USB_DWC3_DUAL_ROLE)),)
 	dwc3-y				+= host.o
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 48fb264..dbdad87 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -33,6 +33,8 @@ 
 
 #include <linux/phy/phy.h>
 
+#define DWC3_MSG_MAX	500
+
 /* Global constants */
 #define DWC3_EP0_BOUNCE_SIZE	512
 #define DWC3_ENDPOINTS_NUM	32
diff --git a/drivers/usb/dwc3/debug.c b/drivers/usb/dwc3/debug.c
new file mode 100644
index 0000000..0be6885
--- /dev/null
+++ b/drivers/usb/dwc3/debug.c
@@ -0,0 +1,32 @@ 
+/**
+ * debug.c - DesignWare USB3 DRD Controller Debug/Trace Support
+ *
+ * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Author: Felipe Balbi <balbi@ti.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2  of
+ * the License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include "debug.h"
+
+void dwc3_trace(void (*trace)(struct va_format *), const char *fmt, ...)
+{
+	struct va_format vaf;
+	va_list args;
+
+	va_start(args, fmt);
+	vaf.fmt = fmt;
+	vaf.va = &args;
+
+	trace(&vaf);
+
+	va_end(args);
+}
diff --git a/drivers/usb/dwc3/debug.h b/drivers/usb/dwc3/debug.h
index 12ff4c9..07fbc2d 100644
--- a/drivers/usb/dwc3/debug.h
+++ b/drivers/usb/dwc3/debug.h
@@ -214,6 +214,8 @@  static inline const char *dwc3_gadget_event_type_string(u8 event)
 	}
 }
 
+void dwc3_trace(void (*trace)(struct va_format *), const char *fmt, ...);
+
 #ifdef CONFIG_DEBUG_FS
 extern int dwc3_debugfs_init(struct dwc3 *);
 extern void dwc3_debugfs_exit(struct dwc3 *);
diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
index 21a3520..f3e9d5f 100644
--- a/drivers/usb/dwc3/ep0.c
+++ b/drivers/usb/dwc3/ep0.c
@@ -65,7 +65,7 @@  static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma,
 
 	dep = dwc->eps[epnum];
 	if (dep->flags & DWC3_EP_BUSY) {
-		dev_vdbg(dwc->dev, "%s: still busy\n", dep->name);
+		dwc3_trace(trace_dwc3_ep0, "%s still busy", dep->name);
 		return 0;
 	}
 
@@ -88,7 +88,8 @@  static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma,
 	ret = dwc3_send_gadget_ep_cmd(dwc, dep->number,
 			DWC3_DEPCMD_STARTTRANSFER, &params);
 	if (ret < 0) {
-		dev_dbg(dwc->dev, "failed to send STARTTRANSFER command\n");
+		dwc3_trace(trace_dwc3_ep0, "%s STARTTRANSFER failed",
+				dep->name);
 		return ret;
 	}
 
@@ -153,7 +154,8 @@  static int __dwc3_gadget_ep0_queue(struct dwc3_ep *dep,
 		if (dwc->ep0state == EP0_STATUS_PHASE)
 			__dwc3_ep0_do_control_status(dwc, dwc->eps[direction]);
 		else
-			dev_dbg(dwc->dev, "too early for delayed status\n");
+			dwc3_trace(trace_dwc3_ep0,
+					"too early for delayed status");
 
 		return 0;
 	}
@@ -217,7 +219,8 @@  int dwc3_gadget_ep0_queue(struct usb_ep *ep, struct usb_request *request,
 
 	spin_lock_irqsave(&dwc->lock, flags);
 	if (!dep->endpoint.desc) {
-		dev_dbg(dwc->dev, "trying to queue request %p to disabled %s\n",
+		dwc3_trace(trace_dwc3_ep0,
+				"trying to queue request %p to disabled %s",
 				request, dep->name);
 		ret = -ESHUTDOWN;
 		goto out;
@@ -229,7 +232,8 @@  int dwc3_gadget_ep0_queue(struct usb_ep *ep, struct usb_request *request,
 		goto out;
 	}
 
-	dev_vdbg(dwc->dev, "queueing request %p to %s length %d, state '%s'\n",
+	dwc3_trace(trace_dwc3_ep0,
+			"queueing request %p to %s length %d state '%s'",
 			request, dep->name, request->length,
 			dwc3_ep0_state_string(dwc->ep0state));
 
@@ -485,12 +489,13 @@  static int dwc3_ep0_set_address(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
 
 	addr = le16_to_cpu(ctrl->wValue);
 	if (addr > 127) {
-		dev_dbg(dwc->dev, "invalid device address %d\n", addr);
+		dwc3_trace(trace_dwc3_ep0, "invalid device address %d", addr);
 		return -EINVAL;
 	}
 
 	if (state == USB_STATE_CONFIGURED) {
-		dev_dbg(dwc->dev, "trying to set address when configured\n");
+		dwc3_trace(trace_dwc3_ep0,
+				"trying to set address when configured");
 		return -EINVAL;
 	}
 
@@ -556,7 +561,7 @@  static int dwc3_ep0_set_config(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
 			dwc3_writel(dwc->regs, DWC3_DCTL, reg);
 
 			dwc->resize_fifos = true;
-			dev_dbg(dwc->dev, "resize fifos flag SET\n");
+			dwc3_trace(trace_dwc3_ep0, "resize FIFOs flag SET");
 		}
 		break;
 
@@ -680,35 +685,35 @@  static int dwc3_ep0_std_request(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
 
 	switch (ctrl->bRequest) {
 	case USB_REQ_GET_STATUS:
-		dev_vdbg(dwc->dev, "USB_REQ_GET_STATUS\n");
+		dwc3_trace(trace_dwc3_ep0, "USB_REQ_GET_STATUS\n");
 		ret = dwc3_ep0_handle_status(dwc, ctrl);
 		break;
 	case USB_REQ_CLEAR_FEATURE:
-		dev_vdbg(dwc->dev, "USB_REQ_CLEAR_FEATURE\n");
+		dwc3_trace(trace_dwc3_ep0, "USB_REQ_CLEAR_FEATURE\n");
 		ret = dwc3_ep0_handle_feature(dwc, ctrl, 0);
 		break;
 	case USB_REQ_SET_FEATURE:
-		dev_vdbg(dwc->dev, "USB_REQ_SET_FEATURE\n");
+		dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_FEATURE\n");
 		ret = dwc3_ep0_handle_feature(dwc, ctrl, 1);
 		break;
 	case USB_REQ_SET_ADDRESS:
-		dev_vdbg(dwc->dev, "USB_REQ_SET_ADDRESS\n");
+		dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_ADDRESS\n");
 		ret = dwc3_ep0_set_address(dwc, ctrl);
 		break;
 	case USB_REQ_SET_CONFIGURATION:
-		dev_vdbg(dwc->dev, "USB_REQ_SET_CONFIGURATION\n");
+		dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_CONFIGURATION\n");
 		ret = dwc3_ep0_set_config(dwc, ctrl);
 		break;
 	case USB_REQ_SET_SEL:
-		dev_vdbg(dwc->dev, "USB_REQ_SET_SEL\n");
+		dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_SEL\n");
 		ret = dwc3_ep0_set_sel(dwc, ctrl);
 		break;
 	case USB_REQ_SET_ISOCH_DELAY:
-		dev_vdbg(dwc->dev, "USB_REQ_SET_ISOCH_DELAY\n");
+		dwc3_trace(trace_dwc3_ep0, "USB_REQ_SET_ISOCH_DELAY\n");
 		ret = dwc3_ep0_set_isoch_delay(dwc, ctrl);
 		break;
 	default:
-		dev_vdbg(dwc->dev, "Forwarding to gadget driver\n");
+		dwc3_trace(trace_dwc3_ep0, "Forwarding to gadget driver\n");
 		ret = dwc3_ep0_delegate_req(dwc, ctrl);
 		break;
 	}
@@ -726,6 +731,8 @@  static void dwc3_ep0_inspect_setup(struct dwc3 *dwc,
 	if (!dwc->gadget_driver)
 		goto out;
 
+	trace_dwc3_ctrl_req(ctrl);
+
 	len = le16_to_cpu(ctrl->wLength);
 	if (!len) {
 		dwc->three_stage_setup = false;
@@ -774,7 +781,7 @@  static void dwc3_ep0_complete_data(struct dwc3 *dwc,
 
 	status = DWC3_TRB_SIZE_TRBSTS(trb->size);
 	if (status == DWC3_TRBSTS_SETUP_PENDING) {
-		dev_dbg(dwc->dev, "Setup Pending received\n");
+		dwc3_trace(trace_dwc3_ep0, "Setup Pending received");
 
 		if (r)
 			dwc3_gadget_giveback(ep0, r, -ECONNRESET);
@@ -834,7 +841,7 @@  static void dwc3_ep0_complete_status(struct dwc3 *dwc,
 
 		ret = dwc3_gadget_set_test_mode(dwc, dwc->test_mode_nr);
 		if (ret < 0) {
-			dev_dbg(dwc->dev, "Invalid Test #%d\n",
+			dwc3_trace(trace_dwc3_ep0, "Invalid Test #%d",
 					dwc->test_mode_nr);
 			dwc3_ep0_stall_and_restart(dwc);
 			return;
@@ -843,7 +850,7 @@  static void dwc3_ep0_complete_status(struct dwc3 *dwc,
 
 	status = DWC3_TRB_SIZE_TRBSTS(trb->size);
 	if (status == DWC3_TRBSTS_SETUP_PENDING)
-		dev_dbg(dwc->dev, "Setup Pending received\n");
+		dwc3_trace(trace_dwc3_ep0, "Setup Pending received\n");
 
 	dwc->ep0state = EP0_SETUP_PHASE;
 	dwc3_ep0_out_start(dwc);
@@ -860,17 +867,17 @@  static void dwc3_ep0_xfer_complete(struct dwc3 *dwc,
 
 	switch (dwc->ep0state) {
 	case EP0_SETUP_PHASE:
-		dev_vdbg(dwc->dev, "Inspecting Setup Bytes\n");
+		dwc3_trace(trace_dwc3_ep0, "Setup Phase");
 		dwc3_ep0_inspect_setup(dwc, event);
 		break;
 
 	case EP0_DATA_PHASE:
-		dev_vdbg(dwc->dev, "Data Phase\n");
+		dwc3_trace(trace_dwc3_ep0, "Data Phase");
 		dwc3_ep0_complete_data(dwc, event);
 		break;
 
 	case EP0_STATUS_PHASE:
-		dev_vdbg(dwc->dev, "Status Phase\n");
+		dwc3_trace(trace_dwc3_ep0, "Status Phase");
 		dwc3_ep0_complete_status(dwc, event);
 		break;
 	default:
@@ -946,7 +953,7 @@  static int dwc3_ep0_start_control_status(struct dwc3_ep *dep)
 static void __dwc3_ep0_do_control_status(struct dwc3 *dwc, struct dwc3_ep *dep)
 {
 	if (dwc->resize_fifos) {
-		dev_dbg(dwc->dev, "starting to resize fifos\n");
+		dwc3_trace(trace_dwc3_ep0, "Resizing FIFOs");
 		dwc3_gadget_resize_tx_fifos(dwc);
 		dwc->resize_fifos = 0;
 	}
@@ -987,7 +994,7 @@  static void dwc3_ep0_xfernotready(struct dwc3 *dwc,
 
 	switch (event->status) {
 	case DEPEVT_STATUS_CONTROL_DATA:
-		dev_vdbg(dwc->dev, "Control Data\n");
+		dwc3_trace(trace_dwc3_ep0, "Control Data");
 
 		/*
 		 * We already have a DATA transfer in the controller's cache,
@@ -1001,7 +1008,8 @@  static void dwc3_ep0_xfernotready(struct dwc3 *dwc,
 		if (dwc->ep0_expect_in != event->endpoint_number) {
 			struct dwc3_ep	*dep = dwc->eps[dwc->ep0_expect_in];
 
-			dev_vdbg(dwc->dev, "Wrong direction for Data phase\n");
+			dwc3_trace(trace_dwc3_ep0,
+					"Wrong direction for Data phase");
 			dwc3_ep0_end_control_data(dwc, dep);
 			dwc3_ep0_stall_and_restart(dwc);
 			return;
@@ -1013,13 +1021,13 @@  static void dwc3_ep0_xfernotready(struct dwc3 *dwc,
 		if (dwc->ep0_next_event != DWC3_EP0_NRDY_STATUS)
 			return;
 
-		dev_vdbg(dwc->dev, "Control Status\n");
+		dwc3_trace(trace_dwc3_ep0, "Control Status");
 
 		dwc->ep0state = EP0_STATUS_PHASE;
 
 		if (dwc->delayed_status) {
 			WARN_ON_ONCE(event->endpoint_number != 1);
-			dev_vdbg(dwc->dev, "Mass Storage delayed status\n");
+			dwc3_trace(trace_dwc3_ep0, "Delayed Status");
 			return;
 		}
 
@@ -1032,7 +1040,7 @@  void dwc3_ep0_interrupt(struct dwc3 *dwc,
 {
 	u8			epnum = event->endpoint_number;
 
-	dev_dbg(dwc->dev, "%s while ep%d%s in state '%s'\n",
+	dwc3_trace(trace_dwc3_ep0, "%s while ep%d%s in state '%s'",
 			dwc3_ep_event_string(event->endpoint_event),
 			epnum >> 1, (epnum & 1) ? "in" : "out",
 			dwc3_ep0_state_string(dwc->ep0state));
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 3ce350f..ca0405c 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -267,6 +267,7 @@  void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
 	dev_dbg(dwc->dev, "request %p from %s completed %d/%d ===> %d\n",
 			req, dep->name, req->request.actual,
 			req->request.length, status);
+	trace_dwc3_gadget_giveback(req);
 
 	spin_unlock(&dwc->lock);
 	req->request.complete(&dep->endpoint, &req->request);
@@ -713,6 +714,8 @@  static struct usb_request *dwc3_gadget_ep_alloc_request(struct usb_ep *ep,
 	req->epnum	= dep->number;
 	req->dep	= dep;
 
+	trace_dwc3_alloc_request(req);
+
 	return &req->request;
 }
 
@@ -721,6 +724,7 @@  static void dwc3_gadget_ep_free_request(struct usb_ep *ep,
 {
 	struct dwc3_request		*req = to_dwc3_request(request);
 
+	trace_dwc3_free_request(req);
 	kfree(req);
 }
 
@@ -1146,6 +1150,7 @@  static int dwc3_gadget_ep_queue(struct usb_ep *ep, struct usb_request *request,
 
 	dev_vdbg(dwc->dev, "queing request %p to %s length %d\n",
 			request, ep->name, request->length);
+	trace_dwc3_ep_queue(req);
 
 	spin_lock_irqsave(&dwc->lock, flags);
 	ret = __dwc3_gadget_ep_queue(dep, req);
@@ -1166,6 +1171,8 @@  static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
 	unsigned long			flags;
 	int				ret = 0;
 
+	trace_dwc3_ep_dequeue(req);
+
 	spin_lock_irqsave(&dwc->lock, flags);
 
 	list_for_each_entry(r, &dep->request_list, list) {
@@ -1933,9 +1940,6 @@  static void dwc3_endpoint_interrupt(struct dwc3 *dwc,
 	if (!(dep->flags & DWC3_EP_ENABLED))
 		return;
 
-	dev_vdbg(dwc->dev, "%s: %s\n", dep->name,
-			dwc3_ep_event_string(event->endpoint_event));
-
 	if (epnum == 0 || epnum == 1) {
 		dwc3_ep0_interrupt(dwc, event);
 		return;
@@ -2128,8 +2132,6 @@  static void dwc3_gadget_disconnect_interrupt(struct dwc3 *dwc)
 {
 	int			reg;
 
-	dev_vdbg(dwc->dev, "%s\n", __func__);
-
 	reg = dwc3_readl(dwc->regs, DWC3_DCTL);
 	reg &= ~DWC3_DCTL_INITU1ENA;
 	dwc3_writel(dwc->regs, DWC3_DCTL, reg);
@@ -2148,8 +2150,6 @@  static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
 {
 	u32			reg;
 
-	dev_vdbg(dwc->dev, "%s\n", __func__);
-
 	/*
 	 * WORKAROUND: DWC3 revisions <1.88a have an issue which
 	 * would cause a missing Disconnect Event if there's a
@@ -2234,8 +2234,6 @@  static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
 	u32			reg;
 	u8			speed;
 
-	dev_vdbg(dwc->dev, "%s\n", __func__);
-
 	reg = dwc3_readl(dwc->regs, DWC3_DSTS);
 	speed = reg & DWC3_DSTS_CONNECTSPD;
 	dwc->speed = speed;
@@ -2333,8 +2331,6 @@  static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
 
 static void dwc3_gadget_wakeup_interrupt(struct dwc3 *dwc)
 {
-	dev_vdbg(dwc->dev, "%s\n", __func__);
-
 	/*
 	 * TODO take core out of low power mode when that's
 	 * implemented.
@@ -2439,10 +2435,6 @@  static void dwc3_gadget_linksts_change_interrupt(struct dwc3 *dwc,
 		break;
 	}
 
-	dev_vdbg(dwc->dev, "link change: %s [%d] -> %s [%d]\n",
-			dwc3_gadget_link_string(dwc->link_state),
-			dwc->link_state, dwc3_gadget_link_string(next), next);
-
 	dwc->link_state = next;
 }
 
@@ -2519,6 +2511,8 @@  static void dwc3_gadget_interrupt(struct dwc3 *dwc,
 static void dwc3_process_event_entry(struct dwc3 *dwc,
 		const union dwc3_event *event)
 {
+	trace_dwc3_event(event->raw);
+
 	/* Endpoint IRQ, handle it and return early */
 	if (event->type.is_devspec == 0) {
 		/* depevt */
diff --git a/drivers/usb/dwc3/io.h b/drivers/usb/dwc3/io.h
index d94441c..df8ac17 100644
--- a/drivers/usb/dwc3/io.h
+++ b/drivers/usb/dwc3/io.h
@@ -20,27 +20,51 @@ 
 #define __DRIVERS_USB_DWC3_IO_H
 
 #include <linux/io.h>
-
+#include "trace.h"
+#include "debug.h"
 #include "core.h"
 
 static inline u32 dwc3_readl(void __iomem *base, u32 offset)
 {
+	u32 offs = offset - DWC3_GLOBALS_REGS_START;
+	u32 value;
+
 	/*
 	 * We requested the mem region starting from the Globals address
 	 * space, see dwc3_probe in core.c.
 	 * However, the offsets are given starting from xHCI address space.
 	 */
-	return readl(base + (offset - DWC3_GLOBALS_REGS_START));
+	value = readl(base + offs);
+
+	/*
+	 * When tracing we want to make it easy to find the correct address on
+	 * documentation, so we revert it back to the proper addresses, the
+	 * same way they are described on SNPS documentation
+	 */
+	dwc3_trace(trace_dwc3_readl, "add %p value %08x",
+			base - DWC3_GLOBALS_REGS_START + offset, value);
+
+	return value;
 }
 
 static inline void dwc3_writel(void __iomem *base, u32 offset, u32 value)
 {
+	u32 offs = offset - DWC3_GLOBALS_REGS_START;
+
 	/*
 	 * We requested the mem region starting from the Globals address
 	 * space, see dwc3_probe in core.c.
 	 * However, the offsets are given starting from xHCI address space.
 	 */
-	writel(value, base + (offset - DWC3_GLOBALS_REGS_START));
+	writel(value, base + offs);
+
+	/*
+	 * When tracing we want to make it easy to find the correct address on
+	 * documentation, so we revert it back to the proper addresses, the
+	 * same way they are described on SNPS documentation
+	 */
+	dwc3_trace(trace_dwc3_writel, "addr %p value %08x",
+			base - DWC3_GLOBALS_REGS_START + offset, value);
 }
 
 #endif /* __DRIVERS_USB_DWC3_IO_H */
diff --git a/drivers/usb/dwc3/trace.c b/drivers/usb/dwc3/trace.c
new file mode 100644
index 0000000..6cd1664
--- /dev/null
+++ b/drivers/usb/dwc3/trace.c
@@ -0,0 +1,19 @@ 
+/**
+ * trace.c - DesignWare USB3 DRD Controller Trace Support
+ *
+ * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Author: Felipe Balbi <balbi@ti.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2  of
+ * the License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#define CREATE_TRACE_POINTS
+#include "trace.h"
diff --git a/drivers/usb/dwc3/trace.h b/drivers/usb/dwc3/trace.h
new file mode 100644
index 0000000..992cc38
--- /dev/null
+++ b/drivers/usb/dwc3/trace.h
@@ -0,0 +1,143 @@ 
+/**
+ * trace.h - DesignWare USB3 DRD Controller Trace Support
+ *
+ * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Author: Felipe Balbi <balbi@ti.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2  of
+ * the License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM dwc3
+
+#if !defined(__DWC3_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
+#define __DWC3_TRACE_H
+
+#include <linux/types.h>
+#include <linux/tracepoint.h>
+#include <asm/byteorder.h>
+#include "core.h"
+
+DECLARE_EVENT_CLASS(dwc3_log_msg,
+	TP_PROTO(struct va_format *vaf),
+	TP_ARGS(vaf),
+	TP_STRUCT__entry(__dynamic_array(char, msg, DWC3_MSG_MAX)),
+	TP_fast_assign(
+		vsnprintf(__get_str(msg), DWC3_MSG_MAX, vaf->fmt, *vaf->va);
+	),
+	TP_printk("%s", __get_str(msg))
+);
+
+DEFINE_EVENT(dwc3_log_msg, dwc3_readl,
+	TP_PROTO(struct va_format *vaf),
+	TP_ARGS(vaf)
+);
+
+DEFINE_EVENT(dwc3_log_msg, dwc3_writel,
+	TP_PROTO(struct va_format *vaf),
+	TP_ARGS(vaf)
+);
+
+DEFINE_EVENT(dwc3_log_msg, dwc3_ep0,
+	TP_PROTO(struct va_format *vaf),
+	TP_ARGS(vaf)
+);
+
+DECLARE_EVENT_CLASS(dwc3_log_event,
+	TP_PROTO(u32 event),
+	TP_ARGS(event),
+	TP_STRUCT__entry(
+		__field(u32, event)
+	),
+	TP_fast_assign(
+		__entry->event = event;
+	),
+	TP_printk("event %08x\n", __entry->event)
+);
+
+DEFINE_EVENT(dwc3_log_event, dwc3_event,
+	TP_PROTO(u32 event),
+	TP_ARGS(event)
+);
+
+DECLARE_EVENT_CLASS(dwc3_log_ctrl,
+	TP_PROTO(struct usb_ctrlrequest *ctrl),
+	TP_ARGS(ctrl),
+	TP_STRUCT__entry(
+		__field(struct usb_ctrlrequest *, ctrl)
+	),
+	TP_fast_assign(
+		__entry->ctrl = ctrl;
+	),
+	TP_printk("bRequestType %02x bRequest %02x wValue %04x wIndex %04x wLength %d",
+		__entry->ctrl->bRequestType, __entry->ctrl->bRequest,
+		le16_to_cpu(__entry->ctrl->wValue), le16_to_cpu(__entry->ctrl->wIndex),
+		le16_to_cpu(__entry->ctrl->wLength)
+	)
+);
+
+DEFINE_EVENT(dwc3_log_ctrl, dwc3_ctrl_req,
+	TP_PROTO(struct usb_ctrlrequest *ctrl),
+	TP_ARGS(ctrl)
+);
+
+DECLARE_EVENT_CLASS(dwc3_log_request,
+	TP_PROTO(struct dwc3_request *req),
+	TP_ARGS(req),
+	TP_STRUCT__entry(
+		__field(struct dwc3_request *, req)
+	),
+	TP_fast_assign(
+		__entry->req = req;
+	),
+	TP_printk("%s: req %p length %u/%u ==> %d",
+		__entry->req->dep->name, __entry->req,
+		__entry->req->request.actual, __entry->req->request.length,
+		__entry->req->request.status
+	)
+);
+
+DEFINE_EVENT(dwc3_log_request, dwc3_alloc_request,
+	TP_PROTO(struct dwc3_request *req),
+	TP_ARGS(req)
+);
+
+DEFINE_EVENT(dwc3_log_request, dwc3_free_request,
+	TP_PROTO(struct dwc3_request *req),
+	TP_ARGS(req)
+);
+
+DEFINE_EVENT(dwc3_log_request, dwc3_ep_queue,
+	TP_PROTO(struct dwc3_request *req),
+	TP_ARGS(req)
+);
+
+DEFINE_EVENT(dwc3_log_request, dwc3_ep_dequeue,
+	TP_PROTO(struct dwc3_request *req),
+	TP_ARGS(req)
+);
+
+DEFINE_EVENT(dwc3_log_request, dwc3_gadget_giveback,
+	TP_PROTO(struct dwc3_request *req),
+	TP_ARGS(req)
+);
+
+#endif /* __DWC3_TRACE_H */
+
+/* this part has to be here */
+
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH .
+
+#undef TRACE_INCLUDE_FILE
+#define TRACE_INCLUDE_FILE trace
+
+#include <trace/define_trace.h>