On Thu, Nov 14, 2024 at 11:56 AM Samuel Holland <samuel.holland@xxxxxxxxxx> wrote: > > commit 7f00be96f125 ("of: property: Add device link support for > interrupt-parent, dmas and -gpio(s)") started adding device links for > the interrupt-parent property. Later, commit f265f06af194 ("of: > property: Fix fw_devlink handling of interrupts/interrupts-extended") > added full support for parsing the interrupts and interrupts-extended > properties, which includes looking up the node of the parent domain. > This made the handler for the interrupt-parent property redundant. > > In fact, creating device links based solely on interrupt-parent is > problematic, because it can create spurious cycles. A node may have > this property without itself being an interrupt controller or consumer. > For example, this property is often present in the root node or a /soc > bus node to set the default interrupt parent for child nodes. However, > it is incorrect for the bus to depend on the interrupt controller, as > some of the bus's childre may not be interrupt consumers at all or may > have a different interrupt parent. > > Resolving these spurious dependency cycles can cause an incorrect probe > order for interrupt controller drivers. This was observed on a RISC-V > system with both an APLIC and IMSIC under /soc, where interrupt-parent > in /soc points to the APLIC, and the APLIC msi-parent points to the > IMSIC. fw_devlink found three dependency cycles and attempted to probe > the APLIC before the IMSIC. After applying this patch, there were no > dependency cycles and the probe order was correct. Rob/Marc, If the claim about the interrupt parent interpretation is correct across the board, I'm ok with this patch. I remember the RISC-V DT for interrupts being a mess. So, want to make sure you agree with these claims before I Ack it. Thanks, Saravana > > Signed-off-by: Samuel Holland <samuel.holland@xxxxxxxxxx> > --- > > drivers/of/property.c | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/drivers/of/property.c b/drivers/of/property.c > index 11b922fde7af..7bd8390f2fba 100644 > --- a/drivers/of/property.c > +++ b/drivers/of/property.c > @@ -1213,7 +1213,6 @@ DEFINE_SIMPLE_PROP(iommus, "iommus", "#iommu-cells") > DEFINE_SIMPLE_PROP(mboxes, "mboxes", "#mbox-cells") > DEFINE_SIMPLE_PROP(io_channels, "io-channels", "#io-channel-cells") > DEFINE_SIMPLE_PROP(io_backends, "io-backends", "#io-backend-cells") > -DEFINE_SIMPLE_PROP(interrupt_parent, "interrupt-parent", NULL) > DEFINE_SIMPLE_PROP(dmas, "dmas", "#dma-cells") > DEFINE_SIMPLE_PROP(power_domains, "power-domains", "#power-domain-cells") > DEFINE_SIMPLE_PROP(hwlocks, "hwlocks", "#hwlock-cells") > @@ -1359,7 +1358,6 @@ static const struct supplier_bindings of_supplier_bindings[] = { > { .parse_prop = parse_mboxes, }, > { .parse_prop = parse_io_channels, }, > { .parse_prop = parse_io_backends, }, > - { .parse_prop = parse_interrupt_parent, }, > { .parse_prop = parse_dmas, .optional = true, }, > { .parse_prop = parse_power_domains, }, > { .parse_prop = parse_hwlocks, }, > -- > 2.45.1 >