From 9715beb04c74a918697945b3e2d23a139bd04b70 Mon Sep 17 00:00:00 2001 From: Sven Roederer Date: Mon, 29 May 2017 11:24:49 +0200 Subject: [PATCH] ramips: add support for Ubiquiti EdgeRouter X-SFP This patch adds support for the Ubiquiti EdgeRouter X-SFP and improves support for the EdgeRouter X (PoE-passthrough). Specification: - SoC: MediaTek MT7621AT - Flash: 256 MiB - RAM: 265 MiB - Ethernet: 5 x LAN (1000 Mbps) - UART: 1 x UART on PCB (3.3V, RX, TX, GND) - 57600 8N1 - EdgeRouter X: - 1 x PoE-Passtrough (Eth4) - powered by Wallwart or passive PoE - EdgeRouter X-SFP: - 5 x PoE-Out (24V, passive) - 1 x SFP (unknown status) - powered by Wallwart (24V) Doesn't work: * SoC has crypto engine but no open driver. * SoC has nat acceleration, but no open driver. * This router has 2MB spi flash soldered in but MT nand/spi drivers do not support pin sharing, so it is not accessable and disabled. Stock firmware could read it and it was empty. Installation via vendor firmware: - build an Initrd-image (> 3MiB) and upload the factory-image - initrd can have luci-mod-failsafe - flash final firmware via LuCI / sysupgrade on rebooted system via TFTP: - stop uboot into tftp-load into option "1" - upload factory.bin image Signed-off-by: Sven Roederer --- .../ramips/base-files/etc/board.d/02_network | 1 + .../base-files/etc/board.d/03_gpio_switches | 25 +++++ target/linux/ramips/base-files/lib/ramips.sh | 3 + .../ramips/base-files/lib/upgrade/platform.sh | 9 +- target/linux/ramips/dts/UBNT-ER-e50.dtsi | 106 ++++++++++++++++++ target/linux/ramips/dts/UBNT-ERX-SFP.dts | 24 ++++ target/linux/ramips/dts/UBNT-ERX.dts | 103 +---------------- target/linux/ramips/image/mt7621.mk | 13 +++ 8 files changed, 179 insertions(+), 105 deletions(-) create mode 100755 target/linux/ramips/base-files/etc/board.d/03_gpio_switches create mode 100644 target/linux/ramips/dts/UBNT-ER-e50.dtsi create mode 100644 target/linux/ramips/dts/UBNT-ERX-SFP.dts diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network index 9dd5823639d..3cd7ff60491 100755 --- a/target/linux/ramips/base-files/etc/board.d/02_network +++ b/target/linux/ramips/base-files/etc/board.d/02_network @@ -170,6 +170,7 @@ ramips_setup_interfaces() rb750gr3|\ rt-n14u|\ ubnt-erx|\ + ubnt-erx-sfp|\ ur-326n4g|\ wrtnode|\ wrtnode2p | \ diff --git a/target/linux/ramips/base-files/etc/board.d/03_gpio_switches b/target/linux/ramips/base-files/etc/board.d/03_gpio_switches new file mode 100755 index 00000000000..859dfb31f51 --- /dev/null +++ b/target/linux/ramips/base-files/etc/board.d/03_gpio_switches @@ -0,0 +1,25 @@ +#!/bin/sh + +. /lib/functions/uci-defaults.sh +. /lib/ramips.sh + +board_config_update + +board=$(ramips_board_name) + +case "$board" in +ubnt-erx) + ucidef_add_gpio_switch "poe_passthrough" "PoE Passthrough" "0" + ;; +ubnt-erx-sfp) + ucidef_add_gpio_switch "poe_power_port0" "PoE Power Port0" "496" + ucidef_add_gpio_switch "poe_power_port1" "PoE Power Port1" "497" + ucidef_add_gpio_switch "poe_power_port2" "PoE Power Port2" "498" + ucidef_add_gpio_switch "poe_power_port3" "PoE Power Port3" "499" + ucidef_add_gpio_switch "poe_power_port4" "PoE Power Port4" "500" + ;; +esac + +board_config_flush + +exit 0 diff --git a/target/linux/ramips/base-files/lib/ramips.sh b/target/linux/ramips/base-files/lib/ramips.sh index 4b60a07ee0c..c8865fc2989 100755 --- a/target/linux/ramips/base-files/lib/ramips.sh +++ b/target/linux/ramips/base-files/lib/ramips.sh @@ -487,6 +487,9 @@ ramips_board_detect() { *"UBNT-ERX") name="ubnt-erx" ;; + *"UBNT-ERX-SFP") + name="ubnt-erx-sfp" + ;; *"UR-326N4G") name="ur-326n4g" ;; diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh b/target/linux/ramips/base-files/lib/upgrade/platform.sh index f25d1e2a626..dce4c1a3270 100755 --- a/target/linux/ramips/base-files/lib/upgrade/platform.sh +++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh @@ -252,7 +252,8 @@ platform_check_image() { # these boards use metadata images return 0 ;; - ubnt-erx) + ubnt-erx|\ + ubnt-erx-sfp) nand_do_platform_check "$board" "$1" return $?; ;; @@ -274,7 +275,8 @@ platform_nand_pre_upgrade() { local board=$(ramips_board_name) case "$board" in - ubnt-erx) + ubnt-erx|\ + ubnt-erx-sfp) platform_upgrade_ubnt_erx "$ARGV" ;; esac @@ -286,7 +288,8 @@ platform_do_upgrade() { case "$board" in hc5962|\ r6220|\ - ubnt-erx) + ubnt-erx|\ + ubnt-erx-sfp) nand_do_upgrade "$ARGV" ;; *) diff --git a/target/linux/ramips/dts/UBNT-ER-e50.dtsi b/target/linux/ramips/dts/UBNT-ER-e50.dtsi new file mode 100644 index 00000000000..b38c7194942 --- /dev/null +++ b/target/linux/ramips/dts/UBNT-ER-e50.dtsi @@ -0,0 +1,106 @@ +#include "mt7621.dtsi" + +#include +#include + +/ { + compatible = "ubiquiti,edgerouterx"; + + memory@0 { + device_type = "memory"; + reg = <0x0 0x10000000>; + }; + + chosen { + bootargs = "console=ttyS0,57600"; + }; + + gpio-keys-polled { + compatible = "gpio-keys-polled"; + #address-cells = <1>; + #size-cells = <0>; + poll-interval = <20>; + + reset { + label = "reset"; + gpios = <&gpio0 12 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + }; +}; + +ðernet { + mtd-mac-address = <&factory 0x22>; +}; + +&nand { + status = "okay"; + + partition@0 { + label = "u-boot"; + reg = <0x0 0x80000>; + read-only; + }; + + partition@80000 { + label = "u-boot-env"; + reg = <0x80000 0x60000>; + read-only; + }; + + factory: partition@e0000 { + label = "factory"; + reg = <0xe0000 0x60000>; + }; + + partition@140000 { + label = "kernel1"; + reg = <0x140000 0x300000>; + }; + + partition@440000 { + label = "kernel2"; + reg = <0x440000 0x300000>; + }; + + partition@740000 { + label = "ubi"; + reg = <0x740000 0xf7c0000>; + }; +}; + +&pinctrl { + state_default: pinctrl0 { + gpio { + ralink,group = "uart2", "uart3", "i2c", "pcie", "rgmii2", "jtag"; + ralink,function = "gpio"; + }; + }; +}; + +&spi0 { + /* This board has 2Mb spi flash soldered in and visible + from manufacturer's firmware. + But this SoC shares spi and nand pins, + and current driver does't handle this sharing well */ + status = "disabled"; + + m25p80@0 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "jedec,spi-nor"; + reg = <1>; + spi-max-frequency = <10000000>; + m25p,chunked-io = <32>; + + partition@0 { + label = "spi"; + reg = <0x0 0x200000>; + read-only; + }; + }; +}; + +&xhci { + status = "disabled"; +}; diff --git a/target/linux/ramips/dts/UBNT-ERX-SFP.dts b/target/linux/ramips/dts/UBNT-ERX-SFP.dts new file mode 100644 index 00000000000..ca26d817211 --- /dev/null +++ b/target/linux/ramips/dts/UBNT-ERX-SFP.dts @@ -0,0 +1,24 @@ +/dts-v1/; + +#include "UBNT-ER-e50.dtsi" + +#include + +/ { + model = "UBNT-ERX-SFP"; + compatible = "ubiquiti,edgerouterx-sfp"; + + i2c-gpio { + compatible = "i2c-gpio"; + gpios = <&gpio0 3 GPIO_ACTIVE_HIGH /* sda */ + &gpio0 4 GPIO_ACTIVE_HIGH /* scl */ + >; + #address-cells = <1>; + #size-cells = <0>; + + pca9555@25 { + compatible = "pca9555"; + reg = <0x25>; + }; + }; +}; diff --git a/target/linux/ramips/dts/UBNT-ERX.dts b/target/linux/ramips/dts/UBNT-ERX.dts index cf86bbb7e67..556d1156c35 100644 --- a/target/linux/ramips/dts/UBNT-ERX.dts +++ b/target/linux/ramips/dts/UBNT-ERX.dts @@ -1,108 +1,7 @@ /dts-v1/; -#include "mt7621.dtsi" - -#include -#include +#include "UBNT-ER-e50.dtsi" / { model = "UBNT-ERX"; - - memory@0 { - device_type = "memory"; - reg = <0x0 0x10000000>; - }; - - chosen { - bootargs = "console=ttyS0,57600"; - }; - - gpio-keys-polled { - compatible = "gpio-keys-polled"; - #address-cells = <1>; - #size-cells = <0>; - poll-interval = <20>; - - reset { - label = "reset"; - gpios = <&gpio0 12 GPIO_ACTIVE_LOW>; - linux,code = ; - }; - }; -}; - -ðernet { - mtd-mac-address = <&factory 0x22>; -}; - -&nand { - status = "okay"; - - partition@0 { - label = "u-boot"; - reg = <0x0 0x80000>; - read-only; - }; - - partition@80000 { - label = "u-boot-env"; - reg = <0x80000 0x60000>; - read-only; - }; - - factory: partition@e0000 { - label = "factory"; - reg = <0xe0000 0x60000>; - }; - - partition@140000 { - label = "kernel1"; - reg = <0x140000 0x300000>; - }; - - partition@440000 { - label = "kernel2"; - reg = <0x440000 0x300000>; - }; - - partition@740000 { - label = "ubi"; - reg = <0x740000 0xf7c0000>; - }; -}; - -&pinctrl { - state_default: pinctrl0 { - gpio { - ralink,group = "uart2", "uart3", "i2c", "pcie", "rgmii2", "jtag"; - ralink,function = "gpio"; - }; - }; -}; - -&spi0 { - /* This board has 2Mb spi flash soldered in and visible - from manufacturer's firmware. - But this SoC shares spi and nand pins, - and current driver does't handle this sharing well */ - status = "disabled"; - - m25p80@0 { - #address-cells = <1>; - #size-cells = <1>; - compatible = "jedec,spi-nor"; - reg = <1>; - spi-max-frequency = <10000000>; - m25p,chunked-io = <32>; - - partition@0 { - label = "spi"; - reg = <0x0 0x200000>; - read-only; - }; - }; -}; - -&xhci { - status = "disabled"; }; diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk index 733fb081791..3475a42438a 100644 --- a/target/linux/ramips/image/mt7621.mk +++ b/target/linux/ramips/image/mt7621.mk @@ -184,6 +184,19 @@ define Device/ubnt-erx endef TARGET_DEVICES += ubnt-erx +define Device/ubnt-erx-sfp + DTS := UBNT-ERX-SFP + FILESYSTEMS := squashfs + KERNEL_SIZE := 3145728 + KERNEL := $(KERNEL_DTB) | uImage lzma + IMAGES := sysupgrade.tar + KERNEL_INITRAMFS := $$(KERNEL) | ubnt-erx-factory-image $(KDIR)/tmp/$$(KERNEL_INITRAMFS_PREFIX)-factory.tar + IMAGE/sysupgrade.tar := sysupgrade-tar | append-metadata + DEVICE_TITLE := Ubiquiti EdgeRouter X-SFP + DEVICE_PACKAGES := -kmod-mt76 -kmod-rt2x00-lib -kmod-mac80211 -kmod-cfg80211 -wpad-mini -iwinfo kmod-i2c-algo-pca kmod-gpio-pca953x kmod-i2c-gpio-custom +endef +TARGET_DEVICES += ubnt-erx-sfp + define Device/vr500 DTS := VR500 IMAGE_SIZE := 66453504 -- 2.30.2