// SPDX-License-Identifier: GPL-2.0+
/*
 * Turris 1.x Device Tree Source
 *
 * Copyright 2013 - 2022 CZ.NIC z.s.p.o. (http://www.nic.cz/)
 *
 * Pinout, Schematics and Altium hardware design files are open source
 * and available at: https://docs.turris.cz/hw/turris-1x/turris-1x/
 */

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/leds/common.h>
/include/ "fsl/p2020si-pre.dtsi"

/ {
	model = "Turris 1.x";

	/* fsl,P2020RDB-PC is required for booting Linux */
	compatible = "cznic,turris1x", "fsl,P2020RDB-PC";

	aliases {
		ethernet0 = &enet0;
		ethernet1 = &enet1;
		ethernet2 = &enet2;
		serial0 = &serial0;
		serial1 = &serial1;
		pci0 = &pci0;
		pci1 = &pci1;
		pci2 = &pci2;
		spi0 = &spi0;
	};

	memory {
		device_type = "memory";
	};

	soc: soc@ffe00000 {
		ranges = <0x0 0x0 0xffe00000 0x00100000>;

		i2c@3000 {
			/* PCA9557PW GPIO controller for boot config */
			gpio-controller@18 {
				compatible = "nxp,pca9557";
				label = "bootcfg";
				reg = <0x18>;
				#gpio-cells = <2>;
				gpio-controller;
				polarity = <0x00>;
			};

			/* STM32F030R8T6 MCU for power control */
			power-control@2a {
				/*
				 * Turris Power Control firmware runs on STM32F0 MCU.
				 * This firmware is open source and available at:
				 * https://gitlab.nic.cz/turris/hw/turris_power_control
				 */
				reg = <0x2a>;
			};

			/* DDR3 SPD/EEPROM PSWP instruction */
			eeprom@32 {
				reg = <0x32>;
			};

			/* SA56004ED temperature control */
			temperature-sensor@4c {
				compatible = "nxp,sa56004";
				reg = <0x4c>;
				interrupt-parent = <&gpio>;
				interrupts = <12 IRQ_TYPE_LEVEL_LOW>, /* GPIO12 - ALERT pin */
					     <13 IRQ_TYPE_LEVEL_LOW>; /* GPIO13 - CRIT pin */
			};

			/* DDR3 SPD/EEPROM */
			eeprom@52 {
				compatible = "atmel,spd";
				reg = <0x52>;
			};

			/* MCP79402-I/ST Protected EEPROM */
			eeprom@57 {
				reg = <0x57>;
			};

			/* ATSHA204-TH-DA-T crypto module */
			crypto@64 {
				compatible = "atmel,atsha204";
				reg = <0x64>;
			};

			/* IDT6V49205BNLGI clock generator */
			clock-generator@69 {
				compatible = "idt,6v49205b";
				reg = <0x69>;
			};

			/* MCP79402-I/ST RTC */
			rtc@6f {
				compatible = "microchip,mcp7940x";
				reg = <0x6f>;
				interrupt-parent = <&gpio>;
				interrupts = <14 0>; /* GPIO14 - MFP pin */
			};
		};

		/* SPI on connector P1 */
		spi0: spi@7000 {
		};

		gpio: gpio-controller@fc00 {
			#interrupt-cells = <2>;
			interrupt-controller;
		};

		/* Connected to SMSC USB2412-DZK 2-Port USB 2.0 Hub Controller */
		usb@22000 {
			phy_type = "ulpi";
			dr_mode = "host";
		};

		enet0: ethernet@24000 {
			/* Connected to port 6 of QCA8337N-AL3C switch */
			phy-connection-type = "rgmii-id";

			fixed-link {
				speed = <1000>;
				full-duplex;
			};
		};

		mdio@24520 {
			/* KSZ9031RNXCA ethernet phy for WAN port */
			phy: ethernet-phy@7 {
				interrupts = <3 1 0 0>;
				reg = <0x7>;
			};

			/* QCA8337N-AL3C switch with integrated ethernet PHYs for LAN ports */
			switch@10 {
				compatible = "qca,qca8337";
				interrupts = <2 1 0 0>;
				reg = <0x10>;

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

					port@0 {
						reg = <0>;
						label = "cpu";
						ethernet = <&enet1>;
						phy-mode = "rgmii-id";

						fixed-link {
							speed = <1000>;
							full-duplex;
						};
					};

					port@1 {
						reg = <1>;
						label = "lan5";
					};

					port@2 {
						reg = <2>;
						label = "lan4";
					};

					port@3 {
						reg = <3>;
						label = "lan3";
					};

					port@4 {
						reg = <4>;
						label = "lan2";
					};

					port@5 {
						reg = <5>;
						label = "lan1";
					};

					port@6 {
						reg = <6>;
						label = "cpu";
						ethernet = <&enet0>;
						phy-mode = "rgmii-id";

						fixed-link {
							speed = <1000>;
							full-duplex;
						};
					};
				};
			};
		};

		ptp_clock@24e00 {
			fsl,tclk-period = <5>;
			fsl,tmr-prsc = <200>;
			fsl,tmr-add = <0xcccccccd>;
			fsl,tmr-fiper1 = <0x3b9ac9fb>;
			fsl,tmr-fiper2 = <0x0001869b>;
			fsl,max-adj = <249999999>;
		};

		enet1: ethernet@25000 {
			/* Connected to port 0 of QCA8337N-AL3C switch */
			phy-connection-type = "rgmii-id";

			fixed-link {
				speed = <1000>;
				full-duplex;
			};
		};

		mdio@25520 {
			status = "disabled";
		};

		enet2: ethernet@26000 {
			/* Connected to KSZ9031RNXCA ethernet phy (WAN port) */
			label = "wan";
			phy-handle = <&phy>;
			phy-connection-type = "rgmii-id";
		};

		mdio@26520 {
			status = "disabled";
		};

		sdhc@2e000 {
			bus-width = <4>;
			cd-gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
		};
	};

	lbc: localbus@ffe05000 {
		reg = <0 0xffe05000 0 0x1000>;

		ranges = <0x0 0x0 0x0 0xef000000 0x01000000>, /* NOR */
			 <0x1 0x0 0x0 0xff800000 0x00040000>, /* NAND */
			 <0x3 0x0 0x0 0xffa00000 0x00020000>; /* CPLD */

		/* S29GL128P90TFIR10 NOR */
		nor@0,0 {
			compatible = "cfi-flash";
			reg = <0x0 0x0 0x01000000>;
			bank-width = <2>;
			device-width = <1>;

			partitions {
				compatible = "fixed-partitions";
				#address-cells = <1>;
				#size-cells = <1>;

				partition@0 {
					/* 128 kB for Device Tree Blob */
					reg = <0x00000000 0x00020000>;
					label = "dtb";
				};

				partition@20000 {
					/* 1.7 MB for Linux Kernel Image */
					reg = <0x00020000 0x001a0000>;
					label = "kernel";
				};

				partition@1c0000 {
					/* 1.5 MB for Rescue JFFS2 Root File System */
					reg = <0x001c0000 0x00180000>;
					label = "rescue";
				};

				partition@340000 {
					/* 11 MB for TAR.XZ Archive with Factory content of NAND
					 * Root File System
					 */
					reg = <0x00340000 0x00b00000>;
					label = "factory";
				};

				partition@e40000 {
					/* 768 kB for Certificates JFFS2 File System */
					reg = <0x00e40000 0x000c0000>;
					label = "certificates";
				};

				/* free unused space 0x00f00000-0x00f20000 */

				partition@f20000 {
					/* 128 kB for U-Boot Environment Variables */
					reg = <0x00f20000 0x00020000>;
					label = "u-boot-env";
				};

				partition@f40000 {
					/* 768 kB for U-Boot Bootloader Image */
					reg = <0x00f40000 0x000c0000>;
					label = "u-boot";
				};
			};
		};

		/* MT29F2G08ABAEAWP:E NAND */
		nand@1,0 {
			compatible = "fsl,p2020-fcm-nand", "fsl,elbc-fcm-nand";
			reg = <0x1 0x0 0x00040000>;
			nand-ecc-mode = "soft";
			nand-ecc-algo = "bch";

			partitions {
				compatible = "fixed-partitions";
				#address-cells = <1>;
				#size-cells = <1>;

				partition@0 {
					/* 256 MB for UBI with one volume: UBIFS Root File System */
					reg = <0x00000000 0x10000000>;
					label = "rootfs";
				};
			};
		};

		/* LCMXO1200C-3FTN256C FPGA */
		cpld@3,0 {
			/*
			 * Turris CPLD firmware which runs on this Lattice FPGA,
			 * is extended version of P1021RDB-PC CPLD v4.1 firmware.
			 * It is backward compatible with its original version
			 * and the only extension is support for Turris LEDs.
			 * Turris CPLD firmware is open source and available at:
			 * https://gitlab.nic.cz/turris/hw/turris_cpld/-/blob/master/CZ_NIC_Router_CPLD.v
			 */
			compatible = "cznic,turris1x-cpld", "fsl,p1021rdb-pc-cpld", "simple-bus",
				     "syscon";
			reg = <0x3 0x0 0x30>;
			#address-cells = <1>;
			#size-cells = <1>;
			ranges = <0x0 0x3 0x0 0x00020000>;

			/* MAX6370KA+T watchdog */
			watchdog@2 {
				/*
				 * CPLD firmware maps SET0, SET1 and SET2
				 * input logic of MAX6370KA+T chip to CPLD
				 * memory space at byte offset 0x2. WDI
				 * input logic is outside of the CPLD and
				 * connected via external GPIO.
				 */
				compatible = "maxim,max6370";
				reg = <0x02 0x01>;
				gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
			};

			reboot@d {
				/*
				 * CPLD firmware which manages system reset and
				 * watchdog registers has bugs. It does not
				 * autoclear system reset register after change
				 * and watchdog ignores reset line on immediate
				 * succeeding reset cycle triggered by watchdog.
				 * These bugs have to be workarounded in U-Boot
				 * bootloader. So use system reset via syscon as
				 * a last resort because older U-Boot versions
				 * do not have workaround for watchdog.
				 *
				 * Reset method via rstcr's global-utilities
				 * (the preferred one) has priority level 128,
				 * watchdog has priority level 0 and default
				 * syscon-reboot priority level is 192.
				 *
				 * So define syscon-reboot with custom priority
				 * level 64 (between rstcr and watchdog) because
				 * rstcr should stay as default preferred reset
				 * method and reset via watchdog is more broken
				 * than system reset via syscon.
				 */
				compatible = "syscon-reboot";
				reg = <0x0d 0x01>;
				offset = <0x0d>;
				mask = <0x01>;
				value = <0x01>;
				priority = <64>;
			};

			led-controller@13 {
				/*
				 * LEDs are controlled by CPLD firmware.
				 * All five LAN LEDs share common RGB settings
				 * and so it is not possible to set different
				 * colors on different LAN ports.
				 */
				compatible = "cznic,turris1x-leds";
				reg = <0x13 0x1d>;
				#address-cells = <1>;
				#size-cells = <0>;

				multi-led@0 {
					reg = <0x0>;
					color = <LED_COLOR_ID_RGB>;
					function = LED_FUNCTION_WAN;
				};

				multi-led@1 {
					reg = <0x1>;
					color = <LED_COLOR_ID_RGB>;
					function = LED_FUNCTION_LAN;
					function-enumerator = <5>;
				};

				multi-led@2 {
					reg = <0x2>;
					color = <LED_COLOR_ID_RGB>;
					function = LED_FUNCTION_LAN;
					function-enumerator = <4>;
				};

				multi-led@3 {
					reg = <0x3>;
					color = <LED_COLOR_ID_RGB>;
					function = LED_FUNCTION_LAN;
					function-enumerator = <3>;
				};

				multi-led@4 {
					reg = <0x4>;
					color = <LED_COLOR_ID_RGB>;
					function = LED_FUNCTION_LAN;
					function-enumerator = <2>;
				};

				multi-led@5 {
					reg = <0x5>;
					color = <LED_COLOR_ID_RGB>;
					function = LED_FUNCTION_LAN;
					function-enumerator = <1>;
				};

				multi-led@6 {
					reg = <0x6>;
					color = <LED_COLOR_ID_RGB>;
					function = LED_FUNCTION_WLAN;
				};

				multi-led@7 {
					reg = <0x7>;
					color = <LED_COLOR_ID_RGB>;
					function = LED_FUNCTION_POWER;
				};
			};
		};
	};

	pci2: pcie@ffe08000 {
		/*
		 * PCIe bus for on-board TUSB7340RKM USB 3.0 xHCI controller.
		 * This xHCI controller is available only on Turris 1.1 boards.
		 * Turris 1.0 boards have nothing connected to this PCIe bus,
		 * so system would see only PCIe Root Port of this PCIe Root
		 * Complex. TUSB7340RKM xHCI controller has four SuperSpeed
		 * channels. Channel 0 is connected to the front USB 3.0 port,
		 * channel 1 (but only USB 2.0 subset) to USB 2.0 pins on mPCIe
		 * slot 1 (CN5), channels 2 and 3 to connector P600.
		 *
		 * P2020 PCIe Root Port uses 1MB of PCIe MEM and xHCI controller
		 * uses 64kB + 8kB of PCIe MEM. No PCIe IO is used or required.
		 * So allocate 2MB of PCIe MEM for this PCIe bus.
		 */
		reg = <0 0xffe08000 0 0x1000>;
		ranges = <0x02000000 0x0 0xc0000000 0 0xc0000000 0x0 0x00200000>, /* MEM */
			 <0x01000000 0x0 0x00000000 0 0xffc20000 0x0 0x00010000>; /* IO */

		pcie@0 {
			ranges;
		};
	};

	pci1: pcie@ffe09000 {
		/* PCIe bus on mPCIe slot 2 (CN6) for expansion mPCIe card */
		reg = <0 0xffe09000 0 0x1000>;
		ranges = <0x02000000 0x0 0xa0000000 0 0xa0000000 0x0 0x20000000>, /* MEM */
			 <0x01000000 0x0 0x00000000 0 0xffc10000 0x0 0x00010000>; /* IO */

		pcie@0 {
			ranges;
		};
	};

	pci0: pcie@ffe0a000 {
		/*
		 * PCIe bus on mPCIe slot 1 (CN5) for expansion mPCIe card.
		 * Turris 1.1 boards have in this mPCIe slot additional USB 2.0
		 * pins via channel 1 of TUSB7340RKM xHCI controller and also
		 * additional SIM card slot, both for USB-based WWAN cards.
		 */
		reg = <0 0xffe0a000 0 0x1000>;
		ranges = <0x02000000 0x0 0x80000000 0 0x80000000 0x0 0x20000000>, /* MEM */
			 <0x01000000 0x0 0x00000000 0 0xffc00000 0x0 0x00010000>; /* IO */

		pcie@0 {
			ranges;
		};
	};
};

/include/ "fsl/p2020si-post.dtsi"
