Re: commit e38c0a1f breaks powerpc boards with uli1575 chip
From: Scott Wood <hidden>
Date: 2014-01-03 00:04:28
Also in:
linux-devicetree, lkml
On Mon, 2013-12-30 at 14:13 +1100, Benjamin Herrenschmidt wrote:
On Thu, 2013-12-19 at 08:42 +0400, Nikita Yushchenko wrote:quoted
No, this does not help. I've dumped the actual content of 'range' and 'addr' at the failure point (i.e. ar point that returns error with e38c0a1f but passes without e38c0a1f ): OF: default map, cp=0, s=10000, da=70 range: 01 00 00 00 00 00 00 00 00 00 00 00 addr: 00 00 00 00 00 00 00 00 00 00 00 70Something that has a #address-cells larger than 2, or more generally, an address field that contains more than a single number, must have a specific translation backend, like we have for PCI. This is a bit annoying but originates from the original OFW stuff on which this stuff is based where the bus node would provide the methods for translation.
I can maybe see that for PCI which has a special encoding, but why is it always needed? E.g. if Freescale localbus had a 64-bit offset instead of 32-bit, the child nodes would have 3 address cells, but straightforward use of ranges would bring it down to 2 for the final physical address. Existing localbus nodes already have "an address field that contains more than a single number"; it's just a simple enough encoding that it works to treat it as if it were a single large number. -Scott