mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
4.9 KiB
141 lines
4.9 KiB
*** 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 instantiate 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. |
|
|
|
A node must not carry both the no-map and the reusable property as these are |
|
logically contradictory. |
|
|
|
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. |
|
|
|
- If a "linux,dma-default" property is present, then Linux will use the |
|
region for the default pool of the consistent DMA 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 |
|
memory-region-names (optional) - a list of names, one for each corresponding |
|
entry in the memory-region property |
|
|
|
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>; |
|
/* ... */ |
|
}; |
|
};
|
|
|