From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Huth Subject: Re: [kvm-unit-tests PATCH v2 1/4] devicetree: translate with parent node's #address/size-cells Date: Wed, 11 May 2016 17:30:33 +0200 Message-ID: <57335019.8030609@redhat.com> References: <1462973121-14548-1-git-send-email-drjones@redhat.com> <1462973121-14548-2-git-send-email-drjones@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: lvivier@redhat.com, pbonzini@redhat.com To: Andrew Jones , kvm@vger.kernel.org Return-path: Received: from mx1.redhat.com ([209.132.183.28]:60212 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932093AbcEKPah (ORCPT ); Wed, 11 May 2016 11:30:37 -0400 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 78F0363304 for ; Wed, 11 May 2016 15:30:36 +0000 (UTC) In-Reply-To: <1462973121-14548-2-git-send-email-drjones@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On 11.05.2016 15:25, Andrew Jones wrote: > Don't assume all pbus (cpu physical bus) translations will use the > same number of address and size cells as are defined in the root > node. Use the parent's (which may be the root node), as the spec > tells us to do. > > Signed-off-by: Andrew Jones > --- > lib/devicetree.c | 13 +++++++++++-- > lib/devicetree.h | 4 ++-- > 2 files changed, 13 insertions(+), 4 deletions(-) > > diff --git a/lib/devicetree.c b/lib/devicetree.c > index a5c7f7c69ddfd..7859968c7a8d2 100644 > --- a/lib/devicetree.c > +++ b/lib/devicetree.c > @@ -82,9 +82,18 @@ int dt_pbus_translate_node(int fdtnode, int regidx, > struct dt_pbus_reg *pbus_reg) > { > struct dt_reg raw_reg; > - int ret; > + u32 nac, nsc; > + int parent, ret; > + > + parent = fdt_parent_offset(fdt, fdtnode); > + if (parent < 0) > + return parent; > > - dt_reg_init(&raw_reg, root_nr_address_cells, root_nr_size_cells); > + ret = dt_get_nr_cells(parent, &nac, &nsc); > + if (ret != 0) > + return ret; > + > + dt_reg_init(&raw_reg, nac, nsc); > > ret = dt_get_reg(fdtnode, regidx, &raw_reg); > if (ret < 0) > diff --git a/lib/devicetree.h b/lib/devicetree.h > index c8c86eeae28b6..d40243a603925 100644 > --- a/lib/devicetree.h > +++ b/lib/devicetree.h > @@ -92,8 +92,8 @@ static inline dt_pbus_addr_t dt_pbus_read_cells(u32 nr_cells, u32 *cells) > > /* > * dt_pbus_translate translates device node regs for the > - * processor bus using the root node's #address-cells and > - * #size-cells and dt_pbus_read_cells() > + * processor bus using the parent node's #address-cells > + * and #size-cells and dt_pbus_read_cells() > * returns > * - zero on success > * - a negative FDT_ERR_* value on failure > Reviewed-by: Thomas Huth