Re: [PATCH 1/3] USB: Try MSI first before line IRQ for Intel PCIe USB3 HCD

From: Tom Goetz
Date: Tue Mar 06 2012 - 13:00:18 EST


Alex Shi <alex.shi <at> intel.com> writes:

> > From: Sarah Sharp <sarah.a.sharp <at> linux.intel.com> > > We have a
PCI USB xhci host controller on a new platform. It doesn't > have a line
IRQ definition in BIOS. The Linux driver refuses to > initial this
controller, but Windows works well because it only depends > on MSI. >

We're having problems with XHCI on 3.2.9 on a new HP Ivybridge laptop.
Some of the evidence suggests that it is MSI related. After suspending
and resuming the platform the XHCI device is not functional.

also submitted here:
http://lists.xen.org/archives/html/xen-devel/2012-03/msg00363.html

Data dump:

- Xen 4.0.3, Linux 3.2.7 PVOPs, Linux 3.2.9 PVOPs
- Happens on HP Ivybridge. Doesn't happen on very similar HP Sandybridge
Clash system.
- Happens on battery, but not on AC.
- Doesn't happen on first suspend/resume. First resume may be long.
Don't have enough samples to be sure of this.
- CPU power governor doesn't effect the issue. Happens regardless of governor.
- Seems to effect MSI devices only.
- IRQ changes appear in good resume case. Not just bad.
- XHCI driver crashes during suspend with pci=nomsi.
- Remove USB HCD drivers from SUSPEND_MODULES and XHCI functionality
survives suspend/resume.
- Is not removing XHCI enough? Guess is that it is.
- Unloading/loading the XHCI driver after a broken resume also fixes it.
- Received a bad IRQ warning in atleast one resume.

I've diffed lspci output across a working resume on AC and across a bad resume
on battery. There seem to be the differences unique to the bad case:

00:14.0 USB controller: Intel Corporation Panther Point USB xHCI Host
Controller (rev 04) (prog-if 30 [XHCI])
Subsystem: Hewlett-Packard Company Device 179b
-Flags: bus master, medium devsel, latency 0, IRQ 326
+Flags: medium devsel, IRQ 327 <-------------- lose bus master, latency 0
Memory at 94720000 (64-bit, non-prefetchable) [size=64K]
Capabilities: [70] Power Management version 2
Capabilities: [80] MSI: Enable+ Count=1/8 Maskable- 64bit+
Kernel driver in use: xhci_hcd
Kernel modules: xhci-hcd

---

00:19.0 Ethernet controller: Intel Corporation 82579LM Gigabit Network
Connection (rev 04)
Subsystem: Hewlett-Packard Company Device 179b
-Flags: bus master, fast devsel, latency 0, IRQ 327
-Memory at 94700000 (32-bit, non-prefetchable) [size=128K]
-Memory at 9473a000 (32-bit, non-prefetchable) [size=4K]
-I/O ports at 4060 [size=32]
+Flags: fast devsel, IRQ 20 <-------------- lose bus master, latency 0
+Memory at 94700000 (32-bit, non-prefetchable) [disabled] [size=128K]
<------ becomes disabled
+Memory at 9473a000 (32-bit, non-prefetchable) [disabled] [size=4K]
<------ becomes disabled
+I/O ports at 4060 [disabled] [size=32] <------ becomes disabled
Capabilities: [c8] Power Management version 2
-Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
+Capabilities: [d0] MSI: Enable- Count=1/1 Maskable- 64bit+
<---- toggle enable polarity
Capabilities: [e0] PCI Advanced Features
Kernel driver in use: e1000e
Kernel modules: e1000e

---

00:1a.0 USB controller: Intel Corporation Panther Point USB Enhanced Host
Controller #2 (rev 04) (prog-if 20 [EHCI])
Subsystem: Hewlett-Packard Company Device 179b
-Flags: bus master, medium devsel, latency 0, IRQ 16
+Flags: medium devsel, IRQ 16 <-------------- lose bus master, latency 0
Memory at 94739000 (32-bit, non-prefetchable) [size=1K]
Capabilities: [50] Power Management version 2
Capabilities: [58] Debug port: BAR=1 offset=00a0
Capabilities: [98] PCI Advanced Features
Kernel driver in use: ehci_hcd
Kernel modules: ehci-hcd

syslog looks like this for both good and bad resumes:

[ 289.730303] xhci_hcd 0000:00:14.0: can't derive routing for PCI INT A
[ 289.730311] xhci_hcd 0000:00:14.0: PCI INT A: no GSI - using ISA IRQ 10
[ 289.730319] xen: registering gsi 10 triggering 0 polarity 1
[ 289.730327] xen_map_pirq_gsi: returning irq 10 for gsi 10
[ 289.730332] xen: --> pirq=10 -> irq=10 (gsi=10)
[ 289.730337] Already setup the GSI :10
[ 289.730445] xhci_hcd 0000:00:14.0: setting latency timer to 64
[ 289.730455] xhci_hcd 0000:00:14.0: xHCI Host Controller
[ 289.730687] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus
number 3
[ 289.730826] xhci_hcd 0000:00:14.0: cache line size of 64 is not supported
[ 289.730858] xhci_hcd 0000:00:14.0: irq 10, io mem 0x94720000
[ 289.731470] xHCI xhci_add_endpoint called for root hub
[ 289.731477] xHCI xhci_check_bandwidth called for root hub
[ 289.731551] hub 3-0:1.0: USB hub found
[ 289.731568] hub 3-0:1.0: 4 ports detected
[ 289.843501] xhci_hcd 0000:00:14.0: xHCI Host Controller
[ 289.843722] xhci_hcd 0000:00:14.0: new USB bus registered, assigned bus
number 4
[ 289.844015] xHCI xhci_add_endpoint called for root hub
[ 289.844021] xHCI xhci_check_bandwidth called for root hub
[ 289.844084] hub 4-0:1.0: USB hub found
[ 289.844104] hub 4-0:1.0: 4 ports detected


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/