On Sat, Dec 14, 2013 at 04:48:38AM +0100, Apelete Seketeli wrote: > JZ4740 USB Device Controller is not OTG compatible and does not have DEVCTL > register in silicon. > > During ethernet-over-usb transactions, on reset, musb driver tries to > read from DEVCTL and consequently sets device as host (A-Device) > instead of peripheral (B-Device), which makes it a composite device to > the USB gadget driver. > This induces a kernel panic during power down where the USB gadget > driver does a null pointer dereference when trying to access the > composite device configuration. > > On reset, do not rely on DEVCTL value for setting gadget peripheral > mode: hardcode it instead to B-Device. > > Signed-off-by: Apelete Seketeli <apelete@xxxxxxxxxxxx> > --- > drivers/usb/musb/musb_gadget.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c > index 32fb057..b4bea7a 100644 > --- a/drivers/usb/musb/musb_gadget.c > +++ b/drivers/usb/musb/musb_gadget.c > @@ -2119,6 +2119,14 @@ __acquires(musb->lock) > /* Normal reset, as B-Device; > * or else after HNP, as A-Device > */ > +#if defined(CONFIG_USB_MUSB_JZ4740) || defined(CONFIG_USB_MUSB_JZ4740_MODULE) NAK, no ifdefs in this driver. Pass a quirk flag through platform_data or something similar. -- balbi
Attachment:
signature.asc
Description: Digital signature