182 lines
5.4 KiB
YAML
182 lines
5.4 KiB
YAML
|
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||
|
%YAML 1.2
|
||
|
---
|
||
|
$id: http://devicetree.org/schemas/reserved-memory/reserved-memory.yaml#
|
||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||
|
|
||
|
title: /reserved-memory Child Node Common
|
||
|
|
||
|
maintainers:
|
||
|
- devicetree-spec@vger.kernel.org
|
||
|
|
||
|
description: >
|
||
|
Reserved memory is specified as a node under the /reserved-memory node. The
|
||
|
operating system shall exclude reserved memory from normal usage one can
|
||
|
create child nodes describing particular reserved (excluded from normal use)
|
||
|
memory regions. Such memory regions are usually designed for the special
|
||
|
usage by various device drivers.
|
||
|
|
||
|
Each child of the reserved-memory node specifies one or more regions
|
||
|
of reserved memory. Each child node may either use a 'reg' property to
|
||
|
specify a specific range of reserved memory, or a 'size' property with
|
||
|
optional constraints to request a dynamically allocated block of
|
||
|
memory.
|
||
|
|
||
|
Following the generic-names recommended practice, node names should
|
||
|
reflect the purpose of the node (ie. "framebuffer" or "dma-pool").
|
||
|
Unit address (@<address>) should be appended to the name if the node
|
||
|
is a static allocation.
|
||
|
|
||
|
properties:
|
||
|
reg: true
|
||
|
|
||
|
size:
|
||
|
oneOf:
|
||
|
- $ref: /schemas/types.yaml#/definitions/uint32
|
||
|
- $ref: /schemas/types.yaml#/definitions/uint64
|
||
|
description: >
|
||
|
Length based on parent's \#size-cells. Size in bytes of memory to
|
||
|
reserve.
|
||
|
|
||
|
alignment:
|
||
|
oneOf:
|
||
|
- $ref: /schemas/types.yaml#/definitions/uint32
|
||
|
- $ref: /schemas/types.yaml#/definitions/uint64
|
||
|
description: >
|
||
|
Length based on parent's \#size-cells. Address boundary for
|
||
|
alignment of allocation.
|
||
|
|
||
|
alloc-ranges:
|
||
|
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||
|
description: >
|
||
|
Address and Length pairs. Specifies regions of memory that are
|
||
|
acceptable to allocate from.
|
||
|
|
||
|
iommu-addresses:
|
||
|
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||
|
description: >
|
||
|
A list of phandle and specifier pairs that describe static IO virtual
|
||
|
address space mappings and carveouts associated with a given reserved
|
||
|
memory region. The phandle in the first cell refers to the device for
|
||
|
which the mapping or carveout is to be created.
|
||
|
|
||
|
The specifier consists of an address/size pair and denotes the IO
|
||
|
virtual address range of the region for the given device. The exact
|
||
|
format depends on the values of the "#address-cells" and "#size-cells"
|
||
|
properties of the device referenced via the phandle.
|
||
|
|
||
|
When used in combination with a "reg" property, an IOVA mapping is to
|
||
|
be established for this memory region. One example where this can be
|
||
|
useful is to create an identity mapping for physical memory that the
|
||
|
firmware has configured some hardware to access (such as a bootsplash
|
||
|
framebuffer).
|
||
|
|
||
|
If no "reg" property is specified, the "iommu-addresses" property
|
||
|
defines carveout regions in the IOVA space for the given device. This
|
||
|
can be useful if a certain memory region should not be mapped through
|
||
|
the IOMMU.
|
||
|
|
||
|
no-map:
|
||
|
type: boolean
|
||
|
description: >
|
||
|
Indicates the operating system must not create a virtual mapping
|
||
|
of the region as part of its standard mapping of system memory,
|
||
|
nor permit speculative access to it under any circumstances other
|
||
|
than under the control of the device driver using the region.
|
||
|
|
||
|
reusable:
|
||
|
type: boolean
|
||
|
description: >
|
||
|
The operating system can use the memory in this region with the
|
||
|
limitation that the device driver(s) owning the region need to be
|
||
|
able to reclaim it back. Typically that means that the operating
|
||
|
system can use that region to store volatile or cached data that
|
||
|
can be otherwise regenerated or migrated elsewhere.
|
||
|
|
||
|
allOf:
|
||
|
- if:
|
||
|
required:
|
||
|
- no-map
|
||
|
|
||
|
then:
|
||
|
not:
|
||
|
required:
|
||
|
- reusable
|
||
|
|
||
|
- if:
|
||
|
required:
|
||
|
- reusable
|
||
|
|
||
|
then:
|
||
|
not:
|
||
|
required:
|
||
|
- no-map
|
||
|
|
||
|
oneOf:
|
||
|
- oneOf:
|
||
|
- required:
|
||
|
- reg
|
||
|
|
||
|
- required:
|
||
|
- size
|
||
|
|
||
|
- oneOf:
|
||
|
# IOMMU reservations
|
||
|
- required:
|
||
|
- iommu-addresses
|
||
|
|
||
|
# IOMMU mappings
|
||
|
- required:
|
||
|
- reg
|
||
|
- iommu-addresses
|
||
|
|
||
|
additionalProperties: true
|
||
|
|
||
|
examples:
|
||
|
- |
|
||
|
/ {
|
||
|
compatible = "foo";
|
||
|
model = "foo";
|
||
|
|
||
|
#address-cells = <2>;
|
||
|
#size-cells = <2>;
|
||
|
|
||
|
reserved-memory {
|
||
|
#address-cells = <2>;
|
||
|
#size-cells = <2>;
|
||
|
ranges;
|
||
|
|
||
|
adsp_resv: reservation-adsp {
|
||
|
/*
|
||
|
* Restrict IOVA mappings for ADSP buffers to the 512 MiB region
|
||
|
* from 0x40000000 - 0x5fffffff. Anything outside is reserved by
|
||
|
* the ADSP for I/O memory and private memory allocations.
|
||
|
*/
|
||
|
iommu-addresses = <&adsp 0x0 0x00000000 0x00 0x40000000>,
|
||
|
<&adsp 0x0 0x60000000 0xff 0xa0000000>;
|
||
|
};
|
||
|
|
||
|
fb: framebuffer@90000000 {
|
||
|
reg = <0x0 0x90000000 0x0 0x00800000>;
|
||
|
iommu-addresses = <&dc0 0x0 0x90000000 0x0 0x00800000>;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
bus@0 {
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <1>;
|
||
|
ranges = <0x0 0x0 0x0 0x40000000>;
|
||
|
|
||
|
adsp: adsp@2990000 {
|
||
|
reg = <0x2990000 0x2000>;
|
||
|
memory-region = <&adsp_resv>;
|
||
|
};
|
||
|
|
||
|
dc0: display@15200000 {
|
||
|
reg = <0x15200000 0x10000>;
|
||
|
memory-region = <&fb>;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
...
|