summaryrefslogtreecommitdiffstats
path: root/arch/ppc/kernel/pci.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1999-02-15 02:15:32 +0000
committerRalf Baechle <ralf@linux-mips.org>1999-02-15 02:15:32 +0000
commit86464aed71025541805e7b1515541aee89879e33 (patch)
treee01a457a4912a8553bc65524aa3125d51f29f810 /arch/ppc/kernel/pci.c
parent88f99939ecc6a95a79614574cb7d95ffccfc3466 (diff)
Merge with Linux 2.2.1.
Diffstat (limited to 'arch/ppc/kernel/pci.c')
-rw-r--r--arch/ppc/kernel/pci.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/arch/ppc/kernel/pci.c b/arch/ppc/kernel/pci.c
index 359446f4f..1dfa3a6c8 100644
--- a/arch/ppc/kernel/pci.c
+++ b/arch/ppc/kernel/pci.c
@@ -1,5 +1,5 @@
/*
- * $Id: pci.c,v 1.39 1998/10/13 20:59:04 cort Exp $
+ * $Id: pci.c,v 1.43 1998/12/29 18:55:11 cort Exp $
* Common pmac/prep/chrp pci routines. -- Cort
*/
@@ -123,8 +123,8 @@ __initfunc(void pcibios_init(void))
__initfunc(void
setup_pci_ptrs(void))
{
- PPC_DEVICE *hostbridge;
#ifndef CONFIG_MBX
+ PPC_DEVICE *hostbridge;
switch (_machine) {
case _MACH_prep:
hostbridge=residual_find_device(PROCESSORDEVICE, NULL,
@@ -188,13 +188,8 @@ __initfunc(void pcibios_fixup(void))
extern struct bridge_data **bridges;
extern unsigned char *Motherboard_map;
extern unsigned char *Motherboard_routes;
-
- /*
- * FIXME: This is broken: We should not assign IRQ's to IRQless
- * devices (look at PCI_INTERRUPT_PIN) and we also should
- * honor the existence of multi-function devices where
- * different functions have different interrupt pins. [mj]
- */
+ unsigned char i;
+#ifndef CONFIG_MBX
switch (_machine )
{
case _MACH_prep:
@@ -208,6 +203,21 @@ __initfunc(void pcibios_fixup(void))
*/
unsigned char d = PCI_SLOT(dev->devfn);
dev->irq = Motherboard_routes[Motherboard_map[d]];
+ for ( i = 0 ; i <= 5 ; i++ )
+ {
+ if ( dev->base_address[i] > 0x10000000 )
+ {
+ printk("Relocating PCI address %x -> %x\n",
+ dev->base_address[i],
+ (dev->base_address[i] & 0x00FFFFFF)
+ | 0x01000000);
+ dev->base_address[i] =
+ (dev->base_address[i] & 0x00FFFFFF) | 0x01000000;
+ pci_write_config_dword(dev,
+ PCI_BASE_ADDRESS_0+(i*0x4),
+ dev->base_address[i] );
+ }
+ }
#if 0
/*
* If we have residual data and if it knows about this
@@ -255,6 +265,11 @@ __initfunc(void pcibios_fixup(void))
}
break;
}
+#else /* CONFIG_MBX */
+ for(dev=pci_devices; dev; dev=dev->next)
+ {
+ }
+#endif /* CONFIG_MBX */
}
__initfunc(void pcibios_fixup_bus(struct pci_bus *bus))