MFC: r206448
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.
This commit is contained in:
parent
6419e07f19
commit
4d9e1e3e1f
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/stable/8/; revision=207518
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user