[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v5 1/7] xen/arm: introduce new helper device_tree_get_meminfo
Hi Julien > -----Original Message----- > From: Julien Grall <julien@xxxxxxx> > Sent: Wednesday, September 1, 2021 4:57 PM > To: Penny Zheng <Penny.Zheng@xxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx; > sstabellini@xxxxxxxxxx > Cc: Bertrand Marquis <Bertrand.Marquis@xxxxxxx>; Wei Chen > <Wei.Chen@xxxxxxx>; nd <nd@xxxxxxx> > Subject: Re: [PATCH v5 1/7] xen/arm: introduce new helper > device_tree_get_meminfo > > Hi Penny, > > On 24/08/2021 10:50, Penny Zheng wrote: > > A few functions iterate over the device tree property to get memory > > info, like "reg" or the later "xen,static-mem", so this commit creates > > a new helper device_tree_get_meminfo to extract the common codes. > > The commit message needs to be updated as the patch has been reshuffled. > Yes! I'll reconstruct. > > Signed-off-by: Penny Zheng <penny.zheng@xxxxxxx> > > --- > > xen/arch/arm/bootfdt.c | 68 ++++++++++++++++++++++++------------------ > > 1 file changed, 39 insertions(+), 29 deletions(-) > > > > diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c index > > 476e32e0f5..8c81be3379 100644 > > --- a/xen/arch/arm/bootfdt.c > > +++ b/xen/arch/arm/bootfdt.c > > @@ -63,6 +63,44 @@ void __init device_tree_get_reg(const __be32 **cell, > u32 address_cells, > > *size = dt_next_cell(size_cells, cell); > > } > > > > +static int __init device_tree_get_meminfo(const void *fdt, int node, > > + const char *prop_name, > > + u32 address_cells, u32 > > size_cells, > > + void *data) { > > + const struct fdt_property *prop; > > + unsigned int i, banks; > > + const __be32 *cell; > > + u32 reg_cells = address_cells + size_cells; > > + paddr_t start, size; > > + struct meminfo *mem = data; > > + > > + prop = fdt_get_property(fdt, node, prop_name, NULL); > > + if ( !prop ) > > + return -ENOENT; > > + > > + cell = (const __be32 *)prop->data; > > + banks = fdt32_to_cpu(prop->len) / (reg_cells * sizeof (u32)); > > + > > + for ( i = 0; i < banks && mem->nr_banks < NR_MEM_BANKS; i++ ) > > + { > > + device_tree_get_reg(&cell, address_cells, size_cells, &start, > > &size); > > + /* Some DT may describe empty bank, ignore them */ > > + if ( !size ) > > + continue; > > + mem->bank[mem->nr_banks].start = start; > > + mem->bank[mem->nr_banks].size = size; > > + mem->nr_banks++; > > + } > > + > > + if ( i < banks ) > > + { > > + printk("Warning: Max number of supported memory regions > reached.\n"); > > + return -ENOSPC; > > + } > > + return 0; > > +} > > + > > u32 __init device_tree_get_u32(const void *fdt, int node, > > const char *prop_name, u32 dflt) > > { > > @@ -139,14 +177,6 @@ static int __init process_memory_node(const void > *fdt, int node, > > u32 address_cells, u32 size_cells, > > void *data) > > { > > - const struct fdt_property *prop; > > - int i; > > - int banks; > > - const __be32 *cell; > > - paddr_t start, size; > > - u32 reg_cells = address_cells + size_cells; > > - struct meminfo *mem = data; > > - > > if ( address_cells < 1 || size_cells < 1 ) > > This check will be the same for "xen,static-mem". So can it be moved to > device_tree_get_meminfo()? > Sure. I'll move it. > > { > > printk("fdt: node `%s': invalid #address-cells or > > #size-cells", @@ -154,27 +184,7 @@ static int __init > process_memory_node(const void *fdt, int node, > > return -EINVAL; > > } > > > > - prop = fdt_get_property(fdt, node, "reg", NULL); > > - if ( !prop ) > > - return -ENOENT; > > - > > - cell = (const __be32 *)prop->data; > > - banks = fdt32_to_cpu(prop->len) / (reg_cells * sizeof (u32)); > > - > > - for ( i = 0; i < banks && mem->nr_banks < NR_MEM_BANKS; i++ ) > > - { > > - device_tree_get_reg(&cell, address_cells, size_cells, &start, > > &size); > > - /* Some DT may describe empty bank, ignore them */ > > - if ( !size ) > > - continue; > > - mem->bank[mem->nr_banks].start = start; > > - mem->bank[mem->nr_banks].size = size; > > - mem->nr_banks++; > > - } > > - > > - if ( i < banks ) > > - return -ENOSPC; > > - return 0; > > + return device_tree_get_meminfo(fdt, node, "reg", address_cells, > > + size_cells, data); > > } > > > > static int __init process_reserved_memory_node(const void *fdt, int > > node, > > > > Cheers, > > -- > Julien Grall
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |