Re: irq 11: nobody cared! is back

Greg KH
2003-09-19T19:08:46Z

On Fri, Sep 19, 2003 at 09:36:49AM -0400, jtholmes wrote:
> I don't take the Distribution, and don't need email copy of
> answer, just answer in LKML and I will see it.
>
> If I knew how to turn on more debugging I would gladly do so
> as I need to figure out the Kernel debugging scheme.
>
> Problem Description
>
> After loading Module uhci-hcd
>
> USB Optical Mouse light shuts off and irq 11: is disabled.

Hm, can you apply this patch with -R and see if it fixes your problem?

thanks,

greg k-h

diff -Nru a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c
--- a/drivers/usb/host/uhci-hcd.c Fri Sep 19 12:13:36 2003
+++ b/drivers/usb/host/uhci-hcd.c Fri Sep 19 12:13:36 2003
@@ -2143,6 +2143,20 @@
#endif
}

+static int uhci_reset(struct usb_hcd *hcd)
+{
+ struct uhci_hcd *uhci = hcd_to_uhci(hcd);
+
+ uhci->io_addr = (unsigned long) hcd->regs;
+
+ /* Maybe kick BIOS off this hardware. Then reset, so we won't get
+ * interrupts from any previous setup.
+ */
+ pci_write_config_word(hcd->pdev, USBLEGSUP, USBLEGSUP_DEFAULT);
+ reset_hc(uhci);
+ return 0;
+}
+
/*
* Allocate a frame list, and then setup the skeleton
*
@@ -2159,7 +2173,7 @@
* - The fourth queue is the bandwidth reclamation queue, which loops back
* to the high speed control queue.
*/
-static int __devinit uhci_start(struct usb_hcd *hcd)
+static int uhci_start(struct usb_hcd *hcd)
{
struct uhci_hcd *uhci = hcd_to_uhci(hcd);
int retval = -EBUSY;
@@ -2171,7 +2185,6 @@
struct proc_dir_entry *ent;
#endif

- uhci->io_addr = (unsigned long) hcd->regs;
io_size = pci_resource_len(hcd->pdev, hcd->region);

#ifdef CONFIG_PROC_FS
@@ -2188,10 +2201,6 @@
uhci->proc_entry = ent;
#endif

- /* Reset here so we don't get any interrupts from an old setup */
- /* or broken setup */
- reset_hc(uhci);
-
uhci->fsbr = 0;
uhci->fsbrtimeout = 0;

@@ -2343,9 +2352,6 @@

init_stall_timer(hcd);

- /* disable legacy emulation */
- pci_write_config_word(hcd->pdev, USBLEGSUP, USBLEGSUP_DEFAULT);
-
udev->speed = USB_SPEED_FULL;

if (usb_register_root_hub(udev, &hcd->pdev->dev) != 0) {
@@ -2484,6 +2490,7 @@
.flags = HCD_USB11,

/* Basic lifecycle operations */
+ .reset = uhci_reset,
.start = uhci_start,
#ifdef CONFIG_PM
.suspend = uhci_suspend,