# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/arm/vexpress-config.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: ARM Versatile Express configuration bus

maintainers:
  - Andre Przywara <andre.przywara@arm.com>

description:
  This is a system control register block, acting as a bridge to the
  platform's configuration bus via "system control" interface, addressing
  devices with site number, position in the board stack, config controller,
  function and device numbers - see motherboard's TRM for more details.

properties:
  compatible:
    const: arm,vexpress,config-bus

  arm,vexpress,config-bridge:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      Phandle to the sysreg node.

  muxfpga:
    type: object
    properties:
      compatible:
        const: arm,vexpress-muxfpga

      arm,vexpress-sysreg,func:
        description: FPGA specifier
        $ref: /schemas/types.yaml#/definitions/uint32-array
        items:
          - const: 7
          - description: device number

    additionalProperties: false
    required:
      - compatible
      - arm,vexpress-sysreg,func

  shutdown:
    type: object
    properties:
      compatible:
        const: arm,vexpress-shutdown

      arm,vexpress-sysreg,func:
        description: shutdown identifier
        $ref: /schemas/types.yaml#/definitions/uint32-array
        items:
          - const: 8
          - description: device number

    additionalProperties: false
    required:
      - compatible
      - arm,vexpress-sysreg,func

  reboot:
    type: object
    properties:
      compatible:
        const: arm,vexpress-reboot

      arm,vexpress-sysreg,func:
        description: reboot identifier
        $ref: /schemas/types.yaml#/definitions/uint32-array
        items:
          - const: 9
          - description: device number

    additionalProperties: false
    required:
      - compatible
      - arm,vexpress-sysreg,func

  dvimode:
    type: object
    properties:
      compatible:
        const: arm,vexpress-dvimode

      arm,vexpress-sysreg,func:
        description: DVI mode identifier
        $ref: /schemas/types.yaml#/definitions/uint32-array
        items:
          - const: 11
          - description: device number

    additionalProperties: false
    required:
      - compatible
      - arm,vexpress-sysreg,func

additionalProperties: false

required:
  - compatible
  - arm,vexpress,config-bridge

patternProperties:
  'clk[0-9]*$':
    type: object
    description:
      clocks

    properties:
      compatible:
        const: arm,vexpress-osc

      arm,vexpress-sysreg,func:
        description: clock specifier
        $ref: /schemas/types.yaml#/definitions/uint32-array
        items:
          - const: 1
          - description: clock number

      freq-range:
        $ref: /schemas/types.yaml#/definitions/uint32-array
        items:
          - description: minimal clock frequency
          - description: maximum clock frequency

      "#clock-cells":
        const: 0

      clock-output-names:
        maxItems: 1

    additionalProperties: false
    required:
      - compatible
      - arm,vexpress-sysreg,func
      - "#clock-cells"

  "^volt-.+$":
    $ref: /schemas/regulator/regulator.yaml#
    properties:
      compatible:
        const: arm,vexpress-volt

      arm,vexpress-sysreg,func:
        description: regulator specifier
        $ref: /schemas/types.yaml#/definitions/uint32-array
        items:
          - const: 2
          - description: device number

      label:
        maxItems: 1

    unevaluatedProperties: false
    required:
      - compatible
      - arm,vexpress-sysreg,func

  "^amp-.+$":
    type: object
    properties:
      compatible:
        const: arm,vexpress-amp

      arm,vexpress-sysreg,func:
        description: current sensor identifier
        $ref: /schemas/types.yaml#/definitions/uint32-array
        items:
          - const: 3
          - description: device number

      label:
        maxItems: 1

    additionalProperties: false
    required:
      - compatible
      - arm,vexpress-sysreg,func

  "^temp-.+$":
    type: object
    properties:
      compatible:
        const: arm,vexpress-temp

      arm,vexpress-sysreg,func:
        description: temperature sensor identifier
        $ref: /schemas/types.yaml#/definitions/uint32-array
        items:
          - const: 4
          - description: device number

      label:
        maxItems: 1

    additionalProperties: false
    required:
      - compatible
      - arm,vexpress-sysreg,func

  "^reset[0-9]*$":
    type: object
    properties:
      compatible:
        const: arm,vexpress-reset

      arm,vexpress-sysreg,func:
        description: reset specifier
        $ref: /schemas/types.yaml#/definitions/uint32-array
        items:
          - const: 5
          - description: reset device number

    additionalProperties: false
    required:
      - compatible
      - arm,vexpress-sysreg,func

  "^power-.+$":
    type: object
    properties:
      compatible:
        const: arm,vexpress-power

      arm,vexpress-sysreg,func:
        description: power sensor identifier
        $ref: /schemas/types.yaml#/definitions/uint32-array
        items:
          - const: 12
          - description: device number

      label:
        maxItems: 1

    additionalProperties: false
    required:
      - compatible
      - arm,vexpress-sysreg,func

  "^energy(-.+)?$":
    type: object
    properties:
      compatible:
        const: arm,vexpress-energy

      arm,vexpress-sysreg,func:
        description: energy sensor identifier
        $ref: /schemas/types.yaml#/definitions/uint32-array
        oneOf:
          - items:
              - const: 13
              - description: device number
          - items:
              - const: 13
              - description: device number
              - const: 13
              - description: second device number

      label:
        maxItems: 1

    additionalProperties: false
    required:
      - compatible
      - arm,vexpress-sysreg,func

examples:
  - |
    mcc {
        compatible = "arm,vexpress,config-bus";
        arm,vexpress,config-bridge = <&v2m_sysreg>;

        clk0 {
            compatible = "arm,vexpress-osc";
            arm,vexpress-sysreg,func = <1 0>;
            #clock-cells = <0>;
        };

        energy {
            compatible = "arm,vexpress-energy";
            arm,vexpress-sysreg,func = <13 0>, <13 1>;
        };
    };