From: Conor Dooley <conor.dooley@microchip.com>
On PolarFire SoC there are more GPIO interrupts than there are interrupt
lines available on the PLIC, and a runtime configurable mux is used to
decide which interrupts are assigned direct connections to the PLIC &
which are relegated to sharing a line.
Reviewed-by: Herve Codina <herve.codina@bootlin.com>
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
---
.../soc/microchip/microchip,mpfs-irqmux.yaml | 77 +++++++++++++++++++
.../microchip,mpfs-mss-top-sysreg.yaml | 4 +
2 files changed, 81 insertions(+)
create mode 100644 Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.yaml
diff --git a/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.yaml b/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.yaml
new file mode 100644
index 0000000000000..6a743b5067f75
--- /dev/null
+++ b/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.yaml
@@ -0,0 +1,77 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/soc/microchip/microchip,mpfs-irqmux.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Microchip Polarfire SoC GPIO Interrupt Mux
+
+maintainers:
+ - Conor Dooley <conor.dooley@microchip.com>
+
+description: |
+ There are 3 GPIO controllers on this SoC, of which:
+ - GPIO controller 0 has 14 GPIOs
+ - GPIO controller 1 has 24 GPIOs
+ - GPIO controller 2 has 32 GPIOs
+
+ All GPIOs are capable of generating interrupts, for a total of 70.
+ There are only 41 IRQs available however, so a configurable mux is used to
+ ensure all GPIOs can be used for interrupt generation.
+ 38 of the 41 interrupts are in what the documentation calls "direct mode",
+ as they provide an exclusive connection from a GPIO to the PLIC.
+ Lines 18 to 23 on GPIO controller 1 are always in "direct mode".
+ The 3 remaining interrupts are used to mux the interrupts which do not have
+ a exclusive connection, one for each GPIO controller.
+
+properties:
+ compatible:
+ const: microchip,mpfs-irqmux
+
+ reg:
+ maxItems: 1
+
+ "#address-cells":
+ const: 0
+
+ "#interrupt-cells":
+ const: 1
+
+ interrupt-map-mask:
+ items:
+ - const: 0x7f
+
+ interrupt-map:
+ description: |
+ Specifies the mapping from GPIO interrupt lines to plic interrupts.
+
+ The child interrupt number set in arrays items is computed using the
+ following formula:
+ gpio_bank * 32 + gpio_number
+ with:
+ - gpio_bank: The GPIO bank number
+ - 0 for GPIO0,
+ - 1 for GPIO1,
+ - 2 for GPIO2
+ - gpio_number: Number of the gpio in the bank (0..31)
+ maxItems: 70
+
+required:
+ - compatible
+ - reg
+ - "#address-cells"
+ - "#interrupt-cells"
+ - interrupt-map-mask
+ - interrupt-map
+
+additionalProperties: false
+
+examples:
+ - |
+ interrupt-controller@54 {
+ compatible = "microchip,mpfs-irqmux";
+ reg = <0x54 0x4>;
+ #address-cells = <0>;
+ #interrupt-cells = <1>;
+ interrupt-map-mask = <0xff>;
+ };
diff --git a/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-mss-top-sysreg.yaml b/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-mss-top-sysreg.yaml
index 44e4a50c31554..276d48ba15f01 100644
--- a/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-mss-top-sysreg.yaml
+++ b/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-mss-top-sysreg.yaml
@@ -38,6 +38,10 @@ properties:
of PolarFire clock/reset IDs.
const: 1
+ interrupt-controller@54:
+ type: object
+ $ref: /schemas/soc/microchip/microchip,mpfs-irqmux.yaml
+
pinctrl@200:
type: object
$ref: /schemas/pinctrl/microchip,mpfs-pinctrl-iomux0.yaml
--
2.51.0
On Wed, 11 Mar 2026 15:17:39 +0000, Conor Dooley wrote: > From: Conor Dooley <conor.dooley@microchip.com> > > On PolarFire SoC there are more GPIO interrupts than there are interrupt > lines available on the PLIC, and a runtime configurable mux is used to > decide which interrupts are assigned direct connections to the PLIC & > which are relegated to sharing a line. > > Reviewed-by: Herve Codina <herve.codina@bootlin.com> > Signed-off-by: Conor Dooley <conor.dooley@microchip.com> > --- > .../soc/microchip/microchip,mpfs-irqmux.yaml | 77 +++++++++++++++++++ > .../microchip,mpfs-mss-top-sysreg.yaml | 4 + > 2 files changed, 81 insertions(+) > create mode 100644 Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.yaml > My bot found errors running 'make dt_binding_check' on your patch: yamllint warnings/errors: dtschema/dtc warnings/errors: Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dts:18.33-24.11: Warning (interrupt_provider): /example-0/interrupt-controller@54: '#interrupt-cells' found, but node is not an interrupt provider Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dtb: Warning (interrupt_map): Failed prerequisite 'interrupt_provider' /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dtb: interrupt-controller@54 (microchip,mpfs-irqmux): interrupt-map-mask:0: 127 was expected from schema $id: http://devicetree.org/schemas/soc/microchip/microchip,mpfs-irqmux.yaml /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dtb: interrupt-controller@54 (microchip,mpfs-irqmux): 'interrupt-map' is a required property from schema $id: http://devicetree.org/schemas/soc/microchip/microchip,mpfs-irqmux.yaml /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dtb: interrupt-controller@54 (microchip,mpfs-irqmux): 'interrupt-map' is a dependency of 'interrupt-map-mask' from schema $id: http://devicetree.org/schemas/interrupt-controller.yaml /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dtb: interrupt-controller@54 (microchip,mpfs-irqmux): 'anyOf' conditional failed, one must be fixed: 'interrupt-controller' is a required property 'interrupt-map' is a required property from schema $id: http://devicetree.org/schemas/interrupt-controller.yaml doc reference errors (make refcheckdocs): See https://patchwork.kernel.org/project/devicetree/patch/20260311-collar-smokiness-5313aa648a6f@spud The base for the series is generally the latest rc1. A different dependency should be noted in *this* patch. If you already ran 'make dt_binding_check' and didn't see the above error(s), then make sure 'yamllint' is installed and dt-schema is up to date: pip3 install dtschema --upgrade Please check and re-submit after running the above command yourself. Note that DT_SCHEMA_FILES can be set to your schema file to speed up checking your schema. However, it must be unset to test all examples with your schema.
Rob, On Wed, Mar 11, 2026 at 11:41:17AM -0500, Rob Herring (Arm) wrote: > > On Wed, 11 Mar 2026 15:17:39 +0000, Conor Dooley wrote: > > From: Conor Dooley <conor.dooley@microchip.com> > > > > On PolarFire SoC there are more GPIO interrupts than there are interrupt > > lines available on the PLIC, and a runtime configurable mux is used to > > decide which interrupts are assigned direct connections to the PLIC & > > which are relegated to sharing a line. > > > > Reviewed-by: Herve Codina <herve.codina@bootlin.com> > > Signed-off-by: Conor Dooley <conor.dooley@microchip.com> > > --- > > .../soc/microchip/microchip,mpfs-irqmux.yaml | 77 +++++++++++++++++++ > > .../microchip,mpfs-mss-top-sysreg.yaml | 4 + > > 2 files changed, 81 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.yaml > > > > My bot found errors running 'make dt_binding_check' on your patch: AAAAAAAAA, goddammit. I forgot there was a reason why I had not just sent off the new version of the series. > yamllint warnings/errors: > > dtschema/dtc warnings/errors: > Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dts:18.33-24.11: Warning (interrupt_provider): /example-0/interrupt-controller@54: '#interrupt-cells' found, but node is not an interrupt provider > Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dtb: Warning (interrupt_map): Failed prerequisite 'interrupt_provider' I wanted to ask about this Rob, I wasn't sure I fully understood it. I figured it was because... > /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dtb: interrupt-controller@54 (microchip,mpfs-irqmux): 'interrupt-map' is a required property > from schema $id: http://devicetree.org/schemas/soc/microchip/microchip,mpfs-irqmux.yaml ...I had not added the interrupt-map yet... > /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dtb: interrupt-controller@54 (microchip,mpfs-irqmux): 'interrupt-map' is a dependency of 'interrupt-map-mask' > from schema $id: http://devicetree.org/schemas/interrupt-controller.yaml > /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dtb: interrupt-controller@54 (microchip,mpfs-irqmux): 'anyOf' conditional failed, one must be fixed: > 'interrupt-controller' is a required property > 'interrupt-map' is a required property > from schema $id: http://devicetree.org/schemas/interrupt-controller.yaml ...so this schema complained. But why is there a custom warning about "node is not an interrupt provider", when the conditional schema produces a warning of its own? > doc reference errors (make refcheckdocs): > > See https://patchwork.kernel.org/project/devicetree/patch/20260311-collar-smokiness-5313aa648a6f@spud > > The base for the series is generally the latest rc1. A different dependency > should be noted in *this* patch. > > If you already ran 'make dt_binding_check' and didn't see the above > error(s), then make sure 'yamllint' is installed and dt-schema is up to > date: > > pip3 install dtschema --upgrade > > Please check and re-submit after running the above command yourself. Note > that DT_SCHEMA_FILES can be set to your schema file to speed up checking > your schema. However, it must be unset to test all examples with your schema. >
On Wed, Mar 11, 2026 at 12:58 PM Conor Dooley <conor@kernel.org> wrote: > > Rob, > > On Wed, Mar 11, 2026 at 11:41:17AM -0500, Rob Herring (Arm) wrote: > > > > On Wed, 11 Mar 2026 15:17:39 +0000, Conor Dooley wrote: > > > From: Conor Dooley <conor.dooley@microchip.com> > > > > > > On PolarFire SoC there are more GPIO interrupts than there are interrupt > > > lines available on the PLIC, and a runtime configurable mux is used to > > > decide which interrupts are assigned direct connections to the PLIC & > > > which are relegated to sharing a line. > > > > > > Reviewed-by: Herve Codina <herve.codina@bootlin.com> > > > Signed-off-by: Conor Dooley <conor.dooley@microchip.com> > > > --- > > > .../soc/microchip/microchip,mpfs-irqmux.yaml | 77 +++++++++++++++++++ > > > .../microchip,mpfs-mss-top-sysreg.yaml | 4 + > > > 2 files changed, 81 insertions(+) > > > create mode 100644 Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.yaml > > > > > > > My bot found errors running 'make dt_binding_check' on your patch: > > AAAAAAAAA, goddammit. I forgot there was a reason why I had not just > sent off the new version of the series. Providing reviews of bindings entitles you to free testing of your patches. :) > > yamllint warnings/errors: > > > > dtschema/dtc warnings/errors: > > Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dts:18.33-24.11: Warning (interrupt_provider): /example-0/interrupt-controller@54: '#interrupt-cells' found, but node is not an interrupt provider > > Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dtb: Warning (interrupt_map): Failed prerequisite 'interrupt_provider' > > I wanted to ask about this Rob, I wasn't sure I fully understood it. > I figured it was because... > > > > /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dtb: interrupt-controller@54 (microchip,mpfs-irqmux): 'interrupt-map' is a required property > > from schema $id: http://devicetree.org/schemas/soc/microchip/microchip,mpfs-irqmux.yaml > > ...I had not added the interrupt-map yet... Yes. > > /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dtb: interrupt-controller@54 (microchip,mpfs-irqmux): 'interrupt-map' is a dependency of 'interrupt-map-mask' > > from schema $id: http://devicetree.org/schemas/interrupt-controller.yaml > > /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/soc/microchip/microchip,mpfs-irqmux.example.dtb: interrupt-controller@54 (microchip,mpfs-irqmux): 'anyOf' conditional failed, one must be fixed: > > 'interrupt-controller' is a required property > > 'interrupt-map' is a required property > > from schema $id: http://devicetree.org/schemas/interrupt-controller.yaml > > ...so this schema complained. But why is there a custom warning about > "node is not an interrupt provider", when the conditional schema > produces a warning of its own? The first warning is from dtc. There is some overlap with schema checks. Rob
© 2016 - 2026 Red Hat, Inc.