powerpc/pci: Make both ppc32 and ppc64 use sysdata for pci_controller
Currently, ppc32 uses sysdata for the pci_controller pointer, and ppc64 uses it to hold the device_node pointer. This patch moves the of_node pointer into (struct pci_bus*)->dev.of_node and (struct pci_dev*)->dev.of_node so that sysdata can be converted to always use the pci_controller pointer instead. It also fixes up the allocating of pci devices so that the of_node pointer gets assigned consistently and increments the ref count. Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
This commit is contained in:
@@ -164,13 +164,13 @@ extern void setup_indirect_pci(struct pci_controller* hose,
|
||||
resource_size_t cfg_addr,
|
||||
resource_size_t cfg_data, u32 flags);
|
||||
|
||||
#ifndef CONFIG_PPC64
|
||||
|
||||
static inline struct pci_controller *pci_bus_to_host(const struct pci_bus *bus)
|
||||
{
|
||||
return bus->sysdata;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_PPC64
|
||||
|
||||
static inline struct device_node *pci_bus_to_OF_node(struct pci_bus *bus)
|
||||
{
|
||||
struct pci_controller *host;
|
||||
@@ -228,19 +228,10 @@ extern void * update_dn_pci_info(struct device_node *dn, void *data);
|
||||
|
||||
/* Get a device_node from a pci_dev. This code must be fast except
|
||||
* in the case where the sysdata is incorrect and needs to be fixed
|
||||
* up (this will only happen once).
|
||||
* In this case the sysdata will have been inherited from a PCI host
|
||||
* bridge or a PCI-PCI bridge further up the tree, so it will point
|
||||
* to a valid struct pci_dn, just not the one we want.
|
||||
*/
|
||||
* up (this will only happen once). */
|
||||
static inline struct device_node *pci_device_to_OF_node(struct pci_dev *dev)
|
||||
{
|
||||
struct device_node *dn = dev->sysdata;
|
||||
struct pci_dn *pdn = dn->data;
|
||||
|
||||
if (pdn && pdn->devfn == dev->devfn && pdn->busno == dev->bus->number)
|
||||
return dn; /* fast path. sysdata is good */
|
||||
return fetch_dev_dn(dev);
|
||||
return dev->dev.of_node ? dev->dev.of_node : fetch_dev_dn(dev);
|
||||
}
|
||||
|
||||
static inline int pci_device_from_OF_node(struct device_node *np,
|
||||
@@ -258,7 +249,7 @@ static inline struct device_node *pci_bus_to_OF_node(struct pci_bus *bus)
|
||||
if (bus->self)
|
||||
return pci_device_to_OF_node(bus->self);
|
||||
else
|
||||
return bus->sysdata; /* Must be root bus (PHB) */
|
||||
return bus->dev.of_node; /* Must be root bus (PHB) */
|
||||
}
|
||||
|
||||
/** Find the bus corresponding to the indicated device node */
|
||||
@@ -270,14 +261,6 @@ extern void pcibios_remove_pci_devices(struct pci_bus *bus);
|
||||
/** Discover new pci devices under this bus, and add them */
|
||||
extern void pcibios_add_pci_devices(struct pci_bus *bus);
|
||||
|
||||
static inline struct pci_controller *pci_bus_to_host(const struct pci_bus *bus)
|
||||
{
|
||||
struct device_node *busdn = bus->sysdata;
|
||||
|
||||
BUG_ON(busdn == NULL);
|
||||
return PCI_DN(busdn)->phb;
|
||||
}
|
||||
|
||||
|
||||
extern void isa_bridge_find_early(struct pci_controller *hose);
|
||||
|
||||
|
||||
@@ -201,7 +201,7 @@ extern void pci_resource_to_user(const struct pci_dev *dev, int bar,
|
||||
extern void pcibios_setup_bus_devices(struct pci_bus *bus);
|
||||
extern void pcibios_setup_bus_self(struct pci_bus *bus);
|
||||
extern void pcibios_setup_phb_io_space(struct pci_controller *hose);
|
||||
extern void pcibios_scan_phb(struct pci_controller *hose, void *sysdata);
|
||||
extern void pcibios_scan_phb(struct pci_controller *hose);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* __ASM_POWERPC_PCI_H */
|
||||
|
||||
Reference in New Issue
Block a user