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