Hello, I'm using Greg's linux-usb/next on mx28-evk with mxs-defconfig. I switched on OTG support and ether gadget and compiled it into the kernel. During every boot when the ether gadget is loaded the IRQ of the usb0 fires and nobody cares: > [ 3.336843] ci_hdrc ci_hdrc.0: ChipIdea HDRC found, lpm: 0; cap: c8920100 op: c8920140 > [ 3.336951] ci_hdrc ci_hdrc.0: It is OTG capable controller > [ 3.345476] ci_hdrc ci_hdrc.0: EHCI Host Controller > [ 3.351998] ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1 > [ 3.379715] ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00 > [ 3.397057] hub 1-0:1.0: USB hub found > [ 3.401761] hub 1-0:1.0: 1 port detected > [ 3.413366] ci_hdrc ci_hdrc.1: ChipIdea HDRC found, lpm: 0; cap: c8940100 op: c8940140 > [ 3.413476] ci_hdrc ci_hdrc.1: It is OTG capable controller > [ 3.417595] ci_hdrc ci_hdrc.1: EHCI Host Controller > [ 3.422925] ci_hdrc ci_hdrc.1: new USB bus registered, assigned bus number 2 > [ 3.449654] ci_hdrc ci_hdrc.1: USB 2.0 started, EHCI 1.00 > [ 3.460242] hub 2-0:1.0: USB hub found > [ 3.464310] hub 2-0:1.0: 1 port detected > [ 3.475410] using random self ethernet address > [ 3.480264] using random host ethernet address > [ 3.488022] usb0: HOST MAC 66:02:bb:f7:e7:eb > [ 3.493850] usb0: MAC 26:a9:b8:cc:5c:2d > [ 3.497987] using random self ethernet address > [ 3.503321] using random host ethernet address > [ 3.510076] g_ether gadget: Ethernet Gadget, version: Memorial Day 2008 > [ 3.516749] g_ether gadget: g_ether ready > [ 4.842006] irq 237: nobody cared (try booting with the "irqpoll" option) > [ 4.848855] CPU: 0 PID: 1 Comm: swapper Not tainted 3.12.0-rc6 #149 > [ 4.855218] [<c00144c8>] (unwind_backtrace+0x0/0xf0) from [<c0011ce4>] (show_stack+0x10/0x14) > [ 4.863808] [<c0011ce4>] (show_stack+0x10/0x14) from [<c00513a0>] (__report_bad_irq+0x20/0xc0) > [ 4.872463] [<c00513a0>] (__report_bad_irq+0x20/0xc0) from [<c0051848>] (note_interrupt+0x1d4/0x238) > [ 4.881636] [<c0051848>] (note_interrupt+0x1d4/0x238) from [<c004fac4>] (handle_irq_event_percpu+0xc4/0x264) > [ 4.891500] [<c004fac4>] (handle_irq_event_percpu+0xc4/0x264) from [<c004fca0>] (handle_irq_event+0x3c/0x5c) > [ 4.901365] [<c004fca0>] (handle_irq_event+0x3c/0x5c) from [<c0051fd0>] (handle_level_irq+0x8c/0xe8) > [ 4.910535] [<c0051fd0>] (handle_level_irq+0x8c/0xe8) from [<c004f358>] (generic_handle_irq+0x20/0x30) > [ 4.919880] [<c004f358>] (generic_handle_irq+0x20/0x30) from [<c000fde0>] (handle_IRQ+0x30/0x84) > [ 4.928705] [<c000fde0>] (handle_IRQ+0x30/0x84) from [<c0012764>] (__irq_svc+0x44/0x54) > [ 4.936757] [<c0012764>] (__irq_svc+0x44/0x54) from [<c0020248>] (__do_softirq+0x90/0x26c) > [ 4.945058] [<c0020248>] (__do_softirq+0x90/0x26c) from [<c00204f0>] (do_softirq+0x68/0x70) > [ 4.953442] [<c00204f0>] (do_softirq+0x68/0x70) from [<c00207e4>] (irq_exit+0xa4/0xf4) > [ 4.961395] [<c00207e4>] (irq_exit+0xa4/0xf4) from [<c000fde4>] (handle_IRQ+0x34/0x84) > [ 4.969353] [<c000fde4>] (handle_IRQ+0x34/0x84) from [<c0012764>] (__irq_svc+0x44/0x54) > [ 4.977396] [<c0012764>] (__irq_svc+0x44/0x54) from [<c0062c44>] (lock_acquire+0xac/0x104) > [ 4.985715] [<c0062c44>] (lock_acquire+0xac/0x104) from [<c046f76c>] (mutex_lock_nested+0x48/0x2d0) > [ 4.994815] [<c046f76c>] (mutex_lock_nested+0x48/0x2d0) from [<c02c211c>] (device_add+0x36c/0x608) > [ 5.003831] [<c02c211c>] (device_add+0x36c/0x608) from [<c035a990>] (mousedev_create+0x1f8/0x25c) > [ 5.012759] [<c035a990>] (mousedev_create+0x1f8/0x25c) from [<c067ca1c>] (mousedev_init+0x14/0x60) > [ 5.021758] [<c067ca1c>] (mousedev_init+0x14/0x60) from [<c00088ac>] (do_one_initcall+0xe8/0x154) > [ 5.030672] [<c00088ac>] (do_one_initcall+0xe8/0x154) from [<c0659ac8>] (kernel_init_freeable+0xec/0x1b4) > [ 5.040278] [<c0659ac8>] (kernel_init_freeable+0xec/0x1b4) from [<c0468188>] (kernel_init+0x8/0xe4) > [ 5.049363] [<c0468188>] (kernel_init+0x8/0xe4) from [<c000efa0>] (ret_from_fork+0x14/0x34) > [ 5.057723] handlers: > [ 5.060030] [<c03472b8>] ci_irq > [ 5.063205] Disabling IRQ #237 IRQ 237 belongs to the usb0, the OTG capable port. > grep ci_hdrc /proc/interrupts > 237: 100000 - 93 ci_hdrc_imx > 238: 0 - 92 ci_hdrc_imx I can reproduce the problem on another mx28 hardware, it happens only if a host type USB cable is plugged into the OTG port and connected to another machine's host port. This leads to the ID pin is pulled to ground and the chipidea driver comes up host mode. However the ether gadget seems to do something on the bus, which triggers an interrupt in the udc, but the multiplexer in the chipidea core will call the host role, due to the ID pin. If the system boot without a cable or with a device type cable (attached to another host or not doesn't matter), the ID pin stays floating, the driver comes in peripheral role and everything works. Marc -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
Attachment:
signature.asc
Description: OpenPGP digital signature