[PATCH v2 01/12] ACPI/IORT: Make iort_match_node_callback walk the ACPI namespace for NC
Hanjun Guo
guohanjun at huawei.com
Mon Jun 29 00:24:43 EDT 2020
Hi Lorenzo,
On 2020/6/19 16:20, Lorenzo Pieralisi wrote:
> When the iort_match_node_callback is invoked for a named component
> the match should be executed upon a device with an ACPI companion.
>
> For devices with no ACPI companion set-up the ACPI device tree must be
> walked in order to find the first parent node with a companion set and
> check the parent node against the named component entry to check whether
> there is a match and therefore an IORT node describing the in/out ID
> translation for the device has been found.
>
> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi at arm.com>
> Cc: Will Deacon <will at kernel.org>
> Cc: Hanjun Guo <guohanjun at huawei.com>
> Cc: Sudeep Holla <sudeep.holla at arm.com>
> Cc: Catalin Marinas <catalin.marinas at arm.com>
> Cc: Robin Murphy <robin.murphy at arm.com>
> Cc: "Rafael J. Wysocki" <rjw at rjwysocki.net>
> ---
> drivers/acpi/arm64/iort.c | 20 ++++++++++++++++++--
> 1 file changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
> index 28a6b387e80e..5eee81758184 100644
> --- a/drivers/acpi/arm64/iort.c
> +++ b/drivers/acpi/arm64/iort.c
> @@ -264,15 +264,31 @@ static acpi_status iort_match_node_callback(struct acpi_iort_node *node,
>
> if (node->type == ACPI_IORT_NODE_NAMED_COMPONENT) {
> struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER, NULL };
> - struct acpi_device *adev = to_acpi_device_node(dev->fwnode);
> + struct acpi_device *adev;
> struct acpi_iort_named_component *ncomp;
> + struct device *nc_dev = dev;
> +
> + /*
> + * Walk the device tree to find a device with an
> + * ACPI companion; there is no point in scanning
> + * IORT for a device matching a named component if
> + * the device does not have an ACPI companion to
> + * start with.
> + */
> + do {
> + adev = ACPI_COMPANION(nc_dev);
> + if (adev)
> + break;
> +
> + nc_dev = nc_dev->parent;
> + } while (nc_dev);
I'm lost here, we need the ACPI_COMPANION (the same as
to_acpi_device_node()) of the device, but why do we need to go
up to find the parent node?
For a platform device, if I use its parent's full path name for
its named component entry, then it will match, but this will violate
the IORT spec.
Thanks
Hanjun
More information about the linux-arm-kernel
mailing list