xref: /linux/Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.yaml (revision ab93e0dd72c37d378dd936f031ffb83ff2bd87ce)
1c825a081SSagar Kadam# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2c825a081SSagar Kadam# Copyright (C) 2020 SiFive, Inc.
3c825a081SSagar Kadam%YAML 1.2
4c825a081SSagar Kadam---
5c825a081SSagar Kadam$id: http://devicetree.org/schemas/interrupt-controller/sifive,plic-1.0.0.yaml#
6c825a081SSagar Kadam$schema: http://devicetree.org/meta-schemas/core.yaml#
7c825a081SSagar Kadam
8c825a081SSagar Kadamtitle: SiFive Platform-Level Interrupt Controller (PLIC)
9c825a081SSagar Kadam
10c825a081SSagar Kadamdescription:
1190ddcd64SDamien Le Moal  SiFive SoCs and other RISC-V SoCs include an implementation of the
1290ddcd64SDamien Le Moal  Platform-Level Interrupt Controller (PLIC) high-level specification in
1390ddcd64SDamien Le Moal  the RISC-V Privileged Architecture specification. The PLIC connects all
1490ddcd64SDamien Le Moal  external interrupts in the system to all hart contexts in the system, via
1590ddcd64SDamien Le Moal  the external interrupt source in each hart.
16c825a081SSagar Kadam
17c825a081SSagar Kadam  A hart context is a privilege mode in a hardware execution thread. For example,
18c825a081SSagar Kadam  in an 4 core system with 2-way SMT, you have 8 harts and probably at least two
19c825a081SSagar Kadam  privilege modes per hart; machine mode and supervisor mode.
20c825a081SSagar Kadam
21c825a081SSagar Kadam  Each interrupt can be enabled on per-context basis. Any context can claim
22c825a081SSagar Kadam  a pending enabled interrupt and then release it once it has been handled.
23c825a081SSagar Kadam
24c825a081SSagar Kadam  Each interrupt has a configurable priority. Higher priority interrupts are
25c825a081SSagar Kadam  serviced first.  Each context can specify a priority threshold. Interrupts
26c825a081SSagar Kadam  with priority below this threshold will not cause the PLIC to raise its
27c825a081SSagar Kadam  interrupt line leading to the context.
28c825a081SSagar Kadam
291267d983SLad Prabhakar  The PLIC supports both edge-triggered and level-triggered interrupts. For
301267d983SLad Prabhakar  edge-triggered interrupts, the RISC-V PLIC spec allows two responses to edges
311267d983SLad Prabhakar  seen while an interrupt handler is active; the PLIC may either queue them or
321267d983SLad Prabhakar  ignore them. In the first case, handlers are oblivious to the trigger type, so
331267d983SLad Prabhakar  it is not included in the interrupt specifier. In the second case, software
341267d983SLad Prabhakar  needs to know the trigger type, so it can reorder the interrupt flow to avoid
351267d983SLad Prabhakar  missing interrupts. This special handling is needed by at least the Renesas
36d60df7fdSSamuel Holland  RZ/Five SoC (AX45MP AndesCore with a NCEPLIC100) and the T-HEAD C900 PLIC.
37c825a081SSagar Kadam
38c825a081SSagar Kadam  While the RISC-V ISA doesn't specify a memory layout for the PLIC, the
39c825a081SSagar Kadam  "sifive,plic-1.0.0" device is a concrete implementation of the PLIC that
40c825a081SSagar Kadam  contains a specific memory layout, which is documented in chapter 8 of the
41c825a081SSagar Kadam  SiFive U5 Coreplex Series Manual <https://static.dev.sifive.com/U54-MC-RVCoreIP.pdf>.
42c825a081SSagar Kadam
43321a8be3SGuo Ren  The thead,c900-plic is different from sifive,plic-1.0.0 in opensbi, the
44321a8be3SGuo Ren  T-HEAD PLIC implementation requires setting a delegation bit to allow access
45321a8be3SGuo Ren  from S-mode. So add thead,c900-plic to distinguish them.
46321a8be3SGuo Ren
47c825a081SSagar Kadammaintainers:
48c825a081SSagar Kadam  - Paul Walmsley  <paul.walmsley@sifive.com>
49c825a081SSagar Kadam  - Palmer Dabbelt <palmer@dabbelt.com>
50c825a081SSagar Kadam
51c825a081SSagar Kadamproperties:
52c825a081SSagar Kadam  compatible:
53321a8be3SGuo Ren    oneOf:
54321a8be3SGuo Ren      - items:
5590ddcd64SDamien Le Moal          - enum:
561267d983SLad Prabhakar              - andestech,qilai-plic
571267d983SLad Prabhakar              - renesas,r9a07g043-plic
581267d983SLad Prabhakar          - const: andestech,nceplic100
591267d983SLad Prabhakar      - items:
60b087f597SGeert Uytterhoeven          - enum:
6190ddcd64SDamien Le Moal              - canaan,k210-plic
62562272a2SYangyu Chen              - sifive,fu540-c000-plic
639ac16169SEmil Renner Berthing              - spacemit,k1-plic
648406d19cSEmil Renner Berthing              - starfive,jh7100-plic
65c825a081SSagar Kadam              - starfive,jh7110-plic
66321a8be3SGuo Ren          - const: sifive,plic-1.0.0
67321a8be3SGuo Ren      - items:
68321a8be3SGuo Ren          - enum:
69975f0a64SJisheng Zhang              - allwinner,sun20i-d1-plic
7021a34e63SInochi Amaoto              - sophgo,cv1800b-plic
71747d99c5SThomas Bonnefille              - sophgo,cv1812h-plic
72d975794dSChen Wang              - sophgo,sg2002-plic
73*beb20728SInochi Amaoto              - sophgo,sg2042-plic
74a04cc739SJisheng Zhang              - sophgo,sg2044-plic
75321a8be3SGuo Ren              - thead,th1520-plic
766e965c9bSConor Dooley          - const: thead,c900-plic
776e965c9bSConor Dooley      - items:
786e965c9bSConor Dooley          - const: sifive,plic-1.0.0
796e965c9bSConor Dooley          - const: riscv,plic0
806e965c9bSConor Dooley        deprecated: true
81c825a081SSagar Kadam        description: For the QEMU virt machine only
82c825a081SSagar Kadam
83c825a081SSagar Kadam  reg:
84c825a081SSagar Kadam    maxItems: 1
85c825a081SSagar Kadam
86c825a081SSagar Kadam  '#address-cells':
87c825a081SSagar Kadam    const: 0
881267d983SLad Prabhakar
89c825a081SSagar Kadam  '#interrupt-cells': true
90c825a081SSagar Kadam
91c825a081SSagar Kadam  interrupt-controller: true
92c825a081SSagar Kadam
93c825a081SSagar Kadam  interrupts-extended:
948fbc16d2SGeert Uytterhoeven    minItems: 1
95c825a081SSagar Kadam    maxItems: 15872
96c825a081SSagar Kadam    description:
97c825a081SSagar Kadam      Specifies which contexts are connected to the PLIC, with "-1" specifying
98c825a081SSagar Kadam      that a context is not present. Each node pointed to should be a
99c825a081SSagar Kadam      riscv,cpu-intc node, which has a riscv node as parent.
100c825a081SSagar Kadam
10143d78445SRob Herring  riscv,ndev:
102c825a081SSagar Kadam    $ref: /schemas/types.yaml#/definitions/uint32
103c825a081SSagar Kadam    description:
104c825a081SSagar Kadam      Specifies how many external interrupts are supported by this controller.
1051267d983SLad Prabhakar
1061267d983SLad Prabhakar  clocks: true
1071267d983SLad Prabhakar
1081267d983SLad Prabhakar  power-domains: true
1091267d983SLad Prabhakar
1101267d983SLad Prabhakar  resets: true
111c825a081SSagar Kadam
112c825a081SSagar Kadamrequired:
113c825a081SSagar Kadam  - compatible
114c825a081SSagar Kadam  - '#address-cells'
115c825a081SSagar Kadam  - '#interrupt-cells'
116c825a081SSagar Kadam  - interrupt-controller
117c825a081SSagar Kadam  - reg
118c825a081SSagar Kadam  - interrupts-extended
119c825a081SSagar Kadam  - riscv,ndev
1201267d983SLad Prabhakar
1211267d983SLad PrabhakarallOf:
1221267d983SLad Prabhakar  - if:
1231267d983SLad Prabhakar      properties:
1241267d983SLad Prabhakar        compatible:
1251267d983SLad Prabhakar          contains:
1261267d983SLad Prabhakar            enum:
127d60df7fdSSamuel Holland              - andestech,nceplic100
1281267d983SLad Prabhakar              - thead,c900-plic
1291267d983SLad Prabhakar
1301267d983SLad Prabhakar    then:
1311267d983SLad Prabhakar      properties:
1321267d983SLad Prabhakar        '#interrupt-cells':
1331267d983SLad Prabhakar          const: 2
1341267d983SLad Prabhakar
1351267d983SLad Prabhakar    else:
1361267d983SLad Prabhakar      properties:
1371267d983SLad Prabhakar        '#interrupt-cells':
1381267d983SLad Prabhakar          const: 1
1391267d983SLad Prabhakar
1401267d983SLad Prabhakar  - if:
1411267d983SLad Prabhakar      properties:
1421267d983SLad Prabhakar        compatible:
1431267d983SLad Prabhakar          contains:
1441267d983SLad Prabhakar            const: renesas,r9a07g043-plic
1451267d983SLad Prabhakar
1461267d983SLad Prabhakar    then:
1471267d983SLad Prabhakar      properties:
1481267d983SLad Prabhakar        clocks:
1491267d983SLad Prabhakar          maxItems: 1
1501267d983SLad Prabhakar
1511267d983SLad Prabhakar        power-domains:
1521267d983SLad Prabhakar          maxItems: 1
1531267d983SLad Prabhakar
1541267d983SLad Prabhakar        resets:
1551267d983SLad Prabhakar          maxItems: 1
1561267d983SLad Prabhakar
1571267d983SLad Prabhakar      required:
1581267d983SLad Prabhakar        - clocks
1591267d983SLad Prabhakar        - power-domains
1601267d983SLad Prabhakar        - resets
161c825a081SSagar Kadam
162c825a081SSagar KadamadditionalProperties: false
163c825a081SSagar Kadam
164c825a081SSagar Kadamexamples:
165c825a081SSagar Kadam  - |
166c825a081SSagar Kadam    plic: interrupt-controller@c000000 {
167c825a081SSagar Kadam      #address-cells = <0>;
168c825a081SSagar Kadam      #interrupt-cells = <1>;
169c825a081SSagar Kadam      compatible = "sifive,fu540-c000-plic", "sifive,plic-1.0.0";
170c89e5eb7SGeert Uytterhoeven      interrupt-controller;
171c89e5eb7SGeert Uytterhoeven      interrupts-extended = <&cpu0_intc 11>,
172c89e5eb7SGeert Uytterhoeven                            <&cpu1_intc 11>, <&cpu1_intc 9>,
173c89e5eb7SGeert Uytterhoeven                            <&cpu2_intc 11>, <&cpu2_intc 9>,
174c89e5eb7SGeert Uytterhoeven                            <&cpu3_intc 11>, <&cpu3_intc 9>,
175c825a081SSagar Kadam                            <&cpu4_intc 11>, <&cpu4_intc 9>;
176c825a081SSagar Kadam      reg = <0xc000000 0x4000000>;
177c825a081SSagar Kadam      riscv,ndev = <10>;
178    };
179