181 lines
7.7 KiB
Plaintext
181 lines
7.7 KiB
Plaintext
MPC5200 Device Tree Bindings
|
|
----------------------------
|
|
|
|
(c) 2006-2009 Secret Lab Technologies Ltd
|
|
Grant Likely <grant.likely@secretlab.ca>
|
|
|
|
Naming conventions
|
|
------------------
|
|
For mpc5200 on-chip devices, the format for each compatible value is
|
|
<chip>-<device>[-<mode>]. The OS should be able to match a device driver
|
|
to the device based solely on the compatible value. If two drivers
|
|
match on the compatible list; the 'most compatible' driver should be
|
|
selected.
|
|
|
|
The split between the MPC5200 and the MPC5200B leaves a bit of a
|
|
conundrum. How should the compatible property be set up to provide
|
|
maximum compatibility information; but still accurately describe the
|
|
chip? For the MPC5200; the answer is easy. Most of the SoC devices
|
|
originally appeared on the MPC5200. Since they didn't exist anywhere
|
|
else; the 5200 compatible properties will contain only one item;
|
|
"fsl,mpc5200-<device>".
|
|
|
|
The 5200B is almost the same as the 5200, but not quite. It fixes
|
|
silicon bugs and it adds a small number of enhancements. Most of the
|
|
devices either provide exactly the same interface as on the 5200. A few
|
|
devices have extra functions but still have a backwards compatible mode.
|
|
To express this information as completely as possible, 5200B device trees
|
|
should have two items in the compatible list:
|
|
compatible = "fsl,mpc5200b-<device>","fsl,mpc5200-<device>";
|
|
|
|
It is *strongly* recommended that 5200B device trees follow this convention
|
|
(instead of only listing the base mpc5200 item).
|
|
|
|
ie. ethernet on mpc5200: compatible = "fsl,mpc5200-fec";
|
|
ethernet on mpc5200b: compatible = "fsl,mpc5200b-fec", "fsl,mpc5200-fec";
|
|
|
|
Modal devices, like PSCs, also append the configured function to the
|
|
end of the compatible field. ie. A PSC in i2s mode would specify
|
|
"fsl,mpc5200-psc-i2s", not "fsl,mpc5200-i2s". This convention is chosen to
|
|
avoid naming conflicts with non-psc devices providing the same
|
|
function. For example, "fsl,mpc5200-spi" and "fsl,mpc5200-psc-spi" describe
|
|
the mpc5200 simple spi device and a PSC spi mode respectively.
|
|
|
|
At the time of writing, exact chip may be either 'fsl,mpc5200' or
|
|
'fsl,mpc5200b'.
|
|
|
|
The soc node
|
|
------------
|
|
This node describes the on chip SOC peripherals. Every mpc5200 based
|
|
board will have this node, and as such there is a common naming
|
|
convention for SOC devices.
|
|
|
|
Required properties:
|
|
name description
|
|
---- -----------
|
|
ranges Memory range of the internal memory mapped registers.
|
|
Should be <0 [baseaddr] 0xc000>
|
|
reg Should be <[baseaddr] 0x100>
|
|
compatible mpc5200: "fsl,mpc5200-immr"
|
|
mpc5200b: "fsl,mpc5200b-immr"
|
|
system-frequency 'fsystem' frequency in Hz; XLB, IPB, USB and PCI
|
|
clocks are derived from the fsystem clock.
|
|
bus-frequency IPB bus frequency in Hz. Clock rate
|
|
used by most of the soc devices.
|
|
|
|
soc child nodes
|
|
---------------
|
|
Any on chip SOC devices available to Linux must appear as soc5200 child nodes.
|
|
|
|
Note: The tables below show the value for the mpc5200. A mpc5200b device
|
|
tree should use the "fsl,mpc5200b-<device>","fsl,mpc5200-<device>" form.
|
|
|
|
Required soc5200 child nodes:
|
|
name compatible Description
|
|
---- ---------- -----------
|
|
cdm@<addr> fsl,mpc5200-cdm Clock Distribution
|
|
interrupt-controller@<addr> fsl,mpc5200-pic need an interrupt
|
|
controller to boot
|
|
bestcomm@<addr> fsl,mpc5200-bestcomm Bestcomm DMA controller
|
|
|
|
Recommended soc5200 child nodes; populate as needed for your board
|
|
name compatible Description
|
|
---- ---------- -----------
|
|
timer@<addr> fsl,mpc5200-gpt General purpose timers
|
|
gpio@<addr> fsl,mpc5200-gpio MPC5200 simple gpio controller
|
|
gpio@<addr> fsl,mpc5200-gpio-wkup MPC5200 wakeup gpio controller
|
|
rtc@<addr> fsl,mpc5200-rtc Real time clock
|
|
mscan@<addr> fsl,mpc5200-mscan CAN bus controller
|
|
pci@<addr> fsl,mpc5200-pci PCI bridge
|
|
serial@<addr> fsl,mpc5200-psc-uart PSC in serial mode
|
|
i2s@<addr> fsl,mpc5200-psc-i2s PSC in i2s mode
|
|
ac97@<addr> fsl,mpc5200-psc-ac97 PSC in ac97 mode
|
|
spi@<addr> fsl,mpc5200-psc-spi PSC in spi mode
|
|
irda@<addr> fsl,mpc5200-psc-irda PSC in IrDA mode
|
|
spi@<addr> fsl,mpc5200-spi MPC5200 spi device
|
|
ethernet@<addr> fsl,mpc5200-fec MPC5200 ethernet device
|
|
ata@<addr> fsl,mpc5200-ata IDE ATA interface
|
|
i2c@<addr> fsl,mpc5200-i2c I2C controller
|
|
usb@<addr> fsl,mpc5200-ohci,ohci-be USB controller
|
|
xlb@<addr> fsl,mpc5200-xlb XLB arbitrator
|
|
|
|
fsl,mpc5200-gpt nodes
|
|
---------------------
|
|
On the mpc5200 and 5200b, GPT0 has a watchdog timer function. If the board
|
|
design supports the internal wdt, then the device node for GPT0 should
|
|
include the empty property 'fsl,has-wdt'.
|
|
|
|
An mpc5200-gpt can be used as a single line GPIO controller. To do so,
|
|
add the following properties to the gpt node:
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
When referencing the GPIO line from another node, the first cell must always
|
|
be zero and the second cell represents the gpio flags and described in the
|
|
gpio device tree binding.
|
|
|
|
An mpc5200-gpt can be used as a single line edge sensitive interrupt
|
|
controller. To do so, add the following properties to the gpt node:
|
|
interrupt-controller;
|
|
#interrupt-cells = <1>;
|
|
When referencing the IRQ line from another node, the cell represents the
|
|
sense mode; 1 for edge rising, 2 for edge falling.
|
|
|
|
fsl,mpc5200-psc nodes
|
|
---------------------
|
|
The PSCs should include a cell-index which is the index of the PSC in
|
|
hardware. cell-index is used to determine which shared SoC registers to
|
|
use when setting up PSC clocking. cell-index number starts at '0'. ie:
|
|
PSC1 has 'cell-index = <0>'
|
|
PSC4 has 'cell-index = <3>'
|
|
|
|
PSC in i2s mode: The mpc5200 and mpc5200b PSCs are not compatible when in
|
|
i2s mode. An 'mpc5200b-psc-i2s' node cannot include 'mpc5200-psc-i2s' in the
|
|
compatible field.
|
|
|
|
|
|
fsl,mpc5200-gpio and fsl,mpc5200-gpio-wkup nodes
|
|
------------------------------------------------
|
|
Each GPIO controller node should have the empty property gpio-controller and
|
|
#gpio-cells set to 2. First cell is the GPIO number which is interpreted
|
|
according to the bit numbers in the GPIO control registers. The second cell
|
|
is for flags which is currently unused.
|
|
|
|
fsl,mpc5200-fec nodes
|
|
---------------------
|
|
The FEC node can specify one of the following properties to configure
|
|
the MII link:
|
|
- fsl,7-wire-mode - An empty property that specifies the link uses 7-wire
|
|
mode instead of MII
|
|
- current-speed - Specifies that the MII should be configured for a fixed
|
|
speed. This property should contain two cells. The
|
|
first cell specifies the speed in Mbps and the second
|
|
should be '0' for half duplex and '1' for full duplex
|
|
- phy-handle - Contains a phandle to an Ethernet PHY.
|
|
|
|
Interrupt controller (fsl,mpc5200-pic) node
|
|
-------------------------------------------
|
|
The mpc5200 pic binding 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 mpc5200 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]
|
|
|
|
For external IRQs, use the following interrupt property values (how to
|
|
specify external interrupts is a frequently asked question):
|
|
External interrupts:
|
|
external irq0: interrupts = <0 0 n>;
|
|
external irq1: interrupts = <1 1 n>;
|
|
external irq2: interrupts = <1 2 n>;
|
|
external irq3: interrupts = <1 3 n>;
|
|
'n' is sense (0: level high, 1: edge rising, 2: edge falling 3: level low)
|
|
|