arm,gic-v3.txt 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. * ARM Generic Interrupt Controller, version 3
  2. AArch64 SMP cores are often associated with a GICv3, providing Private
  3. Peripheral Interrupts (PPI), Shared Peripheral Interrupts (SPI),
  4. Software Generated Interrupts (SGI), and Locality-specific Peripheral
  5. Interrupts (LPI).
  6. Main node required properties:
  7. - compatible : should at least contain "arm,gic-v3".
  8. - interrupt-controller : Identifies the node as an interrupt controller
  9. - #interrupt-cells : Specifies the number of cells needed to encode an
  10. interrupt source. Must be a single cell with a value of at least 3.
  11. The 1st cell is the interrupt type; 0 for SPI interrupts, 1 for PPI
  12. interrupts. Other values are reserved for future use.
  13. The 2nd cell contains the interrupt number for the interrupt type.
  14. SPI interrupts are in the range [0-987]. PPI interrupts are in the
  15. range [0-15].
  16. The 3rd cell is the flags, encoded as follows:
  17. bits[3:0] trigger type and level flags.
  18. 1 = edge triggered
  19. 4 = level triggered
  20. Cells 4 and beyond are reserved for future use. When the 1st cell
  21. has a value of 0 or 1, cells 4 and beyond act as padding, and may be
  22. ignored. It is recommended that padding cells have a value of 0.
  23. - reg : Specifies base physical address(s) and size of the GIC
  24. registers, in the following order:
  25. - GIC Distributor interface (GICD)
  26. - GIC Redistributors (GICR), one range per redistributor region
  27. - GIC CPU interface (GICC)
  28. - GIC Hypervisor interface (GICH)
  29. - GIC Virtual CPU interface (GICV)
  30. GICC, GICH and GICV are optional.
  31. - interrupts : Interrupt source of the VGIC maintenance interrupt.
  32. Optional
  33. - redistributor-stride : If using padding pages, specifies the stride
  34. of consecutive redistributors. Must be a multiple of 64kB.
  35. - #redistributor-regions: The number of independent contiguous regions
  36. occupied by the redistributors. Required if more than one such
  37. region is present.
  38. Sub-nodes:
  39. GICv3 has one or more Interrupt Translation Services (ITS) that are
  40. used to route Message Signalled Interrupts (MSI) to the CPUs.
  41. These nodes must have the following properties:
  42. - compatible : Should at least contain "arm,gic-v3-its".
  43. - msi-controller : Boolean property. Identifies the node as an MSI controller
  44. - #msi-cells: Must be <1>. The single msi-cell is the DeviceID of the device
  45. which will generate the MSI.
  46. - reg: Specifies the base physical address and size of the ITS
  47. registers.
  48. The main GIC node must contain the appropriate #address-cells,
  49. #size-cells and ranges properties for the reg property of all ITS
  50. nodes.
  51. Examples:
  52. gic: interrupt-controller@2cf00000 {
  53. compatible = "arm,gic-v3";
  54. #interrupt-cells = <3>;
  55. #address-cells = <2>;
  56. #size-cells = <2>;
  57. ranges;
  58. interrupt-controller;
  59. reg = <0x0 0x2f000000 0 0x10000>, // GICD
  60. <0x0 0x2f100000 0 0x200000>, // GICR
  61. <0x0 0x2c000000 0 0x2000>, // GICC
  62. <0x0 0x2c010000 0 0x2000>, // GICH
  63. <0x0 0x2c020000 0 0x2000>; // GICV
  64. interrupts = <1 9 4>;
  65. gic-its@2c200000 {
  66. compatible = "arm,gic-v3-its";
  67. msi-controller;
  68. #msi-cells = <1>;
  69. reg = <0x0 0x2c200000 0 0x200000>;
  70. };
  71. };
  72. gic: interrupt-controller@2c010000 {
  73. compatible = "arm,gic-v3";
  74. #interrupt-cells = <3>;
  75. #address-cells = <2>;
  76. #size-cells = <2>;
  77. ranges;
  78. interrupt-controller;
  79. redistributor-stride = <0x0 0x40000>; // 256kB stride
  80. #redistributor-regions = <2>;
  81. reg = <0x0 0x2c010000 0 0x10000>, // GICD
  82. <0x0 0x2d000000 0 0x800000>, // GICR 1: CPUs 0-31
  83. <0x0 0x2e000000 0 0x800000>; // GICR 2: CPUs 32-63
  84. <0x0 0x2c040000 0 0x2000>, // GICC
  85. <0x0 0x2c060000 0 0x2000>, // GICH
  86. <0x0 0x2c080000 0 0x2000>; // GICV
  87. interrupts = <1 9 4>;
  88. gic-its@2c200000 {
  89. compatible = "arm,gic-v3-its";
  90. msi-controller;
  91. #msi-cells = <1>;
  92. reg = <0x0 0x2c200000 0 0x200000>;
  93. };
  94. gic-its@2c400000 {
  95. compatible = "arm,gic-v3-its";
  96. msi-controller;
  97. #msi-cells = <1>;
  98. reg = <0x0 0x2c400000 0 0x200000>;
  99. };
  100. };