summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2010-04-10 10:44:41 +0000
committermarius <marius@FreeBSD.org>2010-04-10 10:44:41 +0000
commitadc265330417b4010b3c642074290646187491f0 (patch)
treea86e5aa739a50ed6e312d7fdb15633890d0d0322
parent3f4df35b98b78f3433bbf370d079a93635151ab9 (diff)
downloadFreeBSD-src-adc265330417b4010b3c642074290646187491f0.zip
FreeBSD-src-adc265330417b4010b3c642074290646187491f0.tar.gz
Do as the comment suggests and determine the bus space based on the last
bus we actually mapped at rather than always based on the last bus we encountered while moving upward in the tree. Otherwise we might use the wrong bus space in case the bridge directly underneath the nexus doesn't require mapping, i.e. was skipped as it's the case for ssm(4) nodes.
-rw-r--r--sys/sparc64/sparc64/ofw_machdep.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/sys/sparc64/sparc64/ofw_machdep.c b/sys/sparc64/sparc64/ofw_machdep.c
index 9d52262..07f95e2 100644
--- a/sys/sparc64/sparc64/ofw_machdep.c
+++ b/sys/sparc64/sparc64/ofw_machdep.c
@@ -186,13 +186,10 @@ OF_decode_addr(phandle_t node, int bank, int *space, bus_addr_t *addr)
name[sizeof(name) - 1] = '\0';
goto skip;
}
- if (lbus != bus) {
- if (OF_getprop(bus, "#size-cells", &szc,
- sizeof(szc)) == -1)
- szc = 1;
- if (szc < 1 || szc > 2)
- return (ENXIO);
- }
+ if (OF_getprop(bus, "#size-cells", &szc, sizeof(szc)) == -1)
+ szc = 1;
+ if (szc < 1 || szc > 2)
+ return (ENXIO);
nbank /= sizeof(banks[0]) * (addrc + paddrc + szc);
bank = 0;
for (i = 0; i < nbank; i++) {
@@ -232,9 +229,9 @@ OF_decode_addr(phandle_t node, int bank, int *space, bus_addr_t *addr)
}
if (i == nbank)
return (ENXIO);
+ lbus = bus;
skip:
addrc = paddrc;
- lbus = bus;
bus = pbus;
}
OpenPOWER on IntegriCloud