// 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";
	compatible = "cznic,turris1x";

	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 */
				#address-cells = <1>;
				#size-cells = <0>;

				/* Local temperature sensor (SA56004ED internal) */
				channel@0 {
					reg = <0>;
					label = "board";
				};

				/* Remote temperature sensor (D+/D- connected to P2020 CPU Temperature Diode) */
				channel@1 {
					reg = <1>;
					label = "cpu";
				};
			};

			/* 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 does not use PCIe MEM and xHCI controller
		 * uses 64kB + 8kB of PCIe MEM. No PCIe IO is used or required.
		 * So allocate 128kB of PCIe MEM for this PCIe bus.
		 */
		reg = <0 0xffe08000 0 0x1000>;
		ranges = <0x02000000 0x0 0xc0000000 0 0xc0000000 0x0 0x00020000>, /* 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"
