From: Sven Roederer Date: Mon, 29 May 2017 11:24:49 +0200 Subject: 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 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 17d25b1954e69d6d2a02ad94885cb54486fc904c..5a4042339c6761703578e014612062ac78babd9d 100755 --- a/target/linux/ramips/base-files/etc/board.d/02_network +++ b/target/linux/ramips/base-files/etc/board.d/02_network @@ -145,6 +145,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 0000000000000000000000000000000000000000..859dfb31f51244e69d3dce5fc80b329cb57729f3 --- /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 17ada648931f16d3e85630dd341defb89ba50d6f..b1091f66b2897a19bd01d4a26a1b3647656fa62b 100755 --- a/target/linux/ramips/base-files/lib/ramips.sh +++ b/target/linux/ramips/base-files/lib/ramips.sh @@ -466,6 +466,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 a5cca2080d3b96cef92286b1b15f4f8832d9f8c5..d3efc2dd37ed855a1c0e966e448b67ae73324d5f 100755 --- a/target/linux/ramips/base-files/lib/upgrade/platform.sh +++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh @@ -234,7 +234,8 @@ platform_check_image() { } return 0 ;; - ubnt-erx) + ubnt-erx|\ + ubnt-erx-sfp) nand_do_platform_check "$board" "$1" return $?; ;; @@ -248,7 +249,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 @@ -258,7 +260,8 @@ platform_do_upgrade() { local board=$(ramips_board_name) case "$board" in - 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 0000000000000000000000000000000000000000..b38c7194942db9f0a713fd8f707b53820d07c78e --- /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 0000000000000000000000000000000000000000..ca26d817211e5a5a20a7da926cd2aee726875780 --- /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 cf86bbb7e67b1c521c279367ee9e99fee88fae85..556d1156c352f76a94c6e39bc3b58c88f08815be 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 15ea9a13b6310b1454b5b3b92cd8ed30ee6255b3..8218bea84410536151a216cd2cc0300369ad977a 100644 --- a/target/linux/ramips/image/mt7621.mk +++ b/target/linux/ramips/image/mt7621.mk @@ -144,6 +144,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