// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * phyCORE-MPC5200B-IO (pcm032) board Device Tree Source
 *
 * Copyright (C) 2006-2009 Pengutronix
 * Sascha Hauer, Juergen Beisert, Wolfram Sang <kernel@pengutronix.de>
 */

/include/ "mpc5200b.dtsi"

&gpt0 { fsl,has-wdt; };
&gpt2 { gpio-controller; };
&gpt3 { gpio-controller; };
&gpt4 { gpio-controller; };
&gpt5 { gpio-controller; };
&gpt6 { gpio-controller; };
&gpt7 { gpio-controller; };

/ {
	model = "phytec,pcm032";
	compatible = "phytec,pcm032";

	memory@0 {
		reg = <0x00000000 0x08000000>;	// 128MB
	};

	soc5200@f0000000 {
		psc@2000 {	/* PSC1 is ac97 */
			compatible = "fsl,mpc5200b-psc-ac97","fsl,mpc5200-psc-ac97";
			cell-index = <0>;
		};

		/* PSC2 port is used by CAN1/2 */
		psc@2200 {
			status = "disabled";
		};

		psc@2400 { /* PSC3 in UART mode */
			compatible = "fsl,mpc5200b-psc-uart","fsl,mpc5200-psc-uart";
		};

		/* PSC4 is ??? */
		psc@2600 {
			status = "disabled";
		};

		/* PSC5 is ??? */
		psc@2800 {
			status = "disabled";
		};

		psc@2c00 { /* PSC6 in UART mode */
			compatible = "fsl,mpc5200b-psc-uart","fsl,mpc5200-psc-uart";
		};

		ethernet@3000 {
			phy-handle = <&phy0>;
		};

		mdio@3000 {
			phy0: ethernet-phy@0 {
				reg = <0>;
			};
		};

		i2c@3d40 {
			rtc@51 {
				compatible = "nxp,pcf8563";
				reg = <0x51>;
			};
			eeprom@52 {
				compatible = "catalyst,24c32", "atmel,24c32";
				reg = <0x52>;
				pagesize = <32>;
			};
		};
	};

	pci@f0000d00 {
		interrupt-map-mask = <0xf800 0 0 7>;
		interrupt-map = <0xc000 0 0 1 &mpc5200_pic 0 0 3 // 1st slot
				 0xc000 0 0 2 &mpc5200_pic 1 1 3
				 0xc000 0 0 3 &mpc5200_pic 1 2 3
				 0xc000 0 0 4 &mpc5200_pic 1 3 3

				 0xc800 0 0 1 &mpc5200_pic 1 1 3 // 2nd slot
				 0xc800 0 0 2 &mpc5200_pic 1 2 3
				 0xc800 0 0 3 &mpc5200_pic 1 3 3
				 0xc800 0 0 4 &mpc5200_pic 0 0 3>;
		ranges = <0x42000000 0 0x80000000 0x80000000 0 0x20000000>,
			 <0x02000000 0 0xa0000000 0xa0000000 0 0x10000000>,
			 <0x01000000 0 0x00000000 0xb0000000 0 0x01000000>;
	};

	localbus {
		ranges = <0 0 0xfe000000 0x02000000
			  1 0 0xfc000000 0x02000000
			  2 0 0xfbe00000 0x00200000
			  3 0 0xf9e00000 0x02000000
			  4 0 0xf7e00000 0x02000000
			  5 0 0xe6000000 0x02000000
			  6 0 0xe8000000 0x02000000
			  7 0 0xea000000 0x02000000>;

		flash@0,0 {
			compatible = "cfi-flash";
			reg = <0 0 0x02000000>;
			bank-width = <4>;
			#size-cells = <1>;
			#address-cells = <1>;

			partition@0 {
				label = "ubootl";
				reg = <0x00000000 0x00040000>;
			};
			partition@40000 {
				label = "kernel";
				reg = <0x00040000 0x001c0000>;
			};
			partition@200000 {
				label = "jffs2";
				reg = <0x00200000 0x01d00000>;
			};
			partition@1f00000 {
				label = "uboot";
				reg = <0x01f00000 0x00040000>;
			};
			partition@1f40000 {
				label = "env";
				reg = <0x01f40000 0x00040000>;
			};
			partition@1f80000 {
				label = "oftree";
				reg = <0x01f80000 0x00040000>;
			};
			partition@1fc0000 {
				label = "space";
				reg = <0x01fc0000 0x00040000>;
			};
		};

		sram@2,0 {
			compatible = "mtd-ram";
			reg = <2 0 0x00200000>;
			bank-width = <2>;
		};

		/*
		 * example snippets for FPGA
		 *
		 * fpga@3,0 {
		 *	 compatible = "fpga_driver";
		 *	 reg = <3 0 0x02000000>;
		 *	 bank-width = <4>;
		 * };
		 *
		 * fpga@4,0 {
		 *	 compatible = "fpga_driver";
		 *	 reg = <4 0 0x02000000>;
		 *	 bank-width = <4>;
		 * };
		 */

		/*
		 * example snippets for free chipselects
		 *
		 * device@5,0 {
		 *	 compatible = "custom_driver";
		 *	 reg = <5 0 0x02000000>;
		 * };
		 *
		 * device@6,0 {
		 *	 compatible = "custom_driver";
		 *	 reg = <6 0 0x02000000>;
		 * };
		 *
		 * device@7,0 {
		 *	 compatible = "custom_driver";
		 *	 reg = <7 0 0x02000000>;
		 * };
		 */
	};
};
