123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- 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)
|