| # 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>; |
| }; |
| }; |
| |
| ... |