|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] xen/arm, device-tree: Make static-mem use #{address,size}-cells
Hi Henry,
On 08/09/2022 11:31, Henry Wang wrote:
>
> In order to keep consistency in the device tree binding, there is
> no need for static memory allocation feature to define a specific
> set of address and size cells for "xen,static-mem" property.
>
> Therefore, this commit reuses the regular #{address,size}-cells
> for parsing the device tree "xen,static-mem" property. Update
> the documentation accordingly.
>
> Signed-off-by: Henry Wang <Henry.Wang@xxxxxxx>
> ---
> docs/misc/arm/device-tree/booting.txt | 13 ++++++-------
> docs/misc/arm/passthrough-noiommu.txt | 7 +++----
> xen/arch/arm/bootfdt.c | 5 -----
> xen/arch/arm/domain_build.c | 16 ++--------------
> 4 files changed, 11 insertions(+), 30 deletions(-)
>
> diff --git a/docs/misc/arm/device-tree/booting.txt
> b/docs/misc/arm/device-tree/booting.txt
> index 98253414b8..12d77e3b26 100644
> --- a/docs/misc/arm/device-tree/booting.txt
> +++ b/docs/misc/arm/device-tree/booting.txt
> @@ -339,15 +339,15 @@ kernel will be able to discover the device.
>
>
> Static Allocation
> -=============
> +=================
>
> Static Allocation refers to system or sub-system(domains) for which memory
> areas are pre-defined by configuration using physical address ranges.
>
> Memory can be statically allocated to a domain using the property
> "xen,static-
> mem" defined in the domain configuration. The number of cells for the address
> -and the size must be defined using respectively the properties
> -"#xen,static-mem-address-cells" and "#xen,static-mem-size-cells".
> +and the size must be defined respectively by the parent node properties
> +"#address-cells" and "#size-cells".
>
> The property 'memory' is still needed and should match the amount of memory
> given to the guest. Currently, it either comes from static memory or lets Xen
> @@ -362,14 +362,13 @@ device-tree:
>
> / {
> chosen {
> + #address-cells = <0x1>;
> + #size-cells = <0x1>;
> + ...
> domU1 {
> compatible = "xen,domain";
> - #address-cells = <0x2>;
> - #size-cells = <0x2>;
Why did you remove this set if it relates to the childs of domU1 (e.g. kernel,
ramdisk) and not to domU1 itself?
> cpus = <2>;
> memory = <0x0 0x80000>;
> - #xen,static-mem-address-cells = <0x1>;
> - #xen,static-mem-size-cells = <0x1>;
> xen,static-mem = <0x30000000 0x20000000>;
> ...
> };
> diff --git a/docs/misc/arm/passthrough-noiommu.txt
> b/docs/misc/arm/passthrough-noiommu.txt
> index 3e2ef21ad7..69b8de1975 100644
> --- a/docs/misc/arm/passthrough-noiommu.txt
> +++ b/docs/misc/arm/passthrough-noiommu.txt
> @@ -33,14 +33,13 @@ on static allocation in the device-tree:
>
> / {
> chosen {
> + #address-cells = <0x1>;
> + #size-cells = <0x1>;
> + ...
> domU1 {
> compatible = "xen,domain";
> - #address-cells = <0x2>;
> - #size-cells = <0x2>;
The same here.
> cpus = <2>;
> memory = <0x0 0x80000>;
> - #xen,static-mem-address-cells = <0x1>;
> - #xen,static-mem-size-cells = <0x1>;
> xen,static-mem = <0x30000000 0x20000000>;
> direct-map;
> ...
> diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c
> index ec81a45de9..cd264793d5 100644
> --- a/xen/arch/arm/bootfdt.c
> +++ b/xen/arch/arm/bootfdt.c
> @@ -352,11 +352,6 @@ static int __init process_domain_node(const void *fdt,
> int node,
> /* No "xen,static-mem" present. */
> return 0;
>
> - address_cells = device_tree_get_u32(fdt, node,
> - "#xen,static-mem-address-cells", 0);
> - size_cells = device_tree_get_u32(fdt, node,
> - "#xen,static-mem-size-cells", 0);
> -
> return device_tree_get_meminfo(fdt, node, "xen,static-mem",
> address_cells,
> size_cells, &bootinfo.reserved_mem, true);
> }
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index b76a84e8f5..258d74699d 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -563,21 +563,9 @@ static int __init parse_static_mem_prop(const struct
> dt_device_node *node,
> const struct dt_property *prop;
>
> prop = dt_find_property(node, "xen,static-mem", NULL);
> - if ( !dt_property_read_u32(node, "#xen,static-mem-address-cells",
> - addr_cells) )
> - {
> - printk(XENLOG_ERR
> - "failed to read \"#xen,static-mem-address-cells\".\n");
> - return -EINVAL;
> - }
>
> - if ( !dt_property_read_u32(node, "#xen,static-mem-size-cells",
> - size_cells) )
> - {
> - printk(XENLOG_ERR
> - "failed to read \"#xen,static-mem-size-cells\".\n");
> - return -EINVAL;
> - }
> + *addr_cells = dt_n_addr_cells(node);
> + *size_cells = dt_n_size_cells(node);
There is a type mismatch here as e.g. addr_cells is u32 and dt_n_addr_cells
return type is int.
But I don't think this can be harmful and also it's strange for me that
dt_n_addr_cells
is defined to return int given that it either returns 2 or be32_to_cpup, which
means it should return u32.
>
> *cell = (const __be32 *)prop->value;
> *length = prop->length;
> --
> 2.17.1
>
>
Apart from that:
Reviewed-by: Michal Orzel <michal.orzel@xxxxxxx>
~Michal
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |