98 lines
3.2 KiB
YAML
98 lines
3.2 KiB
YAML
# 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>;
|
|
};
|
|
};
|
|
|
|
...
|