[PATCH] schemas: add "cpus" schema

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



Add an initial "cpus" schema, requested by Rob Herring.  This is based
on the Devicetree specification 0.2 at:

https://github.com/devicetree-org/devicetree-specification/releases/tag/v0.2

Much of the descriptive text comes from that document.  There are a
few differences: this document is more tolerant than the
specification.  For example, POWER-specific properties are not
included, since those seem better served by POWER-specific DT binding
documents, rather than a generic document.  This binding also tolerates
the absence of some properties that are not required in practice, such as
the "clock-frequency" property.

Signed-off-by: Paul Walmsley <paul.walmsley@xxxxxxxxxx>
Cc: Rob Herring <robh@xxxxxxxxxx>
---
 schemas/cpus.yaml | 279 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 279 insertions(+)
 create mode 100644 schemas/cpus.yaml

diff --git a/schemas/cpus.yaml b/schemas/cpus.yaml
new file mode 100644
index 0000000..9b7d95d
--- /dev/null
+++ b/schemas/cpus.yaml
@@ -0,0 +1,279 @@
+# SPDX-License-Identifier: GPL-2.0 OR BSD-2-clause
+# Copyright (C) 2018-2019 SiFive, Inc.
+#
+# Description text is from the Devicetree Specification at
+#   https://www.devicetree.org/specifications/
+# which is
+# Copyright 2008,2011 Power.org, Inc.
+# Copyright 2008,2011 Freescale Semiconductor, Inc.
+# Copyright 2008,2011 International Business Machines Corporation
+# Copyright 2016,2017 Linaro,Ltd.
+# Copyright 2016,2017 Arm,Ltd.
+#
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/cpus.yaml#
+$schema: http://devicetree.org/meta-schemas/base.yaml#
+
+title: Common cpus binding
+
+maintainers:
+  - Devicetree Specification Mailing List <devicetree-spec@xxxxxxxxxxxxxxx>
+
+description: |+
+  In Devicetree data files, the layout of CPUs is described in the
+  "cpus" node.  This node in turn contains a number of subnodes
+  representing CPUs, which define properties for every cpu.
+
+  Bindings for CPU nodes follow the Devicetree Specification, available from:
+
+  https://www.devicetree.org/specifications/
+
+properties:
+  $nodename:
+    const: cpus
+    description:
+      A /cpus node is required for all Devicetrees.  It does not represent
+      a real device in the system, but acts as a container for child "cpu"
+      nodes which represent the systems' CPUs.
+
+  '#address-cells':
+    $ref: "/schemas/types.yaml#/definitions/uint32"
+    minimum: 1
+    description:
+      The value specifies how many cells each element of the reg property
+      array takes in children of this node.
+
+  '#size-cells':
+    const: 0
+
+patternProperties:
+  '^cpu@[0-9a-f]+$':
+    type: object
+    properties:
+      device_type:
+        const: cpu
+
+      reg:
+        oneOf:
+          - $ref: "/schemas/types.yaml#/definitions/uint32"
+          - $ref: "/schemas/types.yaml#/definitions/uint32-array"
+        description:
+          Defines a unique CPU/thread ID for the CPU/threads represented
+          by the CPU node.
+
+      compatible:
+        $ref: "/schemas/types.yaml#/definitions/string-array"
+
+      clock-frequency:
+        oneOf:
+          - $ref: "/schemas/types.yaml#/definitions/uint32"
+          - $ref: "/schemas/types.yaml#/definitions/uint64"
+        description:
+          Specifies the current clock speed of the CPU in Hertz.
+
+      timebase-frequency:
+        oneOf:
+          - $ref: "/schemas/types.yaml#/definitions/uint32"
+          - $ref: "/schemas/types.yaml#/definitions/uint64"
+        minimum: 1
+        description:
+          Specifies the current frequency at which the timebase and the
+          decrementer registers are updated (in Hertz).
+
+      enable-method:
+        $ref: "/schemas/types.yaml#/definitions/string-array"
+        description:
+          Describes the method by which a CPU in a disabled state is enabled.
+          This property is required for CPUs with a status property with a
+          value of "disabled".  The value consists of one or more strings
+          that define the method to release this CPU.  If a client program
+          recognizes any of the methods, it may use it.
+
+      cpu-release-addr:
+        $ref: "/schemas/types.yaml#/definitions/uint64"
+        description:
+          This value specifies the physical address of a spin table entry that
+          releases a secondary CPU from its spin loop.
+
+      cache-op-block-size:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        description:
+          Specifies the block size in bytes upon which cache block instructions
+          operate.  Required if different than the L1 cache block size.
+
+      reservation-granule-size:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        description:
+          Specifies the reservation granule size supported by this processor
+          in bytes.
+
+      mmu-type:
+        type: string
+        description:
+          Specifies the CPU's MMU type.
+
+      cache-unified:
+        $ref: "/schemas/types.yaml#/definitions/flag"
+        description:
+          If present, specifies the cache has a unified organization.  If not
+          present, specifies that the cache has a Harvard architecture with
+          separate caches for instructions and data.
+
+      cache-size:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        description:
+          Specifies the size in bytes of a unified cache.  Required if the
+          cache is unified (combined instructions and data)
+
+      cache-sets:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        description:
+          Specifies the number of associativity sets in a unified cache.
+          Required if the processor has a unified cache (combined
+          instructions and data)
+
+      cache-block-size:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        description:
+          Specifies the block size in bytes of a unified cache.
+          Required if the processor has a unified cache (combined
+          instructions and data)
+
+      cache-line-size:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        description:
+          Specifies the line size in bytes of a unified cache, if
+          different than the cache block size.  Required if the processor has
+          a unified cache (combined instructions and data)
+
+      i-cache-size:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        description:
+          Specifies the size in bytes of the instruction cache.  Required if
+          the CPU has a separate cache for instructions.
+
+      i-cache-sets:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        description:
+          Specifies the number of associativity sets in the instruction cache.
+          Required if the CPU has a separate cache for instructions.
+
+      i-cache-block-size:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        description:
+          Specifies the block size in bytes of the instruction cache.
+          Required if the processor has a separate cache for instructions.
+
+      i-cache-line-size:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        description:
+          Specifies the line size in bytes of the instruction cache, if
+          different than the cache block size.  Required if the CPU has
+          a separate cache for instructions.
+
+      d-cache-size:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        description:
+          Specifies the size in bytes of the data cache.  Required if
+          the CPU has a separate cache for data.
+
+      d-cache-sets:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        description:
+          Specifies the number of associativity sets in the data cache.
+          Required if the CPU has a separate cache for data.
+
+      d-cache-block-size:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        description:
+          Specifies the block size in bytes of the data cache.
+          Required if the processor has a separate cache for data.
+
+      d-cache-line-size:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        description:
+          Specifies the line size in bytes of the data cache, if
+          different than the cache block size.  Required if the CPU has
+          a separate cache for data.
+
+      next-level-cache:
+        $ref: "/schemas/types.yaml#/definitions/phandle"
+        description:
+          If present, indicates that another level of cache exists.  The
+          value is the phandle of the next level of cache.
+
+      tlb-split:
+        $ref: "/schemas/types.yaml#/definitions/flag"
+        description:
+          If present, specifies that the TLB has a split configuration, with
+          separate TLBs for instructions and data.  If absent, specifies that
+          the TLB has a unified configuration.  Required for a CPU with a
+          TLB in a split configuration.
+
+      tlb-size:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        minimum: 1
+        description:
+          Specifies the number of entries in the TLB.  Required for a CPU
+          with a unified TLB for instruction and data addresses.
+
+      tlb-sets:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        minimum: 1
+        description:
+          Specifies the number of associativity sets in the TLB.  Required for
+          a CPU with a unified TLB for instruction and data addresses.
+
+      d-tlb-size:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        minimum: 1
+        description:
+          Specifies the number of entries in the data TLB.  Required for a CPU
+          with a split TLB for instruction and data addresses.
+
+      d-tlb-sets:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        minimum: 1
+        description:
+          Specifies the number of associativity sets in the data TLB.
+          Required for a CPU with a split TLB for instruction and data
+          addresses.
+
+      i-tlb-size:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        minimum: 1
+        description:
+          Specifies the number of entries in the instruction TLB.  Required
+          for a CPU with a split TLB for instruction and data addresses.
+
+      i-tlb-sets:
+        $ref: "/schemas/types.yaml#/definitions/uint32"
+        minimum: 1
+        description:
+          Specifies the number of associativity sets in the instruction TLB.
+          Required for a CPU with a split TLB for instruction and data
+          addresses.
+
+    required:
+      - device_type
+      - reg
+      - compatible
+
+    dependencies:
+      cpu-release-addr:
+        properties:
+          enable-method:
+            const: spin-table
+      cache-size: [ 'cache-unified' ]
+      cache-sets: [ 'cache-unified' ]
+      cache-block-size: [ 'cache-unified' ]
+      cache-line-size: [ 'cache-unified' ]
+      d-tlb-size: [ 'tlb-split' ]
+      d-tlb-sets: [ 'tlb-split' ]
+      i-tlb-size: [ 'tlb-split' ]
+      i-tlb-sets: [ 'tlb-split' ]
+
+required:
+  - '#address-cells'
+  - '#size-cells'
-- 
2.20.1




[Index of Archives]     [Device Tree]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux Audio Users]     [Photos]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]

  Powered by Linux