From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH RFC 21/35] xen/arm: Create memory node for DOM0 Date: Wed, 11 Feb 2015 14:27:49 +0800 Message-ID: <54DAF665.2080804@linaro.org> References: <1423058539-26403-1-git-send-email-parth.dixit@linaro.org> <1423058539-26403-22-git-send-email-parth.dixit@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Stefano Stabellini , parth.dixit@linaro.org Cc: ian.campbell@citrix.com, Naresh Bhat , tim@xen.org, xen-devel@lists.xen.org, stefano.stabellini@citrix.com, jbeulich@suse.com, christoffer.dall@linaro.org List-Id: xen-devel@lists.xenproject.org Hi Stefano, On 06/02/2015 00:01, Stefano Stabellini wrote: > On Wed, 4 Feb 2015, parth.dixit@linaro.org wrote: >> From: Naresh Bhat >> >> Create a memory node for DOM0. >> >> Signed-off-by: Naresh Bhat >> --- >> xen/arch/arm/domain_build.c | 48 +++++++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 48 insertions(+) >> >> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c >> index bb7f043..30bebe5 100644 >> --- a/xen/arch/arm/domain_build.c >> +++ b/xen/arch/arm/domain_build.c >> @@ -1155,6 +1155,50 @@ static int handle_node(struct domain *d, struct kernel_info *kinfo, >> return res; >> } >> >> +static int make_memory_node_acpi(const struct domain *d, >> + void *fdt, >> + int addr_cells, >> + int size_cells, >> + const struct kernel_info *kinfo) >> +{ >> + int res, i; >> + int reg_size = addr_cells + size_cells; >> + int nr_cells = reg_size*kinfo->mem.nr_banks; >> + __be32 reg[nr_cells]; >> + __be32 *cells; >> + >> + DPRINT("Create memory node (reg size %d, nr cells %d)\n", reg_size, nr_cells); >> + >> + /* ePAPR 3.4 */ >> + res = fdt_begin_node(fdt, "memory"); >> + if ( res ) >> + return res; >> + >> + res = fdt_property_string(fdt, "device_type", "memory"); >> + if ( res ) >> + return res; >> + >> + cells = ®[0]; >> + for ( i = 0 ; i < kinfo->mem.nr_banks; i++ ) >> + { >> + u64 start = kinfo->mem.bank[i].start; >> + u64 size = kinfo->mem.bank[i].size; >> + >> + DPRINT(" Bank %d: %#"PRIx64"->%#"PRIx64"\n", >> + i, start, start + size); >> + >> + dt_set_range(&cells, fdt, start, size); >> + } >> + >> + res = fdt_property(fdt, "reg", reg, sizeof(reg)); >> + if ( res ) >> + return res; >> + >> + res = fdt_end_node(fdt); >> + >> + return res; >> +} > > What's the difference with make_memory_node? Couldn't you just use that > instead? AFAICS, the only difference is the way we get the number of address/size cells. I agree that we should extend make_memory_node to get those number of cells in parameter rather than duplicating the function. Regards, -- Julien Grall