In the PCI autoscanning code for MIPS the assumption is made that the
generic 'pci_read_XXX' and 'pci_write_XXX' will suffice when initially
autoscanning the bus. These functions are defined in the main top-level
PCI code. For one of my platforms, this simply does not hold since the
platform specific PCI functions defined in the 'pci_ops' structure for
the 'mips_pci_channel' need to be used. I propose the following patch
to fix this. Comments before I apply this?
-Steve
--- pci_channel.h 2001-08-18 10:19:34.000000000 -0400
+++ pci_channel.h.new 2003-03-24 10:54:29.000000000 -0500
@@ -11,12 +11,13 @@
#include <linux/pci.h>
/*
- * Each pci channel is a top-level PCI bus seem by CPU. A machine with
+ * Each pci channel is a top-level PCI bus seen by CPU. A machine with
* multiple PCI channels may have multiple PCI host controllers or a
* single controller supporting multiple channels.
*/
struct pci_channel {
struct pci_ops *pci_ops;
+ struct pci_ops *early_pci_ops;
struct resource *io_resource;
struct resource *mem_resource;
int first_devfn;
--- pci_auto.c 2001-11-26 20:07:06.000000000 -0500
+++ pci_auto.c.new 2003-03-24 10:54:14.000000000 -0500
@@ -74,9 +74,14 @@
int early_##rw##_config_##size(struct pci_channel *hose, \
int top_bus, int bus, int devfn, int offset, type value) \
{ \
- return pci_##rw##_config_##size( \
- fake_pci_dev(hose, top_bus, bus, devfn), \
- offset, value); \
+ if (hose->early_pci_ops->rw##_##size != NULL) \
+ return hose->early_pci_ops->rw##_##size( \
+ fake_pci_dev(hose, top_bus, bus, devfn), \
+ offset, value); \
+ else \
+ return pci_##rw##_config_##size( \
+ fake_pci_dev(hose, top_bus, bus, devfn), \
+ offset, value); \
}
EARLY_PCI_OP(read, byte, u8 *)
|