aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/powerpc/booting-without-of.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/powerpc/booting-without-of.txt')
-rw-r--r--Documentation/powerpc/booting-without-of.txt80
1 files changed, 39 insertions, 41 deletions
diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt
index 88cdb592fdf9..033a3f3b3ab7 100644
--- a/Documentation/powerpc/booting-without-of.txt
+++ b/Documentation/powerpc/booting-without-of.txt
@@ -39,7 +39,7 @@
39 and property data. The old style variable 39 and property data. The old style variable
40 alignment would make it impossible to do 40 alignment would make it impossible to do
41 "simple" insertion of properties using 41 "simple" insertion of properties using
42 memove (thanks Milton for 42 memmove (thanks Milton for
43 noticing). Updated kernel patch as well 43 noticing). Updated kernel patch as well
44 - Correct a few more alignment constraints 44 - Correct a few more alignment constraints
45 - Add a chapter about the device-tree 45 - Add a chapter about the device-tree
@@ -55,7 +55,7 @@
55 55
56 ToDo: 56 ToDo:
57 - Add some definitions of interrupt tree (simple/complex) 57 - Add some definitions of interrupt tree (simple/complex)
58 - Add some definitions for pci host bridges 58 - Add some definitions for PCI host bridges
59 - Add some common address format examples 59 - Add some common address format examples
60 - Add definitions for standard properties and "compatible" 60 - Add definitions for standard properties and "compatible"
61 names for cells that are not already defined by the existing 61 names for cells that are not already defined by the existing
@@ -114,7 +114,7 @@ it with special cases.
114 forth words isn't required), you can enter the kernel with: 114 forth words isn't required), you can enter the kernel with:
115 115
116 r5 : OF callback pointer as defined by IEEE 1275 116 r5 : OF callback pointer as defined by IEEE 1275
117 bindings to powerpc. Only the 32 bit client interface 117 bindings to powerpc. Only the 32-bit client interface
118 is currently supported 118 is currently supported
119 119
120 r3, r4 : address & length of an initrd if any or 0 120 r3, r4 : address & length of an initrd if any or 0
@@ -194,7 +194,7 @@ it with special cases.
194 for this is to keep kernels on embedded systems small and efficient; 194 for this is to keep kernels on embedded systems small and efficient;
195 part of this is due to the fact the code is already that way. In the 195 part of this is due to the fact the code is already that way. In the
196 future, a kernel may support multiple platforms, but only if the 196 future, a kernel may support multiple platforms, but only if the
197 platforms feature the same core architectire. A single kernel build 197 platforms feature the same core architecture. A single kernel build
198 cannot support both configurations with Book E and configurations 198 cannot support both configurations with Book E and configurations
199 with classic Powerpc architectures. 199 with classic Powerpc architectures.
200 200
@@ -215,7 +215,7 @@ of the boot sequences.... someone speak up if this is wrong!
215 enable another config option to select the specific board 215 enable another config option to select the specific board
216 supported. 216 supported.
217 217
218NOTE: If ben doesn't merge the setup files, may need to change this to 218NOTE: If Ben doesn't merge the setup files, may need to change this to
219point to setup_32.c 219point to setup_32.c
220 220
221 221
@@ -256,7 +256,7 @@ struct boot_param_header {
256 u32 off_dt_struct; /* offset to structure */ 256 u32 off_dt_struct; /* offset to structure */
257 u32 off_dt_strings; /* offset to strings */ 257 u32 off_dt_strings; /* offset to strings */
258 u32 off_mem_rsvmap; /* offset to memory reserve map 258 u32 off_mem_rsvmap; /* offset to memory reserve map
259*/ 259 */
260 u32 version; /* format version */ 260 u32 version; /* format version */
261 u32 last_comp_version; /* last compatible version */ 261 u32 last_comp_version; /* last compatible version */
262 262
@@ -276,7 +276,7 @@ struct boot_param_header {
276#define OF_DT_HEADER 0xd00dfeed /* 4: version, 276#define OF_DT_HEADER 0xd00dfeed /* 4: version,
277 4: total size */ 277 4: total size */
278#define OF_DT_BEGIN_NODE 0x1 /* Start node: full name 278#define OF_DT_BEGIN_NODE 0x1 /* Start node: full name
279*/ 279 */
280#define OF_DT_END_NODE 0x2 /* End node */ 280#define OF_DT_END_NODE 0x2 /* End node */
281#define OF_DT_PROP 0x3 /* Property: name off, 281#define OF_DT_PROP 0x3 /* Property: name off,
282 size, content */ 282 size, content */
@@ -313,9 +313,8 @@ struct boot_param_header {
313 - off_mem_rsvmap 313 - off_mem_rsvmap
314 314
315 This is an offset from the beginning of the header to the start 315 This is an offset from the beginning of the header to the start
316 of the reserved memory map. This map is a list of pairs of 64 316 of the reserved memory map. This map is a list of pairs of 64-
317 bit integers. Each pair is a physical address and a size. The 317 bit integers. Each pair is a physical address and a size. The
318
319 list is terminated by an entry of size 0. This map provides the 318 list is terminated by an entry of size 0. This map provides the
320 kernel with a list of physical memory areas that are "reserved" 319 kernel with a list of physical memory areas that are "reserved"
321 and thus not to be used for memory allocations, especially during 320 and thus not to be used for memory allocations, especially during
@@ -328,7 +327,7 @@ struct boot_param_header {
328 contain _at least_ this DT block itself (header,total_size). If 327 contain _at least_ this DT block itself (header,total_size). If
329 you are passing an initrd to the kernel, you should reserve it as 328 you are passing an initrd to the kernel, you should reserve it as
330 well. You do not need to reserve the kernel image itself. The map 329 well. You do not need to reserve the kernel image itself. The map
331 should be 64 bit aligned. 330 should be 64-bit aligned.
332 331
333 - version 332 - version
334 333
@@ -478,7 +477,7 @@ referencing another node via "phandle" is when laying out the
478interrupt tree which will be described in a further version of this 477interrupt tree which will be described in a further version of this
479document. 478document.
480 479
481This "linux, phandle" property is a 32 bit value that uniquely 480This "linux, phandle" property is a 32-bit value that uniquely
482identifies a node. You are free to use whatever values or system of 481identifies a node. You are free to use whatever values or system of
483values, internal pointers, or whatever to generate these, the only 482values, internal pointers, or whatever to generate these, the only
484requirement is that every node for which you provide that property has 483requirement is that every node for which you provide that property has
@@ -488,7 +487,7 @@ Here is an example of a simple device-tree. In this example, an "o"
488designates a node followed by the node unit name. Properties are 487designates a node followed by the node unit name. Properties are
489presented with their name followed by their content. "content" 488presented with their name followed by their content. "content"
490represents an ASCII string (zero terminated) value, while <content> 489represents an ASCII string (zero terminated) value, while <content>
491represents a 32 bit hexadecimal value. The various nodes in this 490represents a 32-bit hexadecimal value. The various nodes in this
492example will be discussed in a later chapter. At this point, it is 491example will be discussed in a later chapter. At this point, it is
493only meant to give you a idea of what a device-tree looks like. I have 492only meant to give you a idea of what a device-tree looks like. I have
494purposefully kept the "name" and "linux,phandle" properties which 493purposefully kept the "name" and "linux,phandle" properties which
@@ -560,15 +559,15 @@ Here's the basic structure of a single node:
560 * [align gap to next 4 bytes boundary] 559 * [align gap to next 4 bytes boundary]
561 * for each property: 560 * for each property:
562 * token OF_DT_PROP (that is 0x00000003) 561 * token OF_DT_PROP (that is 0x00000003)
563 * 32 bit value of property value size in bytes (or 0 of no 562 * 32-bit value of property value size in bytes (or 0 if no
564 * value) 563 value)
565 * 32 bit value of offset in string block of property name 564 * 32-bit value of offset in string block of property name
566 * property value data if any 565 * property value data if any
567 * [align gap to next 4 bytes boundary] 566 * [align gap to next 4 bytes boundary]
568 * [child nodes if any] 567 * [child nodes if any]
569 * token OF_DT_END_NODE (that is 0x00000002) 568 * token OF_DT_END_NODE (that is 0x00000002)
570 569
571So the node content can be summarised as a start token, a full path, 570So the node content can be summarized as a start token, a full path,
572a list of properties, a list of child nodes, and an end token. Every 571a list of properties, a list of child nodes, and an end token. Every
573child node is a full node structure itself as defined above. 572child node is a full node structure itself as defined above.
574 573
@@ -600,7 +599,7 @@ provide those properties yourself.
600---------------------------------------------- 599----------------------------------------------
601 600
602The general rule is documented in the various Open Firmware 601The general rule is documented in the various Open Firmware
603documentations. If you chose to describe a bus with the device-tree 602documentations. If you choose to describe a bus with the device-tree
604and there exist an OF bus binding, then you should follow the 603and there exist an OF bus binding, then you should follow the
605specification. However, the kernel does not require every single 604specification. However, the kernel does not require every single
606device or bus to be described by the device tree. 605device or bus to be described by the device tree.
@@ -613,9 +612,9 @@ those properties defining addresses format for devices directly mapped
613on the processor bus. 612on the processor bus.
614 613
615Those 2 properties define 'cells' for representing an address and a 614Those 2 properties define 'cells' for representing an address and a
616size. A "cell" is a 32 bit number. For example, if both contain 2 615size. A "cell" is a 32-bit number. For example, if both contain 2
617like the example tree given above, then an address and a size are both 616like the example tree given above, then an address and a size are both
618composed of 2 cells, and each is a 64 bit number (cells are 617composed of 2 cells, and each is a 64-bit number (cells are
619concatenated and expected to be in big endian format). Another example 618concatenated and expected to be in big endian format). Another example
620is the way Apple firmware defines them, with 2 cells for an address 619is the way Apple firmware defines them, with 2 cells for an address
621and one cell for a size. Most 32-bit implementations should define 620and one cell for a size. Most 32-bit implementations should define
@@ -649,7 +648,7 @@ prom_parse.c file of the recent kernels for your bus type.
649 648
650The "reg" property only defines addresses and sizes (if #size-cells 649The "reg" property only defines addresses and sizes (if #size-cells
651is non-0) within a given bus. In order to translate addresses upward 650is non-0) within a given bus. In order to translate addresses upward
652(that is into parent bus addresses, and possibly into cpu physical 651(that is into parent bus addresses, and possibly into CPU physical
653addresses), all busses must contain a "ranges" property. If the 652addresses), all busses must contain a "ranges" property. If the
654"ranges" property is missing at a given level, it's assumed that 653"ranges" property is missing at a given level, it's assumed that
655translation isn't possible. The format of the "ranges" property for a 654translation isn't possible. The format of the "ranges" property for a
@@ -665,9 +664,9 @@ example, for a PCI host controller, that would be a CPU address. For a
665PCI<->ISA bridge, that would be a PCI address. It defines the base 664PCI<->ISA bridge, that would be a PCI address. It defines the base
666address in the parent bus where the beginning of that range is mapped. 665address in the parent bus where the beginning of that range is mapped.
667 666
668For a new 64 bit powerpc board, I recommend either the 2/2 format or 667For a new 64-bit powerpc board, I recommend either the 2/2 format or
669Apple's 2/1 format which is slightly more compact since sizes usually 668Apple's 2/1 format which is slightly more compact since sizes usually
670fit in a single 32 bit word. New 32 bit powerpc boards should use a 669fit in a single 32-bit word. New 32-bit powerpc boards should use a
6711/1 format, unless the processor supports physical addresses greater 6701/1 format, unless the processor supports physical addresses greater
672than 32-bits, in which case a 2/1 format is recommended. 671than 32-bits, in which case a 2/1 format is recommended.
673 672
@@ -781,7 +780,7 @@ address which can extend beyond that limit.
781 Required properties: 780 Required properties:
782 781
783 - device_type : has to be "cpu" 782 - device_type : has to be "cpu"
784 - reg : This is the physical cpu number, it's a single 32 bit cell 783 - reg : This is the physical CPU number, it's a single 32-bit cell
785 and is also used as-is as the unit number for constructing the 784 and is also used as-is as the unit number for constructing the
786 unit name in the full path. For example, with 2 CPUs, you would 785 unit name in the full path. For example, with 2 CPUs, you would
787 have the full path: 786 have the full path:
@@ -802,7 +801,7 @@ address which can extend beyond that limit.
802 the kernel timebase/decrementer calibration based on this 801 the kernel timebase/decrementer calibration based on this
803 value. 802 value.
804 - clock-frequency : a cell indicating the CPU core clock frequency 803 - clock-frequency : a cell indicating the CPU core clock frequency
805 in Hz. A new property will be defined for 64 bit values, but if 804 in Hz. A new property will be defined for 64-bit values, but if
806 your frequency is < 4Ghz, one cell is enough. Here as well as 805 your frequency is < 4Ghz, one cell is enough. Here as well as
807 for the above, the common code doesn't use that property, but 806 for the above, the common code doesn't use that property, but
808 you are welcome to re-use the pSeries or Maple one. A future 807 you are welcome to re-use the pSeries or Maple one. A future
@@ -924,8 +923,7 @@ address which can extend beyond that limit.
924 The SOC node may contain child nodes for each SOC device that the 923 The SOC node may contain child nodes for each SOC device that the
925 platform uses. Nodes should not be created for devices which exist 924 platform uses. Nodes should not be created for devices which exist
926 on the SOC but are not used by a particular platform. See chapter VI 925 on the SOC but are not used by a particular platform. See chapter VI
927 for more information on how to specify devices that are part of an 926 for more information on how to specify devices that are part of a SOC.
928SOC.
929 927
930 Example SOC node for the MPC8540: 928 Example SOC node for the MPC8540:
931 929
@@ -988,7 +986,7 @@ The syntax of the dtc tool is
988 [-o output-filename] [-V output_version] input_filename 986 [-o output-filename] [-V output_version] input_filename
989 987
990 988
991The "output_version" defines what versio of the "blob" format will be 989The "output_version" defines what version of the "blob" format will be
992generated. Supported versions are 1,2,3 and 16. The default is 990generated. Supported versions are 1,2,3 and 16. The default is
993currently version 3 but that may change in the future to version 16. 991currently version 3 but that may change in the future to version 16.
994 992
@@ -1010,12 +1008,12 @@ supported currently at the toplevel.
1010 */ 1008 */
1011 1009
1012 property2 = <1234abcd>; /* define a property containing a 1010 property2 = <1234abcd>; /* define a property containing a
1013 * numerical 32 bits value (hexadecimal) 1011 * numerical 32-bit value (hexadecimal)
1014 */ 1012 */
1015 1013
1016 property3 = <12345678 12345678 deadbeef>; 1014 property3 = <12345678 12345678 deadbeef>;
1017 /* define a property containing 3 1015 /* define a property containing 3
1018 * numerical 32 bits values (cells) in 1016 * numerical 32-bit values (cells) in
1019 * hexadecimal 1017 * hexadecimal
1020 */ 1018 */
1021 property4 = [0a 0b 0c 0d de ea ad be ef]; 1019 property4 = [0a 0b 0c 0d de ea ad be ef];
@@ -1084,7 +1082,7 @@ while all this has been defined and implemented.
1084 its usage in early_init_devtree(), and the corresponding various 1082 its usage in early_init_devtree(), and the corresponding various
1085 early_init_dt_scan_*() callbacks. That code can be re-used in a 1083 early_init_dt_scan_*() callbacks. That code can be re-used in a
1086 GPL bootloader, and as the author of that code, I would be happy 1084 GPL bootloader, and as the author of that code, I would be happy
1087 to discuss possible free licencing to any vendor who wishes to 1085 to discuss possible free licensing to any vendor who wishes to
1088 integrate all or part of this code into a non-GPL bootloader. 1086 integrate all or part of this code into a non-GPL bootloader.
1089 1087
1090 1088
@@ -1093,7 +1091,7 @@ VI - System-on-a-chip devices and nodes
1093======================================= 1091=======================================
1094 1092
1095Many companies are now starting to develop system-on-a-chip 1093Many companies are now starting to develop system-on-a-chip
1096processors, where the processor core (cpu) and many peripheral devices 1094processors, where the processor core (CPU) and many peripheral devices
1097exist on a single piece of silicon. For these SOCs, an SOC node 1095exist on a single piece of silicon. For these SOCs, an SOC node
1098should be used that defines child nodes for the devices that make 1096should be used that defines child nodes for the devices that make
1099up the SOC. While platforms are not required to use this model in 1097up the SOC. While platforms are not required to use this model in
@@ -1300,10 +1298,10 @@ platforms are moved over to use the flattened-device-tree model.
1300 and additions : 1298 and additions :
1301 1299
1302 Required properties : 1300 Required properties :
1303 - compatible : Should be "fsl-usb2-mph" for multi port host usb 1301 - compatible : Should be "fsl-usb2-mph" for multi port host USB
1304 controllers, or "fsl-usb2-dr" for dual role usb controllers 1302 controllers, or "fsl-usb2-dr" for dual role USB controllers
1305 - phy_type : For multi port host usb controllers, should be one of 1303 - phy_type : For multi port host USB controllers, should be one of
1306 "ulpi", or "serial". For dual role usb controllers, should be 1304 "ulpi", or "serial". For dual role USB controllers, should be
1307 one of "ulpi", "utmi", "utmi_wide", or "serial". 1305 one of "ulpi", "utmi", "utmi_wide", or "serial".
1308 - reg : Offset and length of the register set for the device 1306 - reg : Offset and length of the register set for the device
1309 - port0 : boolean; if defined, indicates port0 is connected for 1307 - port0 : boolean; if defined, indicates port0 is connected for
@@ -1327,7 +1325,7 @@ platforms are moved over to use the flattened-device-tree model.
1327 - interrupt-parent : the phandle for the interrupt controller that 1325 - interrupt-parent : the phandle for the interrupt controller that
1328 services interrupts for this device. 1326 services interrupts for this device.
1329 1327
1330 Example multi port host usb controller device node : 1328 Example multi port host USB controller device node :
1331 usb@22000 { 1329 usb@22000 {
1332 device_type = "usb"; 1330 device_type = "usb";
1333 compatible = "fsl-usb2-mph"; 1331 compatible = "fsl-usb2-mph";
@@ -1341,7 +1339,7 @@ platforms are moved over to use the flattened-device-tree model.
1341 port1; 1339 port1;
1342 }; 1340 };
1343 1341
1344 Example dual role usb controller device node : 1342 Example dual role USB controller device node :
1345 usb@23000 { 1343 usb@23000 {
1346 device_type = "usb"; 1344 device_type = "usb";
1347 compatible = "fsl-usb2-dr"; 1345 compatible = "fsl-usb2-dr";
@@ -1375,7 +1373,7 @@ platforms are moved over to use the flattened-device-tree model.
1375 - channel-fifo-len : An integer representing the number of 1373 - channel-fifo-len : An integer representing the number of
1376 descriptor pointers each channel fetch fifo can hold. 1374 descriptor pointers each channel fetch fifo can hold.
1377 - exec-units-mask : The bitmask representing what execution units 1375 - exec-units-mask : The bitmask representing what execution units
1378 (EUs) are available. It's a single 32 bit cell. EU information 1376 (EUs) are available. It's a single 32-bit cell. EU information
1379 should be encoded following the SEC's Descriptor Header Dword 1377 should be encoded following the SEC's Descriptor Header Dword
1380 EU_SEL0 field documentation, i.e. as follows: 1378 EU_SEL0 field documentation, i.e. as follows:
1381 1379
@@ -1391,7 +1389,7 @@ platforms are moved over to use the flattened-device-tree model.
1391 bits 8 through 31 are reserved for future SEC EUs. 1389 bits 8 through 31 are reserved for future SEC EUs.
1392 1390
1393 - descriptor-types-mask : The bitmask representing what descriptors 1391 - descriptor-types-mask : The bitmask representing what descriptors
1394 are available. It's a single 32 bit cell. Descriptor type 1392 are available. It's a single 32-bit cell. Descriptor type
1395 information should be encoded following the SEC's Descriptor 1393 information should be encoded following the SEC's Descriptor
1396 Header Dword DESC_TYPE field documentation, i.e. as follows: 1394 Header Dword DESC_TYPE field documentation, i.e. as follows:
1397 1395
@@ -1480,7 +1478,7 @@ platforms are moved over to use the flattened-device-tree model.
1480 Required properties: 1478 Required properties:
1481 - device_type : should be "spi". 1479 - device_type : should be "spi".
1482 - compatible : should be "fsl_spi". 1480 - compatible : should be "fsl_spi".
1483 - mode : the spi operation mode, it can be "cpu" or "qe". 1481 - mode : the SPI operation mode, it can be "cpu" or "qe".
1484 - reg : Offset and length of the register set for the device 1482 - reg : Offset and length of the register set for the device
1485 - interrupts : <a b> where a is the interrupt number and b is a 1483 - interrupts : <a b> where a is the interrupt number and b is a
1486 field that represents an encoding of the sense and level 1484 field that represents an encoding of the sense and level
@@ -1706,7 +1704,7 @@ platforms are moved over to use the flattened-device-tree model.
1706 - partitions : Several pairs of 32-bit values where the first value is 1704 - partitions : Several pairs of 32-bit values where the first value is
1707 partition's offset from the start of the device and the second one is 1705 partition's offset from the start of the device and the second one is
1708 partition size in bytes with LSB used to signify a read only 1706 partition size in bytes with LSB used to signify a read only
1709 partition (so, the parition size should always be an even number). 1707 partition (so, the partition size should always be an even number).
1710 - partition-names : The list of concatenated zero terminated strings 1708 - partition-names : The list of concatenated zero terminated strings
1711 representing the partition names. 1709 representing the partition names.
1712 - probe-type : The type of probe which should be done for the chip 1710 - probe-type : The type of probe which should be done for the chip