1 Marvell ICU Interrupt Controller 1 Marvell ICU Interrupt Controller 2 -------------------------------- 2 -------------------------------- 3 3 4 The Marvell ICU (Interrupt Consolidation Unit) 4 The Marvell ICU (Interrupt Consolidation Unit) controller is 5 responsible for collecting all wired-interrupt 5 responsible for collecting all wired-interrupt sources in the CP and 6 communicating them to the GIC in the AP, the u 6 communicating them to the GIC in the AP, the unit translates interrupt 7 requests on input wires to MSG memory mapped t 7 requests on input wires to MSG memory mapped transactions to the GIC. 8 These messages will access a different GIC mem 8 These messages will access a different GIC memory area depending on 9 their type (NSR, SR, SEI, REI, etc). 9 their type (NSR, SR, SEI, REI, etc). 10 10 11 Required properties: 11 Required properties: 12 12 13 - compatible: Should be "marvell,cp110-icu" 13 - compatible: Should be "marvell,cp110-icu" 14 14 15 - reg: Should contain ICU registers location a 15 - reg: Should contain ICU registers location and length. 16 16 17 Subnodes: Each group of interrupt is declared 17 Subnodes: Each group of interrupt is declared as a subnode of the ICU, 18 with their own compatible. 18 with their own compatible. 19 19 20 Required properties for the icu_nsr/icu_sei su 20 Required properties for the icu_nsr/icu_sei subnodes: 21 21 22 - compatible: Should be one of: 22 - compatible: Should be one of: 23 * "marvell,cp110-icu-nsr" 23 * "marvell,cp110-icu-nsr" 24 * "marvell,cp110-icu-sr" 24 * "marvell,cp110-icu-sr" 25 * "marvell,cp110-icu-sei" 25 * "marvell,cp110-icu-sei" 26 * "marvell,cp110-icu-rei" 26 * "marvell,cp110-icu-rei" 27 27 28 - #interrupt-cells: Specifies the number of ce 28 - #interrupt-cells: Specifies the number of cells needed to encode an 29 interrupt source. The value shall be 2. 29 interrupt source. The value shall be 2. 30 30 31 The 1st cell is the index of the interrupt i 31 The 1st cell is the index of the interrupt in the ICU unit. 32 32 33 The 2nd cell is the type of the interrupt. S 33 The 2nd cell is the type of the interrupt. See arm,gic.txt for 34 details. 34 details. 35 35 36 - interrupt-controller: Identifies the node as 36 - interrupt-controller: Identifies the node as an interrupt 37 controller. 37 controller. 38 38 39 - msi-parent: Should point to the GICP control 39 - msi-parent: Should point to the GICP controller, the GIC extension 40 that allows to trigger interrupts using MSG 40 that allows to trigger interrupts using MSG memory mapped 41 transactions. 41 transactions. 42 42 43 Note: each 'interrupts' property referring to 43 Note: each 'interrupts' property referring to any 'icu_xxx' node shall 44 have a different number within [0:206]. 44 have a different number within [0:206]. 45 45 46 Example: 46 Example: 47 47 48 icu: interrupt-controller@1e0000 { 48 icu: interrupt-controller@1e0000 { 49 compatible = "marvell,cp110-icu"; 49 compatible = "marvell,cp110-icu"; 50 reg = <0x1e0000 0x440>; 50 reg = <0x1e0000 0x440>; 51 51 52 CP110_LABEL(icu_nsr): interrupt-contro 52 CP110_LABEL(icu_nsr): interrupt-controller@10 { 53 compatible = "marvell,cp110-ic 53 compatible = "marvell,cp110-icu-nsr"; 54 reg = <0x10 0x20>; 54 reg = <0x10 0x20>; 55 #interrupt-cells = <2>; 55 #interrupt-cells = <2>; 56 interrupt-controller; 56 interrupt-controller; 57 msi-parent = <&gicp>; 57 msi-parent = <&gicp>; 58 }; 58 }; 59 59 60 CP110_LABEL(icu_sei): interrupt-contro 60 CP110_LABEL(icu_sei): interrupt-controller@50 { 61 compatible = "marvell,cp110-ic 61 compatible = "marvell,cp110-icu-sei"; 62 reg = <0x50 0x10>; 62 reg = <0x50 0x10>; 63 #interrupt-cells = <2>; 63 #interrupt-cells = <2>; 64 interrupt-controller; 64 interrupt-controller; 65 msi-parent = <&sei>; 65 msi-parent = <&sei>; 66 }; 66 }; 67 }; 67 }; 68 68 69 node1 { 69 node1 { 70 interrupt-parent = <&icu_nsr>; 70 interrupt-parent = <&icu_nsr>; 71 interrupts = <106 IRQ_TYPE_LEVEL_HIGH> 71 interrupts = <106 IRQ_TYPE_LEVEL_HIGH>; 72 }; 72 }; 73 73 74 node2 { 74 node2 { 75 interrupt-parent = <&icu_sei>; 75 interrupt-parent = <&icu_sei>; 76 interrupts = <107 IRQ_TYPE_LEVEL_HIGH> 76 interrupts = <107 IRQ_TYPE_LEVEL_HIGH>; 77 }; 77 }; 78 78 79 /* Would not work with the above nodes */ 79 /* Would not work with the above nodes */ 80 node3 { 80 node3 { 81 interrupt-parent = <&icu_nsr>; 81 interrupt-parent = <&icu_nsr>; 82 interrupts = <107 IRQ_TYPE_LEVEL_HIGH> 82 interrupts = <107 IRQ_TYPE_LEVEL_HIGH>; 83 }; 83 }; 84 84 85 The legacy bindings were different in this way 85 The legacy bindings were different in this way: 86 86 87 - #interrupt-cells: The value was 3. 87 - #interrupt-cells: The value was 3. 88 The 1st cell was the group type of the 88 The 1st cell was the group type of the ICU interrupt. Possible 89 group types were: 89 group types were: 90 ICU_GRP_NSR (0x0) : Shared peripheral 90 ICU_GRP_NSR (0x0) : Shared peripheral interrupt, non-secure 91 ICU_GRP_SR (0x1) : Shared peripheral 91 ICU_GRP_SR (0x1) : Shared peripheral interrupt, secure 92 ICU_GRP_SEI (0x4) : System error inter 92 ICU_GRP_SEI (0x4) : System error interrupt 93 ICU_GRP_REI (0x5) : RAM error interrup 93 ICU_GRP_REI (0x5) : RAM error interrupt 94 The 2nd cell was the index of the inte 94 The 2nd cell was the index of the interrupt in the ICU unit. 95 The 3rd cell was the type of the inter 95 The 3rd cell was the type of the interrupt. See arm,gic.txt for 96 details. 96 details. 97 97 98 Example: 98 Example: 99 99 100 icu: interrupt-controller@1e0000 { 100 icu: interrupt-controller@1e0000 { 101 compatible = "marvell,cp110-icu"; 101 compatible = "marvell,cp110-icu"; 102 reg = <0x1e0000 0x440>; 102 reg = <0x1e0000 0x440>; 103 103 104 #interrupt-cells = <3>; 104 #interrupt-cells = <3>; 105 interrupt-controller; 105 interrupt-controller; 106 msi-parent = <&gicp>; 106 msi-parent = <&gicp>; 107 }; 107 }; 108 108 109 node1 { 109 node1 { 110 interrupt-parent = <&icu>; 110 interrupt-parent = <&icu>; 111 interrupts = <ICU_GRP_NSR 106 IRQ_TYPE 111 interrupts = <ICU_GRP_NSR 106 IRQ_TYPE_LEVEL_HIGH>; 112 }; 112 };
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.