xref: /linux/Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml (revision dba07ad11384d6a4ece4acda1fbe726222ca7ad0)
1f531d25bSHector Martin# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2f531d25bSHector Martin%YAML 1.2
3f531d25bSHector Martin---
4f531d25bSHector Martin$id: http://devicetree.org/schemas/interrupt-controller/apple,aic.yaml#
5f531d25bSHector Martin$schema: http://devicetree.org/meta-schemas/core.yaml#
6f531d25bSHector Martin
7f531d25bSHector Martintitle: Apple Interrupt Controller
8f531d25bSHector Martin
9f531d25bSHector Martinmaintainers:
10f531d25bSHector Martin  - Hector Martin <marcan@marcan.st>
11f531d25bSHector Martin
12f531d25bSHector Martindescription: |
13f531d25bSHector Martin  The Apple Interrupt Controller is a simple interrupt controller present on
14f531d25bSHector Martin  Apple ARM SoC platforms, including various iPhone and iPad devices and the
15f531d25bSHector Martin  "Apple Silicon" Macs.
16f531d25bSHector Martin
17f531d25bSHector Martin  It provides the following features:
18f531d25bSHector Martin
19f531d25bSHector Martin  - Level-triggered hardware IRQs wired to SoC blocks
20f531d25bSHector Martin    - Single mask bit per IRQ
21f531d25bSHector Martin    - Per-IRQ affinity setting
22f531d25bSHector Martin    - Automatic masking on event delivery (auto-ack)
23f531d25bSHector Martin    - Software triggering (ORed with hw line)
24f531d25bSHector Martin  - 2 per-CPU IPIs (meant as "self" and "other", but they are interchangeable
25f531d25bSHector Martin    if not symmetric)
26f531d25bSHector Martin  - Automatic prioritization (single event/ack register per CPU, lower IRQs =
27f531d25bSHector Martin    higher priority)
28f531d25bSHector Martin  - Automatic masking on ack
29f531d25bSHector Martin  - Default "this CPU" register view and explicit per-CPU views
30f531d25bSHector Martin
31f531d25bSHector Martin  This device also represents the FIQ interrupt sources on platforms using AIC,
32f531d25bSHector Martin  which do not go through a discrete interrupt controller.
33f531d25bSHector Martin
34f531d25bSHector MartinallOf:
35f531d25bSHector Martin  - $ref: /schemas/interrupt-controller.yaml#
36f531d25bSHector Martin
37f531d25bSHector Martinproperties:
38f531d25bSHector Martin  compatible:
39f531d25bSHector Martin    items:
40f531d25bSHector Martin      - const: apple,t8103-aic
41f531d25bSHector Martin      - const: apple,aic
42f531d25bSHector Martin
43f531d25bSHector Martin  interrupt-controller: true
44f531d25bSHector Martin
45f531d25bSHector Martin  '#interrupt-cells':
46f531d25bSHector Martin    const: 3
47f531d25bSHector Martin    description: |
48f531d25bSHector Martin      The 1st cell contains the interrupt type:
49f531d25bSHector Martin        - 0: Hardware IRQ
50f531d25bSHector Martin        - 1: FIQ
51f531d25bSHector Martin
52f531d25bSHector Martin      The 2nd cell contains the interrupt number.
53f531d25bSHector Martin        - HW IRQs: interrupt number
54f531d25bSHector Martin        - FIQs:
55f531d25bSHector Martin          - 0: physical HV timer
56f531d25bSHector Martin          - 1: virtual HV timer
57f531d25bSHector Martin          - 2: physical guest timer
58f531d25bSHector Martin          - 3: virtual guest timer
5974703b13SMarc Zyngier          - 4: 'efficient' CPU PMU
6074703b13SMarc Zyngier          - 5: 'performance' CPU PMU
61f531d25bSHector Martin
62f531d25bSHector Martin      The 3rd cell contains the interrupt flags. This is normally
63f531d25bSHector Martin      IRQ_TYPE_LEVEL_HIGH (4).
64f531d25bSHector Martin
65f531d25bSHector Martin  reg:
66f531d25bSHector Martin    description: |
67f531d25bSHector Martin      Specifies base physical address and size of the AIC registers.
68f531d25bSHector Martin    maxItems: 1
69f531d25bSHector Martin
7072baffddSHector Martin  power-domains:
7172baffddSHector Martin    maxItems: 1
7272baffddSHector Martin
73*dba07ad1SMarc Zyngier  affinities:
74*dba07ad1SMarc Zyngier    type: object
75*dba07ad1SMarc Zyngier    additionalProperties: false
76*dba07ad1SMarc Zyngier    description:
77*dba07ad1SMarc Zyngier      FIQ affinity can be expressed as a single "affinities" node,
78*dba07ad1SMarc Zyngier      containing a set of sub-nodes, one per FIQ with a non-default
79*dba07ad1SMarc Zyngier      affinity.
80*dba07ad1SMarc Zyngier    patternProperties:
81*dba07ad1SMarc Zyngier      "^.+-affinity$":
82*dba07ad1SMarc Zyngier        type: object
83*dba07ad1SMarc Zyngier        additionalProperties: false
84*dba07ad1SMarc Zyngier        properties:
85*dba07ad1SMarc Zyngier          apple,fiq-index:
86*dba07ad1SMarc Zyngier            description:
87*dba07ad1SMarc Zyngier              The interrupt number specified as a FIQ, and for which
88*dba07ad1SMarc Zyngier              the affinity is not the default.
89*dba07ad1SMarc Zyngier            $ref: /schemas/types.yaml#/definitions/uint32
90*dba07ad1SMarc Zyngier            maximum: 5
91*dba07ad1SMarc Zyngier
92*dba07ad1SMarc Zyngier          cpus:
93*dba07ad1SMarc Zyngier            $ref: /schemas/types.yaml#/definitions/phandle-array
94*dba07ad1SMarc Zyngier            description:
95*dba07ad1SMarc Zyngier              Should be a list of phandles to CPU nodes (as described in
96*dba07ad1SMarc Zyngier              Documentation/devicetree/bindings/arm/cpus.yaml).
97*dba07ad1SMarc Zyngier
98*dba07ad1SMarc Zyngier        required:
99*dba07ad1SMarc Zyngier          - fiq-index
100*dba07ad1SMarc Zyngier          - cpus
101*dba07ad1SMarc Zyngier
102f531d25bSHector Martinrequired:
103f531d25bSHector Martin  - compatible
104f531d25bSHector Martin  - '#interrupt-cells'
105f531d25bSHector Martin  - interrupt-controller
106f531d25bSHector Martin  - reg
107f531d25bSHector Martin
108f531d25bSHector MartinadditionalProperties: false
109f531d25bSHector Martin
110f531d25bSHector Martinexamples:
111f531d25bSHector Martin  - |
112f531d25bSHector Martin    soc {
113f531d25bSHector Martin        #address-cells = <2>;
114f531d25bSHector Martin        #size-cells = <2>;
115f531d25bSHector Martin
116f531d25bSHector Martin        aic: interrupt-controller@23b100000 {
117f531d25bSHector Martin            compatible = "apple,t8103-aic", "apple,aic";
118f531d25bSHector Martin            #interrupt-cells = <3>;
119f531d25bSHector Martin            interrupt-controller;
120f531d25bSHector Martin            reg = <0x2 0x3b100000 0x0 0x8000>;
121f531d25bSHector Martin        };
122f531d25bSHector Martin    };
123