xref: /freebsd-src/sys/contrib/device-tree/Bindings/interrupt-controller/apple,aic2.yaml (revision fac71e4e09885bb2afa3d984a0c239a52e1a7418)
1c9ccf3a3SEmmanuel Vadot# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2c9ccf3a3SEmmanuel Vadot%YAML 1.2
3c9ccf3a3SEmmanuel Vadot---
4c9ccf3a3SEmmanuel Vadot$id: http://devicetree.org/schemas/interrupt-controller/apple,aic2.yaml#
5c9ccf3a3SEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
6c9ccf3a3SEmmanuel Vadot
7c9ccf3a3SEmmanuel Vadottitle: Apple Interrupt Controller 2
8c9ccf3a3SEmmanuel Vadot
9c9ccf3a3SEmmanuel Vadotmaintainers:
10c9ccf3a3SEmmanuel Vadot  - Hector Martin <marcan@marcan.st>
11c9ccf3a3SEmmanuel Vadot
12c9ccf3a3SEmmanuel Vadotdescription: |
13c9ccf3a3SEmmanuel Vadot  The Apple Interrupt Controller 2 is a simple interrupt controller present on
14c9ccf3a3SEmmanuel Vadot  Apple ARM SoC platforms starting with t600x (M1 Pro and Max).
15c9ccf3a3SEmmanuel Vadot
16c9ccf3a3SEmmanuel Vadot  It provides the following features:
17c9ccf3a3SEmmanuel Vadot
18c9ccf3a3SEmmanuel Vadot  - Level-triggered hardware IRQs wired to SoC blocks
19c9ccf3a3SEmmanuel Vadot    - Single mask bit per IRQ
20c9ccf3a3SEmmanuel Vadot    - Automatic masking on event delivery (auto-ack)
21c9ccf3a3SEmmanuel Vadot    - Software triggering (ORed with hw line)
22c9ccf3a3SEmmanuel Vadot  - Automatic prioritization (single event/ack register per CPU, lower IRQs =
23c9ccf3a3SEmmanuel Vadot    higher priority)
24c9ccf3a3SEmmanuel Vadot  - Automatic masking on ack
25c9ccf3a3SEmmanuel Vadot  - Support for multiple dies
26c9ccf3a3SEmmanuel Vadot
27c9ccf3a3SEmmanuel Vadot  This device also represents the FIQ interrupt sources on platforms using AIC,
28c9ccf3a3SEmmanuel Vadot  which do not go through a discrete interrupt controller. It also handles
29c9ccf3a3SEmmanuel Vadot  FIQ-based Fast IPIs.
30c9ccf3a3SEmmanuel Vadot
31c9ccf3a3SEmmanuel Vadotproperties:
32c9ccf3a3SEmmanuel Vadot  compatible:
33c9ccf3a3SEmmanuel Vadot    items:
34*fac71e4eSEmmanuel Vadot      - enum:
35*fac71e4eSEmmanuel Vadot          - apple,t8112-aic
36*fac71e4eSEmmanuel Vadot          - apple,t6000-aic
37c9ccf3a3SEmmanuel Vadot      - const: apple,aic2
38c9ccf3a3SEmmanuel Vadot
39c9ccf3a3SEmmanuel Vadot  interrupt-controller: true
40c9ccf3a3SEmmanuel Vadot
41c9ccf3a3SEmmanuel Vadot  '#interrupt-cells':
42*fac71e4eSEmmanuel Vadot    minimum: 3
43*fac71e4eSEmmanuel Vadot    maximum: 4
44c9ccf3a3SEmmanuel Vadot    description: |
45c9ccf3a3SEmmanuel Vadot      The 1st cell contains the interrupt type:
46c9ccf3a3SEmmanuel Vadot        - 0: Hardware IRQ
47c9ccf3a3SEmmanuel Vadot        - 1: FIQ
48c9ccf3a3SEmmanuel Vadot
49*fac71e4eSEmmanuel Vadot      The 2nd cell contains the die ID (only present on apple,t6000-aic).
50c9ccf3a3SEmmanuel Vadot
51c9ccf3a3SEmmanuel Vadot      The next cell contains the interrupt number.
52c9ccf3a3SEmmanuel Vadot        - HW IRQs: interrupt number
53c9ccf3a3SEmmanuel Vadot        - FIQs:
54c9ccf3a3SEmmanuel Vadot          - 0: physical HV timer
55c9ccf3a3SEmmanuel Vadot          - 1: virtual HV timer
56c9ccf3a3SEmmanuel Vadot          - 2: physical guest timer
57c9ccf3a3SEmmanuel Vadot          - 3: virtual guest timer
58c9ccf3a3SEmmanuel Vadot
59c9ccf3a3SEmmanuel Vadot      The last cell contains the interrupt flags. This is normally
60c9ccf3a3SEmmanuel Vadot      IRQ_TYPE_LEVEL_HIGH (4).
61c9ccf3a3SEmmanuel Vadot
62c9ccf3a3SEmmanuel Vadot  reg:
63c9ccf3a3SEmmanuel Vadot    items:
64c9ccf3a3SEmmanuel Vadot      - description: Address and size of the main AIC2 registers.
65c9ccf3a3SEmmanuel Vadot      - description: Address and size of the AIC2 Event register.
66c9ccf3a3SEmmanuel Vadot
67c9ccf3a3SEmmanuel Vadot  reg-names:
68c9ccf3a3SEmmanuel Vadot    items:
69c9ccf3a3SEmmanuel Vadot      - const: core
70c9ccf3a3SEmmanuel Vadot      - const: event
71c9ccf3a3SEmmanuel Vadot
72c9ccf3a3SEmmanuel Vadot  power-domains:
73c9ccf3a3SEmmanuel Vadot    maxItems: 1
74c9ccf3a3SEmmanuel Vadot
758bab661aSEmmanuel Vadot  affinities:
768bab661aSEmmanuel Vadot    type: object
778bab661aSEmmanuel Vadot    additionalProperties: false
788bab661aSEmmanuel Vadot    description:
798bab661aSEmmanuel Vadot      FIQ affinity can be expressed as a single "affinities" node,
808bab661aSEmmanuel Vadot      containing a set of sub-nodes, one per FIQ with a non-default
818bab661aSEmmanuel Vadot      affinity.
828bab661aSEmmanuel Vadot    patternProperties:
838bab661aSEmmanuel Vadot      "^.+-affinity$":
848bab661aSEmmanuel Vadot        type: object
858bab661aSEmmanuel Vadot        additionalProperties: false
868bab661aSEmmanuel Vadot        properties:
878bab661aSEmmanuel Vadot          apple,fiq-index:
888bab661aSEmmanuel Vadot            description:
898bab661aSEmmanuel Vadot              The interrupt number specified as a FIQ, and for which
908bab661aSEmmanuel Vadot              the affinity is not the default.
918bab661aSEmmanuel Vadot            $ref: /schemas/types.yaml#/definitions/uint32
928bab661aSEmmanuel Vadot            maximum: 5
938bab661aSEmmanuel Vadot
948bab661aSEmmanuel Vadot          cpus:
958bab661aSEmmanuel Vadot            $ref: /schemas/types.yaml#/definitions/phandle-array
968bab661aSEmmanuel Vadot            description:
978bab661aSEmmanuel Vadot              Should be a list of phandles to CPU nodes (as described in
988bab661aSEmmanuel Vadot              Documentation/devicetree/bindings/arm/cpus.yaml).
998bab661aSEmmanuel Vadot
1008bab661aSEmmanuel Vadot        required:
1018bab661aSEmmanuel Vadot          - apple,fiq-index
1028bab661aSEmmanuel Vadot          - cpus
1038bab661aSEmmanuel Vadot
104c9ccf3a3SEmmanuel Vadotrequired:
105c9ccf3a3SEmmanuel Vadot  - compatible
106c9ccf3a3SEmmanuel Vadot  - '#interrupt-cells'
107c9ccf3a3SEmmanuel Vadot  - interrupt-controller
108c9ccf3a3SEmmanuel Vadot  - reg
109c9ccf3a3SEmmanuel Vadot  - reg-names
110c9ccf3a3SEmmanuel Vadot
111c9ccf3a3SEmmanuel VadotadditionalProperties: false
112c9ccf3a3SEmmanuel Vadot
113c9ccf3a3SEmmanuel VadotallOf:
114c9ccf3a3SEmmanuel Vadot  - $ref: /schemas/interrupt-controller.yaml#
115*fac71e4eSEmmanuel Vadot  - if:
116*fac71e4eSEmmanuel Vadot      properties:
117*fac71e4eSEmmanuel Vadot        compatible:
118*fac71e4eSEmmanuel Vadot          contains:
119*fac71e4eSEmmanuel Vadot            const: apple,t8112-aic
120*fac71e4eSEmmanuel Vadot    then:
121*fac71e4eSEmmanuel Vadot      properties:
122*fac71e4eSEmmanuel Vadot        '#interrupt-cells':
123*fac71e4eSEmmanuel Vadot          const: 3
124*fac71e4eSEmmanuel Vadot    else:
125*fac71e4eSEmmanuel Vadot      properties:
126*fac71e4eSEmmanuel Vadot        '#interrupt-cells':
127*fac71e4eSEmmanuel Vadot          const: 4
128c9ccf3a3SEmmanuel Vadot
129c9ccf3a3SEmmanuel Vadotexamples:
130c9ccf3a3SEmmanuel Vadot  - |
131c9ccf3a3SEmmanuel Vadot    soc {
132c9ccf3a3SEmmanuel Vadot        #address-cells = <2>;
133c9ccf3a3SEmmanuel Vadot        #size-cells = <2>;
134c9ccf3a3SEmmanuel Vadot
135c9ccf3a3SEmmanuel Vadot        aic: interrupt-controller@28e100000 {
136c9ccf3a3SEmmanuel Vadot            compatible = "apple,t6000-aic", "apple,aic2";
137c9ccf3a3SEmmanuel Vadot            #interrupt-cells = <4>;
138c9ccf3a3SEmmanuel Vadot            interrupt-controller;
139c9ccf3a3SEmmanuel Vadot            reg = <0x2 0x8e100000 0x0 0xc000>,
140c9ccf3a3SEmmanuel Vadot                  <0x2 0x8e10c000 0x0 0x4>;
141c9ccf3a3SEmmanuel Vadot            reg-names = "core", "event";
142c9ccf3a3SEmmanuel Vadot        };
143c9ccf3a3SEmmanuel Vadot    };
144