On Wed, May 11, 2016 at 11:28:36AM +0200, Thomas Huth wrote: > On 11.05.2016 11:04, Andrew Jones wrote: > > On Wed, May 11, 2016 at 09:02:39AM +0200, Thomas Huth wrote: > >> On 10.05.2016 19:32, Andrew Jones wrote: > >>> Search up the tree until we find #address-cells/#size-cells. > >>> Also only assign outputs if both address and size are found. > >>> > >>> Signed-off-by: Andrew Jones <drjones@xxxxxxxxxx> > >>> --- > >>> lib/devicetree.c | 17 +++++++++++++---- > >>> lib/devicetree.h | 3 ++- > >>> 2 files changed, 15 insertions(+), 5 deletions(-) > >>> > >>> diff --git a/lib/devicetree.c b/lib/devicetree.c > >>> index a5c7f7c69ddfd..d3751e2b7e7f9 100644 > >>> --- a/lib/devicetree.c > >>> +++ b/lib/devicetree.c > >>> @@ -24,21 +24,30 @@ int dt_get_nr_cells(int fdtnode, u32 *nr_address_cells, u32 *nr_size_cells) > >>> { > >>> const struct fdt_property *prop; > >>> u32 *nr_cells; > >>> - int len; > >>> + int len, nac, nsc; > >>> + > >>> + while (1) { > >>> + prop = fdt_get_property(fdt, fdtnode, "#address-cells", &len); > >>> + if (prop != NULL || len != -FDT_ERR_NOTFOUND) > >>> + break; > >>> + fdtnode = fdt_parent_offset(fdt, fdtnode); > >>> + } > >> > >> Why do you need this search? ePAPR clearly states: > >> > >> "The #address-cells and #size-cells properties are not inherited from > >> ancestors in the device tree. They shall be explicitly defined." > > > > You are right. > > > > My skimming of Documentation/devicetree/booting-without-of.txt was > > sloppy and I missed basically the same quote > > > > "Note that the parent's parent definitions of #address-cells and > > #size-cells are not inherited so every node with children must > > specify them." > > > >> > >> So as far as I can see, it should always be enough to look up the > >> properties in the parent of the node, no need for a recursion here? > > > > So, yes, I should look in the current node, and then the parent, and > > then just assert. > > AFAIK the #address-cells and #size-cells properties of the current node > only apply to the _children_ of the current node, but not to itself. I > think you always have to look at the parent to find out the correct > value for the current node. Thanks for this clarification. I'll rework this API to allow fetching a node's *-cells proprieties (when you know the node you're asking about is the parent, and you just want get this information) and for asking for a child-node's *-cells when doing translation (which means getting it from the parent). drew -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html