123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- *** Reserved memory regions ***
- 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.
- Parameters for each memory region can be encoded into the device tree
- with the following nodes:
- /reserved-memory node
- ---------------------
- #address-cells, #size-cells (required) - standard definition
- - Should use the same values as the root node
- ranges (required) - standard definition
- - Should be empty
- /reserved-memory/ child nodes
- -----------------------------
- 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:
- Requires either a) or b) below.
- a) static allocation
- reg (required) - standard definition
- b) dynamic allocation
- size (required) - length based on parent's #size-cells
- - Size in bytes of memory to reserve.
- alignment (optional) - length based on parent's #size-cells
- - Address boundary for alignment of allocation.
- alloc-ranges (optional) - prop-encoded-array (address, length pairs).
- - Specifies regions of memory that are
- acceptable to allocate from.
- If both reg and size are present, then the reg property takes precedence
- and size is ignored.
- Additional properties:
- compatible (optional) - standard definition
- - may contain the following strings:
- - shared-dma-pool: 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 instanciate the necessary pool
- management subsystem if necessary.
- - vendor specific string in the form <vendor>,[<device>-]<usage>
- no-map (optional) - empty property
- - 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 (optional) - empty property
- - 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.
- Linux implementation note:
- - If a "linux,cma-default" property is present, then Linux will use the
- region for the default pool of the contiguous memory allocator.
- Device node references to reserved memory
- -----------------------------------------
- Regions in the /reserved-memory node may be referenced by other device
- nodes by adding a memory-region property to the device node.
- memory-region (optional) - phandle, specifier pairs to children of /reserved-memory
- Example
- -------
- This example defines 3 contiguous regions are defined for Linux kernel:
- one default of all device drivers (named linux,cma@72000000 and 64MiB in size),
- one dedicated to the framebuffer device (named framebuffer@78000000, 8MiB), and
- one for multimedia processing (named multimedia-memory@77000000, 64MiB).
- / {
- #address-cells = <1>;
- #size-cells = <1>;
- memory {
- reg = <0x40000000 0x40000000>;
- };
- 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>;
- };
- multimedia_reserved: multimedia@77000000 {
- compatible = "acme,multimedia-memory";
- reg = <0x77000000 0x4000000>;
- };
- };
- /* ... */
- fb0: video@12300000 {
- memory-region = <&display_reserved>;
- /* ... */
- };
- scaler: scaler@12500000 {
- memory-region = <&multimedia_reserved>;
- /* ... */
- };
- codec: codec@12600000 {
- memory-region = <&multimedia_reserved>;
- /* ... */
- };
- };
|