On Mon, Sep 13, 2021 at 1:26 PM Marc Zyngier <maz@xxxxxxxxxx> wrote: > > of_irq_parse_raw() has a baked assumption that if a node has an > interrupt-controller property, it cannot possibly also have an > interrupt-map property (the latter being ignored). > > This seems to be an odd behaviour, and there are no reason why s/are/is/ > we should avoid supporting this use case. This is specially > useful when a PCI root port acts as an interrupt controller for > PCI endpoints, such as this: > > pcie0: pcie@690000000 { > [...] > port00: pci@0,0 { > device_type = "pci"; > [...] > #address-cells = <3>; > > interrupt-controller; > #interrupt-cells = <1>; > > interrupt-map-mask = <0 0 0 7>; > interrupt-map = <0 0 0 1 &port00 0 0 0 0>, > <0 0 0 2 &port00 0 0 0 1>, > <0 0 0 3 &port00 0 0 0 2>, > <0 0 0 4 &port00 0 0 0 3>; > }; > }; > > Handle it by detecting that we have an interrupt-map early in the > parsing, and special case the situation where the phandle in the > interrupt map refers to the current node (which is the interesting > case here). > > Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx> > --- > drivers/of/irq.c | 17 ++++++++++++----- > 1 file changed, 12 insertions(+), 5 deletions(-) Reviewed-by: Rob Herring <robh@xxxxxxxxxx>