1Flash partitions in device tree
2===============================
3
4Flash devices can be partitioned into one or more functional ranges (e.g. "boot
5code", "nvram", "kernel").
6
7Different devices may be partitioned in a different ways. Some may use a fixed
8flash layout set at production time. Some may use on-flash table that describes
9the geometry and naming/purpose of each functional region. It is also possible
10to see these methods mixed.
11
12To assist system software in locating partitions, we allow describing which
13method is used for a given flash device. To describe the method there should be
14a subnode of the flash device that is named 'partitions'. It must have a
15'compatible' property, which is used to identify the method to use.
16
17When a single partition is represented with a DT node (it depends on a used
18format) it may also be described using above rules ('compatible' and optionally
19some extra properties / subnodes). It allows describing more complex,
20hierarchical (multi-level) layouts and should be used if there is some
21significant relation between partitions or some partition internally uses
22another partitioning method.
23
24Available bindings are listed in the "partitions" subdirectory.
25
26
27Fixed Partitions
28================
29
30Partitions can be represented by sub-nodes of a flash device. This can be used
31on platforms which have strong conventions about which portions of a flash are
32used for what purposes, but which don't use an on-flash partition table such
33as RedBoot.
34
35The partition table should be a subnode of the flash node and should be named
36'partitions'. This node should have the following property:
37- compatible : (required) must be "fixed-partitions"
38Partitions are then defined in subnodes of the partitions node.
39
40For backwards compatibility partitions as direct subnodes of the flash device are
41supported. This use is discouraged.
42NOTE: also for backwards compatibility, direct subnodes that have a compatible
43string are not considered partitions, as they may be used for other bindings.
44
45#address-cells & #size-cells must both be present in the partitions subnode of the
46flash device. There are two valid values for both:
47<1>: for partitions that require a single 32-bit cell to represent their
48     size/address (aka the value is below 4 GiB)
49<2>: for partitions that require two 32-bit cells to represent their
50     size/address (aka the value is 4 GiB or greater).
51
52Required properties:
53- reg : The partition's offset and size within the flash
54
55Optional properties:
56- label : The label / name for this partition.  If omitted, the label is taken
57  from the node name (excluding the unit address).
58- read-only : This parameter, if present, is a hint to Linux that this
59  partition should only be mounted read-only. This is usually used for flash
60  partitions containing early-boot firmware images or data which should not be
61  clobbered.
62- lock : Do not unlock the partition at initialization time (not supported on
63  all devices)
64
65Examples:
66
67
68flash@0 {
69	partitions {
70		compatible = "fixed-partitions";
71		#address-cells = <1>;
72		#size-cells = <1>;
73
74		partition@0 {
75			label = "u-boot";
76			reg = <0x0000000 0x100000>;
77			read-only;
78		};
79
80		uimage@100000 {
81			reg = <0x0100000 0x200000>;
82		};
83	};
84};
85
86flash@1 {
87	partitions {
88		compatible = "fixed-partitions";
89		#address-cells = <1>;
90		#size-cells = <2>;
91
92		/* a 4 GiB partition */
93		partition@0 {
94			label = "filesystem";
95			reg = <0x00000000 0x1 0x00000000>;
96		};
97	};
98};
99
100flash@2 {
101	partitions {
102		compatible = "fixed-partitions";
103		#address-cells = <2>;
104		#size-cells = <2>;
105
106		/* an 8 GiB partition */
107		partition@0 {
108			label = "filesystem #1";
109			reg = <0x0 0x00000000 0x2 0x00000000>;
110		};
111
112		/* a 4 GiB partition */
113		partition@200000000 {
114			label = "filesystem #2";
115			reg = <0x2 0x00000000 0x1 0x00000000>;
116		};
117	};
118};
119
120flash@3 {
121	partitions {
122		compatible = "fixed-partitions";
123		#address-cells = <1>;
124		#size-cells = <1>;
125
126		partition@0 {
127			label = "bootloader";
128			reg = <0x000000 0x100000>;
129			read-only;
130		};
131
132		firmware@100000 {
133			label = "firmware";
134			reg = <0x100000 0xe00000>;
135			compatible = "brcm,trx";
136		};
137
138		calibration@f00000 {
139			label = "calibration";
140			reg = <0xf00000 0x100000>;
141			compatible = "fixed-partitions";
142			ranges = <0 0xf00000 0x100000>;
143			#address-cells = <1>;
144			#size-cells = <1>;
145
146			partition@0 {
147				label = "wifi0";
148				reg = <0x000000 0x080000>;
149			};
150
151			partition@80000 {
152				label = "wifi1";
153				reg = <0x080000 0x080000>;
154			};
155		};
156	};
157};
158