162306a36Sopenharmony_ci===============================================================
262306a36Sopenharmony_ciSynopsys DesignWare Core SuperSpeed USB 3.0 Controller
362306a36Sopenharmony_ci===============================================================
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci:Author: Felipe Balbi <felipe.balbi@linux.intel.com>
662306a36Sopenharmony_ci:Date: April 2017
762306a36Sopenharmony_ci
862306a36Sopenharmony_ciIntroduction
962306a36Sopenharmony_ci============
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciThe *Synopsys DesignWare Core SuperSpeed USB 3.0 Controller*
1262306a36Sopenharmony_ci(hereinafter referred to as *DWC3*) is a USB SuperSpeed compliant
1362306a36Sopenharmony_cicontroller which can be configured in one of 4 ways:
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci	1. Peripheral-only configuration
1662306a36Sopenharmony_ci	2. Host-only configuration
1762306a36Sopenharmony_ci	3. Dual-Role configuration
1862306a36Sopenharmony_ci	4. Hub configuration
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ciLinux currently supports several versions of this controller. In all
2162306a36Sopenharmony_cilikelihood, the version in your SoC is already supported. At the time
2262306a36Sopenharmony_ciof this writing, known tested versions range from 2.02a to 3.10a. As a
2362306a36Sopenharmony_cirule of thumb, anything above 2.02a should work reliably well.
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ciCurrently, we have many known users for this driver. In alphabetical
2662306a36Sopenharmony_ciorder:
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	1. Cavium
2962306a36Sopenharmony_ci	2. Intel Corporation
3062306a36Sopenharmony_ci	3. Qualcomm
3162306a36Sopenharmony_ci	4. Rockchip
3262306a36Sopenharmony_ci	5. ST
3362306a36Sopenharmony_ci	6. Samsung
3462306a36Sopenharmony_ci	7. Texas Instruments
3562306a36Sopenharmony_ci	8. Xilinx
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ciSummary of Features
3862306a36Sopenharmony_ci======================
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ciFor details about features supported by your version of DWC3, consult
4162306a36Sopenharmony_ciyour IP team and/or *Synopsys DesignWare Core SuperSpeed USB 3.0
4262306a36Sopenharmony_ciController Databook*. Following is a list of features supported by the
4362306a36Sopenharmony_cidriver at the time of this writing:
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci	1. Up to 16 bidirectional endpoints (including the control
4662306a36Sopenharmony_ci	   pipe - ep0)
4762306a36Sopenharmony_ci	2. Flexible endpoint configuration
4862306a36Sopenharmony_ci	3. Simultaneous IN and OUT transfer support
4962306a36Sopenharmony_ci	4. Scatter-list support
5062306a36Sopenharmony_ci	5. Up to 256 TRBs [#trb]_ per endpoint
5162306a36Sopenharmony_ci	6. Support for all transfer types (*Control*, *Bulk*,
5262306a36Sopenharmony_ci	   *Interrupt*, and *Isochronous*)
5362306a36Sopenharmony_ci	7. SuperSpeed Bulk Streams
5462306a36Sopenharmony_ci	8. Link Power Management
5562306a36Sopenharmony_ci	9. Trace Events for debugging
5662306a36Sopenharmony_ci	10. DebugFS [#debugfs]_ interface
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ciThese features have all been exercised with many of the **in-tree**
5962306a36Sopenharmony_cigadget drivers. We have verified both *ConfigFS* [#configfs]_ and
6062306a36Sopenharmony_cilegacy gadget drivers.
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ciDriver Design
6362306a36Sopenharmony_ci==============
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ciThe DWC3 driver sits on the *drivers/usb/dwc3/* directory. All files
6662306a36Sopenharmony_cirelated to this driver are in this one directory. This makes it easy
6762306a36Sopenharmony_cifor new-comers to read the code and understand how it behaves.
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ciBecause of DWC3's configuration flexibility, the driver is a little
7062306a36Sopenharmony_cicomplex in some places but it should be rather straightforward to
7162306a36Sopenharmony_ciunderstand.
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ciThe biggest part of the driver refers to the Gadget API.
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ciKnown Limitations
7662306a36Sopenharmony_ci===================
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ciLike any other HW, DWC3 has its own set of limitations. To avoid
7962306a36Sopenharmony_ciconstant questions about such problems, we decided to document them
8062306a36Sopenharmony_cihere and have a single location to where we could point users.
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ciOUT Transfer Size Requirements
8362306a36Sopenharmony_ci---------------------------------
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ciAccording to Synopsys Databook, all OUT transfer TRBs [#trb]_ must
8662306a36Sopenharmony_cihave their *size* field set to a value which is integer divisible by
8762306a36Sopenharmony_cithe endpoint's *wMaxPacketSize*. This means that *e.g.* in order to
8862306a36Sopenharmony_cireceive a Mass Storage *CBW* [#cbw]_, req->length must either be set
8962306a36Sopenharmony_cito a value that's divisible by *wMaxPacketSize* (1024 on SuperSpeed,
9062306a36Sopenharmony_ci512 on HighSpeed, etc), or DWC3 driver must add a Chained TRB pointing
9162306a36Sopenharmony_cito a throw-away buffer for the remaining length. Without this, OUT
9262306a36Sopenharmony_citransfers will **NOT** start.
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ciNote that as of this writing, this won't be a problem because DWC3 is
9562306a36Sopenharmony_cifully capable of appending a chained TRB for the remaining length and
9662306a36Sopenharmony_cicompletely hide this detail from the gadget driver. It's still worth
9762306a36Sopenharmony_cimentioning because this seems to be the largest source of queries
9862306a36Sopenharmony_ciabout DWC3 and *non-working transfers*.
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ciTRB Ring Size Limitation
10162306a36Sopenharmony_ci-------------------------
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ciWe, currently, have a hard limit of 256 TRBs [#trb]_ per endpoint,
10462306a36Sopenharmony_ciwith the last TRB being a Link TRB [#link_trb]_ pointing back to the
10562306a36Sopenharmony_cifirst. This limit is arbitrary but it has the benefit of adding up to
10662306a36Sopenharmony_ciexactly 4096 bytes, or 1 Page.
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ciDWC3 driver will try its best to cope with more than 255 requests and,
10962306a36Sopenharmony_cifor the most part, it should work normally. However this is not
11062306a36Sopenharmony_cisomething that has been exercised very frequently. If you experience
11162306a36Sopenharmony_ciany problems, see section **Reporting Bugs** below.
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ciReporting Bugs
11462306a36Sopenharmony_ci================
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ciWhenever you encounter a problem with DWC3, first and foremost you
11762306a36Sopenharmony_cishould make sure that:
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ci	1. You're running latest tag from `Linus' tree`_
12062306a36Sopenharmony_ci	2. You can reproduce the error without any out-of-tree changes
12162306a36Sopenharmony_ci	   to DWC3
12262306a36Sopenharmony_ci	3. You have checked that it's not a fault on the host machine
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ciAfter all these are verified, then here's how to capture enough
12562306a36Sopenharmony_ciinformation so we can be of any help to you.
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ciRequired Information
12862306a36Sopenharmony_ci---------------------
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ciDWC3 relies exclusively on Trace Events for debugging. Everything is
13162306a36Sopenharmony_ciexposed there, with some extra bits being exposed to DebugFS
13262306a36Sopenharmony_ci[#debugfs]_.
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ciIn order to capture DWC3's Trace Events you should run the following
13562306a36Sopenharmony_cicommands **before** plugging the USB cable to a host machine:
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci.. code-block:: sh
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci		 # mkdir -p /d
14062306a36Sopenharmony_ci		 # mkdir -p /t
14162306a36Sopenharmony_ci		 # mount -t debugfs none /d
14262306a36Sopenharmony_ci		 # mount -t tracefs none /t
14362306a36Sopenharmony_ci		 # echo 81920 > /t/buffer_size_kb
14462306a36Sopenharmony_ci		 # echo 1 > /t/events/dwc3/enable
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ciAfter this is done, you can connect your USB cable and reproduce the
14762306a36Sopenharmony_ciproblem. As soon as the fault is reproduced, make a copy of files
14862306a36Sopenharmony_ci``trace`` and ``regdump``, like so:
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci.. code-block:: sh
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ci		# cp /t/trace /root/trace.txt
15362306a36Sopenharmony_ci		# cat /d/*dwc3*/regdump > /root/regdump.txt
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ciMake sure to compress ``trace.txt`` and ``regdump.txt`` in a tarball
15662306a36Sopenharmony_ciand email it to `me`_ with `linux-usb`_ in Cc. If you want to be extra
15762306a36Sopenharmony_cisure that I'll help you, write your subject line in the following
15862306a36Sopenharmony_ciformat:
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ci	**[BUG REPORT] usb: dwc3: Bug while doing XYZ**
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ciOn the email body, make sure to detail what you doing, which gadget
16362306a36Sopenharmony_cidriver you were using, how to reproduce the problem, what SoC you're
16462306a36Sopenharmony_ciusing, which OS (and its version) was running on the Host machine.
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ciWith all this information, we should be able to understand what's
16762306a36Sopenharmony_cigoing on and be helpful to you.
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ciDebugging
17062306a36Sopenharmony_ci===========
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ciFirst and foremost a disclaimer::
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ci  DISCLAIMER: The information available on DebugFS and/or TraceFS can
17562306a36Sopenharmony_ci  change at any time at any Major Linux Kernel Release. If writing
17662306a36Sopenharmony_ci  scripts, do **NOT** assume information to be available in the
17762306a36Sopenharmony_ci  current format.
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ciWith that out of the way, let's carry on.
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ciIf you're willing to debug your own problem, you deserve a round of
18262306a36Sopenharmony_ciapplause :-)
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ciAnyway, there isn't much to say here other than Trace Events will be
18562306a36Sopenharmony_cireally helpful in figuring out issues with DWC3. Also, access to
18662306a36Sopenharmony_ciSynopsys Databook will be **really** valuable in this case.
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ciA USB Sniffer can be helpful at times but it's not entirely required,
18962306a36Sopenharmony_cithere's a lot that can be understood without looking at the wire.
19062306a36Sopenharmony_ci
19162306a36Sopenharmony_ciFeel free to email `me`_ and Cc `linux-usb`_ if you need any help.
19262306a36Sopenharmony_ci
19362306a36Sopenharmony_ci``DebugFS``
19462306a36Sopenharmony_ci-------------
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_ci``DebugFS`` is very good for gathering snapshots of what's going on
19762306a36Sopenharmony_ciwith DWC3 and/or any endpoint.
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_ciOn DWC3's ``DebugFS`` directory, you will find the following files and
20062306a36Sopenharmony_cidirectories:
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ci``ep[0..15]{in,out}/``
20362306a36Sopenharmony_ci``link_state``
20462306a36Sopenharmony_ci``regdump``
20562306a36Sopenharmony_ci``testmode``
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_ci``link_state``
20862306a36Sopenharmony_ci``````````````
20962306a36Sopenharmony_ci
21062306a36Sopenharmony_ciWhen read, ``link_state`` will print out one of ``U0``, ``U1``,
21162306a36Sopenharmony_ci``U2``, ``U3``, ``SS.Disabled``, ``RX.Detect``, ``SS.Inactive``,
21262306a36Sopenharmony_ci``Polling``, ``Recovery``, ``Hot Reset``, ``Compliance``,
21362306a36Sopenharmony_ci``Loopback``, ``Reset``, ``Resume`` or ``UNKNOWN link state``.
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_ciThis file can also be written to in order to force link to one of the
21662306a36Sopenharmony_cistates above.
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ci``regdump``
21962306a36Sopenharmony_ci`````````````
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ciFile name is self-explanatory. When read, ``regdump`` will print out a
22262306a36Sopenharmony_ciregister dump of DWC3. Note that this file can be grepped to find the
22362306a36Sopenharmony_ciinformation you want.
22462306a36Sopenharmony_ci
22562306a36Sopenharmony_ci``testmode``
22662306a36Sopenharmony_ci``````````````
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_ciWhen read, ``testmode`` will print out a name of one of the specified
22962306a36Sopenharmony_ciUSB 2.0 Testmodes (``test_j``, ``test_k``, ``test_se0_nak``,
23062306a36Sopenharmony_ci``test_packet``, ``test_force_enable``) or the string ``no test`` in
23162306a36Sopenharmony_cicase no tests are currently being executed.
23262306a36Sopenharmony_ci
23362306a36Sopenharmony_ciIn order to start any of these test modes, the same strings can be
23462306a36Sopenharmony_ciwritten to the file and DWC3 will enter the requested test mode.
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ci``ep[0..15]{in,out}``
23862306a36Sopenharmony_ci``````````````````````
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ciFor each endpoint we expose one directory following the naming
24162306a36Sopenharmony_ciconvention ``ep$num$dir`` *(ep0in, ep0out, ep1in, ...)*. Inside each
24262306a36Sopenharmony_ciof these directories you will find the following files:
24362306a36Sopenharmony_ci
24462306a36Sopenharmony_ci``descriptor_fetch_queue``
24562306a36Sopenharmony_ci``event_queue``
24662306a36Sopenharmony_ci``rx_fifo_queue``
24762306a36Sopenharmony_ci``rx_info_queue``
24862306a36Sopenharmony_ci``rx_request_queue``
24962306a36Sopenharmony_ci``transfer_type``
25062306a36Sopenharmony_ci``trb_ring``
25162306a36Sopenharmony_ci``tx_fifo_queue``
25262306a36Sopenharmony_ci``tx_request_queue``
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ciWith access to Synopsys Databook, you can decode the information on
25562306a36Sopenharmony_cithem.
25662306a36Sopenharmony_ci
25762306a36Sopenharmony_ci``transfer_type``
25862306a36Sopenharmony_ci~~~~~~~~~~~~~~~~~~
25962306a36Sopenharmony_ci
26062306a36Sopenharmony_ciWhen read, ``transfer_type`` will print out one of ``control``,
26162306a36Sopenharmony_ci``bulk``, ``interrupt`` or ``isochronous`` depending on what the
26262306a36Sopenharmony_ciendpoint descriptor says. If the endpoint hasn't been enabled yet, it
26362306a36Sopenharmony_ciwill print ``--``.
26462306a36Sopenharmony_ci
26562306a36Sopenharmony_ci``trb_ring``
26662306a36Sopenharmony_ci~~~~~~~~~~~~~
26762306a36Sopenharmony_ci
26862306a36Sopenharmony_ciWhen read, ``trb_ring`` will print out details about all TRBs on the
26962306a36Sopenharmony_ciring. It will also tell you where our enqueue and dequeue pointers are
27062306a36Sopenharmony_cilocated in the ring:
27162306a36Sopenharmony_ci
27262306a36Sopenharmony_ci.. code-block:: sh
27362306a36Sopenharmony_ci   
27462306a36Sopenharmony_ci		buffer_addr,size,type,ioc,isp_imi,csp,chn,lst,hwo
27562306a36Sopenharmony_ci		000000002c754000,481,normal,1,0,1,0,0,0         
27662306a36Sopenharmony_ci		000000002c75c000,481,normal,1,0,1,0,0,0         
27762306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
27862306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
27962306a36Sopenharmony_ci		000000002c78c000,481,normal,1,0,1,0,0,0         
28062306a36Sopenharmony_ci		000000002c754000,481,normal,1,0,1,0,0,0         
28162306a36Sopenharmony_ci		000000002c75c000,481,normal,1,0,1,0,0,0         
28262306a36Sopenharmony_ci		000000002c784000,481,normal,1,0,1,0,0,0         
28362306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
28462306a36Sopenharmony_ci		000000002c78c000,481,normal,1,0,1,0,0,0         
28562306a36Sopenharmony_ci		000000002c790000,481,normal,1,0,1,0,0,0         
28662306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
28762306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
28862306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
28962306a36Sopenharmony_ci		000000002c790000,481,normal,1,0,1,0,0,0         
29062306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
29162306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
29262306a36Sopenharmony_ci		000000002c784000,481,normal,1,0,1,0,0,0         
29362306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
29462306a36Sopenharmony_ci		000000002c78c000,481,normal,1,0,1,0,0,0         
29562306a36Sopenharmony_ci		000000002c754000,481,normal,1,0,1,0,0,0         
29662306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
29762306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
29862306a36Sopenharmony_ci		000000002c784000,481,normal,1,0,1,0,0,0         
29962306a36Sopenharmony_ci		000000002c78c000,481,normal,1,0,1,0,0,0         
30062306a36Sopenharmony_ci		000000002c790000,481,normal,1,0,1,0,0,0         
30162306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
30262306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
30362306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
30462306a36Sopenharmony_ci		000000002c790000,481,normal,1,0,1,0,0,0         
30562306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
30662306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
30762306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
30862306a36Sopenharmony_ci		000000002c790000,481,normal,1,0,1,0,0,0         
30962306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
31062306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
31162306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
31262306a36Sopenharmony_ci		000000002c790000,481,normal,1,0,1,0,0,0         
31362306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
31462306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
31562306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
31662306a36Sopenharmony_ci		000000002c790000,481,normal,1,0,1,0,0,0         
31762306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
31862306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
31962306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
32062306a36Sopenharmony_ci		000000002c790000,481,normal,1,0,1,0,0,0         
32162306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
32262306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
32362306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
32462306a36Sopenharmony_ci		000000002c790000,481,normal,1,0,1,0,0,0         
32562306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
32662306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
32762306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
32862306a36Sopenharmony_ci		000000002c790000,481,normal,1,0,1,0,0,0         
32962306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
33062306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
33162306a36Sopenharmony_ci		000000002c78c000,481,normal,1,0,1,0,0,0         
33262306a36Sopenharmony_ci		000000002c784000,481,normal,1,0,1,0,0,0         
33362306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
33462306a36Sopenharmony_ci		000000002c78c000,481,normal,1,0,1,0,0,0         
33562306a36Sopenharmony_ci		000000002c754000,481,normal,1,0,1,0,0,0         
33662306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
33762306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
33862306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
33962306a36Sopenharmony_ci		000000002c790000,481,normal,1,0,1,0,0,0         
34062306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
34162306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
34262306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
34362306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
34462306a36Sopenharmony_ci		000000002c78c000,481,normal,1,0,1,0,0,0         
34562306a36Sopenharmony_ci		000000002c75c000,481,normal,1,0,1,0,0,0         
34662306a36Sopenharmony_ci		000000002c78c000,481,normal,1,0,1,0,0,0         
34762306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
34862306a36Sopenharmony_ci		000000002c754000,481,normal,1,0,1,0,0,0         
34962306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
35062306a36Sopenharmony_ci		000000002c754000,481,normal,1,0,1,0,0,0         
35162306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
35262306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
35362306a36Sopenharmony_ci		000000002c78c000,481,normal,1,0,1,0,0,0         
35462306a36Sopenharmony_ci		000000002c790000,481,normal,1,0,1,0,0,0         
35562306a36Sopenharmony_ci		000000002c754000,481,normal,1,0,1,0,0,0         
35662306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
35762306a36Sopenharmony_ci		000000002c75c000,481,normal,1,0,1,0,0,0         
35862306a36Sopenharmony_ci		000000002c780000,481,normal,1,0,1,0,0,0         
35962306a36Sopenharmony_ci		000000002c784000,481,normal,1,0,1,0,0,0         
36062306a36Sopenharmony_ci		000000002c788000,481,normal,1,0,1,0,0,0         
36162306a36Sopenharmony_ci		000000002c78c000,481,normal,1,0,1,0,0,0         
36262306a36Sopenharmony_ci		000000002c790000,481,normal,1,0,1,0,0,0         
36362306a36Sopenharmony_ci		000000002c754000,481,normal,1,0,1,0,0,0         
36462306a36Sopenharmony_ci		000000002c758000,481,normal,1,0,1,0,0,0         
36562306a36Sopenharmony_ci		000000002c75c000,512,normal,1,0,1,0,0,1        D
36662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0       E 
36762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
36862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
36962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
37062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
37162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
37262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
37362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
37462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
37562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
37662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
37762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
37862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
37962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
38062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
38162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
38262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
38362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
38462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
38562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
38662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
38762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
38862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
38962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
39062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
39162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
39262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
39362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
39462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
39562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
39662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
39762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
39862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
39962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
40062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
40162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
40262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
40362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
40462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
40562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
40662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
40762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
40862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
40962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
41062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
41162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
41262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
41362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
41462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
41562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
41662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
41762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
41862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
41962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
42062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
42162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
42262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
42362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
42462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
42562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
42662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
42762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
42862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
42962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
43062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
43162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
43262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
43362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
43462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
43562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
43662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
43762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
43862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
43962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
44062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
44162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
44262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
44362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
44462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
44562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
44662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
44762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
44862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
44962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
45062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
45162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
45262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
45362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
45462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
45562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
45662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
45762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
45862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
45962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
46062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
46162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
46262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
46362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
46462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
46562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
46662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
46762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
46862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
46962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
47062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
47162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
47262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
47362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
47462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
47562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
47662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
47762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
47862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
47962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
48062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
48162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
48262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
48362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
48462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
48562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
48662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
48762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
48862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
48962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
49062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
49162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
49262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
49362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
49462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
49562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
49662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
49762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
49862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
49962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
50062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
50162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
50262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
50362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
50462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
50562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
50662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
50762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
50862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
50962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
51062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
51162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
51262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
51362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
51462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
51562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
51662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
51762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
51862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
51962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
52062306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
52162306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
52262306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
52362306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
52462306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
52562306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
52662306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
52762306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
52862306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
52962306a36Sopenharmony_ci		0000000000000000,0,UNKNOWN,0,0,0,0,0,0         
53062306a36Sopenharmony_ci		00000000381ab000,0,link,0,0,0,0,0,1
53162306a36Sopenharmony_ci
53262306a36Sopenharmony_ci
53362306a36Sopenharmony_ciTrace Events
53462306a36Sopenharmony_ci-------------
53562306a36Sopenharmony_ci
53662306a36Sopenharmony_ciDWC3 also provides several trace events which help us gathering
53762306a36Sopenharmony_ciinformation about the behavior of the driver during runtime.
53862306a36Sopenharmony_ci
53962306a36Sopenharmony_ciIn order to use these events, you must enable ``CONFIG_FTRACE`` in
54062306a36Sopenharmony_ciyour kernel config.
54162306a36Sopenharmony_ci
54262306a36Sopenharmony_ciFor details about how enable DWC3 events, see section **Reporting
54362306a36Sopenharmony_ciBugs**.
54462306a36Sopenharmony_ci
54562306a36Sopenharmony_ciThe following subsections will give details about each Event Class and
54662306a36Sopenharmony_cieach Event defined by DWC3.
54762306a36Sopenharmony_ci
54862306a36Sopenharmony_ciMMIO
54962306a36Sopenharmony_ci```````
55062306a36Sopenharmony_ci
55162306a36Sopenharmony_ciIt is sometimes useful to look at every MMIO access when looking for
55262306a36Sopenharmony_cibugs. Because of that, DWC3 offers two Trace Events (one for
55362306a36Sopenharmony_cidwc3_readl() and one for dwc3_writel()). ``TP_printk`` follows::
55462306a36Sopenharmony_ci
55562306a36Sopenharmony_ci  TP_printk("addr %p value %08x", __entry->base + __entry->offset,
55662306a36Sopenharmony_ci  		__entry->value)
55762306a36Sopenharmony_ci
55862306a36Sopenharmony_ciInterrupt Events
55962306a36Sopenharmony_ci````````````````
56062306a36Sopenharmony_ci
56162306a36Sopenharmony_ciEvery IRQ event can be logged and decoded into a human readable
56262306a36Sopenharmony_cistring. Because every event will be different, we don't give an
56362306a36Sopenharmony_ciexample other than the ``TP_printk`` format used::
56462306a36Sopenharmony_ci
56562306a36Sopenharmony_ci  TP_printk("event (%08x): %s", __entry->event,
56662306a36Sopenharmony_ci  		dwc3_decode_event(__entry->event, __entry->ep0state))
56762306a36Sopenharmony_ci
56862306a36Sopenharmony_ciControl Request
56962306a36Sopenharmony_ci`````````````````
57062306a36Sopenharmony_ci
57162306a36Sopenharmony_ciEvery USB Control Request can be logged to the trace buffer. The
57262306a36Sopenharmony_cioutput format is::
57362306a36Sopenharmony_ci
57462306a36Sopenharmony_ci  TP_printk("%s", dwc3_decode_ctrl(__entry->bRequestType,
57562306a36Sopenharmony_ci  				__entry->bRequest, __entry->wValue,
57662306a36Sopenharmony_ci  				__entry->wIndex, __entry->wLength)
57762306a36Sopenharmony_ci  )
57862306a36Sopenharmony_ci
57962306a36Sopenharmony_ciNote that Standard Control Requests will be decoded into
58062306a36Sopenharmony_cihuman-readable strings with their respective arguments. Class and
58162306a36Sopenharmony_ciVendor requests will be printed out a sequence of 8 bytes in hex
58262306a36Sopenharmony_ciformat.
58362306a36Sopenharmony_ci
58462306a36Sopenharmony_ciLifetime of a ``struct usb_request``
58562306a36Sopenharmony_ci```````````````````````````````````````
58662306a36Sopenharmony_ci
58762306a36Sopenharmony_ciThe entire lifetime of a ``struct usb_request`` can be tracked on the
58862306a36Sopenharmony_citrace buffer. We have one event for each of allocation, free,
58962306a36Sopenharmony_ciqueueing, dequeueing, and giveback. Output format is::
59062306a36Sopenharmony_ci
59162306a36Sopenharmony_ci  TP_printk("%s: req %p length %u/%u %s%s%s ==> %d",
59262306a36Sopenharmony_ci  	__get_str(name), __entry->req, __entry->actual, __entry->length,
59362306a36Sopenharmony_ci  	__entry->zero ? "Z" : "z",
59462306a36Sopenharmony_ci  	__entry->short_not_ok ? "S" : "s",
59562306a36Sopenharmony_ci  	__entry->no_interrupt ? "i" : "I",
59662306a36Sopenharmony_ci  	__entry->status
59762306a36Sopenharmony_ci  )
59862306a36Sopenharmony_ci
59962306a36Sopenharmony_ciGeneric Commands
60062306a36Sopenharmony_ci````````````````````
60162306a36Sopenharmony_ci
60262306a36Sopenharmony_ciWe can log and decode every Generic Command with its completion
60362306a36Sopenharmony_cicode. Format is::
60462306a36Sopenharmony_ci
60562306a36Sopenharmony_ci  TP_printk("cmd '%s' [%x] param %08x --> status: %s",
60662306a36Sopenharmony_ci  	dwc3_gadget_generic_cmd_string(__entry->cmd),
60762306a36Sopenharmony_ci  	__entry->cmd, __entry->param,
60862306a36Sopenharmony_ci  	dwc3_gadget_generic_cmd_status_string(__entry->status)
60962306a36Sopenharmony_ci  )
61062306a36Sopenharmony_ci
61162306a36Sopenharmony_ciEndpoint Commands
61262306a36Sopenharmony_ci````````````````````
61362306a36Sopenharmony_ci
61462306a36Sopenharmony_ciEndpoints commands can also be logged together with completion
61562306a36Sopenharmony_cicode. Format is::
61662306a36Sopenharmony_ci
61762306a36Sopenharmony_ci  TP_printk("%s: cmd '%s' [%d] params %08x %08x %08x --> status: %s",
61862306a36Sopenharmony_ci  	__get_str(name), dwc3_gadget_ep_cmd_string(__entry->cmd),
61962306a36Sopenharmony_ci  	__entry->cmd, __entry->param0,
62062306a36Sopenharmony_ci  	__entry->param1, __entry->param2,
62162306a36Sopenharmony_ci  	dwc3_ep_cmd_status_string(__entry->cmd_status)
62262306a36Sopenharmony_ci  )
62362306a36Sopenharmony_ci
62462306a36Sopenharmony_ciLifetime of a ``TRB``
62562306a36Sopenharmony_ci``````````````````````
62662306a36Sopenharmony_ci
62762306a36Sopenharmony_ciA ``TRB`` Lifetime is simple. We are either preparing a ``TRB`` or
62862306a36Sopenharmony_cicompleting it. With these two events, we can see how a ``TRB`` changes
62962306a36Sopenharmony_ciover time. Format is::
63062306a36Sopenharmony_ci
63162306a36Sopenharmony_ci  TP_printk("%s: %d/%d trb %p buf %08x%08x size %s%d ctrl %08x (%c%c%c%c:%c%c:%s)",
63262306a36Sopenharmony_ci  	__get_str(name), __entry->queued, __entry->allocated,
63362306a36Sopenharmony_ci  	__entry->trb, __entry->bph, __entry->bpl,
63462306a36Sopenharmony_ci  	({char *s;
63562306a36Sopenharmony_ci  	int pcm = ((__entry->size >> 24) & 3) + 1;
63662306a36Sopenharmony_ci  	switch (__entry->type) {
63762306a36Sopenharmony_ci  	case USB_ENDPOINT_XFER_INT:
63862306a36Sopenharmony_ci  	case USB_ENDPOINT_XFER_ISOC:
63962306a36Sopenharmony_ci  		switch (pcm) {
64062306a36Sopenharmony_ci  		case 1:
64162306a36Sopenharmony_ci  			s = "1x ";
64262306a36Sopenharmony_ci  			break;
64362306a36Sopenharmony_ci  		case 2:
64462306a36Sopenharmony_ci  			s = "2x ";
64562306a36Sopenharmony_ci  			break;
64662306a36Sopenharmony_ci  		case 3:
64762306a36Sopenharmony_ci  			s = "3x ";
64862306a36Sopenharmony_ci  			break;
64962306a36Sopenharmony_ci  		}
65062306a36Sopenharmony_ci  	default:
65162306a36Sopenharmony_ci  		s = "";
65262306a36Sopenharmony_ci  	} s; }),
65362306a36Sopenharmony_ci  	DWC3_TRB_SIZE_LENGTH(__entry->size), __entry->ctrl,
65462306a36Sopenharmony_ci  	__entry->ctrl & DWC3_TRB_CTRL_HWO ? 'H' : 'h',
65562306a36Sopenharmony_ci  	__entry->ctrl & DWC3_TRB_CTRL_LST ? 'L' : 'l',
65662306a36Sopenharmony_ci  	__entry->ctrl & DWC3_TRB_CTRL_CHN ? 'C' : 'c',
65762306a36Sopenharmony_ci  	__entry->ctrl & DWC3_TRB_CTRL_CSP ? 'S' : 's',
65862306a36Sopenharmony_ci  	__entry->ctrl & DWC3_TRB_CTRL_ISP_IMI ? 'S' : 's',
65962306a36Sopenharmony_ci  	__entry->ctrl & DWC3_TRB_CTRL_IOC ? 'C' : 'c',
66062306a36Sopenharmony_ci      dwc3_trb_type_string(DWC3_TRBCTL_TYPE(__entry->ctrl))
66162306a36Sopenharmony_ci  )  
66262306a36Sopenharmony_ci
66362306a36Sopenharmony_ciLifetime of an Endpoint
66462306a36Sopenharmony_ci```````````````````````
66562306a36Sopenharmony_ci
66662306a36Sopenharmony_ciAnd endpoint's lifetime is summarized with enable and disable
66762306a36Sopenharmony_cioperations, both of which can be traced. Format is::
66862306a36Sopenharmony_ci
66962306a36Sopenharmony_ci  TP_printk("%s: mps %d/%d streams %d burst %d ring %d/%d flags %c:%c%c%c%c%c:%c:%c",
67062306a36Sopenharmony_ci  	__get_str(name), __entry->maxpacket,
67162306a36Sopenharmony_ci  	__entry->maxpacket_limit, __entry->max_streams,
67262306a36Sopenharmony_ci  	__entry->maxburst, __entry->trb_enqueue,
67362306a36Sopenharmony_ci  	__entry->trb_dequeue,
67462306a36Sopenharmony_ci  	__entry->flags & DWC3_EP_ENABLED ? 'E' : 'e',
67562306a36Sopenharmony_ci  	__entry->flags & DWC3_EP_STALL ? 'S' : 's',
67662306a36Sopenharmony_ci  	__entry->flags & DWC3_EP_WEDGE ? 'W' : 'w',
67762306a36Sopenharmony_ci  	__entry->flags & DWC3_EP_TRANSFER_STARTED ? 'B' : 'b',
67862306a36Sopenharmony_ci  	__entry->flags & DWC3_EP_PENDING_REQUEST ? 'P' : 'p',
67962306a36Sopenharmony_ci  	__entry->flags & DWC3_EP_END_TRANSFER_PENDING ? 'E' : 'e',
68062306a36Sopenharmony_ci  	__entry->direction ? '<' : '>'
68162306a36Sopenharmony_ci  )
68262306a36Sopenharmony_ci
68362306a36Sopenharmony_ci
68462306a36Sopenharmony_ciStructures, Methods and Definitions
68562306a36Sopenharmony_ci====================================
68662306a36Sopenharmony_ci
68762306a36Sopenharmony_ci.. kernel-doc:: drivers/usb/dwc3/core.h
68862306a36Sopenharmony_ci   :doc: main data structures
68962306a36Sopenharmony_ci   :internal:
69062306a36Sopenharmony_ci
69162306a36Sopenharmony_ci.. kernel-doc:: drivers/usb/dwc3/gadget.h
69262306a36Sopenharmony_ci   :doc: gadget-only helpers
69362306a36Sopenharmony_ci   :internal:
69462306a36Sopenharmony_ci
69562306a36Sopenharmony_ci.. kernel-doc:: drivers/usb/dwc3/gadget.c
69662306a36Sopenharmony_ci   :doc: gadget-side implementation
69762306a36Sopenharmony_ci   :internal:
69862306a36Sopenharmony_ci
69962306a36Sopenharmony_ci.. kernel-doc:: drivers/usb/dwc3/core.c
70062306a36Sopenharmony_ci   :doc: core driver (probe, PM, etc)
70162306a36Sopenharmony_ci   :internal:
70262306a36Sopenharmony_ci   
70362306a36Sopenharmony_ci.. [#trb] Transfer Request Block
70462306a36Sopenharmony_ci.. [#link_trb] Transfer Request Block pointing to another Transfer
70562306a36Sopenharmony_ci	       Request Block.
70662306a36Sopenharmony_ci.. [#debugfs] The Debug File System
70762306a36Sopenharmony_ci.. [#configfs] The Config File System
70862306a36Sopenharmony_ci.. [#cbw] Command Block Wrapper
70962306a36Sopenharmony_ci.. _Linus' tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
71062306a36Sopenharmony_ci.. _me: felipe.balbi@linux.intel.com
71162306a36Sopenharmony_ci.. _linux-usb: linux-usb@vger.kernel.org
712