162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/sram/sram.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Generic on-chip SRAM
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Rob Herring <robh@kernel.org>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription: |+
1362306a36Sopenharmony_ci  Simple IO memory regions to be managed by the genalloc API.
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci  Each child of the sram node specifies a region of reserved memory. Each
1662306a36Sopenharmony_ci  child node should use a 'reg' property to specify a specific range of
1762306a36Sopenharmony_ci  reserved memory.
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci  Following the generic-names recommended practice, node names should
2062306a36Sopenharmony_ci  reflect the purpose of the node. Unit address (@<address>) should be
2162306a36Sopenharmony_ci  appended to the name.
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ciproperties:
2462306a36Sopenharmony_ci  $nodename:
2562306a36Sopenharmony_ci    pattern: "^sram(@.*)?"
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci  compatible:
2862306a36Sopenharmony_ci    contains:
2962306a36Sopenharmony_ci      enum:
3062306a36Sopenharmony_ci        - mmio-sram
3162306a36Sopenharmony_ci        - amlogic,meson-gxbb-sram
3262306a36Sopenharmony_ci        - arm,juno-sram-ns
3362306a36Sopenharmony_ci        - atmel,sama5d2-securam
3462306a36Sopenharmony_ci        - nvidia,tegra186-sysram
3562306a36Sopenharmony_ci        - nvidia,tegra194-sysram
3662306a36Sopenharmony_ci        - nvidia,tegra234-sysram
3762306a36Sopenharmony_ci        - qcom,rpm-msg-ram
3862306a36Sopenharmony_ci        - rockchip,rk3288-pmu-sram
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci  reg:
4162306a36Sopenharmony_ci    maxItems: 1
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci  clocks:
4462306a36Sopenharmony_ci    maxItems: 1
4562306a36Sopenharmony_ci    description:
4662306a36Sopenharmony_ci      A list of phandle and clock specifier pair that controls the single
4762306a36Sopenharmony_ci      SRAM clock.
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci  "#address-cells":
5062306a36Sopenharmony_ci    const: 1
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci  "#size-cells":
5362306a36Sopenharmony_ci    const: 1
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci  ranges:
5662306a36Sopenharmony_ci    maxItems: 1
5762306a36Sopenharmony_ci    description:
5862306a36Sopenharmony_ci      Should translate from local addresses within the sram to bus addresses.
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci  no-memory-wc:
6162306a36Sopenharmony_ci    description:
6262306a36Sopenharmony_ci      The flag indicating, that SRAM memory region has not to be remapped
6362306a36Sopenharmony_ci      as write combining. WC is used by default.
6462306a36Sopenharmony_ci    type: boolean
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_cipatternProperties:
6762306a36Sopenharmony_ci  "^([a-z0-9]*-)?sram(-section)?@[a-f0-9]+$":
6862306a36Sopenharmony_ci    type: object
6962306a36Sopenharmony_ci    description:
7062306a36Sopenharmony_ci      Each child of the sram node specifies a region of reserved memory.
7162306a36Sopenharmony_ci    properties:
7262306a36Sopenharmony_ci      compatible:
7362306a36Sopenharmony_ci        description:
7462306a36Sopenharmony_ci          Should contain a vendor specific string in the form
7562306a36Sopenharmony_ci          <vendor>,[<device>-]<usage>
7662306a36Sopenharmony_ci        contains:
7762306a36Sopenharmony_ci          enum:
7862306a36Sopenharmony_ci            - allwinner,sun4i-a10-sram-a3-a4
7962306a36Sopenharmony_ci            - allwinner,sun4i-a10-sram-c1
8062306a36Sopenharmony_ci            - allwinner,sun4i-a10-sram-d
8162306a36Sopenharmony_ci            - allwinner,sun9i-a80-smp-sram
8262306a36Sopenharmony_ci            - allwinner,sun50i-a64-sram-c
8362306a36Sopenharmony_ci            - amlogic,meson8-ao-arc-sram
8462306a36Sopenharmony_ci            - amlogic,meson8b-ao-arc-sram
8562306a36Sopenharmony_ci            - amlogic,meson8-smp-sram
8662306a36Sopenharmony_ci            - amlogic,meson8b-smp-sram
8762306a36Sopenharmony_ci            - amlogic,meson-gxbb-scp-shmem
8862306a36Sopenharmony_ci            - amlogic,meson-axg-scp-shmem
8962306a36Sopenharmony_ci            - arm,juno-scp-shmem
9062306a36Sopenharmony_ci            - arm,scmi-shmem
9162306a36Sopenharmony_ci            - arm,scp-shmem
9262306a36Sopenharmony_ci            - renesas,smp-sram
9362306a36Sopenharmony_ci            - rockchip,rk3066-smp-sram
9462306a36Sopenharmony_ci            - samsung,exynos4210-sysram
9562306a36Sopenharmony_ci            - samsung,exynos4210-sysram-ns
9662306a36Sopenharmony_ci            - socionext,milbeaut-smp-sram
9762306a36Sopenharmony_ci            - stericsson,u8500-esram
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci      reg:
10062306a36Sopenharmony_ci        description:
10162306a36Sopenharmony_ci          IO mem address range, relative to the SRAM range.
10262306a36Sopenharmony_ci        maxItems: 1
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci      pool:
10562306a36Sopenharmony_ci        description:
10662306a36Sopenharmony_ci          Indicates that the particular reserved SRAM area is addressable
10762306a36Sopenharmony_ci          and in use by another device or devices.
10862306a36Sopenharmony_ci        type: boolean
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci      export:
11162306a36Sopenharmony_ci        description:
11262306a36Sopenharmony_ci          Indicates that the reserved SRAM area may be accessed outside
11362306a36Sopenharmony_ci          of the kernel, e.g. by bootloader or userspace.
11462306a36Sopenharmony_ci        type: boolean
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci      protect-exec:
11762306a36Sopenharmony_ci        description: |
11862306a36Sopenharmony_ci          Same as 'pool' above but with the additional constraint that code
11962306a36Sopenharmony_ci          will be run from the region and that the memory is maintained as
12062306a36Sopenharmony_ci          read-only, executable during code execution. NOTE: This region must
12162306a36Sopenharmony_ci          be page aligned on start and end in order to properly allow
12262306a36Sopenharmony_ci          manipulation of the page attributes.
12362306a36Sopenharmony_ci        type: boolean
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ci      label:
12662306a36Sopenharmony_ci        description:
12762306a36Sopenharmony_ci          The name for the reserved partition, if omitted, the label is taken
12862306a36Sopenharmony_ci          from the node name excluding the unit address.
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci    required:
13162306a36Sopenharmony_ci      - reg
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ci    additionalProperties: false
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_cirequired:
13662306a36Sopenharmony_ci  - compatible
13762306a36Sopenharmony_ci  - reg
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ciif:
14062306a36Sopenharmony_ci  not:
14162306a36Sopenharmony_ci    properties:
14262306a36Sopenharmony_ci      compatible:
14362306a36Sopenharmony_ci        contains:
14462306a36Sopenharmony_ci          enum:
14562306a36Sopenharmony_ci            - qcom,rpm-msg-ram
14662306a36Sopenharmony_ci            - rockchip,rk3288-pmu-sram
14762306a36Sopenharmony_cithen:
14862306a36Sopenharmony_ci  required:
14962306a36Sopenharmony_ci    - "#address-cells"
15062306a36Sopenharmony_ci    - "#size-cells"
15162306a36Sopenharmony_ci    - ranges
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_ciadditionalProperties: false
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ciexamples:
15662306a36Sopenharmony_ci  - |
15762306a36Sopenharmony_ci    sram@5c000000 {
15862306a36Sopenharmony_ci        compatible = "mmio-sram";
15962306a36Sopenharmony_ci        reg = <0x5c000000 0x40000>; /* 256 KiB SRAM at address 0x5c000000 */
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci        #address-cells = <1>;
16262306a36Sopenharmony_ci        #size-cells = <1>;
16362306a36Sopenharmony_ci        ranges = <0 0x5c000000 0x40000>;
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_ci        smp-sram@100 {
16662306a36Sopenharmony_ci            reg = <0x100 0x50>;
16762306a36Sopenharmony_ci        };
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ci        device-sram@1000 {
17062306a36Sopenharmony_ci            reg = <0x1000 0x1000>;
17162306a36Sopenharmony_ci            pool;
17262306a36Sopenharmony_ci        };
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ci        exported-sram@20000 {
17562306a36Sopenharmony_ci            reg = <0x20000 0x20000>;
17662306a36Sopenharmony_ci            export;
17762306a36Sopenharmony_ci        };
17862306a36Sopenharmony_ci    };
17962306a36Sopenharmony_ci
18062306a36Sopenharmony_ci  - |
18162306a36Sopenharmony_ci    // Samsung SMP-capable Exynos SoCs use part of the SYSRAM for the bringup
18262306a36Sopenharmony_ci    // of the secondary cores. Once the core gets powered up it executes the
18362306a36Sopenharmony_ci    // code that is residing at some specific location of the SYSRAM.
18462306a36Sopenharmony_ci    //
18562306a36Sopenharmony_ci    // Therefore reserved section sub-nodes have to be added to the mmio-sram
18662306a36Sopenharmony_ci    // declaration. These nodes are of two types depending upon secure or
18762306a36Sopenharmony_ci    // non-secure execution environment.
18862306a36Sopenharmony_ci    sram@2020000 {
18962306a36Sopenharmony_ci        compatible = "mmio-sram";
19062306a36Sopenharmony_ci        reg = <0x02020000 0x54000>;
19162306a36Sopenharmony_ci        #address-cells = <1>;
19262306a36Sopenharmony_ci        #size-cells = <1>;
19362306a36Sopenharmony_ci        ranges = <0 0x02020000 0x54000>;
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ci        smp-sram@0 {
19662306a36Sopenharmony_ci            compatible = "samsung,exynos4210-sysram";
19762306a36Sopenharmony_ci            reg = <0x0 0x1000>;
19862306a36Sopenharmony_ci        };
19962306a36Sopenharmony_ci
20062306a36Sopenharmony_ci        smp-sram@53000 {
20162306a36Sopenharmony_ci            compatible = "samsung,exynos4210-sysram-ns";
20262306a36Sopenharmony_ci            reg = <0x53000 0x1000>;
20362306a36Sopenharmony_ci        };
20462306a36Sopenharmony_ci    };
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ci  - |
20762306a36Sopenharmony_ci    // Amlogic's SMP-capable SoCs use part of the sram for the bringup of the cores.
20862306a36Sopenharmony_ci    // Once the core gets powered up it executes the code that is residing at a
20962306a36Sopenharmony_ci    // specific location.
21062306a36Sopenharmony_ci    //
21162306a36Sopenharmony_ci    // Therefore a reserved section sub-node has to be added to the mmio-sram
21262306a36Sopenharmony_ci    // declaration.
21362306a36Sopenharmony_ci    sram@d9000000 {
21462306a36Sopenharmony_ci        compatible = "mmio-sram";
21562306a36Sopenharmony_ci        reg = <0xd9000000 0x20000>;
21662306a36Sopenharmony_ci        #address-cells = <1>;
21762306a36Sopenharmony_ci        #size-cells = <1>;
21862306a36Sopenharmony_ci        ranges = <0 0xd9000000 0x20000>;
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ci        smp-sram@1ff80 {
22162306a36Sopenharmony_ci            compatible = "amlogic,meson8b-smp-sram";
22262306a36Sopenharmony_ci            reg = <0x1ff80 0x8>;
22362306a36Sopenharmony_ci        };
22462306a36Sopenharmony_ci    };
22562306a36Sopenharmony_ci
22662306a36Sopenharmony_ci  - |
22762306a36Sopenharmony_ci    sram@e63c0000 {
22862306a36Sopenharmony_ci        compatible = "mmio-sram";
22962306a36Sopenharmony_ci        reg = <0xe63c0000 0x1000>;
23062306a36Sopenharmony_ci        #address-cells = <1>;
23162306a36Sopenharmony_ci        #size-cells = <1>;
23262306a36Sopenharmony_ci        ranges = <0 0xe63c0000 0x1000>;
23362306a36Sopenharmony_ci
23462306a36Sopenharmony_ci        smp-sram@0 {
23562306a36Sopenharmony_ci            compatible = "renesas,smp-sram";
23662306a36Sopenharmony_ci            reg = <0 0x10>;
23762306a36Sopenharmony_ci        };
23862306a36Sopenharmony_ci    };
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ci  - |
24162306a36Sopenharmony_ci    sram@10080000 {
24262306a36Sopenharmony_ci        compatible = "mmio-sram";
24362306a36Sopenharmony_ci        reg = <0x10080000 0x10000>;
24462306a36Sopenharmony_ci        #address-cells = <1>;
24562306a36Sopenharmony_ci        #size-cells = <1>;
24662306a36Sopenharmony_ci        ranges;
24762306a36Sopenharmony_ci
24862306a36Sopenharmony_ci        smp-sram@10080000 {
24962306a36Sopenharmony_ci            compatible = "rockchip,rk3066-smp-sram";
25062306a36Sopenharmony_ci            reg = <0x10080000 0x50>;
25162306a36Sopenharmony_ci        };
25262306a36Sopenharmony_ci    };
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ci  - |
25562306a36Sopenharmony_ci    // Rockchip's rk3288 SoC uses the sram of pmu to store the function of
25662306a36Sopenharmony_ci    // resume from maskrom(the 1st level loader). This is a common use of
25762306a36Sopenharmony_ci    // the "pmu-sram" because it keeps power even in low power states
25862306a36Sopenharmony_ci    // in the system.
25962306a36Sopenharmony_ci    sram@ff720000 {
26062306a36Sopenharmony_ci      compatible = "rockchip,rk3288-pmu-sram", "mmio-sram";
26162306a36Sopenharmony_ci      reg = <0xff720000 0x1000>;
26262306a36Sopenharmony_ci    };
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ci  - |
26562306a36Sopenharmony_ci    // Allwinner's A80 SoC uses part of the secure sram for hotplugging of the
26662306a36Sopenharmony_ci    // primary core (cpu0). Once the core gets powered up it checks if a magic
26762306a36Sopenharmony_ci    // value is set at a specific location. If it is then the BROM will jump
26862306a36Sopenharmony_ci    // to the software entry address, instead of executing a standard boot.
26962306a36Sopenharmony_ci    //
27062306a36Sopenharmony_ci    // Also there are no "secure-only" properties. The implementation should
27162306a36Sopenharmony_ci    // check if this SRAM is usable first.
27262306a36Sopenharmony_ci    sram@20000 {
27362306a36Sopenharmony_ci        // 256 KiB secure SRAM at 0x20000
27462306a36Sopenharmony_ci        compatible = "mmio-sram";
27562306a36Sopenharmony_ci        reg = <0x00020000 0x40000>;
27662306a36Sopenharmony_ci        #address-cells = <1>;
27762306a36Sopenharmony_ci        #size-cells = <1>;
27862306a36Sopenharmony_ci        ranges = <0 0x00020000 0x40000>;
27962306a36Sopenharmony_ci
28062306a36Sopenharmony_ci        smp-sram@1000 {
28162306a36Sopenharmony_ci            // This is checked by BROM to determine if
28262306a36Sopenharmony_ci            // cpu0 should jump to SMP entry vector
28362306a36Sopenharmony_ci            compatible = "allwinner,sun9i-a80-smp-sram";
28462306a36Sopenharmony_ci            reg = <0x1000 0x8>;
28562306a36Sopenharmony_ci        };
28662306a36Sopenharmony_ci    };
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_ci  - |
28962306a36Sopenharmony_ci    sram@0 {
29062306a36Sopenharmony_ci        compatible = "mmio-sram";
29162306a36Sopenharmony_ci        reg = <0x0 0x10000>;
29262306a36Sopenharmony_ci        #address-cells = <1>;
29362306a36Sopenharmony_ci        #size-cells = <1>;
29462306a36Sopenharmony_ci        ranges = <0 0x0 0x10000>;
29562306a36Sopenharmony_ci
29662306a36Sopenharmony_ci        smp-sram@f100 {
29762306a36Sopenharmony_ci            compatible = "socionext,milbeaut-smp-sram";
29862306a36Sopenharmony_ci            reg = <0xf100 0x20>;
29962306a36Sopenharmony_ci        };
30062306a36Sopenharmony_ci    };
301