xref: /linux/Documentation/devicetree/bindings/interrupt-controller/marvell,icu.txt (revision 3eb66e91a25497065c5322b1268cbc3953642227)
1f39a29bbSThomas PetazzoniMarvell ICU Interrupt Controller
2f39a29bbSThomas Petazzoni--------------------------------
3f39a29bbSThomas Petazzoni
4f39a29bbSThomas PetazzoniThe Marvell ICU (Interrupt Consolidation Unit) controller is
5f39a29bbSThomas Petazzoniresponsible for collecting all wired-interrupt sources in the CP and
6f39a29bbSThomas Petazzonicommunicating them to the GIC in the AP, the unit translates interrupt
7f39a29bbSThomas Petazzonirequests on input wires to MSG memory mapped transactions to the GIC.
8*548ce815SMiquel RaynalThese messages will access a different GIC memory area depending on
9*548ce815SMiquel Raynaltheir type (NSR, SR, SEI, REI, etc).
10f39a29bbSThomas Petazzoni
11f39a29bbSThomas PetazzoniRequired properties:
12f39a29bbSThomas Petazzoni
13f39a29bbSThomas Petazzoni- compatible: Should be "marvell,cp110-icu"
14f39a29bbSThomas Petazzoni
15f39a29bbSThomas Petazzoni- reg: Should contain ICU registers location and length.
16f39a29bbSThomas Petazzoni
17*548ce815SMiquel RaynalSubnodes: Each group of interrupt is declared as a subnode of the ICU,
18*548ce815SMiquel Raynalwith their own compatible.
19*548ce815SMiquel Raynal
20*548ce815SMiquel RaynalRequired properties for the icu_nsr/icu_sei subnodes:
21*548ce815SMiquel Raynal
22*548ce815SMiquel Raynal- compatible: Should be one of:
23*548ce815SMiquel Raynal              * "marvell,cp110-icu-nsr"
24*548ce815SMiquel Raynal	      * "marvell,cp110-icu-sr"
25*548ce815SMiquel Raynal	      * "marvell,cp110-icu-sei"
26*548ce815SMiquel Raynal	      * "marvell,cp110-icu-rei"
27*548ce815SMiquel Raynal
28f39a29bbSThomas Petazzoni- #interrupt-cells: Specifies the number of cells needed to encode an
29*548ce815SMiquel Raynal  interrupt source. The value shall be 2.
30f39a29bbSThomas Petazzoni
31*548ce815SMiquel Raynal  The 1st cell is the index of the interrupt in the ICU unit.
32f39a29bbSThomas Petazzoni
33*548ce815SMiquel Raynal  The 2nd cell is the type of the interrupt. See arm,gic.txt for
34f39a29bbSThomas Petazzoni  details.
35f39a29bbSThomas Petazzoni
36f39a29bbSThomas Petazzoni- interrupt-controller: Identifies the node as an interrupt
37f39a29bbSThomas Petazzoni  controller.
38f39a29bbSThomas Petazzoni
39f39a29bbSThomas Petazzoni- msi-parent: Should point to the GICP controller, the GIC extension
40f39a29bbSThomas Petazzoni  that allows to trigger interrupts using MSG memory mapped
41f39a29bbSThomas Petazzoni  transactions.
42f39a29bbSThomas Petazzoni
43*548ce815SMiquel RaynalNote: each 'interrupts' property referring to any 'icu_xxx' node shall
44*548ce815SMiquel Raynal      have a different number within [0:206].
45*548ce815SMiquel Raynal
46f39a29bbSThomas PetazzoniExample:
47f39a29bbSThomas Petazzoni
48f39a29bbSThomas Petazzoniicu: interrupt-controller@1e0000 {
49f39a29bbSThomas Petazzoni	compatible = "marvell,cp110-icu";
50018ea847SMiquel Raynal	reg = <0x1e0000 0x440>;
51*548ce815SMiquel Raynal
52*548ce815SMiquel Raynal	CP110_LABEL(icu_nsr): interrupt-controller@10 {
53*548ce815SMiquel Raynal		compatible = "marvell,cp110-icu-nsr";
54*548ce815SMiquel Raynal		reg = <0x10 0x20>;
55*548ce815SMiquel Raynal		#interrupt-cells = <2>;
56*548ce815SMiquel Raynal		interrupt-controller;
57*548ce815SMiquel Raynal		msi-parent = <&gicp>;
58*548ce815SMiquel Raynal	};
59*548ce815SMiquel Raynal
60*548ce815SMiquel Raynal	CP110_LABEL(icu_sei): interrupt-controller@50 {
61*548ce815SMiquel Raynal		compatible = "marvell,cp110-icu-sei";
62*548ce815SMiquel Raynal		reg = <0x50 0x10>;
63*548ce815SMiquel Raynal		#interrupt-cells = <2>;
64*548ce815SMiquel Raynal		interrupt-controller;
65*548ce815SMiquel Raynal		msi-parent = <&sei>;
66*548ce815SMiquel Raynal	};
67*548ce815SMiquel Raynal};
68*548ce815SMiquel Raynal
69*548ce815SMiquel Raynalnode1 {
70*548ce815SMiquel Raynal	interrupt-parent = <&icu_nsr>;
71*548ce815SMiquel Raynal	interrupts = <106 IRQ_TYPE_LEVEL_HIGH>;
72*548ce815SMiquel Raynal};
73*548ce815SMiquel Raynal
74*548ce815SMiquel Raynalnode2 {
75*548ce815SMiquel Raynal	interrupt-parent = <&icu_sei>;
76*548ce815SMiquel Raynal	interrupts = <107 IRQ_TYPE_LEVEL_HIGH>;
77*548ce815SMiquel Raynal};
78*548ce815SMiquel Raynal
79*548ce815SMiquel Raynal/* Would not work with the above nodes */
80*548ce815SMiquel Raynalnode3 {
81*548ce815SMiquel Raynal	interrupt-parent = <&icu_nsr>;
82*548ce815SMiquel Raynal	interrupts = <107 IRQ_TYPE_LEVEL_HIGH>;
83*548ce815SMiquel Raynal};
84*548ce815SMiquel Raynal
85*548ce815SMiquel RaynalThe legacy bindings were different in this way:
86*548ce815SMiquel Raynal
87*548ce815SMiquel Raynal- #interrupt-cells: The value was 3.
88*548ce815SMiquel Raynal	The 1st cell was the group type of the ICU interrupt. Possible
89*548ce815SMiquel Raynal	group types were:
90*548ce815SMiquel Raynal	ICU_GRP_NSR (0x0) : Shared peripheral interrupt, non-secure
91*548ce815SMiquel Raynal	ICU_GRP_SR  (0x1) : Shared peripheral interrupt, secure
92*548ce815SMiquel Raynal	ICU_GRP_SEI (0x4) : System error interrupt
93*548ce815SMiquel Raynal	ICU_GRP_REI (0x5) : RAM error interrupt
94*548ce815SMiquel Raynal	The 2nd cell was the index of the interrupt in the ICU unit.
95*548ce815SMiquel Raynal	The 3rd cell was the type of the interrupt. See arm,gic.txt for
96*548ce815SMiquel Raynal	details.
97*548ce815SMiquel Raynal
98*548ce815SMiquel RaynalExample:
99*548ce815SMiquel Raynal
100*548ce815SMiquel Raynalicu: interrupt-controller@1e0000 {
101*548ce815SMiquel Raynal	compatible = "marvell,cp110-icu";
102*548ce815SMiquel Raynal	reg = <0x1e0000 0x440>;
103*548ce815SMiquel Raynal
104f39a29bbSThomas Petazzoni	#interrupt-cells = <3>;
105f39a29bbSThomas Petazzoni	interrupt-controller;
106f39a29bbSThomas Petazzoni	msi-parent = <&gicp>;
107f39a29bbSThomas Petazzoni};
108f39a29bbSThomas Petazzoni
109*548ce815SMiquel Raynalnode1 {
110f39a29bbSThomas Petazzoni	interrupt-parent = <&icu>;
111f39a29bbSThomas Petazzoni	interrupts = <ICU_GRP_NSR 106 IRQ_TYPE_LEVEL_HIGH>;
112f39a29bbSThomas Petazzoni};
113