From: Abbas Raza <Abbas_Raza@xxxxxxxxxx> When gadget driver is inserted and OTG is in host mode, interrupts occur which are not handled by chipidea driver causing following problem. To avoid this problem, don't allow insertion of gadget driver in host mode. root@mx6q:~# echo -n host > /sys/kernel/debug/ci_hdrc.0/role root@mx6q:~# modprobe g_ether using random self ethernet address using random host ethernet address usb0: HOST MAC aa:4b:f8:b4:d7:81 usb0: MAC 5e:65:a8:9e:6e:45 using random self ethernet address using random host ethernet address g_ether gadget: Ethernet Gadget, version: Memorial Day 2008 g_ether gadget: g_ether ready root@mx6q35:~# irq 75: nobody cared (try booting with the "irqpoll" option) CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.16.0-rc2-00001-gd675913 #53 Backtrace: [<80012418>] (dump_backtrace) from [<800126fc>] (show_stack+0x18/0x1c) r6:8092bae0 r5:8092bae0 r4:00000000 r3:00000000 [<800126e4>] (show_stack) from [<806770bc>] (dump_stack+0x8c/0xa4) [<80677030>] (dump_stack) from [<80074520>] (__report_bad_irq+0x28/0xc8) r6:0000004b r5:00000000 r4:be00ab00 r3:00000000 [<800744f8>] (__report_bad_irq) from [<80074ae8>] (note_interrupt+0x264/0x2c4) r6:0000004b r5:00000000 r4:be00ab00 r3:00000000 [<80074884>] (note_interrupt) from [<80072400>] (handle_irq_event_percpu+0xb4/0x13c) r10:80969dc6 r9:be00ab00 r8:0000004b r7:00000000 r6:00000000 r5:00000000 r4:00000000 r3:00000000 [<8007234c>] (handle_irq_event_percpu) from [<800724cc>] (handle_irq_event+0x44/0x64) r10:00000000 r9:806816b0 r8:80907f20 r7:0000004b r6:bd882c40 r5:be00ab5c r4:be00ab00 [<80072488>] (handle_irq_event) from [<800758b8>] (handle_fasteoi_irq+0xc8/0x1bc) r6:8092bd64 r5:be00ab5c r4:be00ab00 r3:00000000 [<800757f0>] (handle_fasteoi_irq) from [<80071b14>] (generic_handle_irq+0x30/0x44) r6:80906020 r5:80902e2c r4:0000004b r3:800757f0 [<80071ae4>] (generic_handle_irq) from [<8000f3d8>] (handle_IRQ+0x54/0xbc) r4:8090ed2c r3:00000180 [<8000f384>] (handle_IRQ) from [<800086cc>] (gic_handle_irq+0x30/0x68) r8:00000000 r7:f4000100 r6:80907e28 r5:8090eea0 r4:f400010c r3:000000a0 [<8000869c>] (gic_handle_irq) from [<80013264>] (__irq_svc+0x44/0x5c) Exception stack(0x80907e28 to 0x80907e70) 7e20: 00000001 00000000 00000000 80911f70 00000282 80906000 7e40: 8002eec4 0000001d 00000000 806816b0 00000000 80907ebc 00000000 80907e70 7e60: 800663c4 8002e9bc 60000113 ffffffff r7:80907e5c r6:ffffffff r5:60000113 r4:8002e9bc [<8002e8f4>] (__do_softirq) from [<8002eec4>] (irq_exit+0xb8/0x10c) r10:00000000 r9:806816b0 r8:00000000 r7:0000001d r6:80906000 r5:80902e2c r4:80906000 [<8002ee0c>] (irq_exit) from [<8000f3e0>] (handle_IRQ+0x5c/0xbc) r5:80902e2c r4:8090ed2c [<8000f384>] (handle_IRQ) from [<800086cc>] (gic_handle_irq+0x30/0x68) r8:80969dc3 r7:f4000100 r6:80907f20 r5:8090eea0 r4:f400010c r3:000000a0 [<8000869c>] (gic_handle_irq) from [<80013264>] (__irq_svc+0x44/0x5c) Exception stack(0x80907f20 to 0x80907f68) 7f20: 00000001 00000001 00000000 80911f70 80906000 8090e98c 8090e938 80969dc3 7f40: 80969dc3 806816b0 00000000 80907f74 00000000 80907f68 8006640c 8000f754 7f60: 20000013 ffffffff r7:80907f54 r6:ffffffff r5:20000013 r4:8000f754 [<8000f72c>] (arch_cpu_idle) from [<80061c7c>] (cpu_startup_entry+0x104/0x16c) [<80061b78>] (cpu_startup_entry) from [<80672258>] (rest_init+0xb0/0xd8) r7:808f4c00 r3:00000000 [<806721a8>] (rest_init) from [<808b2bec>] (start_kernel+0x33c/0x3a8) r5:8096a000 r4:8090ea30 [<808b28b0>] (start_kernel) from [<10008074>] (0x10008074) handlers: [<804456a8>] ci_irq Disabling IRQ #75 usb 2-1: new high-speed USB device number 2 using ci_hdrc usb 2-1: device descriptor read/64, error -110 usb 2-1: device descriptor read/64, error -110 usb 2-1: new high-speed USB device number 3 using ci_hdrc usb 2-1: device descriptor read/64, error -110 usb 2-1: device descriptor read/64, error -110 usb 2-1: new high-speed USB device number 4 using ci_hdrc usb 2-1: device not accepting address 4, error -110 usb 2-1: new high-speed USB device number 5 using ci_hdrc usb 2-1: device not accepting address 5, error -110 usb usb2-port1: unable to enumerate USB device usb 2-1: new full-speed USB device number 6 using ci_hdrc usb 2-1: device descriptor read/64, error -110 usb 2-1: device descriptor read/64, error -110 usb 2-1: new full-speed USB device number 7 using ci_hdrc usb 2-1: device descriptor read/64, error -110 usb 2-1: device descriptor read/64, error -110 usb 2-1: new full-speed USB device number 8 using ci_hdrc usb 2-1: device not accepting address 8, error -110 usb usb2-port1: cannot reset (err = -32) usb usb2-port1: cannot reset (err = -32) usb usb2-port1: cannot reset (err = -32) usb usb2-port1: cannot reset (err = -32) usb usb2-port1: cannot reset (err = -32) usb usb2-port1: Cannot enable. Maybe the USB cable is bad? usb usb2-port1: unable to enumerate USB device Signed-off-by: Abbas Raza <Abbas_Raza@xxxxxxxxxx> --- drivers/usb/chipidea/udc.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c index 69425b3..7a12d13 100644 --- a/drivers/usb/chipidea/udc.c +++ b/drivers/usb/chipidea/udc.c @@ -1633,6 +1633,12 @@ static int ci_udc_start(struct usb_gadget *gadget, unsigned long flags; int retval = -ENOMEM; + if (ci->role == CI_ROLE_HOST) { + dev_err(ci->dev, "error: cannot register gadget driver in host" + "mode\n"); + return -EPERM; + } + if (driver->disconnect == NULL) return -EINVAL; -- 1.8.3.2 -- 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