| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 1 | MPC5200 Device Tree Bindings | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 2 | ---------------------------- | 
|  | 3 |  | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 4 | (c) 2006-2007 Secret Lab Technologies Ltd | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 5 | Grant Likely <grant.likely at secretlab.ca> | 
|  | 6 |  | 
| Grant Likely | 121361f | 2007-01-19 00:00:14 -0700 | [diff] [blame] | 7 | ********** DRAFT *********** | 
|  | 8 | * WARNING: Do not depend on the stability of these bindings just yet. | 
|  | 9 | * The MPC5200 device tree conventions are still in flux | 
|  | 10 | * Keep an eye on the linuxppc-dev mailing list for more details | 
|  | 11 | ********** DRAFT *********** | 
|  | 12 |  | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 13 | I - Introduction | 
|  | 14 | ================ | 
|  | 15 | Boards supported by the arch/powerpc architecture require device tree be | 
|  | 16 | passed by the boot loader to the kernel at boot time.  The device tree | 
|  | 17 | describes what devices are present on the board and how they are | 
|  | 18 | connected.  The device tree can either be passed as a binary blob (as | 
|  | 19 | described in Documentation/powerpc/booting-without-of.txt), or passed | 
| Matt LaPlante | 01dd2fb | 2007-10-20 01:34:40 +0200 | [diff] [blame] | 20 | by Open Firmware (IEEE 1275) compatible firmware using an OF compatible | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 21 | client interface API. | 
|  | 22 |  | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 23 | This document specifies the requirements on the device-tree for mpc5200 | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 24 | based boards.  These requirements are above and beyond the details | 
| Matt LaPlante | 01dd2fb | 2007-10-20 01:34:40 +0200 | [diff] [blame] | 25 | specified in either the Open Firmware spec or booting-without-of.txt | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 26 |  | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 27 | All new mpc5200-based boards are expected to match this document.  In | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 28 | cases where this document is not sufficient to support a new board port, | 
|  | 29 | this document should be updated as part of adding the new board support. | 
|  | 30 |  | 
|  | 31 | II - Philosophy | 
|  | 32 | =============== | 
|  | 33 | The core of this document is naming convention.  The whole point of | 
|  | 34 | defining this convention is to reduce or eliminate the number of | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 35 | special cases required to support a 5200 board.  If all 5200 boards | 
|  | 36 | follow the same convention, then generic 5200 support code will work | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 37 | rather than coding special cases for each new board. | 
|  | 38 |  | 
|  | 39 | This section tries to capture the thought process behind why the naming | 
|  | 40 | convention is what it is. | 
|  | 41 |  | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 42 | 1.  names | 
|  | 43 | --------- | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 44 | There is strong convention/requirements already established for children | 
|  | 45 | of the root node.  'cpus' describes the processor cores, 'memory' | 
|  | 46 | describes memory, and 'chosen' provides boot configuration.  Other nodes | 
|  | 47 | are added to describe devices attached to the processor local bus. | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 48 |  | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 49 | Following convention already established with other system-on-chip | 
|  | 50 | processors, 5200 device trees should use the name 'soc5200' for the | 
|  | 51 | parent node of on chip devices, and the root node should be its parent. | 
|  | 52 |  | 
|  | 53 | Child nodes are typically named after the configured function.  ie. | 
|  | 54 | the FEC node is named 'ethernet', and a PSC in uart mode is named 'serial'. | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 55 |  | 
|  | 56 | 2. device_type property | 
|  | 57 | ----------------------- | 
|  | 58 | similar to the node name convention above; the device_type reflects the | 
|  | 59 | configured function of a device.  ie. 'serial' for a uart and 'spi' for | 
|  | 60 | an spi controller.  However, while node names *should* reflect the | 
|  | 61 | configured function, device_type *must* match the configured function | 
|  | 62 | exactly. | 
|  | 63 |  | 
|  | 64 | 3. compatible property | 
|  | 65 | ---------------------- | 
|  | 66 | Since device_type isn't enough to match devices to drivers, there also | 
|  | 67 | needs to be a naming convention for the compatible property.  Compatible | 
|  | 68 | is an list of device descriptions sorted from specific to generic.  For | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 69 | the mpc5200, the required format for each compatible value is | 
|  | 70 | <chip>-<device>[-<mode>].  The OS should be able to match a device driver | 
|  | 71 | to the device based solely on the compatible value.  If two drivers | 
|  | 72 | match on the compatible list; the 'most compatible' driver should be | 
|  | 73 | selected. | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 74 |  | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 75 | The split between the MPC5200 and the MPC5200B leaves a bit of a | 
| Matt LaPlante | 01dd2fb | 2007-10-20 01:34:40 +0200 | [diff] [blame] | 76 | conundrum.  How should the compatible property be set up to provide | 
|  | 77 | maximum compatibility information; but still accurately describe the | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 78 | chip?  For the MPC5200; the answer is easy.  Most of the SoC devices | 
|  | 79 | originally appeared on the MPC5200.  Since they didn't exist anywhere | 
|  | 80 | else; the 5200 compatible properties will contain only one item; | 
|  | 81 | "mpc5200-<device>". | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 82 |  | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 83 | The 5200B is almost the same as the 5200, but not quite.  It fixes | 
|  | 84 | silicon bugs and it adds a small number of enhancements.  Most of the | 
|  | 85 | devices either provide exactly the same interface as on the 5200.  A few | 
|  | 86 | devices have extra functions but still have a backwards compatible mode. | 
| Matt LaPlante | 01dd2fb | 2007-10-20 01:34:40 +0200 | [diff] [blame] | 87 | To express this information as completely as possible, 5200B device trees | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 88 | should have two items in the compatible list; | 
|  | 89 | "mpc5200b-<device>\0mpc5200-<device>".  It is *strongly* recommended | 
|  | 90 | that 5200B device trees follow this convention (instead of only listing | 
|  | 91 | the base mpc5200 item). | 
|  | 92 |  | 
|  | 93 | If another chip appear on the market with one of the mpc5200 SoC | 
|  | 94 | devices, then the compatible list should include mpc5200-<device>. | 
|  | 95 |  | 
|  | 96 | ie. ethernet on mpc5200: compatible = "mpc5200-ethernet" | 
|  | 97 | ethernet on mpc5200b: compatible = "mpc5200b-ethernet\0mpc5200-ethernet" | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 98 |  | 
|  | 99 | Modal devices, like PSCs, also append the configured function to the | 
|  | 100 | end of the compatible field.  ie. A PSC in i2s mode would specify | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 101 | "mpc5200-psc-i2s", not "mpc5200-i2s".  This convention is chosen to | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 102 | avoid naming conflicts with non-psc devices providing the same | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 103 | function.  For example, "mpc5200-spi" and "mpc5200-psc-spi" describe | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 104 | the mpc5200 simple spi device and a PSC spi mode respectively. | 
|  | 105 |  | 
|  | 106 | If the soc device is more generic and present on other SOCs, the | 
|  | 107 | compatible property can specify the more generic device type also. | 
|  | 108 |  | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 109 | ie. mscan: compatible = "mpc5200-mscan\0fsl,mscan"; | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 110 |  | 
|  | 111 | At the time of writing, exact chip may be either 'mpc5200' or | 
|  | 112 | 'mpc5200b'. | 
|  | 113 |  | 
|  | 114 | Device drivers should always try to match as generically as possible. | 
|  | 115 |  | 
|  | 116 | III - Structure | 
|  | 117 | =============== | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 118 | The device tree for an mpc5200 board follows the structure defined in | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 119 | booting-without-of.txt with the following additional notes: | 
|  | 120 |  | 
|  | 121 | 0) the root node | 
|  | 122 | ---------------- | 
|  | 123 | Typical root description node; see booting-without-of | 
|  | 124 |  | 
|  | 125 | 1) The cpus node | 
|  | 126 | ---------------- | 
|  | 127 | The cpus node follows the basic layout described in booting-without-of. | 
|  | 128 | The bus-frequency property holds the XLB bus frequency | 
|  | 129 | The clock-frequency property holds the core frequency | 
|  | 130 |  | 
|  | 131 | 2) The memory node | 
|  | 132 | ------------------ | 
|  | 133 | Typical memory description node; see booting-without-of. | 
|  | 134 |  | 
|  | 135 | 3) The soc5200 node | 
|  | 136 | ------------------- | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 137 | This node describes the on chip SOC peripherals.  Every mpc5200 based | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 138 | board will have this node, and as such there is a common naming | 
|  | 139 | convention for SOC devices. | 
|  | 140 |  | 
|  | 141 | Required properties: | 
|  | 142 | name			type		description | 
|  | 143 | ----			----		----------- | 
|  | 144 | device_type		string		must be "soc" | 
|  | 145 | ranges			int		should be <0 baseaddr baseaddr+10000> | 
|  | 146 | reg			int		must be <baseaddr 10000> | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 147 | compatible		string		mpc5200: "mpc5200-soc" | 
|  | 148 | mpc5200b: "mpc5200b-soc\0mpc5200-soc" | 
|  | 149 | system-frequency	int		Fsystem frequency; source of all | 
|  | 150 | other clocks. | 
|  | 151 | bus-frequency		int		IPB bus frequency in HZ.  Clock rate | 
|  | 152 | used by most of the soc devices. | 
|  | 153 | #interrupt-cells	int		must be <3>. | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 154 |  | 
|  | 155 | Recommended properties: | 
|  | 156 | name			type		description | 
|  | 157 | ----			----		----------- | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 158 | model			string		Exact model of the chip; | 
|  | 159 | ie: model="fsl,mpc5200" | 
|  | 160 | revision		string		Silicon revision of chip | 
|  | 161 | ie: revision="M08A" | 
|  | 162 |  | 
|  | 163 | The 'model' and 'revision' properties are *strongly* recommended.  Having | 
|  | 164 | them presence acts as a bit of a safety net for working around as yet | 
|  | 165 | undiscovered bugs on one version of silicon.  For example, device drivers | 
|  | 166 | can use the model and revision properties to decide if a bug fix should | 
|  | 167 | be turned on. | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 168 |  | 
|  | 169 | 4) soc5200 child nodes | 
|  | 170 | ---------------------- | 
|  | 171 | Any on chip SOC devices available to Linux must appear as soc5200 child nodes. | 
|  | 172 |  | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 173 | Note: The tables below show the value for the mpc5200.  A mpc5200b device | 
|  | 174 | tree should use the "mpc5200b-<device>\0mpc5200-<device> form. | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 175 |  | 
|  | 176 | Required soc5200 child nodes: | 
|  | 177 | name		device_type		compatible	Description | 
|  | 178 | ----		-----------		----------	----------- | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 179 | cdm@<addr>	cdm			mpc5200-cmd	Clock Distribution | 
|  | 180 | pic@<addr>	interrupt-controller	mpc5200-pic	need an interrupt | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 181 | controller to boot | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 182 | bestcomm@<addr>	dma-controller		mpc5200-bestcomm 5200 pic also requires | 
|  | 183 | the bestcomm device | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 184 |  | 
|  | 185 | Recommended soc5200 child nodes; populate as needed for your board | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 186 | name		device_type	compatible	  Description | 
|  | 187 | ----		-----------	----------	  ----------- | 
| Marian Balakowicz | d24bc31 | 2007-10-19 04:44:24 +1000 | [diff] [blame] | 188 | gpt@<addr>	gpt		fsl,mpc5200-gpt	  General purpose timers | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 189 | rtc@<addr>	rtc		mpc5200-rtc	  Real time clock | 
|  | 190 | mscan@<addr>	mscan		mpc5200-mscan	  CAN bus controller | 
|  | 191 | pci@<addr>	pci		mpc5200-pci	  PCI bridge | 
|  | 192 | serial@<addr>	serial		mpc5200-psc-uart  PSC in serial mode | 
|  | 193 | i2s@<addr>	sound		mpc5200-psc-i2s	  PSC in i2s mode | 
|  | 194 | ac97@<addr>	sound		mpc5200-psc-ac97  PSC in ac97 mode | 
|  | 195 | spi@<addr>	spi		mpc5200-psc-spi	  PSC in spi mode | 
|  | 196 | irda@<addr>	irda		mpc5200-psc-irda  PSC in IrDA mode | 
|  | 197 | spi@<addr>	spi		mpc5200-spi	  MPC5200 spi device | 
|  | 198 | ethernet@<addr>	network		mpc5200-fec	  MPC5200 ethernet device | 
|  | 199 | ata@<addr>	ata		mpc5200-ata	  IDE ATA interface | 
|  | 200 | i2c@<addr>	i2c		mpc5200-i2c	  I2C controller | 
|  | 201 | usb@<addr>	usb-ohci-be	mpc5200-ohci,ohci-be	USB controller | 
| Matt LaPlante | 01dd2fb | 2007-10-20 01:34:40 +0200 | [diff] [blame] | 202 | xlb@<addr>	xlb		mpc5200-xlb	  XLB arbitrator | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 203 |  | 
|  | 204 | Important child node properties | 
|  | 205 | name		type		description | 
|  | 206 | ----		----		----------- | 
|  | 207 | cell-index	int		When multiple devices are present, is the | 
|  | 208 | index of the device in the hardware (ie. There | 
|  | 209 | are 6 PSC on the 5200 numbered PSC1 to PSC6) | 
|  | 210 | PSC1 has 'cell-index = <0>' | 
|  | 211 | PSC4 has 'cell-index = <3>' | 
|  | 212 |  | 
|  | 213 | 5) General Purpose Timer nodes (child of soc5200 node) | 
|  | 214 | On the mpc5200 and 5200b, GPT0 has a watchdog timer function.  If the board | 
|  | 215 | design supports the internal wdt, then the device node for GPT0 should | 
| Marian Balakowicz | d24bc31 | 2007-10-19 04:44:24 +1000 | [diff] [blame] | 216 | include the empty property 'fsl,has-wdt'. | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 217 |  | 
|  | 218 | 6) PSC nodes (child of soc5200 node) | 
|  | 219 | PSC nodes can define the optional 'port-number' property to force assignment | 
|  | 220 | order of serial ports.  For example, PSC5 might be physically connected to | 
|  | 221 | the port labeled 'COM1' and PSC1 wired to 'COM1'.  In this case, PSC5 would | 
|  | 222 | have a "port-number = <0>" property, and PSC1 would have "port-number = <1>". | 
|  | 223 |  | 
|  | 224 | PSC in i2s mode:  The mpc5200 and mpc5200b PSCs are not compatible when in | 
|  | 225 | i2s mode.  An 'mpc5200b-psc-i2s' node cannot include 'mpc5200-psc-i2s' in the | 
|  | 226 | compatible field. | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 227 |  | 
|  | 228 | IV - Extra Notes | 
|  | 229 | ================ | 
|  | 230 |  | 
|  | 231 | 1. Interrupt mapping | 
|  | 232 | -------------------- | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 233 | The mpc5200 pic driver splits hardware IRQ numbers into two levels.  The | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 234 | split reflects the layout of the PIC hardware itself, which groups | 
|  | 235 | interrupts into one of three groups; CRIT, MAIN or PERP.  Also, the | 
|  | 236 | Bestcomm dma engine has it's own set of interrupt sources which are | 
|  | 237 | cascaded off of peripheral interrupt 0, which the driver interprets as a | 
|  | 238 | fourth group, SDMA. | 
|  | 239 |  | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 240 | The interrupts property for device nodes using the mpc5200 pic consists | 
| Grant Likely | b1e253c | 2006-11-27 14:16:22 -0700 | [diff] [blame] | 241 | of three cells; <L1 L2 level> | 
|  | 242 |  | 
|  | 243 | L1 := [CRIT=0, MAIN=1, PERP=2, SDMA=3] | 
|  | 244 | L2 := interrupt number; directly mapped from the value in the | 
|  | 245 | "ICTL PerStat, MainStat, CritStat Encoded Register" | 
|  | 246 | level := [LEVEL_HIGH=0, EDGE_RISING=1, EDGE_FALLING=2, LEVEL_LOW=3] | 
| Grant Likely | 05cbbc6 | 2007-02-12 13:36:54 -0700 | [diff] [blame] | 247 |  | 
|  | 248 | 2. Shared registers | 
|  | 249 | ------------------- | 
|  | 250 | Some SoC devices share registers between them.  ie. the i2c devices use | 
|  | 251 | a single clock control register, and almost all device are affected by | 
|  | 252 | the port_config register.  Devices which need to manipulate shared regs | 
|  | 253 | should look to the parent SoC node.  The soc node is responsible | 
|  | 254 | for arbitrating all shared register access. |