/* Device Tree Source for Motorola PrPMC2800
 *
 * Author: Mark A. Greer <mgreer@mvista.com>
 *
 * 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.
 *
 * Property values that are labeled as "Default" will be updated by bootwrapper
 * if it can determine the exact PrPMC type.
 *
 * To build:
 *   dtc -I dts -O asm -o prpmc2800.S -b 0 prpmc2800.dts
 *   dtc -I dts -O dtb -o prpmc2800.dtb -b 0 prpmc2800.dts
 */

/ {
	#address-cells = <1>;
	#size-cells = <1>;
	model = "PrPMC280/PrPMC2800"; /* Default */
	compatible = "motorola,PrPMC2800";
	coherency-off;

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		PowerPC,7447 {
			device_type = "cpu";
			reg = <0>;
			clock-frequency = <2bb0b140>;	/* Default (733 MHz) */
			bus-frequency = <7f28155>;	/* 133.333333 MHz */
			timebase-frequency = <1fca055>;	/* 33.333333 MHz */
			i-cache-line-size = <20>;
			d-cache-line-size = <20>;
			i-cache-size = <8000>;
			d-cache-size = <8000>;
		};
	};

	memory {
		device_type = "memory";
		reg = <00000000 20000000>;	/* Default (512MB) */
	};

	mv64x60@f1000000 { /* Marvell Discovery */
		#address-cells = <1>;
		#size-cells = <1>;
		#interrupt-cells = <1>;
		model = "mv64360";			/* Default */
		compatible = "marvell,mv64x60";
		clock-frequency = <7f28155>;		/* 133.333333 MHz */
		reg = <f1000000 00010000>;
		virtual-reg = <f1000000>;
		ranges = <88000000 88000000 01000000	/* PCI 0 I/O Space */
			  80000000 80000000 08000000	/* PCI 0 MEM Space */
			  a0000000 a0000000 04000000	/* User FLASH */
			  00000000 f1000000 00010000	/* Bridge's regs */
			  f2000000 f2000000 00040000>;	/* Integrated SRAM */

		flash@a0000000 {
			device_type = "rom";
			compatible = "direct-mapped";
			reg = <a0000000 4000000>; /* Default (64MB) */
			probe-type = "CFI";
			bank-width = <4>;
			partitions = <00000000 00100000 /* RO */
				      00100000 00040001 /* RW */
				      00140000 00400000 /* RO */
				      00540000 039c0000 /* RO */
				      03f00000 00100000>; /* RO */
			partition-names = "FW Image A", "FW Config Data", "Kernel Image", "Filesystem", "FW Image B";
		};

		mdio {
			#address-cells = <1>;
			#size-cells = <0>;
			device_type = "mdio";
			compatible = "marvell,mv64x60-mdio";
			ethernet-phy@1 {
				device_type = "ethernet-phy";
				compatible = "broadcom,bcm5421";
				interrupts = <4c>;	/* GPP 12 */
				interrupt-parent = <&/mv64x60/pic>;
				reg = <1>;
			};
			ethernet-phy@3 {
				device_type = "ethernet-phy";
				compatible = "broadcom,bcm5421";
				interrupts = <4c>;	/* GPP 12 */
				interrupt-parent = <&/mv64x60/pic>;
				reg = <3>;
			};
		};

		ethernet@2000 {
			reg = <2000 2000>;
			eth0 {
				device_type = "network";
				compatible = "marvell,mv64x60-eth";
				block-index = <0>;
				interrupts = <20>;
				interrupt-parent = <&/mv64x60/pic>;
				phy = <&/mv64x60/mdio/ethernet-phy@1>;
				local-mac-address = [ 00 00 00 00 00 00 ];
			};
			eth1 {
				device_type = "network";
				compatible = "marvell,mv64x60-eth";
				block-index = <1>;
				interrupts = <21>;
				interrupt-parent = <&/mv64x60/pic>;
				phy = <&/mv64x60/mdio/ethernet-phy@3>;
				local-mac-address = [ 00 00 00 00 00 00 ];
			};
		};

		sdma@4000 {
			device_type = "dma";
			compatible = "marvell,mv64x60-sdma";
			reg = <4000 c18>;
			virtual-reg = <f1004000>;
			interrupt-base = <0>;
			interrupts = <24>;
			interrupt-parent = <&/mv64x60/pic>;
		};

		sdma@6000 {
			device_type = "dma";
			compatible = "marvell,mv64x60-sdma";
			reg = <6000 c18>;
			virtual-reg = <f1006000>;
			interrupt-base = <0>;
			interrupts = <26>;
			interrupt-parent = <&/mv64x60/pic>;
		};

		brg@b200 {
			compatible = "marvell,mv64x60-brg";
			reg = <b200 8>;
			clock-src = <8>;
			clock-frequency = <7ed6b40>;
			current-speed = <2580>;
			bcr = <0>;
		};

		brg@b208 {
			compatible = "marvell,mv64x60-brg";
			reg = <b208 8>;
			clock-src = <8>;
			clock-frequency = <7ed6b40>;
			current-speed = <2580>;
			bcr = <0>;
		};

		cunit@f200 {
			reg = <f200 200>;
		};

		mpscrouting@b400 {
			reg = <b400 c>;
		};

		mpscintr@b800 {
			reg = <b800 100>;
			virtual-reg = <f100b800>;
		};

		mpsc@8000 {
			device_type = "serial";
			compatible = "marvell,mpsc";
			reg = <8000 38>;
			virtual-reg = <f1008000>;
			sdma = <&/mv64x60/sdma@4000>;
			brg = <&/mv64x60/brg@b200>;
			cunit = <&/mv64x60/cunit@f200>;
			mpscrouting = <&/mv64x60/mpscrouting@b400>;
			mpscintr = <&/mv64x60/mpscintr@b800>;
			block-index = <0>;
			max_idle = <28>;
			chr_1 = <0>;
			chr_2 = <0>;
			chr_10 = <3>;
			mpcr = <0>;
			interrupts = <28>;
			interrupt-parent = <&/mv64x60/pic>;
		};

		mpsc@9000 {
			device_type = "serial";
			compatible = "marvell,mpsc";
			reg = <9000 38>;
			virtual-reg = <f1009000>;
			sdma = <&/mv64x60/sdma@6000>;
			brg = <&/mv64x60/brg@b208>;
			cunit = <&/mv64x60/cunit@f200>;
			mpscrouting = <&/mv64x60/mpscrouting@b400>;
			mpscintr = <&/mv64x60/mpscintr@b800>;
			block-index = <1>;
			max_idle = <28>;
			chr_1 = <0>;
			chr_2 = <0>;
			chr_10 = <3>;
			mpcr = <0>;
			interrupts = <2a>;
			interrupt-parent = <&/mv64x60/pic>;
		};

		wdt@b410 {			/* watchdog timer */
			compatible = "marvell,mv64x60-wdt";
			reg = <b410 8>;
			timeout = <a>;		/* wdt timeout in seconds */
		};

		i2c@c000 {
			device_type = "i2c";
			compatible = "marvell,mv64x60-i2c";
			reg = <c000 20>;
			virtual-reg = <f100c000>;
			freq_m = <8>;
			freq_n = <3>;
			timeout = <3e8>;		/* 1000 = 1 second */
			retries = <1>;
			interrupts = <25>;
			interrupt-parent = <&/mv64x60/pic>;
		};

		pic {
			#interrupt-cells = <1>;
			#address-cells = <0>;
			compatible = "marvell,mv64x60-pic";
			reg = <0000 88>;
			interrupt-controller;
		};

		mpp@f000 {
			compatible = "marvell,mv64x60-mpp";
			reg = <f000 10>;
		};

		gpp@f100 {
			compatible = "marvell,mv64x60-gpp";
			reg = <f100 20>;
		};

		pci@80000000 {
			#address-cells = <3>;
			#size-cells = <2>;
			#interrupt-cells = <1>;
			device_type = "pci";
			compatible = "marvell,mv64x60-pci";
			reg = <0cf8 8>;
			ranges = <01000000 0        0 88000000 0 01000000
				  02000000 0 80000000 80000000 0 08000000>;
			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 0x0a */
				5000 0 0 1 &/mv64x60/pic 50
				5000 0 0 2 &/mv64x60/pic 51
				5000 0 0 3 &/mv64x60/pic 5b
				5000 0 0 4 &/mv64x60/pic 5d

				/* IDSEL 0x0b */
				5800 0 0 1 &/mv64x60/pic 5b
				5800 0 0 2 &/mv64x60/pic 5d
				5800 0 0 3 &/mv64x60/pic 50
				5800 0 0 4 &/mv64x60/pic 51

				/* IDSEL 0x0c */
				6000 0 0 1 &/mv64x60/pic 5b
				6000 0 0 2 &/mv64x60/pic 5d
				6000 0 0 3 &/mv64x60/pic 50
				6000 0 0 4 &/mv64x60/pic 51

				/* IDSEL 0x0d */
				6800 0 0 1 &/mv64x60/pic 5d
				6800 0 0 2 &/mv64x60/pic 50
				6800 0 0 3 &/mv64x60/pic 51
				6800 0 0 4 &/mv64x60/pic 5b
			>;
		};

		cpu-error@0070 {
			compatible = "marvell,mv64x60-cpu-error";
			reg = <0070 10 0128 28>;
			interrupts = <03>;
			interrupt-parent = <&/mv64x60/pic>;
		};

		sram-ctrl@0380 {
			compatible = "marvell,mv64x60-sram-ctrl";
			reg = <0380 80>;
			interrupts = <0d>;
			interrupt-parent = <&/mv64x60/pic>;
		};

		pci-error@1d40 {
			compatible = "marvell,mv64x60-pci-error";
			reg = <1d40 40 0c28 4>;
			interrupts = <0c>;
			interrupt-parent = <&/mv64x60/pic>;
		};

		mem-ctrl@1400 {
			compatible = "marvell,mv64x60-mem-ctrl";
			reg = <1400 60>;
			interrupts = <11>;
			interrupt-parent = <&/mv64x60/pic>;
		};
	};

	chosen {
		bootargs = "ip=on";
		linux,stdout-path = "/mv64x60@f1000000/mpsc@8000";
	};
};
