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