# SPDX-License-Identifier: (GPL-2.0 OR MIT) %YAML 1.2 --- $id: http://devicetree.org/schemas/riscv/cpus.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# title: RISC-V CPUs maintainers: - Paul Walmsley <paul.walmsley@sifive.com> - Palmer Dabbelt <palmer@sifive.com> - Conor Dooley <conor@kernel.org> description: | This document uses some terminology common to the RISC-V community that is not widely used, the definitions of which are listed here: hart: A hardware execution context, which contains all the state mandated by the RISC-V ISA: a PC and some registers. This terminology is designed to disambiguate software's view of execution contexts from any particular microarchitectural implementation strategy. For example, an Intel laptop containing one socket with two cores, each of which has two hyperthreads, could be described as having four harts. allOf: - $ref: /schemas/cpu.yaml# - $ref: extensions.yaml properties: compatible: oneOf: - items: - enum: - andestech,ax45mp - canaan,k210 - sifive,bullet0 - sifive,e5 - sifive,e7 - sifive,e71 - sifive,rocket0 - sifive,s7 - sifive,u5 - sifive,u54 - sifive,u7 - sifive,u74 - sifive,u74-mc - thead,c906 - thead,c910 - const: riscv - items: - enum: - sifive,e51 - sifive,u54-mc - const: sifive,rocket0 - const: riscv - const: riscv # Simulator only description: Identifies that the hart uses the RISC-V instruction set and identifies the type of the hart. mmu-type: description: Identifies the MMU address translation mode used on this hart. These values originate from the RISC-V Privileged Specification document, available from https://riscv.org/specifications/ $ref: /schemas/types.yaml#/definitions/string enum: - riscv,sv32 - riscv,sv39 - riscv,sv48 - riscv,sv57 - riscv,none riscv,cbom-block-size: $ref: /schemas/types.yaml#/definitions/uint32 description: The blocksize in bytes for the Zicbom cache operations. riscv,cboz-block-size: $ref: /schemas/types.yaml#/definitions/uint32 description: The blocksize in bytes for the Zicboz cache operations. # RISC-V has multiple properties for cache op block sizes as the sizes # differ between individual CBO extensions cache-op-block-size: false # RISC-V requires 'timebase-frequency' in /cpus, so disallow it here timebase-frequency: false interrupt-controller: type: object additionalProperties: false description: Describes the CPU's local interrupt controller properties: '#interrupt-cells': const: 1 compatible: const: riscv,cpu-intc interrupt-controller: true required: - '#interrupt-cells' - compatible - interrupt-controller cpu-idle-states: $ref: /schemas/types.yaml#/definitions/phandle-array items: maxItems: 1 description: | List of phandles to idle state nodes supported by this hart (see ./idle-states.yaml). capacity-dmips-mhz: description: u32 value representing CPU capacity (see ../cpu/cpu-capacity.txt) in DMIPS/MHz, relative to highest capacity-dmips-mhz in the system. anyOf: - required: - riscv,isa - required: - riscv,isa-base dependencies: riscv,isa-base: [ "riscv,isa-extensions" ] riscv,isa-extensions: [ "riscv,isa-base" ] required: - interrupt-controller unevaluatedProperties: false examples: - | // Example 1: SiFive Freedom U540G Development Kit cpus { #address-cells = <1>; #size-cells = <0>; timebase-frequency = <1000000>; cpu@0 { clock-frequency = <0>; compatible = "sifive,rocket0", "riscv"; device_type = "cpu"; i-cache-block-size = <64>; i-cache-sets = <128>; i-cache-size = <16384>; reg = <0>; riscv,isa-base = "rv64i"; riscv,isa-extensions = "i", "m", "a", "c"; cpu_intc0: interrupt-controller { #interrupt-cells = <1>; compatible = "riscv,cpu-intc"; interrupt-controller; }; }; cpu@1 { clock-frequency = <0>; compatible = "sifive,rocket0", "riscv"; d-cache-block-size = <64>; d-cache-sets = <64>; d-cache-size = <32768>; d-tlb-sets = <1>; d-tlb-size = <32>; device_type = "cpu"; i-cache-block-size = <64>; i-cache-sets = <64>; i-cache-size = <32768>; i-tlb-sets = <1>; i-tlb-size = <32>; mmu-type = "riscv,sv39"; reg = <1>; tlb-split; riscv,isa-base = "rv64i"; riscv,isa-extensions = "i", "m", "a", "f", "d", "c"; cpu_intc1: interrupt-controller { #interrupt-cells = <1>; compatible = "riscv,cpu-intc"; interrupt-controller; }; }; }; - | // Example 2: Spike ISA Simulator with 1 Hart cpus { #address-cells = <1>; #size-cells = <0>; cpu@0 { device_type = "cpu"; reg = <0>; compatible = "riscv"; mmu-type = "riscv,sv48"; riscv,isa-base = "rv64i"; riscv,isa-extensions = "i", "m", "a", "f", "d", "c"; interrupt-controller { #interrupt-cells = <1>; interrupt-controller; compatible = "riscv,cpu-intc"; }; }; }; ...