Documentation / devicetree / bindings / remoteproc / mtk,scp.yaml


Based on kernel version 6.8. Page generated on 2024-03-11 21:26 EST.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/remoteproc/mtk,scp.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Mediatek SCP

maintainers:
  - Tinghan Shen <tinghan.shen@mediatek.com>

description:
  This binding provides support for ARM Cortex M4 Co-processor found on some
  Mediatek SoCs.

properties:
  compatible:
    enum:
      - mediatek,mt8183-scp
      - mediatek,mt8186-scp
      - mediatek,mt8188-scp
      - mediatek,mt8192-scp
      - mediatek,mt8195-scp
      - mediatek,mt8195-scp-dual

  reg:
    description:
      Should contain the address ranges for memory regions SRAM, CFG, and,
      on some platforms, L1TCM.
    minItems: 2
    maxItems: 3

  reg-names:
    minItems: 2
    maxItems: 3

  clocks:
    description:
      Clock for co-processor (see ../clock/clock-bindings.txt).
      Required by mt8183 and mt8192.
    maxItems: 1

  clock-names:
    const: main

  interrupts:
    maxItems: 1

  firmware-name:
    $ref: /schemas/types.yaml#/definitions/string
    description:
      If present, name (or relative path) of the file within the
      firmware search path containing the firmware image used when
      initializing SCP.

  memory-region:
    maxItems: 1

  cros-ec-rpmsg:
    $ref: /schemas/mfd/google,cros-ec.yaml
    description:
      This subnode represents the rpmsg device. The properties
      of this node are defined by the individual bindings for
      the rpmsg devices.

    required:
      - mediatek,rpmsg-name

    unevaluatedProperties: false
 
  '#address-cells':
    const: 1
 
  '#size-cells':
    const: 1

  ranges:
    description:
      Standard ranges definition providing address translations for
      local SCP SRAM address spaces to bus addresses.

patternProperties:
  "^scp@[a-f0-9]+$":
    type: object
    description:
      The MediaTek SCP integrated to SoC might be a multi-core version.
      The other cores are represented as child nodes of the boot core.
      There are some integration differences for the IP like the usage of
      address translator for translating SoC bus addresses into address space
      for the processor.
 
      Each SCP core has own cache memory. The SRAM and L1TCM are shared by
      cores. The power of cache, SRAM and L1TCM power should be enabled
      before booting SCP cores. The size of cache, SRAM, and L1TCM are varied
      on differnt SoCs.
 
      The SCP cores do not use an MMU, but has a set of registers to
      control the translations between 32-bit CPU addresses into system bus
      addresses. Cache and memory access settings are provided through a
      Memory Protection Unit (MPU), programmable only from the SCP.

    properties:
      compatible:
        enum:
          - mediatek,scp-core

      reg:
        description: The base address and size of SRAM.
        maxItems: 1

      reg-names:
        const: sram

      interrupts:
        maxItems: 1

      firmware-name:
        $ref: /schemas/types.yaml#/definitions/string
        description:
          If present, name (or relative path) of the file within the
          firmware search path containing the firmware image used when
          initializing sub cores of multi-core SCP.

      memory-region:
        maxItems: 1

      cros-ec-rpmsg:
        $ref: /schemas/mfd/google,cros-ec.yaml
        description:
          This subnode represents the rpmsg device. The properties
          of this node are defined by the individual bindings for
          the rpmsg devices.

        required:
          - mediatek,rpmsg-name

        unevaluatedProperties: false

    required:
      - compatible
      - reg
      - reg-names

    additionalProperties: false

required:
  - compatible
  - reg
  - reg-names

allOf:
  - if:
      properties:
        compatible:
          enum:
            - mediatek,mt8183-scp
            - mediatek,mt8192-scp
    then:
      required:
        - clocks
        - clock-names

  - if:
      properties:
        compatible:
          enum:
            - mediatek,mt8183-scp
            - mediatek,mt8186-scp
            - mediatek,mt8188-scp
    then:
      properties:
        reg:
          maxItems: 2
        reg-names:
          items:
            - const: sram
            - const: cfg
  - if:
      properties:
        compatible:
          enum:
            - mediatek,mt8192-scp
            - mediatek,mt8195-scp
    then:
      properties:
        reg:
          maxItems: 3
        reg-names:
          items:
            - const: sram
            - const: cfg
            - const: l1tcm
  - if:
      properties:
        compatible:
          enum:
            - mediatek,mt8195-scp-dual
    then:
      properties:
        reg:
          maxItems: 2
        reg-names:
          items:
            - const: cfg
            - const: l1tcm

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/mt8192-clk.h>
 
    scp@10500000 {
        compatible = "mediatek,mt8192-scp";
        reg = <0x10500000 0x80000>,
              <0x10700000 0x8000>,
              <0x10720000 0xe0000>;
        reg-names = "sram", "cfg", "l1tcm";
        clocks = <&infracfg CLK_INFRA_SCPSYS>;
        clock-names = "main";
 
        cros-ec-rpmsg {
            compatible = "google,cros-ec-rpmsg";
            mediatek,rpmsg-name = "cros-ec-rpmsg";
        };
    };

  - |
    scp@10500000 {
        compatible = "mediatek,mt8195-scp-dual";
        reg = <0x10720000 0xe0000>,
              <0x10700000 0x8000>;
        reg-names = "cfg", "l1tcm";
 
        #address-cells = <1>;
        #size-cells = <1>;
        ranges = <0 0x10500000 0x100000>;
 
        scp@0 {
            compatible = "mediatek,scp-core";
            reg = <0x0 0xa0000>;
            reg-names = "sram";
 
            cros-ec-rpmsg {
                compatible = "google,cros-ec-rpmsg";
                mediatek,rpmsg-name = "cros-ec-rpmsg";
            };
        };
 
        scp@a0000 {
            compatible = "mediatek,scp-core";
            reg = <0xa0000 0x20000>;
            reg-names = "sram";
 
            cros-ec-rpmsg {
                compatible = "google,cros-ec-rpmsg";
                mediatek,rpmsg-name = "cros-ec-rpmsg";
            };
        };
    };