Host throughput using Linux driver may be low due to EOT time slot

Question: As a host, why is the throughput using the Linux driver low? It appears that only around half of the frame is being utilized?

 

Answer:

 A portion at the end of the frame is reserved for processing the frames events and setting up the TD for the next frame. This time slot is referred to as EOT. The EOT time defined in the release of our driver is extra long to ensure proper functionality by all devices (mainly, it kept audio devices from making cracking and popping noises). 
This EOT time is configurable in the Linux OTG driver and by default is around 40% of the frame. Therefore, by default, 40% of each frame is reserved for processing and no USB transfers can take place during that time.
 

You can decrease this EOT time and increase the throughput by changing:


1. The MAX_FRAME_BW define in the cy7c67200_300_hcd_simple.c file.
This number defaults to 4096 (~bits per frame). You'll want to increase this, possibly upto 6-7K.

2. The DEFAULT_EOT define in the cy7c67200_300_hcd.c file.
This number defaults to 4800 (40% of frame). You'll want to decrease this, probably no lower then 1200 (10% of frame).