# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) %YAML 1.2 --- $id: http://devicetree.org/schemas/reserved-memory/shared-dma-pool.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# title: /reserved-memory DMA pool maintainers: - devicetree-spec@vger.kernel.org allOf: - $ref: reserved-memory.yaml properties: compatible: oneOf: - const: shared-dma-pool description: > This indicates a region of memory meant to be used as a shared pool of DMA buffers for a set of devices. It can be used by an operating system to instantiate the necessary pool management subsystem if necessary. - const: restricted-dma-pool description: > This indicates a region of memory meant to be used as a pool of restricted DMA buffers for a set of devices. The memory region would be the only region accessible to those devices. When using this, the no-map and reusable properties must not be set, so the operating system can create a virtual mapping that will be used for synchronization. The main purpose for restricted DMA is to mitigate the lack of DMA access control on systems without an IOMMU, which could result in the DMA accessing the system memory at unexpected times and/or unexpected addresses, possibly leading to data leakage or corruption. The feature on its own provides a basic level of protection against the DMA overwriting buffer contents at unexpected times. However, to protect against general data leakage and system memory corruption, the system needs to provide way to lock down the memory access, e.g., MPU. Note that since coherent allocation needs remapping, one must set up another device coherent pool by shared-dma-pool and use dma_alloc_from_dev_coherent instead for atomic coherent allocation. linux,cma-default: type: boolean description: > If this property is present, then Linux will use the region for the default pool of the contiguous memory allocator. linux,dma-default: type: boolean description: > If this property is present, then Linux will use the region for the default pool of the consistent DMA allocator. if: properties: compatible: contains: const: restricted-dma-pool then: properties: no-map: false reusable: false unevaluatedProperties: false examples: - | reserved-memory { #address-cells = <1>; #size-cells = <1>; ranges; /* global autoconfigured region for contiguous allocations */ linux,cma { compatible = "shared-dma-pool"; reusable; size = <0x4000000>; alignment = <0x2000>; linux,cma-default; }; display_reserved: framebuffer@78000000 { reg = <0x78000000 0x800000>; }; restricted_dma_reserved: restricted-dma-pool@50000000 { compatible = "restricted-dma-pool"; reg = <0x50000000 0x4000000>; }; }; ...