apple,aic.yaml 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
  2. %YAML 1.2
  3. ---
  4. $id: http://devicetree.org/schemas/interrupt-controller/apple,aic.yaml#
  5. $schema: http://devicetree.org/meta-schemas/core.yaml#
  6. title: Apple Interrupt Controller
  7. maintainers:
  8. - Hector Martin <marcan@marcan.st>
  9. description: |
  10. The Apple Interrupt Controller is a simple interrupt controller present on
  11. Apple ARM SoC platforms, including various iPhone and iPad devices and the
  12. "Apple Silicon" Macs.
  13. It provides the following features:
  14. - Level-triggered hardware IRQs wired to SoC blocks
  15. - Single mask bit per IRQ
  16. - Per-IRQ affinity setting
  17. - Automatic masking on event delivery (auto-ack)
  18. - Software triggering (ORed with hw line)
  19. - 2 per-CPU IPIs (meant as "self" and "other", but they are interchangeable
  20. if not symmetric)
  21. - Automatic prioritization (single event/ack register per CPU, lower IRQs =
  22. higher priority)
  23. - Automatic masking on ack
  24. - Default "this CPU" register view and explicit per-CPU views
  25. This device also represents the FIQ interrupt sources on platforms using AIC,
  26. which do not go through a discrete interrupt controller.
  27. IPIs may be performed via MMIO registers on all variants of AIC. Starting
  28. from A11, system registers may also be used for "fast" IPIs. Starting from
  29. M1, even faster IPIs within the same cluster may be achieved by writing to
  30. a "local" fast IPI register as opposed to using the "global" fast IPI
  31. register.
  32. allOf:
  33. - $ref: /schemas/interrupt-controller.yaml#
  34. properties:
  35. compatible:
  36. items:
  37. - enum:
  38. - apple,s5l8960x-aic
  39. - apple,t7000-aic
  40. - apple,s8000-aic
  41. - apple,t8010-aic
  42. - apple,t8015-aic
  43. - apple,t8103-aic
  44. - const: apple,aic
  45. interrupt-controller: true
  46. '#interrupt-cells':
  47. const: 3
  48. description: |
  49. The 1st cell contains the interrupt type:
  50. - 0: Hardware IRQ
  51. - 1: FIQ
  52. The 2nd cell contains the interrupt number.
  53. - HW IRQs: interrupt number
  54. - FIQs:
  55. - 0: physical HV timer
  56. - 1: virtual HV timer
  57. - 2: physical guest timer
  58. - 3: virtual guest timer
  59. - 4: 'efficient' CPU PMU
  60. - 5: 'performance' CPU PMU
  61. The 3rd cell contains the interrupt flags. This is normally
  62. IRQ_TYPE_LEVEL_HIGH (4).
  63. reg:
  64. description: |
  65. Specifies base physical address and size of the AIC registers.
  66. maxItems: 1
  67. power-domains:
  68. maxItems: 1
  69. affinities:
  70. type: object
  71. additionalProperties: false
  72. description:
  73. FIQ affinity can be expressed as a single "affinities" node,
  74. containing a set of sub-nodes, one per FIQ with a non-default
  75. affinity.
  76. patternProperties:
  77. "^.+-affinity$":
  78. type: object
  79. additionalProperties: false
  80. properties:
  81. apple,fiq-index:
  82. description:
  83. The interrupt number specified as a FIQ, and for which
  84. the affinity is not the default.
  85. $ref: /schemas/types.yaml#/definitions/uint32
  86. maximum: 5
  87. cpus:
  88. description:
  89. Should be a list of phandles to CPU nodes (as described in
  90. Documentation/devicetree/bindings/arm/cpus.yaml).
  91. required:
  92. - apple,fiq-index
  93. - cpus
  94. required:
  95. - compatible
  96. - '#interrupt-cells'
  97. - interrupt-controller
  98. - reg
  99. additionalProperties: false
  100. examples:
  101. - |
  102. soc {
  103. #address-cells = <2>;
  104. #size-cells = <2>;
  105. aic: interrupt-controller@23b100000 {
  106. compatible = "apple,t8103-aic", "apple,aic";
  107. #interrupt-cells = <3>;
  108. interrupt-controller;
  109. reg = <0x2 0x3b100000 0x0 0x8000>;
  110. };
  111. };