On Wed, 2013-03-27 at 04:23 +0000, Mike wrote:
> Ben Hutchings wrote:
> > However, the lspci output you attached to #703469 shows that the xHCI 
> > does not have a driver bound to it.  Perhaps the kernel log (from 
> > dmesg) would explain why.
> 
> Thanks Ben.  http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=703469#25 
> "request interrupt 255 failed"?
> 
> That's the dmesg output from the running (non-Xen, that's another bug) 
> system, not from the UEFI d-i.

I think that *might* be fixed by:

commit ec51ee786df8a44d9058a478348534cf46945faf
Author: Hannes Reinecke <h...@suse.de>
Date:   Mon Mar 4 17:14:43 2013 +0100

    USB: xhci: correctly enable interrupts
    
    commit 00eed9c814cb8f281be6f0f5d8f45025dc0a97eb upstream.

which went into Linux 3.2.42 earlier today.  But that change won't go
into Debian for at least a week or so.

You could try it yourself using the attached patch and the instructions
at
<http://kernel-handbook.alioth.debian.org/ch-common-tasks.html#s-common-official>.

Ben.

-- 
Ben Hutchings
I'm not a reverse psychological virus.  Please don't copy me into your sig.
From: Hannes Reinecke <h...@suse.de>
Date: Mon, 4 Mar 2013 17:14:43 +0100
Subject: USB: xhci: correctly enable interrupts

commit 00eed9c814cb8f281be6f0f5d8f45025dc0a97eb upstream.

xhci has its own interrupt enabling routine, which will try to
use MSI-X/MSI if present. So the usb core shouldn't try to enable
legacy interrupts; on some machines the xhci legacy IRQ setting
is invalid.

v3: Be careful to not break XHCI_BROKEN_MSI workaround (by trenn)

Cc: Bjorn Helgaas <bhelg...@google.com>
Cc: Oliver Neukum <oneu...@suse.de>
Cc: Thomas Renninger <tr...@suse.de>
Cc: Yinghai Lu <ying...@kernel.org>
Cc: Frederik Himpe <fhi...@vub.ac.be>
Cc: David Haerdeman <da...@hardeman.nu>
Cc: Alan Stern <st...@rowland.harvard.edu>
Acked-by: Sarah Sharp <sarah.a.sh...@linux.intel.com>
Reviewed-by: Thomas Renninger <tr...@suse.de>
Signed-off-by: Hannes Reinecke <h...@suse.de>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>
Signed-off-by: Ben Hutchings <b...@decadent.org.uk>
---
 drivers/usb/core/hcd-pci.c |   23 ++++++++++++++---------
 drivers/usb/host/xhci.c    |    3 ++-
 2 files changed, 16 insertions(+), 10 deletions(-)

--- a/drivers/usb/core/hcd-pci.c
+++ b/drivers/usb/core/hcd-pci.c
@@ -173,6 +173,7 @@ int usb_hcd_pci_probe(struct pci_dev *de
 	struct hc_driver	*driver;
 	struct usb_hcd		*hcd;
 	int			retval;
+	int			hcd_irq = 0;
 
 	if (usb_disabled())
 		return -ENODEV;
@@ -187,15 +188,19 @@ int usb_hcd_pci_probe(struct pci_dev *de
 		return -ENODEV;
 	dev->current_state = PCI_D0;
 
-	/* The xHCI driver supports MSI and MSI-X,
-	 * so don't fail if the BIOS doesn't provide a legacy IRQ.
+	/*
+	 * The xHCI driver has its own irq management
+	 * make sure irq setup is not touched for xhci in generic hcd code
 	 */
-	if (!dev->irq && (driver->flags & HCD_MASK) != HCD_USB3) {
-		dev_err(&dev->dev,
-			"Found HC with no IRQ.  Check BIOS/PCI %s setup!\n",
-			pci_name(dev));
-		retval = -ENODEV;
-		goto disable_pci;
+	if ((driver->flags & HCD_MASK) != HCD_USB3) {
+		if (!dev->irq) {
+			dev_err(&dev->dev,
+			"Found HC with no IRQ. Check BIOS/PCI %s setup!\n",
+				pci_name(dev));
+			retval = -ENODEV;
+			goto disable_pci;
+		}
+		hcd_irq = dev->irq;
 	}
 
 	hcd = usb_create_hcd(driver, &dev->dev, pci_name(dev));
@@ -245,7 +250,7 @@ int usb_hcd_pci_probe(struct pci_dev *de
 
 	pci_set_master(dev);
 
-	retval = usb_add_hcd(hcd, dev->irq, IRQF_SHARED);
+	retval = usb_add_hcd(hcd, hcd_irq, IRQF_SHARED);
 	if (retval != 0)
 		goto unmap_registers;
 	set_hs_companion(dev, hcd);
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -342,7 +342,7 @@ static int xhci_try_enable_msi(struct us
 	 * generate interrupts.  Don't even try to enable MSI.
 	 */
 	if (xhci->quirks & XHCI_BROKEN_MSI)
-		return 0;
+		goto legacy_irq;
 
 	/* unregister the legacy interrupt */
 	if (hcd->irq)
@@ -363,6 +363,7 @@ static int xhci_try_enable_msi(struct us
 		return -EINVAL;
 	}
 
+ legacy_irq:
 	/* fall back to legacy interrupt*/
 	ret = request_irq(pdev->irq, &usb_hcd_irq, IRQF_SHARED,
 			hcd->irq_descr, hcd);

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to