The dwc2 driver uses too small FIFOs on Octeon. Because of this, the
USB controller can hammer the CPU with an immense flood of interrupts.
A rate of over 50,000 interrupts per second is not uncommon under
IO load.
The adjusted sizes below are from NetBSD. Those might not be the
optimum ones, but those seem to quiet the controller down noticeably.
ok?
Index: arch/octeon/dev/octdwctwo.c
===================================================================
RCS file: src/sys/arch/octeon/dev/octdwctwo.c,v
retrieving revision 1.8
diff -u -p -r1.8 octdwctwo.c
--- arch/octeon/dev/octdwctwo.c 19 Jul 2015 00:33:36 -0000 1.8
+++ arch/octeon/dev/octdwctwo.c 29 Aug 2015 13:14:44 -0000
@@ -80,9 +80,9 @@ static struct dwc2_core_params octdwctwo
.speed = 0,
.enable_dynamic_fifo = 1,
.en_multiple_tx_fifo = 0,
- .host_rx_fifo_size = 256/*XXX*/,
- .host_nperio_tx_fifo_size = 128/*XXX*/,
- .host_perio_tx_fifo_size = 128/*XXX*/,
+ .host_rx_fifo_size = 456,
+ .host_nperio_tx_fifo_size = 912,
+ .host_perio_tx_fifo_size = 256,
.max_transfer_size = 65535,
.max_packet_count = 511,
.host_channels = 8,