[PATCH v7 15/24] ACPI: property: Add support for cells property
Rafael J. Wysocki
rafael at kernel.org
Wed Jul 2 03:20:55 PDT 2025
On Wed, Jul 2, 2025 at 7:16 AM Anup Patel <apatel at ventanamicro.com> wrote:
>
> From: Sunil V L <sunilvl at ventanamicro.com>
>
> Currently, ACPI doesn't support cells property when
> fwnode_property_get_reference_args() is called.
What exactly do you mean by "cells property" here and below?
> ACPI always expects
> the number of arguments to be passed. However, the above mentioned
> call being a common interface for OF and ACPI, it is better to have
> single calling convention which works for both. Hence, add support
> for cells property on the reference device to get the number of
> arguments dynamically.
>
> Signed-off-by: Sunil V L <sunilvl at ventanamicro.com>
> Signed-off-by: Anup Patel <apatel at ventanamicro.com>
> ---
> drivers/acpi/property.c | 22 ++++++++++++++++++----
> drivers/base/property.c | 2 +-
> 2 files changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
> index d4863746fb11..d08b0ea5c915 100644
> --- a/drivers/acpi/property.c
> +++ b/drivers/acpi/property.c
> @@ -882,6 +882,17 @@ static struct fwnode_handle *acpi_parse_string_ref(const struct fwnode_handle *f
> return &dn->fwnode;
> }
>
> +static unsigned int acpi_fwnode_get_args_count(const struct acpi_device *device,
> + const char *nargs_prop)
> +{
> + const union acpi_object *obj;
> +
> + if (acpi_dev_get_property(device, nargs_prop, ACPI_TYPE_INTEGER, &obj))
> + return 0;
> +
> + return obj->integer.value;
> +}
> +
> static int acpi_fwnode_get_reference_args(const struct fwnode_handle *fwnode,
> const char *propname, const char *nargs_prop,
> unsigned int args_count, unsigned int index,
> @@ -892,6 +903,7 @@ static int acpi_fwnode_get_reference_args(const struct fwnode_handle *fwnode,
> const struct acpi_device_data *data;
> struct fwnode_handle *ref_fwnode;
> struct acpi_device *device;
> + unsigned int nargs_count;
> int ret, idx = 0;
>
> data = acpi_device_data_of_node(fwnode);
> @@ -960,11 +972,12 @@ static int acpi_fwnode_get_reference_args(const struct fwnode_handle *fwnode,
> if (!device)
> return -EINVAL;
>
> + nargs_count = acpi_fwnode_get_args_count(device, nargs_prop);
I think it should work the same way as it used to for the callers that
pass args_count, so maybe
if (!args_count)
args_count = acpi_fwnode_get_args_count(device, nargs_prop);
> element++;
> -
> ret = acpi_get_ref_args(idx == index ? args : NULL,
> acpi_fwnode_handle(device),
> - &element, end, args_count);
> + &element, end,
> + nargs_count ? nargs_count : args_count);
And this change would not be necessary?
And analogously below.
> if (ret < 0)
> return ret;
>
> @@ -978,11 +991,12 @@ static int acpi_fwnode_get_reference_args(const struct fwnode_handle *fwnode,
> if (!ref_fwnode)
> return -EINVAL;
>
> + device = to_acpi_device_node(ref_fwnode);
> + nargs_count = acpi_fwnode_get_args_count(device, nargs_prop);
> element++;
> -
> ret = acpi_get_ref_args(idx == index ? args : NULL,
> ref_fwnode, &element, end,
> - args_count);
> + nargs_count ? nargs_count : args_count);
> if (ret < 0)
> return ret;
>
> diff --git a/drivers/base/property.c b/drivers/base/property.c
> index f626d5bbe806..6a63860579dd 100644
> --- a/drivers/base/property.c
> +++ b/drivers/base/property.c
> @@ -578,7 +578,7 @@ EXPORT_SYMBOL_GPL(fwnode_property_match_property_string);
> * @prop: The name of the property
> * @nargs_prop: The name of the property telling the number of
> * arguments in the referred node. NULL if @nargs is known,
> - * otherwise @nargs is ignored. Only relevant on OF.
> + * otherwise @nargs is ignored.
> * @nargs: Number of arguments. Ignored if @nargs_prop is non-NULL.
> * @index: Index of the reference, from zero onwards.
> * @args: Result structure with reference and integer arguments.
> --
More information about the linux-riscv
mailing list