Message ID | 20121220043943.GA992@nchen-desktop (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Peter, On Thu, Dec 20, 2012 at 2:39 AM, Peter Chen <peter.chen@freescale.com> wrote: > Please to see if the Stream mode disable (bit4, usbmode) is set or not? > If it is not, please try below patch > > diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c > index c97503b..258bc02 100644 > --- a/drivers/usb/host/ehci-hcd.c > +++ b/drivers/usb/host/ehci-hcd.c > @@ -227,6 +227,7 @@ static void tdi_reset (struct ehci_hcd *ehci) > > tmp = ehci_readl(ehci, &ehci->regs->usbmode); > tmp |= USBMODE_CM_HC; > + tmp |= (1 << 4); /* disable stream mode */ > /* The default byte access to MMR space is LE after > * controller reset. Set the required endian mode > * for transfer buffers to match the host microprocessor Excellent! Your suggestion made scp work with mx6 on 3.7. I assume that this "fix" or workaround would need a better place, right? Should this fix go into the chipidea host driver instead? Also, I wonder on how "standard" this USBMODE register is. i.e. there is a deviation from the FSL EHCI USBMODE register. I found it in include/linux/usb/ehci_def.h: #define USBMODE_SDIS (1<<3) /* Stream disable */ , which is at a different bit position from the i.MX6 Reference Manual: 4 SDIS Stream Disable Mode. (0 - Inactive [default]; 1 - Active) Also interested to know more details at to why disabling stream mode make things work. Thanks a lot! Fabio Estevam
On Thu, Dec 20, 2012 at 8:20 AM, Fabio Estevam <festevam@gmail.com> wrote: > Excellent! Your suggestion made scp work with mx6 on 3.7. > > I assume that this "fix" or workaround would need a better place, right? > > Should this fix go into the chipidea host driver instead? Also, we are already passing the CI13XXX_DISABLE_STREAMING flag: static struct ci13xxx_platform_data ci13xxx_imx_platdata = { .name = "ci13xxx_imx", .flags = CI13XXX_REQUIRE_TRANSCEIVER | CI13XXX_PULLUP_ON_VBUS | CI13XXX_DISABLE_STREAMING, .capoffset = DEF_CAPOFFSET, }; Regards, Fabio Estevam
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index c97503b..258bc02 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -227,6 +227,7 @@ static void tdi_reset (struct ehci_hcd *ehci) tmp = ehci_readl(ehci, &ehci->regs->usbmode); tmp |= USBMODE_CM_HC; + tmp |= (1 << 4); /* disable stream mode */ /* The default byte access to MMR space is LE after * controller reset. Set the required endian mode * for transfer buffers to match the host microprocessor