Subject: sparc64 PCI issues.
To: None <tech-kern@netbsd.org>
From: None <eeh@netbsd.org>
List: tech-kern
Date: 05/14/2002 18:11:25
I have been asked to bring up some issues with our
PCI framework.  Right now sparc64 has problems using
it because:

1) Accessing certain parts of config space causes the
CPU to lock up.

2) The only way to route interrupts is using the firmware
node from the device.

3) Some devices are not at dev 0 function 0 and thus the
current code does not probe them.

4) The pci_machdep.c code needs to have the firmware node
for the device to handle some of the above issues, and 
finding the node requires full tree traversal, this becomes
and O(n^2) operation, or worse.  With 60+ PCI buses on a
machine, this really isn't a very good way of doing things.

5) The device (re-)ordering issue does start getting nasty
when you have a machine w/60+ PCI buses.


In order to solve these issues I think we really need
to break pci_probe_bus() into separate routines, a
pci_probe_function() that probes a specific (bus,dev,function),
and a replaceable function that iterates over all the
devices on that bus and calls pci_probe_function() for
each function it finds.

It would also be useful to pass the pci_attach_args that
were given to the ppb down to pci_probe_bus().

Eduardo