diff options
author | Kumar Gala <galak@kernel.crashing.org> | 2007-07-20 14:35:34 -0400 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2007-07-23 23:30:08 -0400 |
commit | f64fddbeac737bfc8d966423f067a9af9eeec887 (patch) | |
tree | 539a70d8bc30fd6f30a0aee9d6f63a5f1a8b4fc4 /arch/powerpc/kernel/pci_32.c | |
parent | f16dab981aa9d423bdfe096e3422acd33d905c1e (diff) |
[POWERPC] Provide ability to setup P2P bridge registers from struct resource
We need the ability to set P2P bridge registers to properly setup the virtual
P2P bridges that exist in PCIe controllers for some of the embedded setups.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/pci_32.c')
-rw-r--r-- | arch/powerpc/kernel/pci_32.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/arch/powerpc/kernel/pci_32.c b/arch/powerpc/kernel/pci_32.c index bfcfa14e831f..721a69400d65 100644 --- a/arch/powerpc/kernel/pci_32.c +++ b/arch/powerpc/kernel/pci_32.c | |||
@@ -415,15 +415,13 @@ probe_resource(struct pci_bus *parent, struct resource *pr, | |||
415 | return 0; | 415 | return 0; |
416 | } | 416 | } |
417 | 417 | ||
418 | static void __init | 418 | void __init |
419 | update_bridge_base(struct pci_bus *bus, int i) | 419 | update_bridge_resource(struct pci_dev *dev, struct resource *res) |
420 | { | 420 | { |
421 | struct resource *res = bus->resource[i]; | ||
422 | u8 io_base_lo, io_limit_lo; | 421 | u8 io_base_lo, io_limit_lo; |
423 | u16 mem_base, mem_limit; | 422 | u16 mem_base, mem_limit; |
424 | u16 cmd; | 423 | u16 cmd; |
425 | unsigned long start, end, off; | 424 | unsigned long start, end, off; |
426 | struct pci_dev *dev = bus->self; | ||
427 | struct pci_controller *hose = dev->sysdata; | 425 | struct pci_controller *hose = dev->sysdata; |
428 | 426 | ||
429 | if (!hose) { | 427 | if (!hose) { |
@@ -467,12 +465,20 @@ update_bridge_base(struct pci_bus *bus, int i) | |||
467 | pci_write_config_word(dev, PCI_PREF_MEMORY_LIMIT, mem_limit); | 465 | pci_write_config_word(dev, PCI_PREF_MEMORY_LIMIT, mem_limit); |
468 | 466 | ||
469 | } else { | 467 | } else { |
470 | DBG(KERN_ERR "PCI: ugh, bridge %s res %d has flags=%lx\n", | 468 | DBG(KERN_ERR "PCI: ugh, bridge %s res has flags=%lx\n", |
471 | pci_name(dev), i, res->flags); | 469 | pci_name(dev), res->flags); |
472 | } | 470 | } |
473 | pci_write_config_word(dev, PCI_COMMAND, cmd); | 471 | pci_write_config_word(dev, PCI_COMMAND, cmd); |
474 | } | 472 | } |
475 | 473 | ||
474 | static void __init | ||
475 | update_bridge_base(struct pci_bus *bus, int i) | ||
476 | { | ||
477 | struct resource *res = bus->resource[i]; | ||
478 | struct pci_dev *dev = bus->self; | ||
479 | update_bridge_resource(dev, res); | ||
480 | } | ||
481 | |||
476 | static inline void alloc_resource(struct pci_dev *dev, int idx) | 482 | static inline void alloc_resource(struct pci_dev *dev, int idx) |
477 | { | 483 | { |
478 | struct resource *pr, *r = &dev->resource[idx]; | 484 | struct resource *pr, *r = &dev->resource[idx]; |