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