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