18c2ecf20Sopenharmony_ciMarvell ICU Interrupt Controller
28c2ecf20Sopenharmony_ci--------------------------------
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ciThe Marvell ICU (Interrupt Consolidation Unit) controller is
58c2ecf20Sopenharmony_ciresponsible for collecting all wired-interrupt sources in the CP and
68c2ecf20Sopenharmony_cicommunicating them to the GIC in the AP, the unit translates interrupt
78c2ecf20Sopenharmony_cirequests on input wires to MSG memory mapped transactions to the GIC.
88c2ecf20Sopenharmony_ciThese messages will access a different GIC memory area depending on
98c2ecf20Sopenharmony_citheir type (NSR, SR, SEI, REI, etc).
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ciRequired properties:
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci- compatible: Should be "marvell,cp110-icu"
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci- reg: Should contain ICU registers location and length.
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ciSubnodes: Each group of interrupt is declared as a subnode of the ICU,
188c2ecf20Sopenharmony_ciwith their own compatible.
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ciRequired properties for the icu_nsr/icu_sei subnodes:
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci- compatible: Should be one of:
238c2ecf20Sopenharmony_ci              * "marvell,cp110-icu-nsr"
248c2ecf20Sopenharmony_ci	      * "marvell,cp110-icu-sr"
258c2ecf20Sopenharmony_ci	      * "marvell,cp110-icu-sei"
268c2ecf20Sopenharmony_ci	      * "marvell,cp110-icu-rei"
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci- #interrupt-cells: Specifies the number of cells needed to encode an
298c2ecf20Sopenharmony_ci  interrupt source. The value shall be 2.
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci  The 1st cell is the index of the interrupt in the ICU unit.
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci  The 2nd cell is the type of the interrupt. See arm,gic.txt for
348c2ecf20Sopenharmony_ci  details.
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci- interrupt-controller: Identifies the node as an interrupt
378c2ecf20Sopenharmony_ci  controller.
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci- msi-parent: Should point to the GICP controller, the GIC extension
408c2ecf20Sopenharmony_ci  that allows to trigger interrupts using MSG memory mapped
418c2ecf20Sopenharmony_ci  transactions.
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ciNote: each 'interrupts' property referring to any 'icu_xxx' node shall
448c2ecf20Sopenharmony_ci      have a different number within [0:206].
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ciExample:
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ciicu: interrupt-controller@1e0000 {
498c2ecf20Sopenharmony_ci	compatible = "marvell,cp110-icu";
508c2ecf20Sopenharmony_ci	reg = <0x1e0000 0x440>;
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci	CP110_LABEL(icu_nsr): interrupt-controller@10 {
538c2ecf20Sopenharmony_ci		compatible = "marvell,cp110-icu-nsr";
548c2ecf20Sopenharmony_ci		reg = <0x10 0x20>;
558c2ecf20Sopenharmony_ci		#interrupt-cells = <2>;
568c2ecf20Sopenharmony_ci		interrupt-controller;
578c2ecf20Sopenharmony_ci		msi-parent = <&gicp>;
588c2ecf20Sopenharmony_ci	};
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci	CP110_LABEL(icu_sei): interrupt-controller@50 {
618c2ecf20Sopenharmony_ci		compatible = "marvell,cp110-icu-sei";
628c2ecf20Sopenharmony_ci		reg = <0x50 0x10>;
638c2ecf20Sopenharmony_ci		#interrupt-cells = <2>;
648c2ecf20Sopenharmony_ci		interrupt-controller;
658c2ecf20Sopenharmony_ci		msi-parent = <&sei>;
668c2ecf20Sopenharmony_ci	};
678c2ecf20Sopenharmony_ci};
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_cinode1 {
708c2ecf20Sopenharmony_ci	interrupt-parent = <&icu_nsr>;
718c2ecf20Sopenharmony_ci	interrupts = <106 IRQ_TYPE_LEVEL_HIGH>;
728c2ecf20Sopenharmony_ci};
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_cinode2 {
758c2ecf20Sopenharmony_ci	interrupt-parent = <&icu_sei>;
768c2ecf20Sopenharmony_ci	interrupts = <107 IRQ_TYPE_LEVEL_HIGH>;
778c2ecf20Sopenharmony_ci};
788c2ecf20Sopenharmony_ci
798c2ecf20Sopenharmony_ci/* Would not work with the above nodes */
808c2ecf20Sopenharmony_cinode3 {
818c2ecf20Sopenharmony_ci	interrupt-parent = <&icu_nsr>;
828c2ecf20Sopenharmony_ci	interrupts = <107 IRQ_TYPE_LEVEL_HIGH>;
838c2ecf20Sopenharmony_ci};
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_ciThe legacy bindings were different in this way:
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ci- #interrupt-cells: The value was 3.
888c2ecf20Sopenharmony_ci	The 1st cell was the group type of the ICU interrupt. Possible
898c2ecf20Sopenharmony_ci	group types were:
908c2ecf20Sopenharmony_ci	ICU_GRP_NSR (0x0) : Shared peripheral interrupt, non-secure
918c2ecf20Sopenharmony_ci	ICU_GRP_SR  (0x1) : Shared peripheral interrupt, secure
928c2ecf20Sopenharmony_ci	ICU_GRP_SEI (0x4) : System error interrupt
938c2ecf20Sopenharmony_ci	ICU_GRP_REI (0x5) : RAM error interrupt
948c2ecf20Sopenharmony_ci	The 2nd cell was the index of the interrupt in the ICU unit.
958c2ecf20Sopenharmony_ci	The 3rd cell was the type of the interrupt. See arm,gic.txt for
968c2ecf20Sopenharmony_ci	details.
978c2ecf20Sopenharmony_ci
988c2ecf20Sopenharmony_ciExample:
998c2ecf20Sopenharmony_ci
1008c2ecf20Sopenharmony_ciicu: interrupt-controller@1e0000 {
1018c2ecf20Sopenharmony_ci	compatible = "marvell,cp110-icu";
1028c2ecf20Sopenharmony_ci	reg = <0x1e0000 0x440>;
1038c2ecf20Sopenharmony_ci
1048c2ecf20Sopenharmony_ci	#interrupt-cells = <3>;
1058c2ecf20Sopenharmony_ci	interrupt-controller;
1068c2ecf20Sopenharmony_ci	msi-parent = <&gicp>;
1078c2ecf20Sopenharmony_ci};
1088c2ecf20Sopenharmony_ci
1098c2ecf20Sopenharmony_cinode1 {
1108c2ecf20Sopenharmony_ci	interrupt-parent = <&icu>;
1118c2ecf20Sopenharmony_ci	interrupts = <ICU_GRP_NSR 106 IRQ_TYPE_LEVEL_HIGH>;
1128c2ecf20Sopenharmony_ci};
113