162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/reserved-memory/shared-dma-pool.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: /reserved-memory DMA pool
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - devicetree-spec@vger.kernel.org
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ciallOf:
1362306a36Sopenharmony_ci  - $ref: reserved-memory.yaml
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ciproperties:
1662306a36Sopenharmony_ci  compatible:
1762306a36Sopenharmony_ci    oneOf:
1862306a36Sopenharmony_ci      - const: shared-dma-pool
1962306a36Sopenharmony_ci        description: >
2062306a36Sopenharmony_ci          This indicates a region of memory meant to be used as a shared
2162306a36Sopenharmony_ci          pool of DMA buffers for a set of devices. It can be used by an
2262306a36Sopenharmony_ci          operating system to instantiate the necessary pool management
2362306a36Sopenharmony_ci          subsystem if necessary.
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci      - const: restricted-dma-pool
2662306a36Sopenharmony_ci        description: >
2762306a36Sopenharmony_ci          This indicates a region of memory meant to be used as a pool
2862306a36Sopenharmony_ci          of restricted DMA buffers for a set of devices. The memory
2962306a36Sopenharmony_ci          region would be the only region accessible to those devices.
3062306a36Sopenharmony_ci          When using this, the no-map and reusable properties must not
3162306a36Sopenharmony_ci          be set, so the operating system can create a virtual mapping
3262306a36Sopenharmony_ci          that will be used for synchronization. The main purpose for
3362306a36Sopenharmony_ci          restricted DMA is to mitigate the lack of DMA access control
3462306a36Sopenharmony_ci          on systems without an IOMMU, which could result in the DMA
3562306a36Sopenharmony_ci          accessing the system memory at unexpected times and/or
3662306a36Sopenharmony_ci          unexpected addresses, possibly leading to data leakage or
3762306a36Sopenharmony_ci          corruption. The feature on its own provides a basic level of
3862306a36Sopenharmony_ci          protection against the DMA overwriting buffer contents at
3962306a36Sopenharmony_ci          unexpected times. However, to protect against general data
4062306a36Sopenharmony_ci          leakage and system memory corruption, the system needs to
4162306a36Sopenharmony_ci          provide way to lock down the memory access, e.g., MPU. Note
4262306a36Sopenharmony_ci          that since coherent allocation needs remapping, one must set
4362306a36Sopenharmony_ci          up another device coherent pool by shared-dma-pool and use
4462306a36Sopenharmony_ci          dma_alloc_from_dev_coherent instead for atomic coherent
4562306a36Sopenharmony_ci          allocation.
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci  linux,cma-default:
4862306a36Sopenharmony_ci    type: boolean
4962306a36Sopenharmony_ci    description: >
5062306a36Sopenharmony_ci      If this property is present, then Linux will use the region for
5162306a36Sopenharmony_ci      the default pool of the contiguous memory allocator.
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci  linux,dma-default:
5462306a36Sopenharmony_ci    type: boolean
5562306a36Sopenharmony_ci    description: >
5662306a36Sopenharmony_ci      If this property is present, then Linux will use the region for
5762306a36Sopenharmony_ci      the default pool of the consistent DMA allocator.
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ciif:
6062306a36Sopenharmony_ci  properties:
6162306a36Sopenharmony_ci    compatible:
6262306a36Sopenharmony_ci      contains:
6362306a36Sopenharmony_ci        const: restricted-dma-pool
6462306a36Sopenharmony_cithen:
6562306a36Sopenharmony_ci  properties:
6662306a36Sopenharmony_ci    no-map: false
6762306a36Sopenharmony_ci    reusable: false
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ciunevaluatedProperties: false
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ciexamples:
7262306a36Sopenharmony_ci  - |
7362306a36Sopenharmony_ci      reserved-memory {
7462306a36Sopenharmony_ci          #address-cells = <1>;
7562306a36Sopenharmony_ci          #size-cells = <1>;
7662306a36Sopenharmony_ci          ranges;
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci          /* global autoconfigured region for contiguous allocations */
7962306a36Sopenharmony_ci          linux,cma {
8062306a36Sopenharmony_ci              compatible = "shared-dma-pool";
8162306a36Sopenharmony_ci              reusable;
8262306a36Sopenharmony_ci              size = <0x4000000>;
8362306a36Sopenharmony_ci              alignment = <0x2000>;
8462306a36Sopenharmony_ci              linux,cma-default;
8562306a36Sopenharmony_ci          };
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci          display_reserved: framebuffer@78000000 {
8862306a36Sopenharmony_ci              reg = <0x78000000 0x800000>;
8962306a36Sopenharmony_ci          };
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci          restricted_dma_reserved: restricted-dma-pool@50000000 {
9262306a36Sopenharmony_ci              compatible = "restricted-dma-pool";
9362306a36Sopenharmony_ci              reg = <0x50000000 0x4000000>;
9462306a36Sopenharmony_ci          };
9562306a36Sopenharmony_ci      };
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci...
98