On Wed, Mar 11, 2015 at 01:42:42PM +0100, Bas Vermeulen wrote: > i.MX35 has an issue that when USB DMA (SINGLE) transfers > are interrupted, the usb core can hang. > > This patch implements the workaround described in ENGcm11601 > by setting the AHB to use INCR transfers instead of SINGLE > transfers. > > Signed-off-by: Bas Vermeulen <bas.vermeulen@xxxxxxxxxxxx> > CC: Sasha Hauer <kernel@xxxxxxxxxxxxxx> > CC: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > --- > drivers/usb/host/ehci-mxc.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/drivers/usb/host/ehci-mxc.c b/drivers/usb/host/ehci-mxc.c > index c7a9b31..1a00492 100644 > --- a/drivers/usb/host/ehci-mxc.c > +++ b/drivers/usb/host/ehci-mxc.c > @@ -36,6 +36,7 @@ > static const char hcd_name[] = "ehci-mxc"; > > #define ULPI_VIEWPORT_OFFSET 0x170 > +#define SBUSCFG_OFFSET 0x090 > > struct ehci_mxc_priv { > struct clk *usbclk, *ahbclk, *phyclk; > @@ -43,8 +44,24 @@ struct ehci_mxc_priv { > > static struct hc_driver __read_mostly ehci_mxc_hc_driver; > > +static int ehci_mxc_reset(struct usb_hcd *hcd) > +{ > + int retval; > + > + retval = ehci_setup(hcd); > + if (retval) > + return retval; > + > + /* workaround for ENGcm11601 */ > + if (of_machine_is_compatible("fsl,imx35")) > + writel(0, hcd->regs + SBUSCFG_OFFSET); This driver normally is not used with device tree. Without additional kernel changes the chipidea driver is used instead. Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html