[PATCH v2 5/8] dt-bindings: interrupt-controller: amazon,al-fic: add mask selection

From: Eliav Farber

Date: Sun Sep 27 2026 - 04:11:54 EST


The block this driver calls a FIC is the generic Annapurna Labs interrupt
controller. It is built from groups of up to 32 triggers each; the number
of groups differs from one controller to another, and each group has its
own 0x40 register block.

A node in this binding describes one group, not a whole controller. reg
points at that group's 0x40 block, and the 32 hwirqs of the domain are
that group's triggers. A controller with several groups appears as several
nodes, and controllers cascade when a tree needs more triggers than one
controller has.

A group has one cause register and three mask registers, which decide
which output a set cause bit drives:

0x10 info mask gates the info output
0x2c error mask gates the error output
0x34 fatal mask gates the fatal output

The three outputs are aggregated into three separate interrupt trees
(info, error, fatal); mapping one event to more than one severity is
forbidden by the interrupt methodology, so a group belongs to exactly one
tree. Which output a group drives is fixed when the SoC is wired and is
not discoverable from any register, so it must be described in the
devicetree.

The error and fatal outputs, and their mask registers, exist only on
controller revisions that implement them; earlier revisions provide the
info output only. A controller reports its revision in the group control
register (bits 29-28), so the revision itself does not need to appear in
the devicetree and no per-revision compatible string is needed.

Describe which output a group drives with a new optional property,
amazon,al-fic-mask (info, error or fatal; default info).

Signed-off-by: Eliav Farber <farbere@xxxxxxxxxx>
---
v2: redesigned in response to Conor Dooley's review of v1.
- Drop the two proposed per-output compatible strings
(amazon,al-fic-error / amazon,al-fic-fatal). A node describes one group,
and a controller reports its revision in the group control register
(bits 29-28), so no per-revision or per-output compatible is needed.
- Instead add an optional amazon,al-fic-mask property (info, error, fatal;
default info) selecting which output a group drives. Existing
amazon,al-fic nodes keep behaving as before.
- Rewrite the commit message to describe the hardware and the group
granularity, and add an example fragment to the YAML, as requested.

.../interrupt-controller/amazon,al-fic.yaml | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/interrupt-controller/amazon,al-fic.yaml b/Documentation/devicetree/bindings/interrupt-controller/amazon,al-fic.yaml
index 26bc05dee0bc..1ebf9a427f2f 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/amazon,al-fic.yaml
+++ b/Documentation/devicetree/bindings/interrupt-controller/amazon,al-fic.yaml
@@ -24,6 +24,19 @@ properties:
interrupts:
maxItems: 1

+ amazon,al-fic-mask:
+ $ref: /schemas/types.yaml#/definitions/string
+ description:
+ Selects which of the controller's severity outputs this group drives,
+ and thus which mask register the driver programs. A group has one cause
+ register and three severity outputs - info, error and fatal - each
+ gated by its own mask register. Each output is aggregated into a
+ separate interrupt tree, and a group belongs to exactly one of them.
+ The error and fatal outputs exist only on controller revisions that
+ implement them; earlier revisions provide the info output only.
+ enum: [info, error, fatal]
+ default: info
+
required:
- compatible
- reg
@@ -39,8 +52,9 @@ examples:

interrupt-controller@fd8a8500 {
compatible = "amazon,al-fic";
- reg = <0xfd8a8500 0x1000>;
+ reg = <0xfd8a8500 0x40>;
interrupt-controller;
#interrupt-cells = <2>;
interrupts = <GIC_SPI 0x0 IRQ_TYPE_LEVEL_HIGH>;
+ amazon,al-fic-mask = "error";
};
--
2.47.3