All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Huth <thuth@redhat.com>
To: Andrew Jones <drjones@redhat.com>
Cc: kvm@vger.kernel.org, lvivier@redhat.com, pbonzini@redhat.com
Subject: Re: [kvm-unit-tests PATCH 1/2] devicetree: search up tree in dt_get_nr_cells
Date: Wed, 11 May 2016 11:28:36 +0200	[thread overview]
Message-ID: <5732FB44.3080408@redhat.com> (raw)
In-Reply-To: <20160511090445.uc56nehmipxnshdz@hawk.localdomain>

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@redhat.com>
>>> ---
>>>  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.

 Thomas



  reply	other threads:[~2016-05-11  9:28 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-10 17:32 [kvm-unit-tests PATCH 0/2] devicetree: use correct #address/#size cells Andrew Jones
2016-05-10 17:32 ` [kvm-unit-tests PATCH 1/2] devicetree: search up tree in dt_get_nr_cells Andrew Jones
2016-05-11  7:02   ` Thomas Huth
2016-05-11  9:04     ` Andrew Jones
2016-05-11  9:28       ` Thomas Huth [this message]
2016-05-11 11:23         ` Andrew Jones
2016-05-10 17:32 ` [kvm-unit-tests PATCH 2/2] devicetree: use node #address/size-cells Andrew Jones
2016-05-11  7:12   ` Thomas Huth
2016-05-11  9:09     ` Andrew Jones

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5732FB44.3080408@redhat.com \
    --to=thuth@redhat.com \
    --cc=drjones@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=lvivier@redhat.com \
    --cc=pbonzini@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.