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