On Apr 5, 2005 6:10 PM, John Baldwin <jhb_at_freebsd.org> wrote: > On Saturday 02 April 2005 04:41 pm, Antoine Brodin wrote: > > Nate Lawson <nate_at_root.org> wrote: > > > I'm a little confused. I don't know of anyone that has problems with > > > the 6-current PCI irq code that works on 5-stable (which is what your > > > cvs command updates it to). > > > > > > Do either of you have a problem with irq routing on 6-current that works > > > on 5-stable? Please send details if so. > > > > Hi, > > > > I have this problem too, but since it's on a desktop I didn't really > > care about acpi. > > > > Here are some details: > > > > current with pci irq code from 23-Nov-2004 dmesg: > > http://bsd.miki.eu.org/~antoine/current+oldacpi.dmesg > > > > current with current pci irq code dmesg: > > http://bsd.miki.eu.org/~antoine/current+acpi.dmesg > > (there are timeouts and interrupt storms) > > > > acpi tables and asl: > > http://bsd.miki.eu.org/~antoine/acpidump > > So the differences in actual IRQ assignments look like this: > > 13c13 > < pcib1: slot 4 INTA routed to irq 5 via \\_SB_.PCI0.LNK2 > --- > > pcib1: slot 4 INTA routed to irq 9 via \\_SB_.PCI0.LNK2 > 15,16c15,16 > < pcib1: slot 7 INTA is already routed to irq 12 > < pcib1: slot 10 INTA routed to irq 11 via \\_SB_.PCI0.LNK1 > --- > > pcib1: slot 7 INTA routed to irq 12 via \\_SB_.PCI0.LNK4 > > pcib1: slot 10 INTA routed to irq 12 via \\_SB_.PCI0.LNK1 > > That is, LNK2 is routed to 9 rather than 5 and LNK1 is routed to 12 rather > than 11. > > I'm not sure why it does this unless somehow the wrong device_t is getting > associated with a handle. > > > grep 'LNK[12]' current+acpi.dmesg > pci_link10: <ACPI PCI Link LNK1> irq 11 on acpi0 > pci_link11: <ACPI PCI Link LNK2> irq 5 on acpi0 > pcib1: matched entry for 1.4.INTA (src \\_SB_.PCI0.LNK2:0) > pcib1: slot 4 INTA routed to irq 9 via \\_SB_.PCI0.LNK2 > pcib1: matched entry for 1.10.INTA (src \\_SB_.PCI0.LNK1:0) > pcib1: slot 10 INTA routed to irq 12 via \\_SB_.PCI0.LNK1 > > Can you apply this patch and provide a non-verbose dmesg? > > --- //depot/vendor/freebsd/src/sys/dev/acpica/acpi_pci_link.c 2005/01/18 > 20:21:25 > +++ //depot/user/jhb/acpipci/dev/acpica/acpi_pci_link.c 2005/04/05 15:07:33 > _at__at_ -913,15 +914,20 _at__at_ > * If we have a valid BIOS IRQ, use that. We trust what the BIOS > * says it routed over what _CRS says the link thinks is routed. > */ > - if (PCI_INTERRUPT_VALID(link->l_bios_irq)) > + if (PCI_INTERRUPT_VALID(link->l_bios_irq)) { > + device_printf(dev, "Using BIOS IRQ %d\n", link->l_bios_irq); > return (link->l_bios_irq); > + } > > /* > * If we don't have a BIOS IRQ but do have a valid IRQ from _CRS, > * then use that. > */ > - if (PCI_INTERRUPT_VALID(link->l_initial_irq)) > + if (PCI_INTERRUPT_VALID(link->l_initial_irq)) { > + device_printf(dev, "Using initial IRQ %d\n", > + link->l_initial_irq); > return (link->l_initial_irq); > + } > > /* > * Ok, we have no useful hints, so we have to pick from the > _at__at_ -955,7 +961,7 _at__at_ > } > } > > - if (bootverbose) { > + if (bootverbose || 1) { > if (PCI_INTERRUPT_VALID(best_irq)) > device_printf(dev, "Picked IRQ %u with weight %d\n", > best_irq, best_weight); > _at__at_ -969,6 +975,9 _at__at_ > { > struct link *link; > > + device_printf(dev, "Routing index %d\n", index); > + device_printf(dev, "My handle maps to %s\n", > + acpi_name(acpi_get_handle(dev)); > ACPI_SERIAL_BEGIN(pci_link); > link = acpi_pci_link_lookup(dev, index); > if (link == NULL) > _at__at_ -982,6 +991,7 _at__at_ > KASSERT(PCI_INTERRUPT_VALID(link->l_irq), > ("%s: link is routed but has an invalid IRQ", __func__)); > ACPI_SERIAL_END(pci_link); > + device_printf(dev, "Already routed to %d\n", link->l_irq); > return (link->l_irq); > } > > --- //depot/vendor/freebsd/src/sys/dev/acpica/acpi_pcib.c 2005/03/08 17:25:15 > +++ //depot/user/jhb/acpipci/dev/acpica/acpi_pcib.c 2005/04/05 15:09:09 > _at__at_ -225,7 +225,7 _at__at_ > } > prt = pr.pr_entry; > > - if (bootverbose) { > + if (bootverbose || 1) { > device_printf(pcib, "matched entry for %d.%d.INT%c", > pci_get_bus(dev), pci_get_slot(dev), 'A' + pin); > if (prt->Source != NULL && prt->Source[0] != '\0') > _at__at_ -259,7 +259,7 _at__at_ > interrupt = acpi_pci_link_route_interrupt(acpi_get_device(lnkdev), > prt->SourceIndex); > > - if (bootverbose && PCI_INTERRUPT_VALID(interrupt)) > + if (/* bootverbose &&*/ PCI_INTERRUPT_VALID(interrupt)) > device_printf(pcib, "slot %d INT%c routed to irq %d via %s\n", > pci_get_slot(dev), 'A' + pin, interrupt, acpi_name(lnkdev)); > Hello John, Here is my dmesg, using your patch: http://cs.ubbcluj.ro/~dan/dmesg-semiverbose.txt I hope that we will resolve these type of storms. Thanks, DanReceived on Tue Apr 05 2005 - 14:39:32 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:31 UTC