// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * MPC5121E ADS Device Tree Source
 *
 * Copyright 2007-2008 Freescale Semiconductor Inc.
 */

#include "mpc5121.dtsi"

/ {
	model = "mpc5121ads";
	compatible = "fsl,mpc5121ads", "fsl,mpc5121";

	nfc@40000000 {
		/*
		 * ADS has two Hynix 512MB Nand flash chips in a single
		 * stacked package.
		 */
		chips = <2>;

		nand@0 {
			label = "nand";
			reg = <0x00000000 0x40000000>;	/* 512MB + 512MB */
		};
	};

	localbus@80000020 {
		ranges = <0x0 0x0 0xfc000000 0x04000000
			  0x2 0x0 0x82000000 0x00008000>;

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

			protected@0 {
				label = "protected";
				reg = <0x00000000 0x00040000>;  // first sector is protected
				read-only;
			};
			filesystem@40000 {
				label = "filesystem";
				reg = <0x00040000 0x03c00000>;  // 60M for filesystem
			};
			kernel@3c40000 {
				label = "kernel";
				reg = <0x03c40000 0x00280000>;  // 2.5M for kernel
			};
			device-tree@3ec0000 {
				label = "device-tree";
				reg = <0x03ec0000 0x00040000>;  // one sector for device tree
			};
			u-boot@3f00000 {
				label = "u-boot";
				reg = <0x03f00000 0x00100000>;  // 1M for u-boot
				read-only;
			};
		};

		board-control@2,0 {
			compatible = "fsl,mpc5121ads-cpld";
			reg = <0x2 0x0 0x8000>;
		};

		cpld_pic: pic@2,a {
			compatible = "fsl,mpc5121ads-cpld-pic";
			interrupt-controller;
			#interrupt-cells = <2>;
			reg = <0x2 0xa 0x5>;
			/* irq routing:
			 * all irqs but touch screen are routed to irq0 (ipic 48)
			 * touch screen is statically routed to irq1 (ipic 17)
			 * so don't use it here
			 */
			interrupts = <48 0x8>;
		};
	};

	soc@80000000 {

		i2c@1700 {
			fsl,preserve-clocking;

			hwmon@4a {
				compatible = "adi,ad7414";
				reg = <0x4a>;
			};

			eeprom@50 {
				compatible = "atmel,24c32";
				reg = <0x50>;
			};

			rtc@68 {
				compatible = "st,m41t62";
				reg = <0x68>;
			};
		};

		eth0: ethernet@2800 {
			phy-handle = <&phy0>;
		};

		can@2300 {
			status = "disabled";
		};

		can@2380 {
			status = "disabled";
		};

		viu@2400 {
			status = "disabled";
		};

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

		/* mpc5121ads only uses USB0 */
		usb@3000 {
			status = "disabled";
		};

		/* USB0 using internal UTMI PHY */
		usb@4000 {
			dr_mode = "host";
			fsl,invert-drvvbus;
			fsl,invert-pwr-fault;
		};

		/* PSC3 serial port A aka ttyPSC0 */
		psc@11300 {
			compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc";
		};

		/* PSC4 serial port B aka ttyPSC1 */
		psc@11400 {
			compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc";
		};

		/* PSC5 in ac97 mode */
		ac97: psc@11500 {
			compatible = "fsl,mpc5121-psc-ac97", "fsl,mpc5121-psc";
			fsl,mode = "ac97-slave";
			fsl,rx-fifo-size = <384>;
			fsl,tx-fifo-size = <384>;
		};
	};

	pci: pci@80008500 {
		interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
		interrupt-map = <
				/* IDSEL 0x15 - Slot 1 PCI */
				 0xa800 0x0 0x0 0x1 &cpld_pic 0x0 0x8
				 0xa800 0x0 0x0 0x2 &cpld_pic 0x1 0x8
				 0xa800 0x0 0x0 0x3 &cpld_pic 0x2 0x8
				 0xa800 0x0 0x0 0x4 &cpld_pic 0x3 0x8

				/* IDSEL 0x16 - Slot 2 MiniPCI */
				 0xb000 0x0 0x0 0x1 &cpld_pic 0x4 0x8
				 0xb000 0x0 0x0 0x2 &cpld_pic 0x5 0x8

				/* IDSEL 0x17 - Slot 3 MiniPCI */
				 0xb800 0x0 0x0 0x1 &cpld_pic 0x6 0x8
				 0xb800 0x0 0x0 0x2 &cpld_pic 0x7 0x8
				>;
	};
};