[RFC PATCH devicetree 00/10] Do something about ls-extirq interrupt-map breakage

Vladimir Oltean vladimir.oltean at nxp.com
Tue Dec 14 01:58:54 PST 2021


Hi Marc (with a c),

On Tue, Dec 14, 2021 at 08:51:47AM +0000, Marc Zyngier wrote:
> On Tue, 14 Dec 2021 01:37:50 +0000,
> Vladimir Oltean <vladimir.oltean at nxp.com> wrote:
> > 
> > Currently the ls-extirq driver's use of the "interrupt-map" property is
> > double-broken:
> > - once by Rob Herring's commit 869f0ec048dc ("arm64: dts: freescale: Fix
> >   'interrupt-map' parent address cells")
> > - twice by Marc Zyngier's commit 041284181226 ("of/irq: Allow matching
> >   of an interrupt-map local to an interrupt controller"), later revised,
> >   not very elegantly, through commit de4adddcbcc2 ("of/irq: Add a quirk
> 
> Elegance is, I'm afraid to say, bloody overrated when dealing with
> this sort of crap.
> 
> 
> >   for controllers with their own definition of interrupt-map"). So this
> >   part works but we're on an offender list.
> 
> Define 'part works'. Either it does, or it doesn't. There is no middle
> ground here.

"Part" is the subject, "works" is the predicate. It is a part of a
larger set of changes that now works after some breakage.

> > 
> > Mark suggests that the problem may lie with the ls-extirq driver, and
> > its interpretation of the "interrupt-map" property, to be exact.
> 
> s/Mark/Marc/, unless you are talking about someone else (who?).

Twas a typo, my hand must have slipped. This will not happen again.

> > This set of changes attempts to make the problem smaller by using a
> > vendor-specific name for the property, and reverts Rob's patch because
> > similarity with "interrupt-map" isn't actually a desirable feature after
> > all, it seems.
> > 
> > Vladimir Oltean (10):
> >   irqchip/ls-extirq: rename "interrupt-map" OF property to
> >     "fsl,extirq-map"
> >   Revert "arm64: dts: freescale: Fix 'interrupt-map' parent address
> >     cells"
> >   dt-bindings: ls-extirq: replace "interrupt-map" documentation with
> >     "fsl,extirq-map"
> >   arm64: dts: ls1043a: rename the "interrupt-map" of the extirq node to
> >     "fsl,extirq-map"
> >   arm64: dts: ls1046a: rename the "interrupt-map" of the extirq node to
> >     "fsl,extirq-map"
> >   arm64: dts: ls1088a: rename the "interrupt-map" of the extirq node to
> >     "fsl,extirq-map"
> >   arm64: dts: ls208xa: rename the "interrupt-map" of the extirq node to
> >     "fsl,extirq-map"
> >   arm64: dts: lx2160a: rename the "interrupt-map" of the extirq node to
> >     "fsl,extirq-map"
> >   ARM: dts: ls1021a: rename the "interrupt-map" of the extirq node to
> >     "fsl,extirq-map"
> >   dt-bindings: ls-extirq: add a YAML schema for the validator
> > 
> >  .../interrupt-controller/fsl,ls-extirq.txt    |  53 ---------
> >  .../interrupt-controller/fsl,ls-extirq.yaml   | 110 ++++++++++++++++++
> >  arch/arm/boot/dts/ls1021a.dtsi                |   3 +-
> >  .../arm64/boot/dts/freescale/fsl-ls1043a.dtsi |   3 +-
> >  .../arm64/boot/dts/freescale/fsl-ls1046a.dtsi |   3 +-
> >  .../arm64/boot/dts/freescale/fsl-ls1088a.dtsi |  27 +++--
> >  .../arm64/boot/dts/freescale/fsl-ls208xa.dtsi |  27 +++--
> >  .../arm64/boot/dts/freescale/fsl-lx2160a.dtsi |  27 +++--
> >  drivers/irqchip/irq-ls-extirq.c               |  12 +-
> >  9 files changed, 161 insertions(+), 104 deletions(-)
> >  delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/fsl,ls-extirq.txt
> >  create mode 100644 Documentation/devicetree/bindings/interrupt-controller/fsl,ls-extirq.yaml
> 
> This is totally pointless. These machines have been in the wild for
> years, and existing DTs will be there *forever*. The very notion of
> 'backporting' DT changes is totally ludicrous when it is some firmware
> (ATF, u-boot, or something else *that isn't under your control*) that
> provides the DT. It also breaks backward compatibility (old kernel
> with new DT), which is just as important. Why do you think I went the
> elegance-deprived route and added a quirk?

I wish the firmware for these SoCs was smart enough to be compatible
with the bindings that are in the kernel and provide a blob that the
kernel could actually use. Some work has been started there and this is
work in progress. True, I don't know what other OF-based firmware some
other customers may use, but I trust it isn't a lot more advanced than
what U-Boot currently has :)

Also, the machines may have been in the wild for years, but the
ls-extirq driver was added in November 2019. So not with the
introduction of the SoC device trees themselves. That isn't so long ago.

As for compatibility between old kernel and new DT: I guess you'll hear
various opinions on this one.
https://www.spinics.net/lists/linux-mips/msg07778.html

| > Are we okay with the new device tree blobs breaking the old kernel?
|
| From my point of view, newer device trees are not required to work on
| older kernel, this would impose an unreasonable limitation and the use
| case is very limited.

Sadly we're at a point where we cannot have software any longer that
works with all device trees in circulation, after Rob's change, because
the ls-extirq driver won't know what is the expected correct length of
an "interrupt-map"/"fsl,extirq-map"/whatever-you-want-to-call-it specifier.

And even with the revert, the argument you've brought to the table still
holds: any kernel running on a device tree with Rob's change will stay
broken no matter what we do. I'd like to take a more constructive
approach and see what we can do going forward (in the direction of the
arrow of time, in case that's not clear), at least.

> So no, I'm not taking the irqchip changes, as most of this churn
> serves no purpose. The revert of 869f0ec048dc is the only thing that
> makes some sense.

The devicetree changes were for Shawn to pick up anyway. But I posted
the entire series as RFC to gather comments. Other opinions still welcome.


More information about the linux-arm-kernel mailing list