
Hi,
On Sun, Jun 14, 2015 at 12:40:11PM +0200, Hans de Goede wrote:
Paul, can you test these with gadget mode? Specifically if they help the problem you were seeing when switching roles?
Also this bit from the kernel code for the sunxi glue may be relevant to your problems:
if ((musb->int_usb & MUSB_INTR_RESET) && !is_host_active(musb)) { /* ep0 FADDR must be 0 when (re)entering peripheral mode */ musb_ep_select(musb->mregs, 0); musb_writeb(musb->mregs, MUSB_FADDR, 0); }
This is from the interrupt handler in the sunxi-musb glue in the kernel, maybe we can do the same, and/or maybe we need to do:
/* ep0 FADDR must be 0 when (re)entering peripheral mode */ musb_ep_select(musb->mregs, 0); musb_writeb(musb->mregs, MUSB_FADDR, 0);
From sunxi_musb_disable?
So, I was affected by this issue on a SinA33, even when not switching roles (since the SinA33 is peripheral only). The issue I was seeing what that when I was two subsequent use of any gadget (fastboot, USB ethernet traffic), the second would silently fail on U-boot side with the host failing to enumerate the device.
Paul pointed me to that thread, and your suggestion on EP0 seems like a good lead, since the ugly http://pastebin.com/9Y6S9Hpw makes it work.
Thanks, Maxime