190 lines
7.4 KiB
Text
190 lines
7.4 KiB
Text
|
MPC52xx Device Tree Bindings
|
||
|
----------------------------
|
||
|
|
||
|
(c) 2006 Secret Lab Technologies Ltd
|
||
|
Grant Likely <grant.likely at secretlab.ca>
|
||
|
|
||
|
I - Introduction
|
||
|
================
|
||
|
Boards supported by the arch/powerpc architecture require device tree be
|
||
|
passed by the boot loader to the kernel at boot time. The device tree
|
||
|
describes what devices are present on the board and how they are
|
||
|
connected. The device tree can either be passed as a binary blob (as
|
||
|
described in Documentation/powerpc/booting-without-of.txt), or passed
|
||
|
by Open Firmare (IEEE 1275) compatible firmware using an OF compatible
|
||
|
client interface API.
|
||
|
|
||
|
This document specifies the requirements on the device-tree for mpc52xx
|
||
|
based boards. These requirements are above and beyond the details
|
||
|
specified in either the OpenFirmware spec or booting-without-of.txt
|
||
|
|
||
|
All new mpc52xx-based boards are expected to match this document. In
|
||
|
cases where this document is not sufficient to support a new board port,
|
||
|
this document should be updated as part of adding the new board support.
|
||
|
|
||
|
II - Philosophy
|
||
|
===============
|
||
|
The core of this document is naming convention. The whole point of
|
||
|
defining this convention is to reduce or eliminate the number of
|
||
|
special cases required to support a 52xx board. If all 52xx boards
|
||
|
follow the same convention, then generic 52xx support code will work
|
||
|
rather than coding special cases for each new board.
|
||
|
|
||
|
This section tries to capture the thought process behind why the naming
|
||
|
convention is what it is.
|
||
|
|
||
|
1. Node names
|
||
|
-------------
|
||
|
There is strong convention/requirements already established for children
|
||
|
of the root node. 'cpus' describes the processor cores, 'memory'
|
||
|
describes memory, and 'chosen' provides boot configuration. Other nodes
|
||
|
are added to describe devices attached to the processor local bus.
|
||
|
Following convention already established with other system-on-chip
|
||
|
processors, MPC52xx boards must have an 'soc5200' node as a child of the
|
||
|
root node.
|
||
|
|
||
|
The soc5200 node holds child nodes for all on chip devices. Child nodes
|
||
|
are typically named after the configured function. ie. the FEC node is
|
||
|
named 'ethernet', and a PSC in uart mode is named 'serial'.
|
||
|
|
||
|
2. device_type property
|
||
|
-----------------------
|
||
|
similar to the node name convention above; the device_type reflects the
|
||
|
configured function of a device. ie. 'serial' for a uart and 'spi' for
|
||
|
an spi controller. However, while node names *should* reflect the
|
||
|
configured function, device_type *must* match the configured function
|
||
|
exactly.
|
||
|
|
||
|
3. compatible property
|
||
|
----------------------
|
||
|
Since device_type isn't enough to match devices to drivers, there also
|
||
|
needs to be a naming convention for the compatible property. Compatible
|
||
|
is an list of device descriptions sorted from specific to generic. For
|
||
|
the mpc52xx, the required format for each compatible value is
|
||
|
<chip>-<device>[-<mode>]. At the minimum, the list shall contain two
|
||
|
items; the first specifying the exact chip, and the second specifying
|
||
|
mpc52xx for the chip.
|
||
|
|
||
|
ie. ethernet on mpc5200b: compatible = "mpc5200b-ethernet\0mpc52xx-ethernet"
|
||
|
|
||
|
The idea here is that most drivers will match to the most generic field
|
||
|
in the compatible list (mpc52xx-*), but can also test the more specific
|
||
|
field for enabling bug fixes or extra features.
|
||
|
|
||
|
Modal devices, like PSCs, also append the configured function to the
|
||
|
end of the compatible field. ie. A PSC in i2s mode would specify
|
||
|
"mpc52xx-psc-i2s", not "mpc52xx-i2s". This convention is chosen to
|
||
|
avoid naming conflicts with non-psc devices providing the same
|
||
|
function. For example, "mpc52xx-spi" and "mpc52xx-psc-spi" describe
|
||
|
the mpc5200 simple spi device and a PSC spi mode respectively.
|
||
|
|
||
|
If the soc device is more generic and present on other SOCs, the
|
||
|
compatible property can specify the more generic device type also.
|
||
|
|
||
|
ie. mscan: compatible = "mpc5200-mscan\0mpc52xx-mscan\0fsl,mscan";
|
||
|
|
||
|
At the time of writing, exact chip may be either 'mpc5200' or
|
||
|
'mpc5200b'.
|
||
|
|
||
|
Device drivers should always try to match as generically as possible.
|
||
|
|
||
|
III - Structure
|
||
|
===============
|
||
|
The device tree for an mpc52xx board follows the structure defined in
|
||
|
booting-without-of.txt with the following additional notes:
|
||
|
|
||
|
0) the root node
|
||
|
----------------
|
||
|
Typical root description node; see booting-without-of
|
||
|
|
||
|
1) The cpus node
|
||
|
----------------
|
||
|
The cpus node follows the basic layout described in booting-without-of.
|
||
|
The bus-frequency property holds the XLB bus frequency
|
||
|
The clock-frequency property holds the core frequency
|
||
|
|
||
|
2) The memory node
|
||
|
------------------
|
||
|
Typical memory description node; see booting-without-of.
|
||
|
|
||
|
3) The soc5200 node
|
||
|
-------------------
|
||
|
This node describes the on chip SOC peripherals. Every mpc52xx based
|
||
|
board will have this node, and as such there is a common naming
|
||
|
convention for SOC devices.
|
||
|
|
||
|
Required properties:
|
||
|
name type description
|
||
|
---- ---- -----------
|
||
|
device_type string must be "soc"
|
||
|
ranges int should be <0 baseaddr baseaddr+10000>
|
||
|
reg int must be <baseaddr 10000>
|
||
|
|
||
|
Recommended properties:
|
||
|
name type description
|
||
|
---- ---- -----------
|
||
|
compatible string should be "<chip>-soc\0mpc52xx-soc"
|
||
|
ie. "mpc5200b-soc\0mpc52xx-soc"
|
||
|
#interrupt-cells int must be <3>. If it is not defined
|
||
|
here then it must be defined in every
|
||
|
soc device node.
|
||
|
bus-frequency int IPB bus frequency in HZ. Clock rate
|
||
|
used by most of the soc devices.
|
||
|
Defining it here avoids needing it
|
||
|
added to every device node.
|
||
|
|
||
|
4) soc5200 child nodes
|
||
|
----------------------
|
||
|
Any on chip SOC devices available to Linux must appear as soc5200 child nodes.
|
||
|
|
||
|
Note: in the tables below, '*' matches all <chip> values. ie.
|
||
|
*-pic would translate to "mpc5200-pic\0mpc52xx-pic"
|
||
|
|
||
|
Required soc5200 child nodes:
|
||
|
name device_type compatible Description
|
||
|
---- ----------- ---------- -----------
|
||
|
cdm@<addr> cdm *-cmd Clock Distribution
|
||
|
pic@<addr> interrupt-controller *-pic need an interrupt
|
||
|
controller to boot
|
||
|
bestcomm@<addr> dma-controller *-bestcomm 52xx pic also requires
|
||
|
the bestcomm device
|
||
|
|
||
|
Recommended soc5200 child nodes; populate as needed for your board
|
||
|
name device_type compatible Description
|
||
|
---- ----------- ---------- -----------
|
||
|
gpt@<addr> gpt *-gpt General purpose timers
|
||
|
rtc@<addr> rtc *-rtc Real time clock
|
||
|
mscan@<addr> mscan *-mscan CAN bus controller
|
||
|
pci@<addr> pci *-pci PCI bridge
|
||
|
serial@<addr> serial *-psc-uart PSC in serial mode
|
||
|
i2s@<addr> i2s *-psc-i2s PSC in i2s mode
|
||
|
ac97@<addr> ac97 *-psc-ac97 PSC in ac97 mode
|
||
|
spi@<addr> spi *-psc-spi PSC in spi mode
|
||
|
irda@<addr> irda *-psc-irda PSC in IrDA mode
|
||
|
spi@<addr> spi *-spi MPC52xx spi device
|
||
|
ethernet@<addr> network *-fec MPC52xx ethernet device
|
||
|
ata@<addr> ata *-ata IDE ATA interface
|
||
|
i2c@<addr> i2c *-i2c I2C controller
|
||
|
usb@<addr> usb-ohci-be *-ohci,ohci-be USB controller
|
||
|
xlb@<addr> xlb *-xlb XLB arbritrator
|
||
|
|
||
|
IV - Extra Notes
|
||
|
================
|
||
|
|
||
|
1. Interrupt mapping
|
||
|
--------------------
|
||
|
The mpc52xx pic driver splits hardware IRQ numbers into two levels. The
|
||
|
split reflects the layout of the PIC hardware itself, which groups
|
||
|
interrupts into one of three groups; CRIT, MAIN or PERP. Also, the
|
||
|
Bestcomm dma engine has it's own set of interrupt sources which are
|
||
|
cascaded off of peripheral interrupt 0, which the driver interprets as a
|
||
|
fourth group, SDMA.
|
||
|
|
||
|
The interrupts property for device nodes using the mpc52xx pic consists
|
||
|
of three cells; <L1 L2 level>
|
||
|
|
||
|
L1 := [CRIT=0, MAIN=1, PERP=2, SDMA=3]
|
||
|
L2 := interrupt number; directly mapped from the value in the
|
||
|
"ICTL PerStat, MainStat, CritStat Encoded Register"
|
||
|
level := [LEVEL_HIGH=0, EDGE_RISING=1, EDGE_FALLING=2, LEVEL_LOW=3]
|