|
[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 |