USB transfers in device drivers

O'Connor, Daniel darius at dons.net.au
Wed May 1 09:17:15 UTC 2019


Hi,
I have a device driver for a USB device (a custom Cypress FX2 based board) that is relatively simple - it uses the USB FIFO code to create 3 FIFOs (one bidirectional slow serial interface, one device->PC fast parallel interface from a hardware FIFO) plus a bunch of ioctls for getting the FX2 firmware to do various things.

We have been having issues on some systems where the hardware FIFO that the FX2 reads (and sends to the PC) fills up, it has about 50msec (96k) of buffering (at ~2MByte/sec) which seems like quite a lot to me (given the driver sets the USB FIFO to buffer 2048 8k chunks..).

I don't have a solid hypothesis for the failures as yes but one thing I'd like to make sure is that the USB stack is keeping the USB hardware busy with pending requests - does anyone know if the USB FIFO code does that automatically?

I'm currently testing doing 96k transfers (this is the maximum without some significant reworking) and the FIFO is 16MByte in size but it still fails so any suggestions welcome..

The FreeBSD version at this site is very old (9.3) so we are going to update it but it's not easy as the site is quite remote.

The hardware in question is a Supermicro X10SLM-F (Intel C224 Express) with an E3-1220 v3 at 3.1GHz, it also has an LSI MegaRAID SAS 9271-4i with 4 disks in RAID-5. Unfortunately I do not have ready access to a similar system here which is annoying..

Any suggestions welcome!

PS please CC me on replies.

--
Daniel O'Connor
"The nice thing about standards is that there
are so many of them to choose from."
 -- Andrew Tanenbaum




More information about the freebsd-usb mailing list