diff options
Diffstat (limited to 'arch/ppc/platforms/gemini_pci.c')
-rw-r--r-- | arch/ppc/platforms/gemini_pci.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/arch/ppc/platforms/gemini_pci.c b/arch/ppc/platforms/gemini_pci.c new file mode 100644 index 000000000000..95656091ba2b --- /dev/null +++ b/arch/ppc/platforms/gemini_pci.c @@ -0,0 +1,41 @@ +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/pci.h> +#include <linux/slab.h> + +#include <asm/machdep.h> +#include <platforms/gemini.h> +#include <asm/byteorder.h> +#include <asm/io.h> +#include <asm/uaccess.h> +#include <asm/pci-bridge.h> + +void __init gemini_pcibios_fixup(void) +{ + int i; + struct pci_dev *dev = NULL; + + for_each_pci_dev(dev) { + for(i = 0; i < 6; i++) { + if (dev->resource[i].flags & IORESOURCE_IO) { + dev->resource[i].start |= (0xfe << 24); + dev->resource[i].end |= (0xfe << 24); + } + } + } +} + + +/* The "bootloader" for Synergy boards does none of this for us, so we need to + lay it all out ourselves... --Dan */ +void __init gemini_find_bridges(void) +{ + struct pci_controller* hose; + + ppc_md.pcibios_fixup = gemini_pcibios_fixup; + + hose = pcibios_alloc_controller(); + if (!hose) + return; + setup_indirect_pci(hose, 0xfec00000, 0xfee00000); +} |