Problem with disabled/not-connected USB causing "irq N: nobody cared"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I've problem with one of my Broadcom based no-name China router.

This is a pretty standard/common BCM47186 SoC (chip id 0x5357, rev
0x02, package 0x0A). It can be found in some routers having USB
port(s), however my PCB doesn't have any USB port. It seems SoC is
capable of handling USB, but my PCB doesn't have USB soldered to it
(or maybe it also misses some required internal hub? I didn't try
soldering).

This makes "bcma" driver detect USB device on the SoC:
[ 0.096000] bcma: bus0: Core 4 found: USB 2.0 Host (manuf 0x4BF, id
0x819, rev 0x05, class 0x0)
and register it without noticing it's not connected.

This results in the following:
[ 6.540000] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 6.548000] ehci-platform: EHCI generic platform driver
[ 6.556000] ehci-platform ehci-platform.0: EHCI Host Controller
[ 6.560000] ehci-platform ehci-platform.0: new USB bus registered,
assigned bus number 1
[ 7.156000] irq 5: nobody cared (try booting with the "irqpoll" option)
[ 7.156000] CPU: 0 PID: 154 Comm: kmodloader Not tainted 3.10.18 #14
[ 7.156000] Stack : 00000006 00000000 00000000 00000000 00000000
00000000 804ed0a6 00000038
          838b52e0 8028f2dc 804cd018 802dd23b 0000009a 802e0000
00000000 802e0000
          80293268 8001f0f0 802e0000 8001ca30 00000000 00000000
80290bbc 82d43a04
          82d43a00 00000000 00000000 00000000 00000000 00000000
00000000 00000000
          00000000 00000000 00000000 00000000 00000000 00000000
00000000 82d43990
...
[ 7.156000] Call Trace:
[ 7.156000] [<80011d3c>] show_stack+0x48/0x70
[ 7.156000] [<8005a114>] __report_bad_irq+0x44/0xec
[ 7.156000] [<8005a6e8>] note_interrupt+0x25c/0x314
[ 7.156000] [<800587d4>] handle_irq_event_percpu+0x224/0x268
[ 7.156000] [<8005b4c0>] handle_percpu_irq+0x54/0x88
[ 7.156000] [<80057f58>] generic_handle_irq+0x3c/0x4c
[ 7.156000] [<8000ea38>] do_IRQ+0x1c/0x2c
[ 7.156000] [<8000a9e8>] plat_irq_dispatch+0x90/0xb8
[ 7.156000] [<80001444>] ret_from_irq+0x0/0x4
[ 7.156000] [<80130934>] arch_local_irq_restore+0x24/0x30
[ 7.156000] [<80059c18>] __setup_irq+0x494/0x5c4
[ 7.156000] [<80059e48>] request_threaded_irq+0x100/0x15c
[ 7.156000] [<82e475f8>] usb_add_hcd+0x334/0x7dc [usbcore]
[ 7.156000] [<82e221f8>] 0x82e221f8
[ 7.156000]
[ 7.156000] handlers:
[ 7.156000] [<82e466e8>] usb_hcd_irq [usbcore]
[ 7.156000] Disabling IRQ #5

As you can see, there is usb_hcd_irq handler, but it doesn't return IRQ_HANDLED.

Why is that? Because ehci_irq reads:
status = ehci_readl(ehci, &ehci->regs->status);
which is always 0x00001000. That means STS_HALT. This bit is ignored
by ehci_irq and it returns IRQ_NONE.

By adding simple printk in ehci_irq:
pr_info("[DBG] status:0x%08X masked_status:0x%08X\n", status, masked_status);
I've noticed this function is called ~140 times per second.
Funny thing, with the above printk I was spammed until device
rebooted, but I didn't see any "irq N: nobody cared".

On another machine with exactly the same chipset I get a nice USB support:
[ 4.068000] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 4.076000] ehci-platform: EHCI generic platform driver
[ 4.112000] ehci-platform ehci-platform.0: EHCI Host Controller
[ 4.128000] ehci-platform ehci-platform.0: new USB bus registered,
assigned bus number 1
[ 4.188000] ehci-platform ehci-platform.0: irq 6, io mem 0x18004000
[ 4.212000] ehci-platform ehci-platform.0: USB 2.0 started, EHCI 1.00
[ 4.216000] hub 1-0:1.0: USB hub found
[ 4.220000] hub 1-0:1.0: 2 ports detected
[ 4.228000] [DBG] [ehci_irq:706] status:0x00000004 masked_status:0x00000004
[ 4.544000] usb 1-1: new high-speed USB device number 2 using ehci-platform
[ 4.548000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.564000] [DBG] [ehci_irq:706] status:0x00008020 masked_status:0x00000020
[ 4.572000] [DBG] [ehci_irq:706] status:0x00008020 masked_status:0x00000020
[ 4.668000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.672000] [DBG] [ehci_irq:706] status:0x00008020 masked_status:0x00000020
[ 4.680000] [DBG] [ehci_irq:706] status:0x00008020 masked_status:0x00000020
[ 4.704000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.708000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.716000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.724000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.732000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.740000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.748000] hub 1-1:1.0: USB hub found
[ 4.756000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.760000] hub 1-1:1.0: 4 ports detected
[ 4.764000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.772000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.780000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.788000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.796000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.804000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.820000] [DBG] [ehci_irq:706] status:0x00008020 masked_status:0x00000020
[ 4.824000] [DBG] [ehci_irq:706] status:0x00008020 masked_status:0x00000020
[ 4.912000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.916000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.924000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.932000] [DBG] [ehci_irq:706] status:0x00008001 masked_status:0x00000001
[ 4.948000] [DBG] [ehci_irq:706] status:0x0000C020 masked_status:0x00000020
[ 4.956000] [DBG] [ehci_irq:706] status:0x0000C020 masked_status:0x00000020

Is there any way this could be fixed? Can we somehow early-check USB
state? Could we somehow disable USB after getting STS_HALT interrupt?
Any other ideas?

-- 
Rafał
--
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




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux