| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
- %YAML 1.2
- ---
- $id: http://devicetree.org/schemas/interrupt-controller/riscv,aplic.yaml#
- $schema: http://devicetree.org/meta-schemas/core.yaml#
- title: RISC-V Advanced Platform Level Interrupt Controller (APLIC)
- maintainers:
- - Anup Patel <anup@brainfault.org>
- description:
- The RISC-V advanced interrupt architecture (AIA) defines an advanced
- platform level interrupt controller (APLIC) for handling wired interrupts
- in a RISC-V platform. The RISC-V AIA specification can be found at
- https://github.com/riscv/riscv-aia.
- The RISC-V APLIC is implemented as hierarchical APLIC domains where all
- interrupt sources connect to the root APLIC domain and a parent APLIC
- domain can delegate interrupt sources to it's child APLIC domains. There
- is one device tree node for each APLIC domain.
- allOf:
- - $ref: /schemas/interrupt-controller.yaml#
- properties:
- compatible:
- items:
- - enum:
- - qemu,aplic
- - const: riscv,aplic
- reg:
- maxItems: 1
- interrupt-controller: true
- "#interrupt-cells":
- const: 2
- interrupts-extended:
- minItems: 1
- maxItems: 16384
- description:
- Given APLIC domain directly injects external interrupts to a set of
- RISC-V HARTS (or CPUs). Each node pointed to should be a riscv,cpu-intc
- node, which has a CPU node (i.e. RISC-V HART) as parent.
- msi-parent:
- description:
- Given APLIC domain forwards wired interrupts as MSIs to a AIA incoming
- message signaled interrupt controller (IMSIC). If both "msi-parent" and
- "interrupts-extended" properties are present then it means the APLIC
- domain supports both MSI mode and Direct mode in HW. In this case, the
- APLIC driver has to choose between MSI mode or Direct mode.
- riscv,num-sources:
- $ref: /schemas/types.yaml#/definitions/uint32
- minimum: 1
- maximum: 1023
- description:
- Specifies the number of wired interrupt sources supported by this
- APLIC domain.
- riscv,children:
- $ref: /schemas/types.yaml#/definitions/phandle-array
- minItems: 1
- maxItems: 1024
- items:
- maxItems: 1
- description:
- A list of child APLIC domains for the given APLIC domain. Each child
- APLIC domain is assigned a child index in increasing order, with the
- first child APLIC domain assigned child index 0. The APLIC domain child
- index is used by firmware to delegate interrupts from the given APLIC
- domain to a particular child APLIC domain.
- riscv,delegation:
- $ref: /schemas/types.yaml#/definitions/phandle-array
- minItems: 1
- maxItems: 1024
- items:
- items:
- - description: child APLIC domain phandle
- - description: first interrupt number of the parent APLIC domain (inclusive)
- - description: last interrupt number of the parent APLIC domain (inclusive)
- description:
- A interrupt delegation list where each entry is a triple consisting
- of child APLIC domain phandle, first interrupt number of the parent
- APLIC domain, and last interrupt number of the parent APLIC domain.
- Firmware must configure interrupt delegation registers based on
- interrupt delegation list.
- dependencies:
- riscv,delegation: [ "riscv,children" ]
- required:
- - compatible
- - reg
- - interrupt-controller
- - "#interrupt-cells"
- - riscv,num-sources
- anyOf:
- - required:
- - interrupts-extended
- - required:
- - msi-parent
- unevaluatedProperties: false
- examples:
- - |
- // Example 1 (APLIC domains directly injecting interrupt to HARTs):
- interrupt-controller@c000000 {
- compatible = "qemu,aplic", "riscv,aplic";
- interrupts-extended = <&cpu1_intc 11>,
- <&cpu2_intc 11>,
- <&cpu3_intc 11>,
- <&cpu4_intc 11>;
- reg = <0xc000000 0x4080>;
- interrupt-controller;
- #interrupt-cells = <2>;
- riscv,num-sources = <63>;
- riscv,children = <&aplic1>, <&aplic2>;
- riscv,delegation = <&aplic1 1 63>;
- };
- aplic1: interrupt-controller@d000000 {
- compatible = "qemu,aplic", "riscv,aplic";
- interrupts-extended = <&cpu1_intc 9>,
- <&cpu2_intc 9>;
- reg = <0xd000000 0x4080>;
- interrupt-controller;
- #interrupt-cells = <2>;
- riscv,num-sources = <63>;
- };
- aplic2: interrupt-controller@e000000 {
- compatible = "qemu,aplic", "riscv,aplic";
- interrupts-extended = <&cpu3_intc 9>,
- <&cpu4_intc 9>;
- reg = <0xe000000 0x4080>;
- interrupt-controller;
- #interrupt-cells = <2>;
- riscv,num-sources = <63>;
- };
- - |
- // Example 2 (APLIC domains forwarding interrupts as MSIs):
- interrupt-controller@c000000 {
- compatible = "qemu,aplic", "riscv,aplic";
- msi-parent = <&imsic_mlevel>;
- reg = <0xc000000 0x4000>;
- interrupt-controller;
- #interrupt-cells = <2>;
- riscv,num-sources = <63>;
- riscv,children = <&aplic3>;
- riscv,delegation = <&aplic3 1 63>;
- };
- aplic3: interrupt-controller@d000000 {
- compatible = "qemu,aplic", "riscv,aplic";
- msi-parent = <&imsic_slevel>;
- reg = <0xd000000 0x4000>;
- interrupt-controller;
- #interrupt-cells = <2>;
- riscv,num-sources = <63>;
- };
- ...
|