// 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"