On Thu, Nov 29, 2007 at 06:28:36PM +0300, Andrei Dolnikov wrote: > Device tree source file for the Emerson Katana Qp board > > Signed-off-by: Andrei Dolnikov <[EMAIL PROTECTED]> > > --- > katanaqp.dts | 360 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 360 insertions(+) > > diff --git a/arch/powerpc/boot/dts/katanaqp.dts > b/arch/powerpc/boot/dts/katanaqp.dts > new file mode 100644 > index 0000000..98257a2 > --- /dev/null > +++ b/arch/powerpc/boot/dts/katanaqp.dts > @@ -0,0 +1,360 @@ > +/* Device Tree Source for Emerson Katana Qp > + * > + * Authors: Vladislav Buzov <[EMAIL PROTECTED]> > + * Andrei Dolnikov <[EMAIL PROTECTED]> > + * > + * Based on prpmc8200.dts by Mark A. Greer <[EMAIL PROTECTED]> > + * > + * 2007 (c) MontaVista, Software, Inc. This file is licensed under > + * the terms of the GNU General Public License version 2. This program > + * is licensed "as is" without any warranty of any kind, whether express > + * or implied. > + * > + */ > + > +/ { > + #address-cells = <1>; > + #size-cells = <1>; > + model = "Katana-Qp"; /* Default */ > + compatible = "emerson,Katana-Qp"; > + coherency-off;
What is this property for? > + > + cpus { > + #address-cells = <1>; > + #size-cells = <0>; > + > + PowerPC,[EMAIL PROTECTED] { > + device_type = "cpu"; > + reg = <0>; > + clock-frequency = <0>; /* From U-boot */ > + bus-frequency = <0>; /* From U-boot */ > + timebase-frequency = <0>; /* From U-boot */ > + i-cache-line-size = <20>; > + d-cache-line-size = <20>; > + i-cache-size = <8000>; > + d-cache-size = <8000>; > + }; > + }; > + > + memory { > + device_type = "memory"; > + reg = <00000000 00000000>; /* Filled in by bootwrapper */ > + }; > + > + [EMAIL PROTECTED] { /* Marvell Discovery */ > + #address-cells = <1>; > + #size-cells = <1>; > + model = "mv64460"; /* Default */ > + compatible = "marvell,mv64x60"; Compatible properties should not have "x" asn in 64x60 here. If there's a suitable name for the general register interface use that, otherwise use the specific model number of the earliest device to implement this register interface. Later models should have a compatible property which lists their specific model, followed by the earlier model number with which they're compatible. > + clock-frequency = <7f28155>; /* 133.333333 MHz */ You can use <d# 133333333> to avoid the ugly hex. > + reg = <f8100000 00010000>; > + virtual-reg = <f8100000>; > + ranges = <c1000000 c1000000 01000000 /* PCI 1 I/O Space */ > + 90000000 90000000 30000000 /* PCI 1 MEM Space */ > + e8000000 e8000000 04000000 /* User FLASH: Up to > 64Mb */ > + 00000000 f8100000 00010000 /* Bridge's regs */ > + f8500000 f8500000 00040000>; /* Integrated SRAM */ These ranges look kind of weird, but I'd have to think about them harder to say something more specific. > + [EMAIL PROTECTED] { > + compatible = "cfi-flash"; > + reg = <e8000000 1000000>; /* Default (16MB) */ > + probe-type = "CFI"; You're using the new-style binding (compatible == "cfi-flash"), so the obsolete probe-tyope property should not be included. > + bank-width = <4>; > + > + [EMAIL PROTECTED] { > + label = "Primary Monitor"; > + reg = <0 100000>; /* 1Mb */ > + read-only; > + }; > + > + [EMAIL PROTECTED] { > + label = "Primary Kernel"; > + reg = <100000 200000>; /* 2 Mb */ > + }; > + > + [EMAIL PROTECTED] { > + label = "Primary FS"; > + reg = <300000 d00000>; /* 13 Mb */ > + }; > + > + }; > + > + mdio { There must be some way of actuall accessing the mdio bus, so this node ought to have a 'reg' property and unit address. > + #address-cells = <1>; > + #size-cells = <0>; > + compatible = "marvell,mv64x60-mdio"; > + [EMAIL PROTECTED] { > + block-index = <0>; > + compatible = "marvell,mv88e1111"; > + reg = <a>; > + }; > + [EMAIL PROTECTED] { > + compatible = "marvell,mv88e1111"; > + block-index = <1>; > + reg = <d>; > + }; > + [EMAIL PROTECTED] { > + compatible = "marvell,mv88e1111"; > + block-index = <2>; > + reg = <6>; > + }; > + }; > + > + [EMAIL PROTECTED] { > + reg = <2000 2000>; Are the registers for the 3 ethernets really all together? This bank can't be subdivided into seperate register blocks for each MAC? > + eth0 { > + device_type = "network"; > + compatible = "marvell,mv64x60-eth"; > + block-index = <0>; This block-index thing is crap. If you really need to subindex nodes like this, use "reg", with an appropriate #address-cells in the parent, then the nodes will also get sensible unit addresses. > + interrupts = <20>; > + interrupt-parent = <&/mv64x60/pic>; You should use a label for the PIC to make things more readable. > + phy = <&/mv64x60/mdio/[EMAIL PROTECTED]>; > + speed = <3e8>; > + duplex = <1>; > + tx_queue_size = <320>; > + rx_queue_size = <190>; > + local-mac-address = [ 00 00 00 00 00 00 ]; > + /* Mac address filled in by bootwrapper */ > + }; > + eth1 { > + device_type = "network"; > + compatible = "marvell,mv64x60-eth"; > + block-index = <1>; > + interrupts = <21>; > + interrupt-parent = <&/mv64x60/pic>; > + phy = <&/mv64x60/mdio/[EMAIL PROTECTED]>; > + speed = <3e8>; > + duplex = <1>; > + tx_queue_size = <320>; > + rx_queue_size = <190>; > + local-mac-address = [ 00 00 00 00 00 00 ]; > + /* Mac address filled in by bootwrapper */ > + }; > + eth2 { > + device_type = "network"; > + compatible = "marvell,mv64x60-eth"; > + block-index = <2>; > + interrupts = <22>; > + interrupt-parent = <&/mv64x60/pic>; > + phy = <&/mv64x60/mdio/[EMAIL PROTECTED]>; > + speed = <3e8>; > + duplex = <1>; > + tx_queue_size = <320>; > + rx_queue_size = <190>; > + local-mac-address = [ 00 00 00 00 00 00 ]; > + /* Mac address filled in by bootwrapper */ > + }; > + }; > + > + [EMAIL PROTECTED] { > + compatible = "marvell,mv64x60-sdma"; > + reg = <4000 c18>; > + virtual-reg = <f8104000>; Why does this node have virtual-reg? > + interrupt-base = <0>; > + interrupts = <24>; > + interrupt-parent = <&/mv64x60/pic>; > + }; > + > + [EMAIL PROTECTED] { > + compatible = "marvell,mv64x60-sdma"; > + reg = <6000 c18>; > + virtual-reg = <f8106000>; And again. > + interrupt-base = <0>; > + interrupts = <26>; > + interrupt-parent = <&/mv64x60/pic>; > + }; > + > + [EMAIL PROTECTED] { > + compatible = "marvell,mv64x60-brg"; > + reg = <b200 8>; > + clock-src = <8>; > + clock-frequency = <7ed6b40>; > + current-speed = <2580>; > + bcr = <0>; > + }; > + > + [EMAIL PROTECTED] { > + compatible = "marvell,mv64x60-brg"; > + reg = <b208 8>; > + clock-src = <8>; > + clock-frequency = <7ed6b40>; > + current-speed = <2580>; > + bcr = <0>; > + }; > + > + [EMAIL PROTECTED] { > + reg = <f200 200>; > + }; > + > + [EMAIL PROTECTED] { > + reg = <b400 c>; > + }; > + > + [EMAIL PROTECTED] { > + reg = <b800 100>; > + virtual-reg = <f810b800>; > + }; > + > + [EMAIL PROTECTED] { > + device_type = "serial"; > + compatible = "marvell,mpsc"; > + reg = <8000 38>; > + virtual-reg = <f8108000>; > + sdma = <&/mv64x60/[EMAIL PROTECTED]>; > + brg = <&/mv64x60/[EMAIL PROTECTED]>; > + cunit = <&/mv64x60/[EMAIL PROTECTED]>; > + mpscrouting = <&/mv64x60/[EMAIL PROTECTED]>; > + mpscintr = <&/mv64x60/[EMAIL PROTECTED]>; > + block-index = <0>; What is this block-index thing about here? Since the devices are disambiguated by their register address, why do you need it? > + max_idle = <28>; > + chr_1 = <0>; > + chr_2 = <0>; > + chr_10 = <3>; > + mpcr = <0>; > + interrupts = <28>; > + interrupt-parent = <&/mv64x60/pic>; > + }; > + > + [EMAIL PROTECTED] { > + device_type = "serial"; > + compatible = "marvell,mpsc"; > + reg = <9000 38>; > + virtual-reg = <f8109000>; > + sdma = <&/mv64x60/[EMAIL PROTECTED]>; > + brg = <&/mv64x60/[EMAIL PROTECTED]>; > + cunit = <&/mv64x60/[EMAIL PROTECTED]>; > + mpscrouting = <&/mv64x60/[EMAIL PROTECTED]>; > + mpscintr = <&/mv64x60/[EMAIL PROTECTED]>; > + block-index = <1>; > + max_idle = <28>; > + chr_1 = <0>; > + chr_2 = <0>; > + chr_10 = <3>; > + mpcr = <0>; > + interrupts = <29>; > + interrupt-parent = <&/mv64x60/pic>; > + }; > + > + [EMAIL PROTECTED] { /* watchdog timer */ > + compatible = "marvell,mv64x60-wdt"; > + reg = <b410 8>; > + timeout = <a>; /* wdt timeout in seconds */ Uh... that looks like it should be a configuration parameter, not a device tree property. > + }; > + > + [EMAIL PROTECTED] { > + compatible = "marvell,mv64x60-i2c"; > + reg = <c000 20>; > + virtual-reg = <f810c000>; > + freq_m = <8>; > + freq_n = <3>; > + timeout = <3e8>; /* 1000 = 1 second */ > + retries = <1>; > + interrupts = <25>; > + interrupt-parent = <&/mv64x60/pic>; > + }; > + > + pic { Needs a unit address. > + #interrupt-cells = <1>; > + #address-cells = <0>; > + compatible = "marvell,mv64x60-pic"; > + reg = <0000 88>; > + interrupt-controller; > + }; > + > + [EMAIL PROTECTED] { > + compatible = "marvell,mv64x60-mpp"; > + reg = <f000 10>; > + }; > + > + [EMAIL PROTECTED] { > + compatible = "marvell,mv64x60-gpp"; > + reg = <f100 20>; > + }; > + > + [EMAIL PROTECTED] { > + #address-cells = <3>; > + #size-cells = <2>; > + #interrupt-cells = <1>; > + device_type = "pci"; > + compatible = "marvell,mv64x60-pci"; > + reg = <0c78 8>; > + ranges = <01000000 0 0 c1000000 0 01000000 > + 02000000 0 90000000 90000000 0 30000000>; > + bus-range = <0 ff>; > + clock-frequency = <3EF1480>; > + interrupt-pci-iack = <0c34>; > + interrupt-parent = <&/mv64x60/pic>; > + interrupt-map-mask = <f800 0 0 7>; > + interrupt-map = < > + /* IDSEL 0x1 */ > + 0800 0 0 1 &/mv64x60/pic 5a > + 0800 0 0 2 &/mv64x60/pic 5b > + 0800 0 0 3 &/mv64x60/pic 5e > + 0800 0 0 4 &/mv64x60/pic 5f > + > + /* IDSEL 0x2 */ > + 1000 0 0 1 &/mv64x60/pic 5b > + 1000 0 0 2 &/mv64x60/pic 5e > + 1000 0 0 3 &/mv64x60/pic 5f > + 1000 0 0 4 &/mv64x60/pic 5a > + > + /* IDSEL 0x3 */ > + 1800 0 0 1 &/mv64x60/pic 5e > + 1800 0 0 2 &/mv64x60/pic 5f > + 1800 0 0 3 &/mv64x60/pic 5a > + 1800 0 0 4 &/mv64x60/pic 5b > + > + /* IDSEL 0x4 */ > + 2000 0 0 1 &/mv64x60/pic 5f > + 2000 0 0 2 &/mv64x60/pic 5a > + 2000 0 0 3 &/mv64x60/pic 5b > + 2000 0 0 4 &/mv64x60/pic 5e > + > + /* IDSEL 0x6 */ > + 3000 0 0 1 &/mv64x60/pic 5b > + 3000 0 0 2 &/mv64x60/pic 5e > + 3000 0 0 3 &/mv64x60/pic 5f > + 3000 0 0 4 &/mv64x60/pic 5a > + >; > + }; > + > + [EMAIL PROTECTED] { The unit address should notr include leading zeroes. > + compatible = "marvell,mv64x60-cpu-error"; > + reg = <0070 10 0128 28>; > + interrupts = <03>; > + interrupt-parent = <&/mv64x60/pic>; > + }; > + > + [EMAIL PROTECTED] { > + compatible = "marvell,mv64x60-sram-ctrl"; > + reg = <0380 80>; > + interrupts = <0d>; > + interrupt-parent = <&/mv64x60/pic>; > + }; > + > + [EMAIL PROTECTED] { > + compatible = "marvell,mv64x60-pci-error"; > + reg = <1d40 40 0c28 4>; > + interrupts = <0c>; > + interrupt-parent = <&/mv64x60/pic>; > + }; > + > + [EMAIL PROTECTED] { > + compatible = "marvell,mv64x60-mem-ctrl"; > + reg = <1400 60>; > + interrupts = <11>; > + interrupt-parent = <&/mv64x60/pic>; > + }; > + }; > + > + [EMAIL PROTECTED] { > + compatible = "altera,maxii"; > + reg = <f8200000 40000>; > + virtual-reg = <f8200000>; > + }; > + > + chosen { > + bootargs = "ip=on"; > + linux,stdout-path = "/[EMAIL PROTECTED]/[EMAIL PROTECTED]"; > + }; > +}; -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev