Quoting Corey Osgood corey.osgood@gmail.com:
As far as the boot issue goes, can you drop into i82801xx_pci.c and put in printks where pci_init() starts and ends, something like "entering pci_init()" and "leaving pci_init()", and see what happens? I also see i82801db has ".ops_pci = 0," in the pci_driver struct, but that shouldn't affect anything (just setting subsystem IDs, I think). And try commenting out that block of code with the note about the i82801er commenting it out as well. I'll try to look into this further over the weekend, see what I can come up with.
Thanks Corey and Uwe for the feedback. I will work on those changes. As far as the PCI to PCI Bridge issue, thats how I traced the problem is with a bunch of print calls. Ccheck out this snip of the lest boot log:
Done allocating resources. Enabling resources... PCI: 00:00.0 cmd <- 146 PCI: 00:1d.0 cmd <- 141 PCI: 00:1d.1 cmd <- 141 PCI: 00:1d.2 cmd <- 141 PCI: 00:1d.7 subsystem <- 00/00 PCI: 00:1d.7 cmd <- 142 PCI: 00:1e.0 bridge ctrl <- 0003 PCI: 00:1e.0 test1 pre ctrl <- 8080 // parity error PCI: 00:1e.0 test1 post ctrl <- c080 // Should clear to 0080, now it has a serr error and parity error?? PCI: 00:1e.0 test2 pre ctrl <- 2280 PCI: 00:1e.0 test2 post ctrl <- 0280 // cleared Good! PCI: 00:1e.0 cmd <- 141
If you check out the pci_bus_enable_resources() function in pci_device.c i put these tests right before it calls the pci_dev_enable_resources() function. The tests were to clear the serr and parity error bits from Primary Device Status Register 0x06 and Secondary Status Register 0x1E. As you can see above the bits are not clearing from the Primary Device Status Register 0x06 and they are from the Secondary Status Register 0x1E. Then what happens is in the pci_dev_enable_resources() function it goes enable the serr and parity checking on the Command Register 0x04 and that is where it chokes. I am assuming it is because the bits are not clearing from the Primary Device Status Register 0x06. But, why won't it let me clear these bits? Note: On these bits your supposed to write a "1" to them to clear them back to 0. HELP??
Thanks - Joe