[RPI-B] [HEADS UP] DWC OTG TX path optimisation for 11-current

Svatopluk Kraus onwahe at gmail.com
Thu Jul 30 15:22:57 UTC 2015


Well, I'm trying to join answers for your previous emails in this one.

On Thu, Jul 30, 2015 at 2:38 PM, Hans Petter Selasky <hps at selasky.org> wrote:
> On 07/30/15 14:28, Hans Petter Selasky wrote:
>
> Can you run only "usbdump" while the interface is UP and the errors are printed in the console?
>
> We are looking for ERR different from "0".


It looks that there is no ERR different from "0" in usbdump at all.
Again, it looks that the load is generated "internally" and it does
not depend on explicit usb request directly.

>
> Does the interface come back when you down/up it?

Yes, it works.

> BTW: All your USB HUBs are self powered?

Yes, my usb hub has external power supply (12V, 4A) and my usb disk is
connected only.

>
> Does the device recover if you do:
>
> usbconfig -d X.Y reset
>
> for the ue0 ?

Yes, it does.


Anyhow, I think that I figured out why the system has so slow response
time when it's triggered. In general, it's not good idea to not limit
somehow interrupt filter execution time. If something wrong is
happening, then such filter can halt all system. I can get back fast
system response time with attached patch. Note that it's only a
proof-of-concept patch and it does not remove the problem. There is
still something what generates big load when it's triggered even if
system is 99% idle after trigger was pulled.

Svata
-------------- next part --------------
diff --git a/sys/dev/usb/controller/dwc_otg.c b/sys/dev/usb/controller/dwc_otg.c
index 51f083b..cde366f 100644
--- a/sys/dev/usb/controller/dwc_otg.c
+++ b/sys/dev/usb/controller/dwc_otg.c
@@ -2554,8 +2554,12 @@ dwc_otg_interrupt_poll_locked(struct dwc_otg_softc *sc)
 	uint32_t temp;
 	uint8_t got_rx_status;
 	uint8_t x;
+	uint32_t count = 0;
 
 repeat:
+	if (count++ > 2)
+		return;
+
 	/* get all channel interrupts */
 	for (x = 0; x != sc->sc_host_ch_max; x++) {
 		temp = DWC_OTG_READ_4(sc, DOTG_HCINT(x));


More information about the freebsd-arm mailing list