18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci%YAML 1.2
38c2ecf20Sopenharmony_ci---
48c2ecf20Sopenharmony_ci$id: http://devicetree.org/schemas/sram/sram.yaml#
58c2ecf20Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_cititle: Generic on-chip SRAM
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_cimaintainers:
108c2ecf20Sopenharmony_ci  - Rob Herring <robh@kernel.org>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cidescription: |+
138c2ecf20Sopenharmony_ci  Simple IO memory regions to be managed by the genalloc API.
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci  Each child of the sram node specifies a region of reserved memory. Each
168c2ecf20Sopenharmony_ci  child node should use a 'reg' property to specify a specific range of
178c2ecf20Sopenharmony_ci  reserved memory.
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci  Following the generic-names recommended practice, node names should
208c2ecf20Sopenharmony_ci  reflect the purpose of the node. Unit address (@<address>) should be
218c2ecf20Sopenharmony_ci  appended to the name.
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ciproperties:
248c2ecf20Sopenharmony_ci  $nodename:
258c2ecf20Sopenharmony_ci    pattern: "^sram(@.*)?"
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci  compatible:
288c2ecf20Sopenharmony_ci    contains:
298c2ecf20Sopenharmony_ci      enum:
308c2ecf20Sopenharmony_ci        - mmio-sram
318c2ecf20Sopenharmony_ci        - atmel,sama5d2-securam
328c2ecf20Sopenharmony_ci        - rockchip,rk3288-pmu-sram
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci  reg:
358c2ecf20Sopenharmony_ci    maxItems: 1
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci  clocks:
388c2ecf20Sopenharmony_ci    description:
398c2ecf20Sopenharmony_ci      A list of phandle and clock specifier pair that controls the single
408c2ecf20Sopenharmony_ci      SRAM clock.
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci  "#address-cells":
438c2ecf20Sopenharmony_ci    const: 1
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci  "#size-cells":
468c2ecf20Sopenharmony_ci    const: 1
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci  ranges:
498c2ecf20Sopenharmony_ci    description:
508c2ecf20Sopenharmony_ci      Should translate from local addresses within the sram to bus addresses.
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci  no-memory-wc:
538c2ecf20Sopenharmony_ci    description:
548c2ecf20Sopenharmony_ci      The flag indicating, that SRAM memory region has not to be remapped
558c2ecf20Sopenharmony_ci      as write combining. WC is used by default.
568c2ecf20Sopenharmony_ci    type: boolean
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_cipatternProperties:
598c2ecf20Sopenharmony_ci  "^([a-z]*-)?sram(-section)?@[a-f0-9]+$":
608c2ecf20Sopenharmony_ci    type: object
618c2ecf20Sopenharmony_ci    description:
628c2ecf20Sopenharmony_ci      Each child of the sram node specifies a region of reserved memory.
638c2ecf20Sopenharmony_ci    properties:
648c2ecf20Sopenharmony_ci      compatible:
658c2ecf20Sopenharmony_ci        description:
668c2ecf20Sopenharmony_ci          Should contain a vendor specific string in the form
678c2ecf20Sopenharmony_ci          <vendor>,[<device>-]<usage>
688c2ecf20Sopenharmony_ci        contains:
698c2ecf20Sopenharmony_ci          enum:
708c2ecf20Sopenharmony_ci            - allwinner,sun4i-a10-sram-a3-a4
718c2ecf20Sopenharmony_ci            - allwinner,sun4i-a10-sram-c1
728c2ecf20Sopenharmony_ci            - allwinner,sun4i-a10-sram-d
738c2ecf20Sopenharmony_ci            - allwinner,sun9i-a80-smp-sram
748c2ecf20Sopenharmony_ci            - allwinner,sun50i-a64-sram-c
758c2ecf20Sopenharmony_ci            - amlogic,meson8-smp-sram
768c2ecf20Sopenharmony_ci            - amlogic,meson8b-smp-sram
778c2ecf20Sopenharmony_ci            - amlogic,meson-gxbb-scp-shmem
788c2ecf20Sopenharmony_ci            - amlogic,meson-axg-scp-shmem
798c2ecf20Sopenharmony_ci            - renesas,smp-sram
808c2ecf20Sopenharmony_ci            - rockchip,rk3066-smp-sram
818c2ecf20Sopenharmony_ci            - samsung,exynos4210-sysram
828c2ecf20Sopenharmony_ci            - samsung,exynos4210-sysram-ns
838c2ecf20Sopenharmony_ci            - socionext,milbeaut-smp-sram
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_ci      reg:
868c2ecf20Sopenharmony_ci        description:
878c2ecf20Sopenharmony_ci          IO mem address range, relative to the SRAM range.
888c2ecf20Sopenharmony_ci        maxItems: 1
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_ci      pool:
918c2ecf20Sopenharmony_ci        description:
928c2ecf20Sopenharmony_ci          Indicates that the particular reserved SRAM area is addressable
938c2ecf20Sopenharmony_ci          and in use by another device or devices.
948c2ecf20Sopenharmony_ci        type: boolean
958c2ecf20Sopenharmony_ci
968c2ecf20Sopenharmony_ci      export:
978c2ecf20Sopenharmony_ci        description:
988c2ecf20Sopenharmony_ci          Indicates that the reserved SRAM area may be accessed outside
998c2ecf20Sopenharmony_ci          of the kernel, e.g. by bootloader or userspace.
1008c2ecf20Sopenharmony_ci        type: boolean
1018c2ecf20Sopenharmony_ci
1028c2ecf20Sopenharmony_ci      protect-exec:
1038c2ecf20Sopenharmony_ci        description: |
1048c2ecf20Sopenharmony_ci          Same as 'pool' above but with the additional constraint that code
1058c2ecf20Sopenharmony_ci          will be run from the region and that the memory is maintained as
1068c2ecf20Sopenharmony_ci          read-only, executable during code execution. NOTE: This region must
1078c2ecf20Sopenharmony_ci          be page aligned on start and end in order to properly allow
1088c2ecf20Sopenharmony_ci          manipulation of the page attributes.
1098c2ecf20Sopenharmony_ci        type: boolean
1108c2ecf20Sopenharmony_ci
1118c2ecf20Sopenharmony_ci      label:
1128c2ecf20Sopenharmony_ci        description:
1138c2ecf20Sopenharmony_ci          The name for the reserved partition, if omitted, the label is taken
1148c2ecf20Sopenharmony_ci          from the node name excluding the unit address.
1158c2ecf20Sopenharmony_ci
1168c2ecf20Sopenharmony_ci    required:
1178c2ecf20Sopenharmony_ci      - reg
1188c2ecf20Sopenharmony_ci
1198c2ecf20Sopenharmony_ci    additionalProperties: false
1208c2ecf20Sopenharmony_ci
1218c2ecf20Sopenharmony_cirequired:
1228c2ecf20Sopenharmony_ci  - compatible
1238c2ecf20Sopenharmony_ci  - reg
1248c2ecf20Sopenharmony_ci
1258c2ecf20Sopenharmony_ciif:
1268c2ecf20Sopenharmony_ci  properties:
1278c2ecf20Sopenharmony_ci    compatible:
1288c2ecf20Sopenharmony_ci      contains:
1298c2ecf20Sopenharmony_ci        const: rockchip,rk3288-pmu-sram
1308c2ecf20Sopenharmony_ci
1318c2ecf20Sopenharmony_cielse:
1328c2ecf20Sopenharmony_ci  required:
1338c2ecf20Sopenharmony_ci    - "#address-cells"
1348c2ecf20Sopenharmony_ci    - "#size-cells"
1358c2ecf20Sopenharmony_ci    - ranges
1368c2ecf20Sopenharmony_ci
1378c2ecf20Sopenharmony_ciadditionalProperties: false
1388c2ecf20Sopenharmony_ci
1398c2ecf20Sopenharmony_ciexamples:
1408c2ecf20Sopenharmony_ci  - |
1418c2ecf20Sopenharmony_ci    sram@5c000000 {
1428c2ecf20Sopenharmony_ci        compatible = "mmio-sram";
1438c2ecf20Sopenharmony_ci        reg = <0x5c000000 0x40000>; /* 256 KiB SRAM at address 0x5c000000 */
1448c2ecf20Sopenharmony_ci
1458c2ecf20Sopenharmony_ci        #address-cells = <1>;
1468c2ecf20Sopenharmony_ci        #size-cells = <1>;
1478c2ecf20Sopenharmony_ci        ranges = <0 0x5c000000 0x40000>;
1488c2ecf20Sopenharmony_ci
1498c2ecf20Sopenharmony_ci        smp-sram@100 {
1508c2ecf20Sopenharmony_ci            reg = <0x100 0x50>;
1518c2ecf20Sopenharmony_ci        };
1528c2ecf20Sopenharmony_ci
1538c2ecf20Sopenharmony_ci        device-sram@1000 {
1548c2ecf20Sopenharmony_ci            reg = <0x1000 0x1000>;
1558c2ecf20Sopenharmony_ci            pool;
1568c2ecf20Sopenharmony_ci        };
1578c2ecf20Sopenharmony_ci
1588c2ecf20Sopenharmony_ci        exported-sram@20000 {
1598c2ecf20Sopenharmony_ci            reg = <0x20000 0x20000>;
1608c2ecf20Sopenharmony_ci            export;
1618c2ecf20Sopenharmony_ci        };
1628c2ecf20Sopenharmony_ci    };
1638c2ecf20Sopenharmony_ci
1648c2ecf20Sopenharmony_ci  - |
1658c2ecf20Sopenharmony_ci    // Samsung SMP-capable Exynos SoCs use part of the SYSRAM for the bringup
1668c2ecf20Sopenharmony_ci    // of the secondary cores. Once the core gets powered up it executes the
1678c2ecf20Sopenharmony_ci    // code that is residing at some specific location of the SYSRAM.
1688c2ecf20Sopenharmony_ci    //
1698c2ecf20Sopenharmony_ci    // Therefore reserved section sub-nodes have to be added to the mmio-sram
1708c2ecf20Sopenharmony_ci    // declaration. These nodes are of two types depending upon secure or
1718c2ecf20Sopenharmony_ci    // non-secure execution environment.
1728c2ecf20Sopenharmony_ci    sram@2020000 {
1738c2ecf20Sopenharmony_ci        compatible = "mmio-sram";
1748c2ecf20Sopenharmony_ci        reg = <0x02020000 0x54000>;
1758c2ecf20Sopenharmony_ci        #address-cells = <1>;
1768c2ecf20Sopenharmony_ci        #size-cells = <1>;
1778c2ecf20Sopenharmony_ci        ranges = <0 0x02020000 0x54000>;
1788c2ecf20Sopenharmony_ci
1798c2ecf20Sopenharmony_ci        smp-sram@0 {
1808c2ecf20Sopenharmony_ci            compatible = "samsung,exynos4210-sysram";
1818c2ecf20Sopenharmony_ci            reg = <0x0 0x1000>;
1828c2ecf20Sopenharmony_ci        };
1838c2ecf20Sopenharmony_ci
1848c2ecf20Sopenharmony_ci        smp-sram@53000 {
1858c2ecf20Sopenharmony_ci            compatible = "samsung,exynos4210-sysram-ns";
1868c2ecf20Sopenharmony_ci            reg = <0x53000 0x1000>;
1878c2ecf20Sopenharmony_ci        };
1888c2ecf20Sopenharmony_ci    };
1898c2ecf20Sopenharmony_ci
1908c2ecf20Sopenharmony_ci  - |
1918c2ecf20Sopenharmony_ci    // Amlogic's SMP-capable SoCs use part of the sram for the bringup of the cores.
1928c2ecf20Sopenharmony_ci    // Once the core gets powered up it executes the code that is residing at a
1938c2ecf20Sopenharmony_ci    // specific location.
1948c2ecf20Sopenharmony_ci    //
1958c2ecf20Sopenharmony_ci    // Therefore a reserved section sub-node has to be added to the mmio-sram
1968c2ecf20Sopenharmony_ci    // declaration.
1978c2ecf20Sopenharmony_ci    sram@d9000000 {
1988c2ecf20Sopenharmony_ci        compatible = "mmio-sram";
1998c2ecf20Sopenharmony_ci        reg = <0xd9000000 0x20000>;
2008c2ecf20Sopenharmony_ci        #address-cells = <1>;
2018c2ecf20Sopenharmony_ci        #size-cells = <1>;
2028c2ecf20Sopenharmony_ci        ranges = <0 0xd9000000 0x20000>;
2038c2ecf20Sopenharmony_ci
2048c2ecf20Sopenharmony_ci        smp-sram@1ff80 {
2058c2ecf20Sopenharmony_ci            compatible = "amlogic,meson8b-smp-sram";
2068c2ecf20Sopenharmony_ci            reg = <0x1ff80 0x8>;
2078c2ecf20Sopenharmony_ci        };
2088c2ecf20Sopenharmony_ci    };
2098c2ecf20Sopenharmony_ci
2108c2ecf20Sopenharmony_ci  - |
2118c2ecf20Sopenharmony_ci    sram@e63c0000 {
2128c2ecf20Sopenharmony_ci        compatible = "mmio-sram";
2138c2ecf20Sopenharmony_ci        reg = <0xe63c0000 0x1000>;
2148c2ecf20Sopenharmony_ci        #address-cells = <1>;
2158c2ecf20Sopenharmony_ci        #size-cells = <1>;
2168c2ecf20Sopenharmony_ci        ranges = <0 0xe63c0000 0x1000>;
2178c2ecf20Sopenharmony_ci
2188c2ecf20Sopenharmony_ci        smp-sram@0 {
2198c2ecf20Sopenharmony_ci            compatible = "renesas,smp-sram";
2208c2ecf20Sopenharmony_ci            reg = <0 0x10>;
2218c2ecf20Sopenharmony_ci        };
2228c2ecf20Sopenharmony_ci    };
2238c2ecf20Sopenharmony_ci
2248c2ecf20Sopenharmony_ci  - |
2258c2ecf20Sopenharmony_ci    sram@10080000 {
2268c2ecf20Sopenharmony_ci        compatible = "mmio-sram";
2278c2ecf20Sopenharmony_ci        reg = <0x10080000 0x10000>;
2288c2ecf20Sopenharmony_ci        #address-cells = <1>;
2298c2ecf20Sopenharmony_ci        #size-cells = <1>;
2308c2ecf20Sopenharmony_ci        ranges;
2318c2ecf20Sopenharmony_ci
2328c2ecf20Sopenharmony_ci        smp-sram@10080000 {
2338c2ecf20Sopenharmony_ci            compatible = "rockchip,rk3066-smp-sram";
2348c2ecf20Sopenharmony_ci            reg = <0x10080000 0x50>;
2358c2ecf20Sopenharmony_ci        };
2368c2ecf20Sopenharmony_ci    };
2378c2ecf20Sopenharmony_ci
2388c2ecf20Sopenharmony_ci  - |
2398c2ecf20Sopenharmony_ci    // Rockchip's rk3288 SoC uses the sram of pmu to store the function of
2408c2ecf20Sopenharmony_ci    // resume from maskrom(the 1st level loader). This is a common use of
2418c2ecf20Sopenharmony_ci    // the "pmu-sram" because it keeps power even in low power states
2428c2ecf20Sopenharmony_ci    // in the system.
2438c2ecf20Sopenharmony_ci    sram@ff720000 {
2448c2ecf20Sopenharmony_ci      compatible = "rockchip,rk3288-pmu-sram", "mmio-sram";
2458c2ecf20Sopenharmony_ci      reg = <0xff720000 0x1000>;
2468c2ecf20Sopenharmony_ci    };
2478c2ecf20Sopenharmony_ci
2488c2ecf20Sopenharmony_ci  - |
2498c2ecf20Sopenharmony_ci    // Allwinner's A80 SoC uses part of the secure sram for hotplugging of the
2508c2ecf20Sopenharmony_ci    // primary core (cpu0). Once the core gets powered up it checks if a magic
2518c2ecf20Sopenharmony_ci    // value is set at a specific location. If it is then the BROM will jump
2528c2ecf20Sopenharmony_ci    // to the software entry address, instead of executing a standard boot.
2538c2ecf20Sopenharmony_ci    //
2548c2ecf20Sopenharmony_ci    // Also there are no "secure-only" properties. The implementation should
2558c2ecf20Sopenharmony_ci    // check if this SRAM is usable first.
2568c2ecf20Sopenharmony_ci    sram@20000 {
2578c2ecf20Sopenharmony_ci        // 256 KiB secure SRAM at 0x20000
2588c2ecf20Sopenharmony_ci        compatible = "mmio-sram";
2598c2ecf20Sopenharmony_ci        reg = <0x00020000 0x40000>;
2608c2ecf20Sopenharmony_ci        #address-cells = <1>;
2618c2ecf20Sopenharmony_ci        #size-cells = <1>;
2628c2ecf20Sopenharmony_ci        ranges = <0 0x00020000 0x40000>;
2638c2ecf20Sopenharmony_ci
2648c2ecf20Sopenharmony_ci        smp-sram@1000 {
2658c2ecf20Sopenharmony_ci            // This is checked by BROM to determine if
2668c2ecf20Sopenharmony_ci            // cpu0 should jump to SMP entry vector
2678c2ecf20Sopenharmony_ci            compatible = "allwinner,sun9i-a80-smp-sram";
2688c2ecf20Sopenharmony_ci            reg = <0x1000 0x8>;
2698c2ecf20Sopenharmony_ci        };
2708c2ecf20Sopenharmony_ci    };
2718c2ecf20Sopenharmony_ci
2728c2ecf20Sopenharmony_ci  - |
2738c2ecf20Sopenharmony_ci    sram@0 {
2748c2ecf20Sopenharmony_ci        compatible = "mmio-sram";
2758c2ecf20Sopenharmony_ci        reg = <0x0 0x10000>;
2768c2ecf20Sopenharmony_ci        #address-cells = <1>;
2778c2ecf20Sopenharmony_ci        #size-cells = <1>;
2788c2ecf20Sopenharmony_ci        ranges = <0 0x0 0x10000>;
2798c2ecf20Sopenharmony_ci
2808c2ecf20Sopenharmony_ci        smp-sram@f100 {
2818c2ecf20Sopenharmony_ci            compatible = "socionext,milbeaut-smp-sram";
2828c2ecf20Sopenharmony_ci            reg = <0xf100 0x20>;
2838c2ecf20Sopenharmony_ci        };
2848c2ecf20Sopenharmony_ci    };
285