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