summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDale Rahn <drahn@cvs.openbsd.org>2001-03-03 05:40:02 +0000
committerDale Rahn <drahn@cvs.openbsd.org>2001-03-03 05:40:02 +0000
commit4c0f07e3925a807fc67822ab724a7b6289c29d09 (patch)
tree063e68252a46732c51c041cc0476b9b3a3b69d28
parent71ff5cc792c2eebda550e02895130fe4dac9f3c4 (diff)
Change how PCI bus memory base address is found for powerpc.
This is probably quite a hack. however some bridges have multiple "memory" segment according to the openfirmware data. one is the pci device probe register area, and the one or two more that are real address regions. Such as base 0x80000000 sz 0x10000000, base 0x90000000 sz 0x10000000. This should really be one region but detecting the "last" region to avoid the first region causes the wrong base address to be picked. Currently this hardcodes it to 0x80000000 because it seems to work for "normal" pci currently. openfirmware puts full address in the field and the other devices seem to work on tested machines.
-rw-r--r--sys/arch/powerpc/pci/mpcpcibus.c36
1 files changed, 13 insertions, 23 deletions
diff --git a/sys/arch/powerpc/pci/mpcpcibus.c b/sys/arch/powerpc/pci/mpcpcibus.c
index b2309155132..b156544fa11 100644
--- a/sys/arch/powerpc/pci/mpcpcibus.c
+++ b/sys/arch/powerpc/pci/mpcpcibus.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mpcpcibus.c,v 1.22 2000/10/19 04:53:06 drahn Exp $ */
+/* $OpenBSD: mpcpcibus.c,v 1.23 2001/03/03 05:40:01 drahn Exp $ */
/*
* Copyright (c) 1997 Per Fogelstrom
@@ -411,28 +411,18 @@ mpcpcibrattach(parent, self, aux)
prange[found].base;
}
- found = 0;
- /* find mem base, flag == 0x02000000 */
- for (i = 0; i < rangelen ; i++)
- {
- if (prange[i].flags == 0x02000000) {
- /* find last? */
- found = i;
- }
- }
- /* found the mem space ranges */
- if (prange[found].flags == 0x02000000) {
- sc->sc_membus_space.bus_base =
- prange[found].base;
-
- }
- if ( (sc->sc_iobus_space.bus_base == 0) ||
- (sc->sc_membus_space.bus_base == 0)) {
- printf("io or memory base not found"
- "mem %x io %x\n",
- sc->sc_membus_space.bus_base,
- sc->sc_iobus_space.bus_base);
- }
+ /* the mem space ranges
+ * apple openfirmware always puts full
+ * addresses in config information,
+ * it is not necessary to have correct bus
+ * base address, but since 0 is reserved
+ * and all IO and device memory will be in
+ * upper 2G of address space, set to
+ * 0x80000000
+ */
+
+ sc->sc_membus_space.bus_base = 0x80000000;
+ sc->sc_membus_space.bus_reverse = 1;
}