* Memory binding The /memory node provides basic information about the address and size of the physical memory. This node is usually filled or updated by the bootloader, depending on the actual memory configuration of the given hardware. The memory layout is described by the folllowing node: memory { reg = <(baseaddr1) (size1) (baseaddr2) (size2) ... (baseaddrN) (sizeN)>; }; baseaddrX: the base address of the defined memory bank sizeX: the size of the defined memory bank More than one memory bank can be defined. * Memory regions In /memory node one can create additional nodes describing particular memory regions, usually for the special usage by various device drivers. A good example are contiguous memory allocations or memory sharing with other operating system on the same hardware board. Those special memory regions might depend on the board configuration and devices used on the target system. Parameters for each memory region can be encoded into the device tree wit the following convention: (name): region@(base-address) { reg = <(baseaddr) (size)>; (linux,contiguous-region); (linux,default-contiguous-region); label = (unique_name); }; name: an name given to the defined region. base-address: the base address of the defined region. size: the size of the memory region. linux,contiguous-region: property indicating that the defined memory region is used for contiguous memory allocations, Linux specific (optional) linux,default-contiguous-region: property indicating that the region is the default region for all contiguous memory allocations, Linux specific (optional) label: an internal name used for automatically associating the cma region with a given device. The label is optional; if the label is not given the client is responsible for calling the appropriate functions to associate the region with a device. * Device nodes Once the regions in the /memory node are defined, they can be assigned to device some device nodes for their special use. The following properties are defined: linux,contiguous-region = <&phandle>; This property indicates that the device driver should use the memory region pointed by the given phandle. * Example: This example defines a memory consisting of 4 memory banks. 2 contiguous regions are defined for Linux kernel, one default of all device drivers (named contig_mem, placed at 0x72000000, 64MiB) and one dedicated to the framebuffer device (named display_mem, placed at 0x78000000, 16MiB). The display_mem region is then assigned to fb@12300000 device for contiguous memory allocation with Linux kernel drivers. The reason for creating a separate region for framebuffer device is to match the framebuffer address of from configuration done by bootloader, so once Linux kernel drivers starts, no glitches on the displayed boot logo appears. / { /* ... */ memory { reg = <0x40000000 0x10000000 0x50000000 0x10000000 0x60000000 0x10000000 0x70000000 0x10000000>; contig_mem: region@72000000 { linux,contiguous-region; linux,default-contiguous-region; reg = <0x72000000 0x4000000>; }; display_mem: region@78000000 { linux,contiguous-region; reg = <0x78000000 0x1000000>; }; }; fb@12300000 { linux,contiguous-region = <&display_mem>; status = "okay"; }; };