xref: /openbmc/linux/Documentation/devicetree/bindings/riscv/cpus.yaml (revision 5e5558f5c9d8caa58a57427cd32f870aec3a69fb)
14fd669a8SPaul Walmsley# SPDX-License-Identifier: (GPL-2.0 OR MIT)
24fd669a8SPaul Walmsley%YAML 1.2
34fd669a8SPaul Walmsley---
44fd669a8SPaul Walmsley$id: http://devicetree.org/schemas/riscv/cpus.yaml#
54fd669a8SPaul Walmsley$schema: http://devicetree.org/meta-schemas/core.yaml#
64fd669a8SPaul Walmsley
73367934dSKrzysztof Kozlowskititle: RISC-V CPUs
84fd669a8SPaul Walmsley
94fd669a8SPaul Walmsleymaintainers:
104fd669a8SPaul Walmsley  - Paul Walmsley <paul.walmsley@sifive.com>
114fd669a8SPaul Walmsley  - Palmer Dabbelt <palmer@sifive.com>
12299824e6SConor Dooley  - Conor Dooley <conor@kernel.org>
134fd669a8SPaul Walmsley
148e5e72e3SPaul Walmsleydescription: |
158e5e72e3SPaul Walmsley  This document uses some terminology common to the RISC-V community
168e5e72e3SPaul Walmsley  that is not widely used, the definitions of which are listed here:
178e5e72e3SPaul Walmsley
188e5e72e3SPaul Walmsley  hart: A hardware execution context, which contains all the state
198e5e72e3SPaul Walmsley  mandated by the RISC-V ISA: a PC and some registers.  This
208e5e72e3SPaul Walmsley  terminology is designed to disambiguate software's view of execution
218e5e72e3SPaul Walmsley  contexts from any particular microarchitectural implementation
228e5e72e3SPaul Walmsley  strategy.  For example, an Intel laptop containing one socket with
238e5e72e3SPaul Walmsley  two cores, each of which has two hyperthreads, could be described as
248e5e72e3SPaul Walmsley  having four harts.
258e5e72e3SPaul Walmsley
263c1b4758SConor DooleyallOf:
273c1b4758SConor Dooley  - $ref: /schemas/cpu.yaml#
28aeb71e42SConor Dooley  - $ref: extensions.yaml
293c1b4758SConor Dooley
304fd669a8SPaul Walmsleyproperties:
314fd669a8SPaul Walmsley  compatible:
329af865d9SRob Herring    oneOf:
339af865d9SRob Herring      - items:
344fd669a8SPaul Walmsley          - enum:
359f643dc2SLad Prabhakar              - andestech,ax45mp
3657e1b873SLad Prabhakar              - canaan,k210
3775e6d724SYash Shah              - sifive,bullet0
384fd669a8SPaul Walmsley              - sifive,e5
3975e6d724SYash Shah              - sifive,e7
4075e6d724SYash Shah              - sifive,e71
4157e1b873SLad Prabhakar              - sifive,rocket0
428868caa2SHal Feng              - sifive,s7
434fd669a8SPaul Walmsley              - sifive,u5
4457e1b873SLad Prabhakar              - sifive,u54
4575e6d724SYash Shah              - sifive,u7
4657e1b873SLad Prabhakar              - sifive,u74
4757e1b873SLad Prabhakar              - sifive,u74-mc
4841adc2fbSSamuel Holland              - thead,c906
4941adc2fbSSamuel Holland              - thead,c910
504fd669a8SPaul Walmsley          - const: riscv
51f46428f0SKrzysztof Kozlowski      - items:
52f46428f0SKrzysztof Kozlowski          - enum:
53f46428f0SKrzysztof Kozlowski              - sifive,e51
54f46428f0SKrzysztof Kozlowski              - sifive,u54-mc
55f46428f0SKrzysztof Kozlowski          - const: sifive,rocket0
56f46428f0SKrzysztof Kozlowski          - const: riscv
579af865d9SRob Herring      - const: riscv    # Simulator only
584fd669a8SPaul Walmsley    description:
594fd669a8SPaul Walmsley      Identifies that the hart uses the RISC-V instruction set
604fd669a8SPaul Walmsley      and identifies the type of the hart.
614fd669a8SPaul Walmsley
624fd669a8SPaul Walmsley  mmu-type:
634fd669a8SPaul Walmsley    description:
644fd669a8SPaul Walmsley      Identifies the MMU address translation mode used on this
654fd669a8SPaul Walmsley      hart.  These values originate from the RISC-V Privileged
664fd669a8SPaul Walmsley      Specification document, available from
674fd669a8SPaul Walmsley      https://riscv.org/specifications/
68f2023385SKrzysztof Kozlowski    $ref: /schemas/types.yaml#/definitions/string
693d21a460SRob Herring    enum:
703d21a460SRob Herring      - riscv,sv32
713d21a460SRob Herring      - riscv,sv39
723d21a460SRob Herring      - riscv,sv48
73d4dda690SConor Dooley      - riscv,sv57
747ef71c71SDamien Le Moal      - riscv,none
754fd669a8SPaul Walmsley
76d1afce67SHeiko Stuebner  riscv,cbom-block-size:
77d1afce67SHeiko Stuebner    $ref: /schemas/types.yaml#/definitions/uint32
78d1afce67SHeiko Stuebner    description:
79d1afce67SHeiko Stuebner      The blocksize in bytes for the Zicbom cache operations.
80d1afce67SHeiko Stuebner
81ea20f117SAndrew Jones  riscv,cboz-block-size:
82ea20f117SAndrew Jones    $ref: /schemas/types.yaml#/definitions/uint32
83ea20f117SAndrew Jones    description:
84ea20f117SAndrew Jones      The blocksize in bytes for the Zicboz cache operations.
85ea20f117SAndrew Jones
863c1b4758SConor Dooley  # RISC-V has multiple properties for cache op block sizes as the sizes
873c1b4758SConor Dooley  # differ between individual CBO extensions
883c1b4758SConor Dooley  cache-op-block-size: false
899af865d9SRob Herring  # RISC-V requires 'timebase-frequency' in /cpus, so disallow it here
909af865d9SRob Herring  timebase-frequency: false
914fd669a8SPaul Walmsley
924fd669a8SPaul Walmsley  interrupt-controller:
934fd669a8SPaul Walmsley    type: object
94*11b1c9cdSRob Herring    additionalProperties: false
954fd669a8SPaul Walmsley    description: Describes the CPU's local interrupt controller
964fd669a8SPaul Walmsley
974fd669a8SPaul Walmsley    properties:
984fd669a8SPaul Walmsley      '#interrupt-cells':
994fd669a8SPaul Walmsley        const: 1
1004fd669a8SPaul Walmsley
1014fd669a8SPaul Walmsley      compatible:
1024fd669a8SPaul Walmsley        const: riscv,cpu-intc
1034fd669a8SPaul Walmsley
1044fd669a8SPaul Walmsley      interrupt-controller: true
1054fd669a8SPaul Walmsley
1064fd669a8SPaul Walmsley    required:
1074fd669a8SPaul Walmsley      - '#interrupt-cells'
1084fd669a8SPaul Walmsley      - compatible
1094fd669a8SPaul Walmsley      - interrupt-controller
1104fd669a8SPaul Walmsley
1111bd524f7SAnup Patel  cpu-idle-states:
112f2023385SKrzysztof Kozlowski    $ref: /schemas/types.yaml#/definitions/phandle-array
1132524257bSPalmer Dabbelt    items:
1142524257bSPalmer Dabbelt      maxItems: 1
1151bd524f7SAnup Patel    description: |
1161bd524f7SAnup Patel      List of phandles to idle state nodes supported
1171bd524f7SAnup Patel      by this hart (see ./idle-states.yaml).
1181bd524f7SAnup Patel
11999199450SConor Dooley  capacity-dmips-mhz:
12099199450SConor Dooley    description:
12199199450SConor Dooley      u32 value representing CPU capacity (see ../cpu/cpu-capacity.txt) in
12299199450SConor Dooley      DMIPS/MHz, relative to highest capacity-dmips-mhz
12399199450SConor Dooley      in the system.
12499199450SConor Dooley
125aeb71e42SConor DooleyanyOf:
126aeb71e42SConor Dooley  - required:
1274fd669a8SPaul Walmsley      - riscv,isa
128aeb71e42SConor Dooley  - required:
129aeb71e42SConor Dooley      - riscv,isa-base
130aeb71e42SConor Dooley
131aeb71e42SConor Dooleydependencies:
132aeb71e42SConor Dooley  riscv,isa-base: [ "riscv,isa-extensions" ]
133aeb71e42SConor Dooley  riscv,isa-extensions: [ "riscv,isa-base" ]
134aeb71e42SConor Dooley
135aeb71e42SConor Dooleyrequired:
1364fd669a8SPaul Walmsley  - interrupt-controller
1374fd669a8SPaul Walmsley
1381ffe6ddcSConor DooleyunevaluatedProperties: false
1396a0e321eSRob Herring
1404fd669a8SPaul Walmsleyexamples:
1414fd669a8SPaul Walmsley  - |
1424fd669a8SPaul Walmsley    // Example 1: SiFive Freedom U540G Development Kit
1434fd669a8SPaul Walmsley    cpus {
1444fd669a8SPaul Walmsley        #address-cells = <1>;
1454fd669a8SPaul Walmsley        #size-cells = <0>;
1464fd669a8SPaul Walmsley        timebase-frequency = <1000000>;
1474fd669a8SPaul Walmsley        cpu@0 {
1484fd669a8SPaul Walmsley                clock-frequency = <0>;
1494fd669a8SPaul Walmsley                compatible = "sifive,rocket0", "riscv";
1504fd669a8SPaul Walmsley                device_type = "cpu";
1514fd669a8SPaul Walmsley                i-cache-block-size = <64>;
1524fd669a8SPaul Walmsley                i-cache-sets = <128>;
1534fd669a8SPaul Walmsley                i-cache-size = <16384>;
1544fd669a8SPaul Walmsley                reg = <0>;
155aeb71e42SConor Dooley                riscv,isa-base = "rv64i";
156aeb71e42SConor Dooley                riscv,isa-extensions = "i", "m", "a", "c";
157aeb71e42SConor Dooley
1584fd669a8SPaul Walmsley                cpu_intc0: interrupt-controller {
1594fd669a8SPaul Walmsley                        #interrupt-cells = <1>;
1604fd669a8SPaul Walmsley                        compatible = "riscv,cpu-intc";
1614fd669a8SPaul Walmsley                        interrupt-controller;
1624fd669a8SPaul Walmsley                };
1634fd669a8SPaul Walmsley        };
1644fd669a8SPaul Walmsley        cpu@1 {
1654fd669a8SPaul Walmsley                clock-frequency = <0>;
1664fd669a8SPaul Walmsley                compatible = "sifive,rocket0", "riscv";
1674fd669a8SPaul Walmsley                d-cache-block-size = <64>;
1684fd669a8SPaul Walmsley                d-cache-sets = <64>;
1694fd669a8SPaul Walmsley                d-cache-size = <32768>;
1704fd669a8SPaul Walmsley                d-tlb-sets = <1>;
1714fd669a8SPaul Walmsley                d-tlb-size = <32>;
1724fd669a8SPaul Walmsley                device_type = "cpu";
1734fd669a8SPaul Walmsley                i-cache-block-size = <64>;
1744fd669a8SPaul Walmsley                i-cache-sets = <64>;
1754fd669a8SPaul Walmsley                i-cache-size = <32768>;
1764fd669a8SPaul Walmsley                i-tlb-sets = <1>;
1774fd669a8SPaul Walmsley                i-tlb-size = <32>;
1784fd669a8SPaul Walmsley                mmu-type = "riscv,sv39";
1794fd669a8SPaul Walmsley                reg = <1>;
1804fd669a8SPaul Walmsley                tlb-split;
181aeb71e42SConor Dooley                riscv,isa-base = "rv64i";
182aeb71e42SConor Dooley                riscv,isa-extensions = "i", "m", "a", "f", "d", "c";
183aeb71e42SConor Dooley
1844fd669a8SPaul Walmsley                cpu_intc1: interrupt-controller {
1854fd669a8SPaul Walmsley                        #interrupt-cells = <1>;
1864fd669a8SPaul Walmsley                        compatible = "riscv,cpu-intc";
1874fd669a8SPaul Walmsley                        interrupt-controller;
1884fd669a8SPaul Walmsley                };
1894fd669a8SPaul Walmsley        };
1904fd669a8SPaul Walmsley    };
1914fd669a8SPaul Walmsley
1924fd669a8SPaul Walmsley  - |
1934fd669a8SPaul Walmsley    // Example 2: Spike ISA Simulator with 1 Hart
1944fd669a8SPaul Walmsley    cpus {
1953cdb0157SPaul Walmsley        #address-cells = <1>;
1963cdb0157SPaul Walmsley        #size-cells = <0>;
1974fd669a8SPaul Walmsley        cpu@0 {
1984fd669a8SPaul Walmsley                device_type = "cpu";
1994fd669a8SPaul Walmsley                reg = <0>;
2004fd669a8SPaul Walmsley                compatible = "riscv";
2014fd669a8SPaul Walmsley                mmu-type = "riscv,sv48";
202aeb71e42SConor Dooley                riscv,isa-base = "rv64i";
203aeb71e42SConor Dooley                riscv,isa-extensions = "i", "m", "a", "f", "d", "c";
204aeb71e42SConor Dooley
2054fd669a8SPaul Walmsley                interrupt-controller {
2064fd669a8SPaul Walmsley                        #interrupt-cells = <1>;
2074fd669a8SPaul Walmsley                        interrupt-controller;
2084fd669a8SPaul Walmsley                        compatible = "riscv,cpu-intc";
2094fd669a8SPaul Walmsley                };
2104fd669a8SPaul Walmsley        };
2114fd669a8SPaul Walmsley    };
2124fd669a8SPaul Walmsley...
213