xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/riscv/cpus.yaml (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# SPDX-License-Identifier: (GPL-2.0 OR MIT)
2*4882a593Smuzhiyun%YAML 1.2
3*4882a593Smuzhiyun---
4*4882a593Smuzhiyun$id: http://devicetree.org/schemas/riscv/cpus.yaml#
5*4882a593Smuzhiyun$schema: http://devicetree.org/meta-schemas/core.yaml#
6*4882a593Smuzhiyun
7*4882a593Smuzhiyuntitle: RISC-V bindings for 'cpus' DT nodes
8*4882a593Smuzhiyun
9*4882a593Smuzhiyunmaintainers:
10*4882a593Smuzhiyun  - Paul Walmsley <paul.walmsley@sifive.com>
11*4882a593Smuzhiyun  - Palmer Dabbelt <palmer@sifive.com>
12*4882a593Smuzhiyun
13*4882a593Smuzhiyundescription: |
14*4882a593Smuzhiyun  This document uses some terminology common to the RISC-V community
15*4882a593Smuzhiyun  that is not widely used, the definitions of which are listed here:
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun  hart: A hardware execution context, which contains all the state
18*4882a593Smuzhiyun  mandated by the RISC-V ISA: a PC and some registers.  This
19*4882a593Smuzhiyun  terminology is designed to disambiguate software's view of execution
20*4882a593Smuzhiyun  contexts from any particular microarchitectural implementation
21*4882a593Smuzhiyun  strategy.  For example, an Intel laptop containing one socket with
22*4882a593Smuzhiyun  two cores, each of which has two hyperthreads, could be described as
23*4882a593Smuzhiyun  having four harts.
24*4882a593Smuzhiyun
25*4882a593Smuzhiyunproperties:
26*4882a593Smuzhiyun  compatible:
27*4882a593Smuzhiyun    oneOf:
28*4882a593Smuzhiyun      - items:
29*4882a593Smuzhiyun          - enum:
30*4882a593Smuzhiyun              - sifive,rocket0
31*4882a593Smuzhiyun              - sifive,e5
32*4882a593Smuzhiyun              - sifive,e51
33*4882a593Smuzhiyun              - sifive,u54-mc
34*4882a593Smuzhiyun              - sifive,u54
35*4882a593Smuzhiyun              - sifive,u5
36*4882a593Smuzhiyun          - const: riscv
37*4882a593Smuzhiyun      - const: riscv    # Simulator only
38*4882a593Smuzhiyun    description:
39*4882a593Smuzhiyun      Identifies that the hart uses the RISC-V instruction set
40*4882a593Smuzhiyun      and identifies the type of the hart.
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun  mmu-type:
43*4882a593Smuzhiyun    description:
44*4882a593Smuzhiyun      Identifies the MMU address translation mode used on this
45*4882a593Smuzhiyun      hart.  These values originate from the RISC-V Privileged
46*4882a593Smuzhiyun      Specification document, available from
47*4882a593Smuzhiyun      https://riscv.org/specifications/
48*4882a593Smuzhiyun    $ref: "/schemas/types.yaml#/definitions/string"
49*4882a593Smuzhiyun    enum:
50*4882a593Smuzhiyun      - riscv,sv32
51*4882a593Smuzhiyun      - riscv,sv39
52*4882a593Smuzhiyun      - riscv,sv48
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun  riscv,isa:
55*4882a593Smuzhiyun    description:
56*4882a593Smuzhiyun      Identifies the specific RISC-V instruction set architecture
57*4882a593Smuzhiyun      supported by the hart.  These are documented in the RISC-V
58*4882a593Smuzhiyun      User-Level ISA document, available from
59*4882a593Smuzhiyun      https://riscv.org/specifications/
60*4882a593Smuzhiyun
61*4882a593Smuzhiyun      While the isa strings in ISA specification are case
62*4882a593Smuzhiyun      insensitive, letters in the riscv,isa string must be all
63*4882a593Smuzhiyun      lowercase to simplify parsing.
64*4882a593Smuzhiyun    $ref: "/schemas/types.yaml#/definitions/string"
65*4882a593Smuzhiyun    enum:
66*4882a593Smuzhiyun      - rv64imac
67*4882a593Smuzhiyun      - rv64imafdc
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun  # RISC-V requires 'timebase-frequency' in /cpus, so disallow it here
70*4882a593Smuzhiyun  timebase-frequency: false
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun  interrupt-controller:
73*4882a593Smuzhiyun    type: object
74*4882a593Smuzhiyun    description: Describes the CPU's local interrupt controller
75*4882a593Smuzhiyun
76*4882a593Smuzhiyun    properties:
77*4882a593Smuzhiyun      '#interrupt-cells':
78*4882a593Smuzhiyun        const: 1
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun      compatible:
81*4882a593Smuzhiyun        const: riscv,cpu-intc
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun      interrupt-controller: true
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun    required:
86*4882a593Smuzhiyun      - '#interrupt-cells'
87*4882a593Smuzhiyun      - compatible
88*4882a593Smuzhiyun      - interrupt-controller
89*4882a593Smuzhiyun
90*4882a593Smuzhiyunrequired:
91*4882a593Smuzhiyun  - riscv,isa
92*4882a593Smuzhiyun  - interrupt-controller
93*4882a593Smuzhiyun
94*4882a593SmuzhiyunadditionalProperties: true
95*4882a593Smuzhiyun
96*4882a593Smuzhiyunexamples:
97*4882a593Smuzhiyun  - |
98*4882a593Smuzhiyun    // Example 1: SiFive Freedom U540G Development Kit
99*4882a593Smuzhiyun    cpus {
100*4882a593Smuzhiyun        #address-cells = <1>;
101*4882a593Smuzhiyun        #size-cells = <0>;
102*4882a593Smuzhiyun        timebase-frequency = <1000000>;
103*4882a593Smuzhiyun        cpu@0 {
104*4882a593Smuzhiyun                clock-frequency = <0>;
105*4882a593Smuzhiyun                compatible = "sifive,rocket0", "riscv";
106*4882a593Smuzhiyun                device_type = "cpu";
107*4882a593Smuzhiyun                i-cache-block-size = <64>;
108*4882a593Smuzhiyun                i-cache-sets = <128>;
109*4882a593Smuzhiyun                i-cache-size = <16384>;
110*4882a593Smuzhiyun                reg = <0>;
111*4882a593Smuzhiyun                riscv,isa = "rv64imac";
112*4882a593Smuzhiyun                cpu_intc0: interrupt-controller {
113*4882a593Smuzhiyun                        #interrupt-cells = <1>;
114*4882a593Smuzhiyun                        compatible = "riscv,cpu-intc";
115*4882a593Smuzhiyun                        interrupt-controller;
116*4882a593Smuzhiyun                };
117*4882a593Smuzhiyun        };
118*4882a593Smuzhiyun        cpu@1 {
119*4882a593Smuzhiyun                clock-frequency = <0>;
120*4882a593Smuzhiyun                compatible = "sifive,rocket0", "riscv";
121*4882a593Smuzhiyun                d-cache-block-size = <64>;
122*4882a593Smuzhiyun                d-cache-sets = <64>;
123*4882a593Smuzhiyun                d-cache-size = <32768>;
124*4882a593Smuzhiyun                d-tlb-sets = <1>;
125*4882a593Smuzhiyun                d-tlb-size = <32>;
126*4882a593Smuzhiyun                device_type = "cpu";
127*4882a593Smuzhiyun                i-cache-block-size = <64>;
128*4882a593Smuzhiyun                i-cache-sets = <64>;
129*4882a593Smuzhiyun                i-cache-size = <32768>;
130*4882a593Smuzhiyun                i-tlb-sets = <1>;
131*4882a593Smuzhiyun                i-tlb-size = <32>;
132*4882a593Smuzhiyun                mmu-type = "riscv,sv39";
133*4882a593Smuzhiyun                reg = <1>;
134*4882a593Smuzhiyun                riscv,isa = "rv64imafdc";
135*4882a593Smuzhiyun                tlb-split;
136*4882a593Smuzhiyun                cpu_intc1: interrupt-controller {
137*4882a593Smuzhiyun                        #interrupt-cells = <1>;
138*4882a593Smuzhiyun                        compatible = "riscv,cpu-intc";
139*4882a593Smuzhiyun                        interrupt-controller;
140*4882a593Smuzhiyun                };
141*4882a593Smuzhiyun        };
142*4882a593Smuzhiyun    };
143*4882a593Smuzhiyun
144*4882a593Smuzhiyun  - |
145*4882a593Smuzhiyun    // Example 2: Spike ISA Simulator with 1 Hart
146*4882a593Smuzhiyun    cpus {
147*4882a593Smuzhiyun        #address-cells = <1>;
148*4882a593Smuzhiyun        #size-cells = <0>;
149*4882a593Smuzhiyun        cpu@0 {
150*4882a593Smuzhiyun                device_type = "cpu";
151*4882a593Smuzhiyun                reg = <0>;
152*4882a593Smuzhiyun                compatible = "riscv";
153*4882a593Smuzhiyun                riscv,isa = "rv64imafdc";
154*4882a593Smuzhiyun                mmu-type = "riscv,sv48";
155*4882a593Smuzhiyun                interrupt-controller {
156*4882a593Smuzhiyun                        #interrupt-cells = <1>;
157*4882a593Smuzhiyun                        interrupt-controller;
158*4882a593Smuzhiyun                        compatible = "riscv,cpu-intc";
159*4882a593Smuzhiyun                };
160*4882a593Smuzhiyun        };
161*4882a593Smuzhiyun    };
162*4882a593Smuzhiyun...
163