linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [BUG?] usb won't work with kernel 2.4.22
@ 2003-09-08  2:20 Sven Köhler
  0 siblings, 0 replies; 4+ messages in thread
From: Sven Köhler @ 2003-09-08  2:20 UTC (permalink / raw)
  To: linux-kernel

Hi,

I've got a SIS735 chipset and i'm therefor using the usb-ohci module.
After upgrading from 2.4.21 to 2.4.22 my USB doens't work anymore.
lsusb doesn't show any devices - find /proc/bus/usb too.
On my laptop everything works fine with 2.4.22, but it has an intel 
chipset and uses UHCI instead of OHCI.

I read the Changelog and didn't find anything that looks like the reason 
for my trouble. I double checked that every module is there in my 2.4.22 
config. I even did "make oldconfig" after copying my config from the 
2.4.21 kernel.

With 2.4.22 my USB just look dead.
I also tried to copy usb-ohci.c from 2.4.21 to 2.4.22 and recompiled the 
kernel. Nothing changed (the diff wasn't that big, so i tried that).

Any ideas? If you need more information or just want me to try a patch 
just ask.

Thx
   Sven



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [BUG?] usb won't work with kernel 2.4.22
  2003-09-08  5:36 pinotj
  2003-09-08 10:11 ` Andrew de Quincey
@ 2003-09-08 12:38 ` Sven Köhler
  1 sibling, 0 replies; 4+ messages in thread
From: Sven Köhler @ 2003-09-08 12:38 UTC (permalink / raw)
  To: linux-kernel

> I got the same probleme with K7S5A/SiS735 and it doesn't come from USB.
> I found that the acpi upgrade between 2.4.22-rc2 and 2.4.22-rc3 break the USB detection. I made a fall-back diff about this.
> I discussed about this with Andrew de Quincey on acpi mailing-list. His last acpi global patch correct this problem too but I don't know if it will be implemented.

Well, Thx. I've got the same board (K7S5A), so it should work for me too.



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [BUG?] usb won't work with kernel 2.4.22
  2003-09-08  5:36 pinotj
@ 2003-09-08 10:11 ` Andrew de Quincey
  2003-09-08 12:38 ` Sven Köhler
  1 sibling, 0 replies; 4+ messages in thread
From: Andrew de Quincey @ 2003-09-08 10:11 UTC (permalink / raw)
  To: pinotj, linux-kernel

On Monday 08 Sep 2003 11:36 am, pinotj@club-internet.fr wrote:
> From: Sven_Köhler <>
>
> >Subject: [BUG?] usb won't work with kernel 2.4.22
> >Date Mon, 08 Sep 2003 04:20:15 +0200
>
> [...]
>
> >After upgrading from 2.4.21 to 2.4.22 my USB doens't work anymore.
>
> lsusb doesn't show any devices - find /proc/bus/usb too.
> [...]
>
> I got the same probleme with K7S5A/SiS735 and it doesn't come from USB.
> I found that the acpi upgrade between 2.4.22-rc2 and 2.4.22-rc3 break the
> USB detection. I made a fall-back diff about this. I discussed about this
> with Andrew de Quincey on acpi mailing-list. His last acpi global patch
> correct this problem too but I don't know if it will be implemented.

It should be there eventually, the core ACPI guys understandably decided to 
keep it back for some more testing because one bit of it was quite large.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [BUG?] usb won't work with kernel 2.4.22
@ 2003-09-08  5:36 pinotj
  2003-09-08 10:11 ` Andrew de Quincey
  2003-09-08 12:38 ` Sven Köhler
  0 siblings, 2 replies; 4+ messages in thread
From: pinotj @ 2003-09-08  5:36 UTC (permalink / raw)
  To: linux-kernel

>From: Sven_Köhler <>
>Subject: [BUG?] usb won't work with kernel 2.4.22
>Date Mon, 08 Sep 2003 04:20:15 +0200
[...]
>After upgrading from 2.4.21 to 2.4.22 my USB doens't work anymore.
lsusb doesn't show any devices - find /proc/bus/usb too.
[...]

I got the same probleme with K7S5A/SiS735 and it doesn't come from USB.
I found that the acpi upgrade between 2.4.22-rc2 and 2.4.22-rc3 break the USB detection. I made a fall-back diff about this.
I discussed about this with Andrew de Quincey on acpi mailing-list. His last acpi global patch correct this problem too but I don't know if it will be implemented.

Look at acpi archive (last week):
http://sourceforge.net/mailarchive/forum.php?forum_id=6102

Here is the fall back diff for this specific problem (2.4.22 and 2.4.23-pre3)

diff -ru linux-2.4.22-rc3/arch/i386/kernel/mpparse.c linux-2.4.22-rc2/arch/i386/kernel/mpparse.c
--- linux-2.4.22-rc3/arch/i386/kernel/mpparse.c 2003-09-03 02:14:22.000000000 +0900
+++ linux-2.4.22-rc2/arch/i386/kernel/mpparse.c 2003-09-03 02:32:54.000000000 +0900
@@ -1276,16 +1273,12 @@

                /* Need to get irq for dynamic entry */
                if (entry->link.handle) {
-                       irq = acpi_pci_link_get_irq(entry->link.handle, entry->link.index, &edge_level, &active_high_low);
+                       irq = acpi_pci_link_get_irq(entry->link.handle, entry->link.index);
                        if (!irq)
                                continue;
                }
-               else {
-                       /* Hardwired IRQ. Assume PCI standard settings */
+               else
                        irq = entry->link.index;
-                       edge_level = 1;
-                       active_high_low = 1;
-               }

                /* Don't set up the ACPI SCI because it's already set up */
                if (acpi_fadt.sci_int == irq)
diff -ru linux-2.4.22-rc3/drivers/acpi/pci_irq.c linux-2.4.22-rc2/drivers/acpi/pci_irq.c
--- linux-2.4.22-rc3/drivers/acpi/pci_irq.c     2003-09-03 02:14:27.000000000 +0900
+++ linux-2.4.22-rc2/drivers/acpi/pci_irq.c     2003-09-03 02:32:57.000000000 +0900
@@ -258,7 +253,7 @@
        }

        if (!entry->irq && entry->link.handle) {
-               entry->irq = acpi_pci_link_get_irq(entry->link.handle, entry->link.index, NULL, NULL);
+               entry->irq = acpi_pci_link_get_irq(entry->link.handle, entry->link.index);
                if (!entry->irq) {
                        ACPI_DEBUG_PRINT((ACPI_DB_WARN, "Invalid IRQ link routing entry\n"));
                        return_VALUE(0);
diff -ru linux-2.4.22-rc3/drivers/acpi/pci_link.c linux-2.4.22-rc2/drivers/acpi/pci_link.c
--- linux-2.4.22-rc3/drivers/acpi/pci_link.c    2003-09-03 02:14:27.000000000 +0900
+++ linux-2.4.22-rc2/drivers/acpi/pci_link.c    2003-09-03 02:32:57.000000000 +0900
@@ -65,9 +65,6 @@

 struct acpi_pci_link_irq {
        u8                      active;                 /* Current IRQ */
-       u8                      edge_level;             /* All IRQs */
-       u8                      active_high_low;        /* All IRQs */
-       u8                      setonboot;
        u8                      possible_count;
        u8                      possible[ACPI_PCI_LINK_MAX_POSSIBLE];
 };
@@ -117,8 +114,6 @@
                        link->irq.possible[i] = p->interrupts[i];
                        link->irq.possible_count++;
                }
-               link->irq.edge_level = p->edge_level;
-               link->irq.active_high_low = p->active_high_low;
                break;
        }
        case ACPI_RSTYPE_EXT_IRQ:
@@ -137,8 +132,6 @@
                        link->irq.possible[i] = p->interrupts[i];
                        link->irq.possible_count++;
                }
-               link->irq.edge_level = p->edge_level;
-               link->irq.active_high_low = p->active_high_low;
                break;
        }
        default:
@@ -296,33 +290,28 @@
        if (!link || !irq)
                return_VALUE(-EINVAL);

-       /* We don't check irqs the first time around */
-       if (link->irq.setonboot) {
-               /* See if we're already at the target IRQ. */
-               if (irq == link->irq.active)
-                       return_VALUE(0);
-
-               /* Make sure the target IRQ in the list of possible IRQs. */
-               for (i=0; i<link->irq.possible_count; i++) {
-                       if (irq == link->irq.possible[i])
-                               valid = 1;
-               }
-               if (!valid) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Target IRQ %d invalid\n", irq));
-                       return_VALUE(-EINVAL);
-               }
+       /* See if we're already at the target IRQ. */
+       if (irq == link->irq.active)
+               return_VALUE(0);
+
+       /* Make sure the target IRQ in the list of possible IRQs. */
+       for (i=0; i<link->irq.possible_count; i++) {
+               if (irq == link->irq.possible[i])
+                       valid = 1;
+       }
+       if (!valid) {
+               ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Target IRQ %d invalid\n", irq));
+               return_VALUE(-EINVAL);
        }

        memset(&resource, 0, sizeof(resource));

-       /* NOTE: PCI interrupts are always level / active_low / shared. But not all
-          interrupts > 15 are PCI interrupts. Rely on the ACPI IRQ definition for
-          parameters */
+       /* NOTE: PCI interrupts are always level / active_low / shared. */
        if (irq <= 15) {
                resource.res.id = ACPI_RSTYPE_IRQ;
                resource.res.length = sizeof(struct acpi_resource);
-               resource.res.data.irq.edge_level = link->irq.edge_level;
-               resource.res.data.irq.active_high_low = link->irq.active_high_low;
+               resource.res.data.irq.edge_level = ACPI_LEVEL_SENSITIVE;
+               resource.res.data.irq.active_high_low = ACPI_ACTIVE_LOW;
                resource.res.data.irq.shared_exclusive = ACPI_SHARED;
                resource.res.data.irq.number_of_interrupts = 1;
                resource.res.data.irq.interrupts[0] = irq;
@@ -331,8 +320,8 @@
                resource.res.id = ACPI_RSTYPE_EXT_IRQ;
                resource.res.length = sizeof(struct acpi_resource);
                resource.res.data.extended_irq.producer_consumer = ACPI_CONSUMER;
-               resource.res.data.extended_irq.edge_level = link->irq.edge_level;
-               resource.res.data.extended_irq.active_high_low = link->irq.active_high_low;
+               resource.res.data.extended_irq.edge_level = ACPI_LEVEL_SENSITIVE;
+               resource.res.data.extended_irq.active_high_low = ACPI_ACTIVE_LOW;
                resource.res.data.extended_irq.shared_exclusive = ACPI_SHARED;
                resource.res.data.extended_irq.number_of_interrupts = 1;
                resource.res.data.extended_irq.interrupts[0] = irq;
@@ -438,23 +424,23 @@
                }
        }

-       return_VALUE(0);
-}
-
-static int acpi_pci_link_allocate(struct acpi_pci_link* link) {
-       int irq;
-       int i;
+       /*
+        * Pass #2: Enable boot-disabled Links at 'best' IRQ.
+        */
+       list_for_each(node, &acpi_link.entries) {
+               int             irq = 0;
+               int             i = 0;

-       ACPI_FUNCTION_TRACE("acpi_pci_link_allocate");
+               link = list_entry(node, struct acpi_pci_link, node);
+               if (!link || !link->irq.possible_count) {
+                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid link context\n"));
+                       continue;
+               }

-       if (link->irq.setonboot)
-               return_VALUE(0);
+               if (link->irq.active)
+                       continue;

-       if (link->irq.active) {
-               irq = link->irq.active;
-       } else {
                irq = link->irq.possible[0];
-       }

                /*
                 * Select the best IRQ.  This is done in reverse to promote
@@ -465,20 +451,16 @@
                                irq = link->irq.possible[i];
                }

-       /* Attempt to enable the link device at this IRQ. */
-       if (acpi_pci_link_set(link, irq)) {
-               printk(PREFIX "Unable to set IRQ for %s [%s] (likely buggy ACPI BIOS). Aborting ACPI-based IRQ routing. Try pci=noacpi or acpi=off\n",
-                       acpi_device_name(link->device),
-                       acpi_device_bid(link->device));
-               return_VALUE(-ENODEV);
-       } else {
+               /* Enable the link device at this IRQ. */
+               acpi_pci_link_set(link, irq);
+
                acpi_irq_penalty[link->irq.active] += 100;
+
                printk(PREFIX "%s [%s] enabled at IRQ %d\n",
                        acpi_device_name(link->device),
                        acpi_device_bid(link->device), link->irq.active);
        }

-       link->irq.setonboot = 1;
        return_VALUE(0);
 }

@@ -486,9 +468,7 @@
 int
 acpi_pci_link_get_irq (
        acpi_handle             handle,
-       int                     index,
-       int*                    edge_level,
-       int*                    active_high_low)
+       int                     index)
 {
        int                     result = 0;
        struct acpi_device      *device = NULL;
@@ -514,17 +494,11 @@
                return_VALUE(0);
        }

-       if (acpi_pci_link_allocate(link)) {
-               return -ENODEV;
-       }
-
        if (!link->irq.active) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Link disabled\n"));
                return_VALUE(0);
        }

-       if (edge_level) *edge_level = link->irq.edge_level;
-       if (active_high_low) *active_high_low = link->irq.active_high_low;
        return_VALUE(link->irq.active);
 }

diff -ru linux-2.4.22-rc3/include/acpi/acpi_drivers.h linux-2.4.22-rc2/include/acpi/acpi_drivers.h
--- linux-2.4.22-rc3/include/acpi/acpi_drivers.h        2003-09-03 02:14:36.000000000 +0900
+++ linux-2.4.22-rc2/include/acpi/acpi_drivers.h        2003-09-03 02:33:04.000000000 +0900
@@ -174,7 +174,7 @@
 #define ACPI_PCI_LINK_FILE_STATUS      "state"

 int acpi_pci_link_check (void);
-int acpi_pci_link_get_irq (acpi_handle handle, int index, int* edge_level, int* active_high_low);
+int acpi_pci_link_get_irq (acpi_handle handle, int index);
 int acpi_pci_link_init (void);
 void acpi_pci_link_exit (void);

Regards,

Jerome Pinot


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2003-09-08 12:42 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-09-08  2:20 [BUG?] usb won't work with kernel 2.4.22 Sven Köhler
2003-09-08  5:36 pinotj
2003-09-08 10:11 ` Andrew de Quincey
2003-09-08 12:38 ` Sven Köhler

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).