|
@@ -13,7 +13,7 @@ Table of Contents
|
|
|
|
|
|
I - Introduction
|
|
I - Introduction
|
|
1) Entry point for arch/powerpc
|
|
1) Entry point for arch/powerpc
|
|
- 2) Board support
|
|
|
|
|
|
+ 2) Entry point for arch/arm
|
|
|
|
|
|
II - The DT block format
|
|
II - The DT block format
|
|
1) Header
|
|
1) Header
|
|
@@ -41,13 +41,6 @@ Table of Contents
|
|
VI - System-on-a-chip devices and nodes
|
|
VI - System-on-a-chip devices and nodes
|
|
1) Defining child nodes of an SOC
|
|
1) Defining child nodes of an SOC
|
|
2) Representing devices without a current OF specification
|
|
2) Representing devices without a current OF specification
|
|
- a) PHY nodes
|
|
|
|
- b) Interrupt controllers
|
|
|
|
- c) 4xx/Axon EMAC ethernet nodes
|
|
|
|
- d) Xilinx IP cores
|
|
|
|
- e) USB EHCI controllers
|
|
|
|
- f) MDIO on GPIOs
|
|
|
|
- g) SPI busses
|
|
|
|
|
|
|
|
VII - Specifying interrupt information for devices
|
|
VII - Specifying interrupt information for devices
|
|
1) interrupts property
|
|
1) interrupts property
|
|
@@ -123,7 +116,7 @@ Revision Information
|
|
I - Introduction
|
|
I - Introduction
|
|
================
|
|
================
|
|
|
|
|
|
-During the recent development of the Linux/ppc64 kernel, and more
|
|
|
|
|
|
+During the development of the Linux/ppc64 kernel, and more
|
|
specifically, the addition of new platform types outside of the old
|
|
specifically, the addition of new platform types outside of the old
|
|
IBM pSeries/iSeries pair, it was decided to enforce some strict rules
|
|
IBM pSeries/iSeries pair, it was decided to enforce some strict rules
|
|
regarding the kernel entry and bootloader <-> kernel interfaces, in
|
|
regarding the kernel entry and bootloader <-> kernel interfaces, in
|
|
@@ -146,7 +139,7 @@ section III, but, for example, the kernel does not require you to
|
|
create a node for every PCI device in the system. It is a requirement
|
|
create a node for every PCI device in the system. It is a requirement
|
|
to have a node for PCI host bridges in order to provide interrupt
|
|
to have a node for PCI host bridges in order to provide interrupt
|
|
routing informations and memory/IO ranges, among others. It is also
|
|
routing informations and memory/IO ranges, among others. It is also
|
|
-recommended to define nodes for on chip devices and other busses that
|
|
|
|
|
|
+recommended to define nodes for on chip devices and other buses that
|
|
don't specifically fit in an existing OF specification. This creates a
|
|
don't specifically fit in an existing OF specification. This creates a
|
|
great flexibility in the way the kernel can then probe those and match
|
|
great flexibility in the way the kernel can then probe those and match
|
|
drivers to device, without having to hard code all sorts of tables. It
|
|
drivers to device, without having to hard code all sorts of tables. It
|
|
@@ -158,7 +151,7 @@ it with special cases.
|
|
1) Entry point for arch/powerpc
|
|
1) Entry point for arch/powerpc
|
|
-------------------------------
|
|
-------------------------------
|
|
|
|
|
|
- There is one and one single entry point to the kernel, at the start
|
|
|
|
|
|
+ There is one single entry point to the kernel, at the start
|
|
of the kernel image. That entry point supports two calling
|
|
of the kernel image. That entry point supports two calling
|
|
conventions:
|
|
conventions:
|
|
|
|
|
|
@@ -210,12 +203,6 @@ it with special cases.
|
|
with all CPUs. The way to do that with method b) will be
|
|
with all CPUs. The way to do that with method b) will be
|
|
described in a later revision of this document.
|
|
described in a later revision of this document.
|
|
|
|
|
|
-
|
|
|
|
-2) Board support
|
|
|
|
-----------------
|
|
|
|
-
|
|
|
|
-64-bit kernels:
|
|
|
|
-
|
|
|
|
Board supports (platforms) are not exclusive config options. An
|
|
Board supports (platforms) are not exclusive config options. An
|
|
arbitrary set of board supports can be built in a single kernel
|
|
arbitrary set of board supports can be built in a single kernel
|
|
image. The kernel will "know" what set of functions to use for a
|
|
image. The kernel will "know" what set of functions to use for a
|
|
@@ -234,47 +221,49 @@ it with special cases.
|
|
containing the various callbacks that the generic code will
|
|
containing the various callbacks that the generic code will
|
|
use to get to your platform specific code
|
|
use to get to your platform specific code
|
|
|
|
|
|
- c) Add a reference to your "ppc_md" structure in the
|
|
|
|
- "machines" table in arch/powerpc/kernel/setup_64.c if you are
|
|
|
|
- a 64-bit platform.
|
|
|
|
-
|
|
|
|
- d) request and get assigned a platform number (see PLATFORM_*
|
|
|
|
- constants in arch/powerpc/include/asm/processor.h
|
|
|
|
-
|
|
|
|
-32-bit embedded kernels:
|
|
|
|
-
|
|
|
|
- Currently, board support is essentially an exclusive config option.
|
|
|
|
- The kernel is configured for a single platform. Part of the reason
|
|
|
|
- for this is to keep kernels on embedded systems small and efficient;
|
|
|
|
- part of this is due to the fact the code is already that way. In the
|
|
|
|
- future, a kernel may support multiple platforms, but only if the
|
|
|
|
|
|
+ A kernel image may support multiple platforms, but only if the
|
|
platforms feature the same core architecture. A single kernel build
|
|
platforms feature the same core architecture. A single kernel build
|
|
cannot support both configurations with Book E and configurations
|
|
cannot support both configurations with Book E and configurations
|
|
with classic Powerpc architectures.
|
|
with classic Powerpc architectures.
|
|
|
|
|
|
- 32-bit embedded platforms that are moved into arch/powerpc using a
|
|
|
|
- flattened device tree should adopt the merged tree practice of
|
|
|
|
- setting ppc_md up dynamically, even though the kernel is currently
|
|
|
|
- built with support for only a single platform at a time. This allows
|
|
|
|
- unification of the setup code, and will make it easier to go to a
|
|
|
|
- multiple-platform-support model in the future.
|
|
|
|
|
|
+2) Entry point for arch/arm
|
|
|
|
+---------------------------
|
|
|
|
+
|
|
|
|
+ There is one single entry point to the kernel, at the start
|
|
|
|
+ of the kernel image. That entry point supports two calling
|
|
|
|
+ conventions. A summary of the interface is described here. A full
|
|
|
|
+ description of the boot requirements is documented in
|
|
|
|
+ Documentation/arm/Booting
|
|
|
|
+
|
|
|
|
+ a) ATAGS interface. Minimal information is passed from firmware
|
|
|
|
+ to the kernel with a tagged list of predefined parameters.
|
|
|
|
+
|
|
|
|
+ r0 : 0
|
|
|
|
+
|
|
|
|
+ r1 : Machine type number
|
|
|
|
|
|
-NOTE: I believe the above will be true once Ben's done with the merge
|
|
|
|
-of the boot sequences.... someone speak up if this is wrong!
|
|
|
|
|
|
+ r2 : Physical address of tagged list in system RAM
|
|
|
|
|
|
- To add a 32-bit embedded platform support, follow the instructions
|
|
|
|
- for 64-bit platforms above, with the exception that the Kconfig
|
|
|
|
- option should be set up such that the kernel builds exclusively for
|
|
|
|
- the platform selected. The processor type for the platform should
|
|
|
|
- enable another config option to select the specific board
|
|
|
|
- supported.
|
|
|
|
|
|
+ b) Entry with a flattened device-tree block. Firmware loads the
|
|
|
|
+ physical address of the flattened device tree block (dtb) into r2,
|
|
|
|
+ r1 is not used, but it is considered good practise to use a valid
|
|
|
|
+ machine number as described in Documentation/arm/Booting.
|
|
|
|
|
|
-NOTE: If Ben doesn't merge the setup files, may need to change this to
|
|
|
|
-point to setup_32.c
|
|
|
|
|
|
+ r0 : 0
|
|
|
|
|
|
|
|
+ r1 : Valid machine type number. When using a device tree,
|
|
|
|
+ a single machine type number will often be assigned to
|
|
|
|
+ represent a class or family of SoCs.
|
|
|
|
|
|
- I will describe later the boot process and various callbacks that
|
|
|
|
- your platform should implement.
|
|
|
|
|
|
+ r2 : physical pointer to the device-tree block
|
|
|
|
+ (defined in chapter II) in RAM. Device tree can be located
|
|
|
|
+ anywhere in system RAM, but it should be aligned on a 32 bit
|
|
|
|
+ boundary.
|
|
|
|
+
|
|
|
|
+ The kernel will differentiate between ATAGS and device tree booting by
|
|
|
|
+ reading the memory pointed to by r1 and looking for either the flattened
|
|
|
|
+ device tree block magic value (0xd00dfeed) or the ATAG_CORE value at
|
|
|
|
+ offset 0x4 from r2 (0x54410001).
|
|
|
|
|
|
|
|
|
|
II - The DT block format
|
|
II - The DT block format
|
|
@@ -300,8 +289,8 @@ the block to RAM before passing it to the kernel.
|
|
1) Header
|
|
1) Header
|
|
---------
|
|
---------
|
|
|
|
|
|
- The kernel is entered with r3 pointing to an area of memory that is
|
|
|
|
- roughly described in arch/powerpc/include/asm/prom.h by the structure
|
|
|
|
|
|
+ The kernel is passed the physical address pointing to an area of memory
|
|
|
|
+ that is roughly described in include/linux/of_fdt.h by the structure
|
|
boot_param_header:
|
|
boot_param_header:
|
|
|
|
|
|
struct boot_param_header {
|
|
struct boot_param_header {
|
|
@@ -339,7 +328,7 @@ struct boot_param_header {
|
|
All values in this header are in big endian format, the various
|
|
All values in this header are in big endian format, the various
|
|
fields in this header are defined more precisely below. All
|
|
fields in this header are defined more precisely below. All
|
|
"offset" values are in bytes from the start of the header; that is
|
|
"offset" values are in bytes from the start of the header; that is
|
|
- from the value of r3.
|
|
|
|
|
|
+ from the physical base address of the device tree block.
|
|
|
|
|
|
- magic
|
|
- magic
|
|
|
|
|
|
@@ -437,7 +426,7 @@ struct boot_param_header {
|
|
|
|
|
|
|
|
|
|
------------------------------
|
|
------------------------------
|
|
- r3 -> | struct boot_param_header |
|
|
|
|
|
|
+ base -> | struct boot_param_header |
|
|
------------------------------
|
|
------------------------------
|
|
| (alignment gap) (*) |
|
|
| (alignment gap) (*) |
|
|
------------------------------
|
|
------------------------------
|
|
@@ -457,7 +446,7 @@ struct boot_param_header {
|
|
-----> ------------------------------
|
|
-----> ------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- --- (r3 + totalsize)
|
|
|
|
|
|
+ --- (base + totalsize)
|
|
|
|
|
|
(*) The alignment gaps are not necessarily present; their presence
|
|
(*) The alignment gaps are not necessarily present; their presence
|
|
and size are dependent on the various alignment requirements of
|
|
and size are dependent on the various alignment requirements of
|
|
@@ -500,7 +489,7 @@ the device-tree structure. It is typically used to represent "path" in
|
|
the device-tree. More details about the actual format of these will be
|
|
the device-tree. More details about the actual format of these will be
|
|
below.
|
|
below.
|
|
|
|
|
|
-The kernel powerpc generic code does not make any formal use of the
|
|
|
|
|
|
+The kernel generic code does not make any formal use of the
|
|
unit address (though some board support code may do) so the only real
|
|
unit address (though some board support code may do) so the only real
|
|
requirement here for the unit address is to ensure uniqueness of
|
|
requirement here for the unit address is to ensure uniqueness of
|
|
the node unit name at a given level of the tree. Nodes with no notion
|
|
the node unit name at a given level of the tree. Nodes with no notion
|
|
@@ -518,20 +507,21 @@ path to the root node is "/".
|
|
|
|
|
|
Every node which actually represents an actual device (that is, a node
|
|
Every node which actually represents an actual device (that is, a node
|
|
which isn't only a virtual "container" for more nodes, like "/cpus"
|
|
which isn't only a virtual "container" for more nodes, like "/cpus"
|
|
-is) is also required to have a "device_type" property indicating the
|
|
|
|
-type of node .
|
|
|
|
|
|
+is) is also required to have a "compatible" property indicating the
|
|
|
|
+specific hardware and an optional list of devices it is fully
|
|
|
|
+backwards compatible with.
|
|
|
|
|
|
Finally, every node that can be referenced from a property in another
|
|
Finally, every node that can be referenced from a property in another
|
|
-node is required to have a "linux,phandle" property. Real open
|
|
|
|
-firmware implementations provide a unique "phandle" value for every
|
|
|
|
-node that the "prom_init()" trampoline code turns into
|
|
|
|
-"linux,phandle" properties. However, this is made optional if the
|
|
|
|
-flattened device tree is used directly. An example of a node
|
|
|
|
|
|
+node is required to have either a "phandle" or a "linux,phandle"
|
|
|
|
+property. Real Open Firmware implementations provide a unique
|
|
|
|
+"phandle" value for every node that the "prom_init()" trampoline code
|
|
|
|
+turns into "linux,phandle" properties. However, this is made optional
|
|
|
|
+if the flattened device tree is used directly. An example of a node
|
|
referencing another node via "phandle" is when laying out the
|
|
referencing another node via "phandle" is when laying out the
|
|
interrupt tree which will be described in a further version of this
|
|
interrupt tree which will be described in a further version of this
|
|
document.
|
|
document.
|
|
|
|
|
|
-This "linux, phandle" property is a 32-bit value that uniquely
|
|
|
|
|
|
+The "phandle" property is a 32-bit value that uniquely
|
|
identifies a node. You are free to use whatever values or system of
|
|
identifies a node. You are free to use whatever values or system of
|
|
values, internal pointers, or whatever to generate these, the only
|
|
values, internal pointers, or whatever to generate these, the only
|
|
requirement is that every node for which you provide that property has
|
|
requirement is that every node for which you provide that property has
|
|
@@ -694,7 +684,7 @@ made of 3 cells, the bottom two containing the actual address itself
|
|
while the top cell contains address space indication, flags, and pci
|
|
while the top cell contains address space indication, flags, and pci
|
|
bus & device numbers.
|
|
bus & device numbers.
|
|
|
|
|
|
-For busses that support dynamic allocation, it's the accepted practice
|
|
|
|
|
|
+For buses that support dynamic allocation, it's the accepted practice
|
|
to then not provide the address in "reg" (keep it 0) though while
|
|
to then not provide the address in "reg" (keep it 0) though while
|
|
providing a flag indicating the address is dynamically allocated, and
|
|
providing a flag indicating the address is dynamically allocated, and
|
|
then, to provide a separate "assigned-addresses" property that
|
|
then, to provide a separate "assigned-addresses" property that
|
|
@@ -711,7 +701,7 @@ prom_parse.c file of the recent kernels for your bus type.
|
|
The "reg" property only defines addresses and sizes (if #size-cells is
|
|
The "reg" property only defines addresses and sizes (if #size-cells is
|
|
non-0) within a given bus. In order to translate addresses upward
|
|
non-0) within a given bus. In order to translate addresses upward
|
|
(that is into parent bus addresses, and possibly into CPU physical
|
|
(that is into parent bus addresses, and possibly into CPU physical
|
|
-addresses), all busses must contain a "ranges" property. If the
|
|
|
|
|
|
+addresses), all buses must contain a "ranges" property. If the
|
|
"ranges" property is missing at a given level, it's assumed that
|
|
"ranges" property is missing at a given level, it's assumed that
|
|
translation isn't possible, i.e., the registers are not visible on the
|
|
translation isn't possible, i.e., the registers are not visible on the
|
|
parent bus. The format of the "ranges" property for a bus is a list
|
|
parent bus. The format of the "ranges" property for a bus is a list
|
|
@@ -727,9 +717,9 @@ example, for a PCI host controller, that would be a CPU address. For a
|
|
PCI<->ISA bridge, that would be a PCI address. It defines the base
|
|
PCI<->ISA bridge, that would be a PCI address. It defines the base
|
|
address in the parent bus where the beginning of that range is mapped.
|
|
address in the parent bus where the beginning of that range is mapped.
|
|
|
|
|
|
-For a new 64-bit powerpc board, I recommend either the 2/2 format or
|
|
|
|
|
|
+For new 64-bit board support, I recommend either the 2/2 format or
|
|
Apple's 2/1 format which is slightly more compact since sizes usually
|
|
Apple's 2/1 format which is slightly more compact since sizes usually
|
|
-fit in a single 32-bit word. New 32-bit powerpc boards should use a
|
|
|
|
|
|
+fit in a single 32-bit word. New 32-bit board support should use a
|
|
1/1 format, unless the processor supports physical addresses greater
|
|
1/1 format, unless the processor supports physical addresses greater
|
|
than 32-bits, in which case a 2/1 format is recommended.
|
|
than 32-bits, in which case a 2/1 format is recommended.
|
|
|
|
|
|
@@ -754,7 +744,7 @@ of their actual names.
|
|
While earlier users of Open Firmware like OldWorld macintoshes tended
|
|
While earlier users of Open Firmware like OldWorld macintoshes tended
|
|
to use the actual device name for the "name" property, it's nowadays
|
|
to use the actual device name for the "name" property, it's nowadays
|
|
considered a good practice to use a name that is closer to the device
|
|
considered a good practice to use a name that is closer to the device
|
|
-class (often equal to device_type). For example, nowadays, ethernet
|
|
|
|
|
|
+class (often equal to device_type). For example, nowadays, Ethernet
|
|
controllers are named "ethernet", an additional "model" property
|
|
controllers are named "ethernet", an additional "model" property
|
|
defining precisely the chip type/model, and "compatible" property
|
|
defining precisely the chip type/model, and "compatible" property
|
|
defining the family in case a single driver can driver more than one
|
|
defining the family in case a single driver can driver more than one
|
|
@@ -772,7 +762,7 @@ is present).
|
|
4) Note about node and property names and character set
|
|
4) Note about node and property names and character set
|
|
-------------------------------------------------------
|
|
-------------------------------------------------------
|
|
|
|
|
|
-While open firmware provides more flexible usage of 8859-1, this
|
|
|
|
|
|
+While Open Firmware provides more flexible usage of 8859-1, this
|
|
specification enforces more strict rules. Nodes and properties should
|
|
specification enforces more strict rules. Nodes and properties should
|
|
be comprised only of ASCII characters 'a' to 'z', '0' to
|
|
be comprised only of ASCII characters 'a' to 'z', '0' to
|
|
'9', ',', '.', '_', '+', '#', '?', and '-'. Node names additionally
|
|
'9', ',', '.', '_', '+', '#', '?', and '-'. Node names additionally
|
|
@@ -792,7 +782,7 @@ address which can extend beyond that limit.
|
|
--------------------------------
|
|
--------------------------------
|
|
These are all that are currently required. However, it is strongly
|
|
These are all that are currently required. However, it is strongly
|
|
recommended that you expose PCI host bridges as documented in the
|
|
recommended that you expose PCI host bridges as documented in the
|
|
- PCI binding to open firmware, and your interrupt tree as documented
|
|
|
|
|
|
+ PCI binding to Open Firmware, and your interrupt tree as documented
|
|
in OF interrupt tree specification.
|
|
in OF interrupt tree specification.
|
|
|
|
|
|
a) The root node
|
|
a) The root node
|
|
@@ -802,20 +792,12 @@ address which can extend beyond that limit.
|
|
- model : this is your board name/model
|
|
- model : this is your board name/model
|
|
- #address-cells : address representation for "root" devices
|
|
- #address-cells : address representation for "root" devices
|
|
- #size-cells: the size representation for "root" devices
|
|
- #size-cells: the size representation for "root" devices
|
|
- - device_type : This property shouldn't be necessary. However, if
|
|
|
|
- you decide to create a device_type for your root node, make sure it
|
|
|
|
- is _not_ "chrp" unless your platform is a pSeries or PAPR compliant
|
|
|
|
- one for 64-bit, or a CHRP-type machine for 32-bit as this will
|
|
|
|
- matched by the kernel this way.
|
|
|
|
-
|
|
|
|
- Additionally, some recommended properties are:
|
|
|
|
-
|
|
|
|
- compatible : the board "family" generally finds its way here,
|
|
- compatible : the board "family" generally finds its way here,
|
|
for example, if you have 2 board models with a similar layout,
|
|
for example, if you have 2 board models with a similar layout,
|
|
that typically get driven by the same platform code in the
|
|
that typically get driven by the same platform code in the
|
|
- kernel, you would use a different "model" property but put a
|
|
|
|
- value in "compatible". The kernel doesn't directly use that
|
|
|
|
- value but it is generally useful.
|
|
|
|
|
|
+ kernel, you would specify the exact board model in the
|
|
|
|
+ compatible property followed by an entry that represents the SoC
|
|
|
|
+ model.
|
|
|
|
|
|
The root node is also generally where you add additional properties
|
|
The root node is also generally where you add additional properties
|
|
specific to your board like the serial number if any, that sort of
|
|
specific to your board like the serial number if any, that sort of
|
|
@@ -841,8 +823,11 @@ address which can extend beyond that limit.
|
|
|
|
|
|
So under /cpus, you are supposed to create a node for every CPU on
|
|
So under /cpus, you are supposed to create a node for every CPU on
|
|
the machine. There is no specific restriction on the name of the
|
|
the machine. There is no specific restriction on the name of the
|
|
- CPU, though It's common practice to call it PowerPC,<name>. For
|
|
|
|
|
|
+ CPU, though it's common to call it <architecture>,<core>. For
|
|
example, Apple uses PowerPC,G5 while IBM uses PowerPC,970FX.
|
|
example, Apple uses PowerPC,G5 while IBM uses PowerPC,970FX.
|
|
|
|
+ However, the Generic Names convention suggests that it would be
|
|
|
|
+ better to simply use 'cpu' for each cpu node and use the compatible
|
|
|
|
+ property to identify the specific cpu core.
|
|
|
|
|
|
Required properties:
|
|
Required properties:
|
|
|
|
|
|
@@ -923,7 +908,7 @@ compatibility.
|
|
|
|
|
|
e) The /chosen node
|
|
e) The /chosen node
|
|
|
|
|
|
- This node is a bit "special". Normally, that's where open firmware
|
|
|
|
|
|
+ This node is a bit "special". Normally, that's where Open Firmware
|
|
puts some variable environment information, like the arguments, or
|
|
puts some variable environment information, like the arguments, or
|
|
the default input/output devices.
|
|
the default input/output devices.
|
|
|
|
|
|
@@ -940,11 +925,7 @@ compatibility.
|
|
console device if any. Typically, if you have serial devices on
|
|
console device if any. Typically, if you have serial devices on
|
|
your board, you may want to put the full path to the one set as
|
|
your board, you may want to put the full path to the one set as
|
|
the default console in the firmware here, for the kernel to pick
|
|
the default console in the firmware here, for the kernel to pick
|
|
- it up as its own default console. If you look at the function
|
|
|
|
- set_preferred_console() in arch/ppc64/kernel/setup.c, you'll see
|
|
|
|
- that the kernel tries to find out the default console and has
|
|
|
|
- knowledge of various types like 8250 serial ports. You may want
|
|
|
|
- to extend this function to add your own.
|
|
|
|
|
|
+ it up as its own default console.
|
|
|
|
|
|
Note that u-boot creates and fills in the chosen node for platforms
|
|
Note that u-boot creates and fills in the chosen node for platforms
|
|
that use it.
|
|
that use it.
|
|
@@ -955,23 +936,23 @@ compatibility.
|
|
|
|
|
|
f) the /soc<SOCname> node
|
|
f) the /soc<SOCname> node
|
|
|
|
|
|
- This node is used to represent a system-on-a-chip (SOC) and must be
|
|
|
|
- present if the processor is a SOC. The top-level soc node contains
|
|
|
|
- information that is global to all devices on the SOC. The node name
|
|
|
|
- should contain a unit address for the SOC, which is the base address
|
|
|
|
- of the memory-mapped register set for the SOC. The name of an soc
|
|
|
|
|
|
+ This node is used to represent a system-on-a-chip (SoC) and must be
|
|
|
|
+ present if the processor is a SoC. The top-level soc node contains
|
|
|
|
+ information that is global to all devices on the SoC. The node name
|
|
|
|
+ should contain a unit address for the SoC, which is the base address
|
|
|
|
+ of the memory-mapped register set for the SoC. The name of an SoC
|
|
node should start with "soc", and the remainder of the name should
|
|
node should start with "soc", and the remainder of the name should
|
|
represent the part number for the soc. For example, the MPC8540's
|
|
represent the part number for the soc. For example, the MPC8540's
|
|
soc node would be called "soc8540".
|
|
soc node would be called "soc8540".
|
|
|
|
|
|
Required properties:
|
|
Required properties:
|
|
|
|
|
|
- - device_type : Should be "soc"
|
|
|
|
- ranges : Should be defined as specified in 1) to describe the
|
|
- ranges : Should be defined as specified in 1) to describe the
|
|
- translation of SOC addresses for memory mapped SOC registers.
|
|
|
|
- - bus-frequency: Contains the bus frequency for the SOC node.
|
|
|
|
|
|
+ translation of SoC addresses for memory mapped SoC registers.
|
|
|
|
+ - bus-frequency: Contains the bus frequency for the SoC node.
|
|
Typically, the value of this field is filled in by the boot
|
|
Typically, the value of this field is filled in by the boot
|
|
loader.
|
|
loader.
|
|
|
|
+ - compatible : Exact model of the SoC
|
|
|
|
|
|
|
|
|
|
Recommended properties:
|
|
Recommended properties:
|
|
@@ -1155,12 +1136,13 @@ while all this has been defined and implemented.
|
|
|
|
|
|
- An example of code for iterating nodes & retrieving properties
|
|
- An example of code for iterating nodes & retrieving properties
|
|
directly from the flattened tree format can be found in the kernel
|
|
directly from the flattened tree format can be found in the kernel
|
|
- file arch/ppc64/kernel/prom.c, look at scan_flat_dt() function,
|
|
|
|
|
|
+ file drivers/of/fdt.c. Look at the of_scan_flat_dt() function,
|
|
its usage in early_init_devtree(), and the corresponding various
|
|
its usage in early_init_devtree(), and the corresponding various
|
|
early_init_dt_scan_*() callbacks. That code can be re-used in a
|
|
early_init_dt_scan_*() callbacks. That code can be re-used in a
|
|
GPL bootloader, and as the author of that code, I would be happy
|
|
GPL bootloader, and as the author of that code, I would be happy
|
|
to discuss possible free licensing to any vendor who wishes to
|
|
to discuss possible free licensing to any vendor who wishes to
|
|
integrate all or part of this code into a non-GPL bootloader.
|
|
integrate all or part of this code into a non-GPL bootloader.
|
|
|
|
+ (reference needed; who is 'I' here? ---gcl Jan 31, 2011)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1203,18 +1185,19 @@ MPC8540.
|
|
2) Representing devices without a current OF specification
|
|
2) Representing devices without a current OF specification
|
|
----------------------------------------------------------
|
|
----------------------------------------------------------
|
|
|
|
|
|
-Currently, there are many devices on SOCs that do not have a standard
|
|
|
|
-representation pre-defined as part of the open firmware
|
|
|
|
-specifications, mainly because the boards that contain these SOCs are
|
|
|
|
-not currently booted using open firmware. This section contains
|
|
|
|
-descriptions for the SOC devices for which new nodes have been
|
|
|
|
-defined; this list will expand as more and more SOC-containing
|
|
|
|
-platforms are moved over to use the flattened-device-tree model.
|
|
|
|
|
|
+Currently, there are many devices on SoCs that do not have a standard
|
|
|
|
+representation defined as part of the Open Firmware specifications,
|
|
|
|
+mainly because the boards that contain these SoCs are not currently
|
|
|
|
+booted using Open Firmware. Binding documentation for new devices
|
|
|
|
+should be added to the Documentation/devicetree/bindings directory.
|
|
|
|
+That directory will expand as device tree support is added to more and
|
|
|
|
+more SoCs.
|
|
|
|
+
|
|
|
|
|
|
VII - Specifying interrupt information for devices
|
|
VII - Specifying interrupt information for devices
|
|
===================================================
|
|
===================================================
|
|
|
|
|
|
-The device tree represents the busses and devices of a hardware
|
|
|
|
|
|
+The device tree represents the buses and devices of a hardware
|
|
system in a form similar to the physical bus topology of the
|
|
system in a form similar to the physical bus topology of the
|
|
hardware.
|
|
hardware.
|
|
|
|
|