From 3ae419c005379d01dbb2181d5f6ee89496af4506 Mon Sep 17 00:00:00 2001 From: Will Deacon Date: Wed, 20 Nov 2019 19:00:28 +0000 Subject: [PATCH] FROMGIT: of: property: Add device link support for "iommu-map" Commit 8e12257dead7 ("of: property: Add device link support for iommus, mboxes and io-channels") added device link support for IOMMU linkages described using the "iommus" property. For PCI devices, this property is not present and instead the "iommu-map" property is used on the host bridge node to map the endpoint RequesterIDs to their corresponding IOMMU instance. Add support for "iommu-map" to the device link supplier bindings so that probing of PCI devices can be deferred until after the IOMMU is available. Cc: Rob Herring Cc: Robin Murphy Signed-off-by: Will Deacon Acked-by: Saravana Kannan Link: https://lore.kernel.org/r/20191120190028.4722-1-will@kernel.org Signed-off-by: Greg Kroah-Hartman (cherry-picked from commit e149573b2f84d0517648dafc0db625afa681ed54 https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git driver-core-next) Signed-off-by: Will Deacon Change-Id: Ife0cf1ed0256af47ed0cae7156f3184de355c42c --- drivers/of/property.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/of/property.c b/drivers/of/property.c index ad20e950c8af..bff44d49519e 100644 --- a/drivers/of/property.c +++ b/drivers/of/property.c @@ -1190,10 +1190,20 @@ DEFINE_SIMPLE_PROP(mboxes, "mboxes", "#mbox-cells") DEFINE_SIMPLE_PROP(io_channels, "io-channel", "#io-channel-cells") DEFINE_SUFFIX_PROP(regulators, "-supply", NULL) +static struct device_node *parse_iommu_maps(struct device_node *np, + const char *prop_name, int index) +{ + if (strcmp(prop_name, "iommu-map")) + return NULL; + + return of_parse_phandle(np, prop_name, (index * 4) + 1); +} + static const struct supplier_bindings of_supplier_bindings[] = { { .parse_prop = parse_clocks, }, { .parse_prop = parse_interconnects, }, { .parse_prop = parse_iommus, }, + { .parse_prop = parse_iommu_maps, }, { .parse_prop = parse_mboxes, }, { .parse_prop = parse_io_channels, }, { .parse_prop = parse_regulators, },