ramips: add support for Ubiquiti EdgeRouter X-SFP
authorSven Roederer <devel-sven@geroedel.de>
Mon, 29 May 2017 09:24:49 +0000 (11:24 +0200)
committerJohn Crispin <john@phrozen.org>
Wed, 7 Jun 2017 04:33:33 +0000 (06:33 +0200)
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 <devel-sven@geroedel.de>
target/linux/ramips/base-files/etc/board.d/02_network
target/linux/ramips/base-files/etc/board.d/03_gpio_switches [new file with mode: 0755]
target/linux/ramips/base-files/lib/ramips.sh
target/linux/ramips/base-files/lib/upgrade/platform.sh
target/linux/ramips/dts/UBNT-ER-e50.dtsi [new file with mode: 0644]
target/linux/ramips/dts/UBNT-ERX-SFP.dts [new file with mode: 0644]
target/linux/ramips/dts/UBNT-ERX.dts
target/linux/ramips/image/mt7621.mk

index 9dd5823..3cd7ff6 100755 (executable)
@@ -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 (executable)
index 0000000..859dfb3
--- /dev/null
@@ -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
index 4b60a07..c8865fc 100755 (executable)
@@ -487,6 +487,9 @@ ramips_board_detect() {
        *"UBNT-ERX")
                name="ubnt-erx"
                ;;
+       *"UBNT-ERX-SFP")
+               name="ubnt-erx-sfp"
+               ;;
        *"UR-326N4G")
                name="ur-326n4g"
                ;;
index f25d1e2..dce4c1a 100755 (executable)
@@ -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 (file)
index 0000000..b38c719
--- /dev/null
@@ -0,0 +1,106 @@
+#include "mt7621.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       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 = <KEY_RESTART>;
+               };
+       };
+};
+
+&ethernet {
+       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 (file)
index 0000000..ca26d81
--- /dev/null
@@ -0,0 +1,24 @@
+/dts-v1/;
+
+#include "UBNT-ER-e50.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       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>;
+               };
+       };
+};
index cf86bbb..556d115 100644 (file)
@@ -1,108 +1,7 @@
 /dts-v1/;
 
-#include "mt7621.dtsi"
-
-#include <dt-bindings/gpio/gpio.h>
-#include <dt-bindings/input/input.h>
+#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 = <KEY_RESTART>;
-               };
-       };
-};
-
-&ethernet {
-       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";
 };
index 733fb08..3475a42 100644 (file)
@@ -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