Commit 0ca63a2a authored by Anton Blanchard's avatar Anton Blanchard Committed by Linus Torvalds

[PATCH] ppc64: PCI cleanup

- remove pci_fix_bus_sysdata. We required it for the old pci dma
  subsystem, but now it is useless.
- remove PCI_GET_PHB_PTR and use pci_bus_to_host instead
- remove pci_find_hose_for_OF_device
- remove some unused fields in struct pci_controller
- remove pci_device_loc stale prototype
- remove an old mask of pci bus number that was left around from the pre
  PCI domains days
Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 98489228
...@@ -382,9 +382,6 @@ void __init maple_pcibios_fixup(void) ...@@ -382,9 +382,6 @@ void __init maple_pcibios_fixup(void)
/* Do the mapping of the IO space */ /* Do the mapping of the IO space */
phbs_remap_io(); phbs_remap_io();
/* Fixup the pci_bus sysdata pointers */
pci_fix_bus_sysdata();
DBG(" <- maple_pcibios_fixup\n"); DBG(" <- maple_pcibios_fixup\n");
} }
......
...@@ -552,7 +552,6 @@ void __init pSeries_final_fixup(void) ...@@ -552,7 +552,6 @@ void __init pSeries_final_fixup(void)
phbs_remap_io(); phbs_remap_io();
pSeries_request_regions(); pSeries_request_regions();
pci_fix_bus_sysdata();
pci_addr_cache_build(); pci_addr_cache_build();
} }
......
...@@ -91,7 +91,7 @@ void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region ...@@ -91,7 +91,7 @@ void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region
struct resource *res) struct resource *res)
{ {
unsigned long offset = 0; unsigned long offset = 0;
struct pci_controller *hose = PCI_GET_PHB_PTR(dev); struct pci_controller *hose = pci_bus_to_host(dev->bus);
if (!hose) if (!hose)
return; return;
...@@ -127,7 +127,7 @@ void pcibios_align_resource(void *data, struct resource *res, ...@@ -127,7 +127,7 @@ void pcibios_align_resource(void *data, struct resource *res,
unsigned long size, unsigned long align) unsigned long size, unsigned long align)
{ {
struct pci_dev *dev = data; struct pci_dev *dev = data;
struct pci_controller *hose = PCI_GET_PHB_PTR(dev); struct pci_controller *hose = pci_bus_to_host(dev->bus);
unsigned long start = res->start; unsigned long start = res->start;
unsigned long alignto; unsigned long alignto;
...@@ -292,7 +292,7 @@ int pci_domain_nr(struct pci_bus *bus) ...@@ -292,7 +292,7 @@ int pci_domain_nr(struct pci_bus *bus)
#ifdef CONFIG_PPC_ISERIES #ifdef CONFIG_PPC_ISERIES
return 0; return 0;
#else #else
struct pci_controller *hose = PCI_GET_PHB_PTR(bus); struct pci_controller *hose = pci_bus_to_host(bus);
return hose->global_number; return hose->global_number;
#endif #endif
...@@ -304,7 +304,7 @@ EXPORT_SYMBOL(pci_domain_nr); ...@@ -304,7 +304,7 @@ EXPORT_SYMBOL(pci_domain_nr);
int pci_name_bus(char *name, struct pci_bus *bus) int pci_name_bus(char *name, struct pci_bus *bus)
{ {
#ifndef CONFIG_PPC_ISERIES #ifndef CONFIG_PPC_ISERIES
struct pci_controller *hose = PCI_GET_PHB_PTR(bus); struct pci_controller *hose = pci_bus_to_host(bus);
if (hose->buid) if (hose->buid)
sprintf(name, "%04x:%02x", pci_domain_nr(bus), bus->number); sprintf(name, "%04x:%02x", pci_domain_nr(bus), bus->number);
...@@ -336,7 +336,7 @@ static __inline__ int __pci_mmap_make_offset(struct pci_dev *dev, ...@@ -336,7 +336,7 @@ static __inline__ int __pci_mmap_make_offset(struct pci_dev *dev,
struct vm_area_struct *vma, struct vm_area_struct *vma,
enum pci_mmap_state mmap_state) enum pci_mmap_state mmap_state)
{ {
struct pci_controller *hose = PCI_GET_PHB_PTR(dev); struct pci_controller *hose = pci_bus_to_host(dev->bus);
unsigned long offset = vma->vm_pgoff << PAGE_SHIFT; unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
unsigned long io_offset = 0; unsigned long io_offset = 0;
int i, res_bit; int i, res_bit;
...@@ -643,7 +643,7 @@ void __devinit pci_setup_phb_io_dynamic(struct pci_controller *hose) ...@@ -643,7 +643,7 @@ void __devinit pci_setup_phb_io_dynamic(struct pci_controller *hose)
static int get_bus_io_range(struct pci_bus *bus, unsigned long *start_phys, static int get_bus_io_range(struct pci_bus *bus, unsigned long *start_phys,
unsigned long *start_virt, unsigned long *size) unsigned long *start_virt, unsigned long *size)
{ {
struct pci_controller *hose = PCI_GET_PHB_PTR(bus); struct pci_controller *hose = pci_bus_to_host(bus);
struct pci_bus_region region; struct pci_bus_region region;
struct resource *res; struct resource *res;
...@@ -728,23 +728,6 @@ void phbs_remap_io(void) ...@@ -728,23 +728,6 @@ void phbs_remap_io(void)
remap_bus_range(hose->bus); remap_bus_range(hose->bus);
} }
/*
* This function finds the PHB that matching device_node in the
* OpenFirmware by scanning all the pci_controllers.
*/
struct pci_controller* pci_find_hose_for_OF_device(struct device_node *node)
{
while (node) {
struct pci_controller *hose, *tmp;
list_for_each_entry_safe(hose, tmp, &hose_list, list_node)
if (hose->arch_data == node)
return hose;
node=node->parent;
}
return NULL;
}
/* /*
* ppc64 can have multifunction devices that do not respond to function 0. * ppc64 can have multifunction devices that do not respond to function 0.
* In this case we must scan all functions. * In this case we must scan all functions.
...@@ -778,7 +761,7 @@ void __devinit pcibios_fixup_device_resources(struct pci_dev *dev, ...@@ -778,7 +761,7 @@ void __devinit pcibios_fixup_device_resources(struct pci_dev *dev,
struct pci_bus *bus) struct pci_bus *bus)
{ {
/* Update device resources. */ /* Update device resources. */
struct pci_controller *hose = PCI_GET_PHB_PTR(bus); struct pci_controller *hose = pci_bus_to_host(bus);
int i; int i;
for (i = 0; i < PCI_NUM_RESOURCES; i++) { for (i = 0; i < PCI_NUM_RESOURCES; i++) {
...@@ -814,7 +797,7 @@ EXPORT_SYMBOL(pcibios_fixup_device_resources); ...@@ -814,7 +797,7 @@ EXPORT_SYMBOL(pcibios_fixup_device_resources);
void __devinit pcibios_fixup_bus(struct pci_bus *bus) void __devinit pcibios_fixup_bus(struct pci_bus *bus)
{ {
struct pci_controller *hose = PCI_GET_PHB_PTR(bus); struct pci_controller *hose = pci_bus_to_host(bus);
struct pci_dev *dev = bus->self; struct pci_dev *dev = bus->self;
struct resource *res; struct resource *res;
int i; int i;
......
...@@ -17,7 +17,6 @@ extern unsigned long isa_io_base; ...@@ -17,7 +17,6 @@ extern unsigned long isa_io_base;
extern void pci_setup_pci_controller(struct pci_controller *hose); extern void pci_setup_pci_controller(struct pci_controller *hose);
extern void pci_setup_phb_io(struct pci_controller *hose, int primary); extern void pci_setup_phb_io(struct pci_controller *hose, int primary);
extern struct pci_controller* pci_find_hose_for_OF_device(struct device_node* node);
extern void pci_setup_phb_io_dynamic(struct pci_controller *hose); extern void pci_setup_phb_io_dynamic(struct pci_controller *hose);
...@@ -36,11 +35,8 @@ void *traverse_pci_devices(struct device_node *start, traverse_func pre, ...@@ -36,11 +35,8 @@ void *traverse_pci_devices(struct device_node *start, traverse_func pre,
void pci_devs_phb_init(void); void pci_devs_phb_init(void);
void pci_devs_phb_init_dynamic(struct pci_controller *phb); void pci_devs_phb_init_dynamic(struct pci_controller *phb);
void pci_fix_bus_sysdata(void);
struct device_node *fetch_dev_dn(struct pci_dev *dev); struct device_node *fetch_dev_dn(struct pci_dev *dev);
#define PCI_GET_PHB_PTR(dev) (((struct device_node *)(dev)->sysdata)->phb)
/* PCI address cache management routines */ /* PCI address cache management routines */
void pci_addr_cache_insert_device(struct pci_dev *dev); void pci_addr_cache_insert_device(struct pci_dev *dev);
void pci_addr_cache_remove_device(struct pci_dev *dev); void pci_addr_cache_remove_device(struct pci_dev *dev);
......
...@@ -21,19 +21,12 @@ ...@@ -21,19 +21,12 @@
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/delay.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/bootmem.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/pgtable.h>
#include <asm/irq.h>
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/machdep.h>
#include <asm/pci-bridge.h> #include <asm/pci-bridge.h>
#include <asm/ppcdebug.h>
#include <asm/iommu.h>
#include "pci.h" #include "pci.h"
...@@ -178,29 +171,3 @@ void __init pci_devs_phb_init(void) ...@@ -178,29 +171,3 @@ void __init pci_devs_phb_init(void)
list_for_each_entry_safe(phb, tmp, &hose_list, list_node) list_for_each_entry_safe(phb, tmp, &hose_list, list_node)
pci_devs_phb_init_dynamic(phb); pci_devs_phb_init_dynamic(phb);
} }
static void __init pci_fixup_bus_sysdata_list(struct list_head *bus_list)
{
struct pci_bus *bus;
list_for_each_entry(bus, bus_list, node) {
if (bus->self)
bus->sysdata = bus->self->sysdata;
pci_fixup_bus_sysdata_list(&bus->children);
}
}
/*
* Fixup the bus->sysdata ptrs to point to the bus' device_node.
* This is done late in pcibios_init(). We do this mostly for
* sanity, but pci_dma.c uses these at DMA time so they must be
* correct.
* To do this we recurse down the bus hierarchy. Note that PHB's
* have bus->self == NULL, but fortunately bus->sysdata is already
* correct in this case.
*/
void __init pci_fix_bus_sysdata(void)
{
pci_fixup_bus_sysdata_list(&pci_root_buses);
}
...@@ -664,8 +664,6 @@ void __init pmac_pcibios_fixup(void) ...@@ -664,8 +664,6 @@ void __init pmac_pcibios_fixup(void)
for_each_pci_dev(dev) for_each_pci_dev(dev)
pci_read_irq_line(dev); pci_read_irq_line(dev);
pci_fix_bus_sysdata();
} }
static void __init pmac_fixup_phb_resources(void) static void __init pmac_fixup_phb_resources(void)
......
...@@ -11,18 +11,10 @@ ...@@ -11,18 +11,10 @@
* 2 of the License, or (at your option) any later version. * 2 of the License, or (at your option) any later version.
*/ */
struct device_node;
struct pci_controller;
/* Get the PCI host controller for an OF device */
extern struct pci_controller*
pci_find_hose_for_OF_device(struct device_node* node);
/* /*
* Structure of a PCI controller (host bridge) * Structure of a PCI controller (host bridge)
*/ */
struct pci_controller { struct pci_controller {
char what[8]; /* Eye catcher */
struct pci_bus *bus; struct pci_bus *bus;
char is_dynamic; char is_dynamic;
void *arch_data; void *arch_data;
...@@ -49,7 +41,6 @@ struct pci_controller { ...@@ -49,7 +41,6 @@ struct pci_controller {
*/ */
struct resource io_resource; struct resource io_resource;
struct resource mem_resources[3]; struct resource mem_resources[3];
int mem_resource_count;
int global_number; int global_number;
int local_number; int local_number;
unsigned long buid; unsigned long buid;
...@@ -57,14 +48,6 @@ struct pci_controller { ...@@ -57,14 +48,6 @@ struct pci_controller {
unsigned long dma_window_size; unsigned long dma_window_size;
}; };
/*
* pci_device_loc returns the bus number and device/function number
* for a device on a PCI bus, given its device_node struct.
* It returns 0 if OK, -1 on error.
*/
extern int pci_device_loc(struct device_node *dev, unsigned char *bus_ptr,
unsigned char *devfn_ptr);
struct device_node *fetch_dev_dn(struct pci_dev *dev); struct device_node *fetch_dev_dn(struct pci_dev *dev);
/* Get a device_node from a pci_dev. This code must be fast except in the case /* Get a device_node from a pci_dev. This code must be fast except in the case
...@@ -72,8 +55,9 @@ struct device_node *fetch_dev_dn(struct pci_dev *dev); ...@@ -72,8 +55,9 @@ struct device_node *fetch_dev_dn(struct pci_dev *dev);
*/ */
static inline struct device_node *pci_device_to_OF_node(struct pci_dev *dev) static inline struct device_node *pci_device_to_OF_node(struct pci_dev *dev)
{ {
struct device_node *dn = (struct device_node *)(dev->sysdata); struct device_node *dn = dev->sysdata;
if (dn->devfn == dev->devfn && dn->busno == (dev->bus->number&0xff))
if (dn->devfn == dev->devfn && dn->busno == dev->bus->number)
return dn; /* fast path. sysdata is good */ return dn; /* fast path. sysdata is good */
else else
return fetch_dev_dn(dev); return fetch_dev_dn(dev);
...@@ -102,6 +86,5 @@ static inline struct pci_controller *pci_bus_to_host(struct pci_bus *bus) ...@@ -102,6 +86,5 @@ static inline struct pci_controller *pci_bus_to_host(struct pci_bus *bus)
return busdn->phb; return busdn->phb;
} }
#endif #endif
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment