ramips: add support for Linksys EA7300 v1
authorSantiago Rodriguez-Papa <contact@rodsan.dev>
Thu, 16 Jul 2020 00:24:43 +0000 (20:24 -0400)
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>
Thu, 16 Jul 2020 11:39:44 +0000 (13:39 +0200)
Specifications:

* SoC:      MediaTek MT7621A              (880 MHz 2c/4t)
* RAM:      Nanya NT5CC128M16IP-DIT       (256M DDR3-1600)
* Flash:    Macronix MX30LF1G18AC-TI      (128M NAND)
* Eth:      MediaTek MT7621A              (10/100/1000 Mbps x5)
* Radio:    MT7615N                       (2.4 GHz & 5 GHz)
            4 antennae: 1 internal and 3 non-deatachable
* USB:      3.0 (x1)
* LEDs:
    White   (x1 logo)
    Green   (x6 eth + wps)
    Orange  (x5, hardware-bound)
* Buttons:
    Reset   (x1)
    WPS     (x1)

Everything works! Been running it for a couple weeks now and haven't had
any problems. Please let me know if you run into any.

Installation:

Flash factory image through GUI.

This might fail due to the A/B nature of this device. When flashing, OEM
firmware writes over the non-booted partition. If booted from 'A',
flashing over 'B' won't work. To get around this, you should flash the
OEM image over itself. This will then boot the router from 'B' and
allow you to flash OpenWRT without problems.

Reverting to factory firmware:

Hard-reset the router three times to force it to boot from 'B.' This is
where the stock firmware resides. To remove any traces of OpenWRT from
your router simply flash the OEM image at this point.

Signed-off-by: Santiago Rodriguez-Papa <contact@rodsan.dev>
[use v1 only, minor DTS adjustments, use LINKSYS_HWNAME and add it to
DEVICE_VARS, wrap DEVICE_PACKAGES, adjust commit message/title]
Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
package/boot/uboot-envtools/files/ramips
target/linux/ramips/dts/mt7621_linksys_ea7300-v1.dts [new file with mode: 0644]
target/linux/ramips/dts/mt7621_linksys_ea7500-v2.dts
target/linux/ramips/dts/mt7621_linksys_ea7xxx.dtsi [new file with mode: 0644]
target/linux/ramips/image/mt7621.mk
target/linux/ramips/mt7621/base-files/etc/board.d/01_leds
target/linux/ramips/mt7621/base-files/etc/board.d/02_network
target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
target/linux/ramips/mt7621/base-files/etc/init.d/bootcount
target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh

index 701f051f772c05bd9480a2b5313482524055ac34..80a91f0f45e48825a931538011abff8b7cdcb01a 100644 (file)
@@ -33,6 +33,7 @@ xiaomi,miwifi-nano|\
 zbtlink,zbt-wg2626)
        ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x1000" "0x10000"
        ;;
+linksys,ea7300-v1|\
 linksys,ea7500-v2|\
 xiaomi,mi-router-ac2100|\
 xiaomi,mir3p|\
diff --git a/target/linux/ramips/dts/mt7621_linksys_ea7300-v1.dts b/target/linux/ramips/dts/mt7621_linksys_ea7300-v1.dts
new file mode 100644 (file)
index 0000000..67eb317
--- /dev/null
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include "mt7621_linksys_ea7xxx.dtsi"
+
+/ {
+       compatible = "linksys,ea7300-v1", "mediatek,mt7621-soc";
+       model = "Linksys EA7300 v1";
+
+       aliases {
+               led-boot = &led_power;
+               led-failsafe = &led_power;
+               led-running = &led_power;
+               led-upgrade = &led_power;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               wan_green {
+                       label = "ea7300-v1:green:wan";
+                       gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
+               };
+
+               lan1_green {
+                       label = "ea7300-v1:green:lan1";
+                       gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
+               };
+
+               lan2_green {
+                       label = "ea7300-v1:green:lan2";
+                       gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
+               };
+
+               lan3_green {
+                       label = "ea7300-v1:green:lan3";
+                       gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+               };
+
+               lan4_green {
+                       label = "ea7300-v1:green:lan4";
+                       gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
+               };
+
+               led_power: power {
+                       label = "ea7300-v1:white:power";
+                       gpios = <&gpio 10 GPIO_ACTIVE_HIGH>;
+               };
+
+               wps {
+                       label = "ea7300-v1:green:wps";
+                       gpios = <&gpio 5 GPIO_ACTIVE_HIGH>;
+               };
+       };
+};
index ac13bdd369a4a0581e8bdaf9048cb6b4bc7502c8..bc454f3910d6740e70c5db932b7f7a4b7508403e 100644 (file)
@@ -1,10 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-or-later OR MIT
 /dts-v1/;
 
-#include "mt7621.dtsi"
-
-#include <dt-bindings/gpio/gpio.h>
-#include <dt-bindings/input/input.h>
+#include "mt7621_linksys_ea7xxx.dtsi"
 
 / {
        compatible = "linksys,ea7500-v2", "mediatek,mt7621-soc";
                led-upgrade = &led_power;
        };
 
-       chosen {
-               bootargs = "console=ttyS0,115200";
-       };
-
        leds {
                compatible = "gpio-leds";
 
                        gpios = <&gpio 5 GPIO_ACTIVE_HIGH>;
                };
        };
-
-       keys {
-               compatible = "gpio-keys";
-
-               wps {
-                       label = "wps";
-                       gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
-                       linux,code = <KEY_WPS_BUTTON>;
-               };
-
-               reset {
-                       label = "reset";
-                       gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
-                       linux,code = <KEY_RESTART>;
-               };
-       };
-};
-
-&nand {
-       status = "okay";
-
-       partitions {
-               compatible = "fixed-partitions";
-               #address-cells = <1>;
-               #size-cells = <1>;
-
-               partition@0 {
-                       label = "boot";
-                       reg = <0x0 0x80000>;
-                       read-only;
-               };
-
-               partition@80000 {
-                       label = "u_env";
-                       reg = <0x80000 0x40000>;
-                       read-only;
-               };
-
-               factory: partition@c0000 {
-                       label = "factory";
-                       reg = <0xc0000 0x40000>;
-                       read-only;
-               };
-
-               partition@100000 {
-                       label = "s_env";
-                       reg = <0x100000 0x40000>;
-               };
-
-               partition@140000 {
-                       label = "devinfo";
-                       reg = <0x140000 0x40000>;
-                       read-only;
-               };
-
-               partition@180000 {
-                       label = "kernel";
-                       reg = <0x180000 0x400000>;
-               };
-
-               partition@580000 {
-                       label = "ubi";
-                       reg = <0x580000 0x2400000>;
-               };
-
-               partition@2980000 {
-                       label = "alt_kernel";
-                       reg = <0x2980000 0x400000>;
-                       read-only;
-               };
-
-               partition@2d80000 {
-                       label = "alt_rootfs";
-                       reg = <0x2d80000 0x2400000>;
-                       read-only;
-               };
-
-               partition@5180000 {
-                       label = "sysdiag";
-                       reg = <0x5180000 0x100000>;
-                       read-only;
-               };
-
-               partition@5280000 {
-                       label = "syscfg";
-                       reg = <0x5280000 0x2d00000>;
-                       read-only;
-               };
-       };
-};
-
-&state_default {
-       gpio {
-               groups = "i2c", "uart2", "uart3", "jtag", "wdt";
-               function = "gpio";
-       };
-};
-
-&pcie {
-       status = "okay";
-};
-
-&pcie0 {
-       mt76@0,0 {
-               compatible = "mediatek,mt76";
-               reg = <0x0000 0 0 0 0>;
-               mediatek,mtd-eeprom = <&factory 0x0000>;
-       };
-};
-
-&pcie1 {
-       mt76@0,0 {
-               compatible = "mediatek,mt76";
-               reg = <0x0000 0 0 0 0>;
-               mediatek,mtd-eeprom = <&factory 0x8000>;
-       };
-};
-
-&switch0 {
-       ports {
-               port@0 {
-                       status = "okay";
-                       label = "wan";
-               };
-
-               port@1 {
-                       status = "okay";
-                       label = "lan1";
-               };
-
-               port@2 {
-                       status = "okay";
-                       label = "lan2";
-               };
-
-               port@3 {
-                       status = "okay";
-                       label = "lan3";
-               };
-
-               port@4 {
-                       status = "okay";
-                       label = "lan4";
-               };
-       };
 };
diff --git a/target/linux/ramips/dts/mt7621_linksys_ea7xxx.dtsi b/target/linux/ramips/dts/mt7621_linksys_ea7xxx.dtsi
new file mode 100644 (file)
index 0000000..46b1c9c
--- /dev/null
@@ -0,0 +1,157 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "mt7621.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       chosen {
+               bootargs = "console=ttyS0,115200";
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               wps {
+                       label = "wps";
+                       gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_WPS_BUTTON>;
+               };
+
+               reset {
+                       label = "reset";
+                       gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+       };
+};
+
+&nand {
+       status = "okay";
+
+       partitions {
+               compatible = "fixed-partitions";
+               #address-cells = <1>;
+               #size-cells = <1>;
+
+               partition@0 {
+                       label = "boot";
+                       reg = <0x0 0x80000>;
+                       read-only;
+               };
+
+               partition@80000 {
+                       label = "u_env";
+                       reg = <0x80000 0x40000>;
+                       read-only;
+               };
+
+               factory: partition@c0000 {
+                       label = "factory";
+                       reg = <0xc0000 0x40000>;
+                       read-only;
+               };
+
+               partition@100000 {
+                       label = "s_env";
+                       reg = <0x100000 0x40000>;
+               };
+
+               partition@140000 {
+                       label = "devinfo";
+                       reg = <0x140000 0x40000>;
+                       read-only;
+               };
+
+               partition@180000 {
+                       label = "kernel";
+                       reg = <0x180000 0x400000>;
+               };
+
+               partition@580000 {
+                       label = "ubi";
+                       reg = <0x580000 0x2400000>;
+               };
+
+               partition@2980000 {
+                       label = "alt_kernel";
+                       reg = <0x2980000 0x400000>;
+                       read-only;
+               };
+
+               partition@2d80000 {
+                       label = "alt_rootfs";
+                       reg = <0x2d80000 0x2400000>;
+                       read-only;
+               };
+
+               partition@5180000 {
+                       label = "sysdiag";
+                       reg = <0x5180000 0x100000>;
+                       read-only;
+               };
+
+               partition@5280000 {
+                       label = "syscfg";
+                       reg = <0x5280000 0x2d00000>;
+                       read-only;
+               };
+       };
+};
+
+&state_default {
+       gpio {
+               groups = "i2c", "uart2", "uart3", "jtag", "wdt";
+               function = "gpio";
+       };
+};
+
+&pcie {
+       status = "okay";
+};
+
+&pcie0 {
+       mt76@0,0 {
+               compatible = "mediatek,mt76";
+               reg = <0x0000 0 0 0 0>;
+               mediatek,mtd-eeprom = <&factory 0x0000>;
+       };
+};
+
+&pcie1 {
+       mt76@0,0 {
+               compatible = "mediatek,mt76";
+               reg = <0x0000 0 0 0 0>;
+               mediatek,mtd-eeprom = <&factory 0x8000>;
+       };
+};
+
+&switch0 {
+       ports {
+               port@0 {
+                       status = "okay";
+                       label = "wan";
+               };
+
+               port@1 {
+                       status = "okay";
+                       label = "lan1";
+               };
+
+               port@2 {
+                       status = "okay";
+                       label = "lan2";
+               };
+
+               port@3 {
+                       status = "okay";
+                       label = "lan3";
+               };
+
+               port@4 {
+                       status = "okay";
+                       label = "lan4";
+               };
+       };
+};
index 229897ffb5ba3c778981e097564e181c16475354..e97d2315f140deda825ca56dc91a5bb7adf7dcd4 100644 (file)
@@ -7,7 +7,7 @@ include ./common-tp-link.mk
 DEFAULT_SOC := mt7621
 
 KERNEL_DTB += -d21
-DEVICE_VARS += UIMAGE_MAGIC ELECOM_HWNAME
+DEVICE_VARS += UIMAGE_MAGIC ELECOM_HWNAME LINKSYS_HWNAME
 
 # The OEM webinterface expects an kernel with initramfs which has the uImage
 # header field ih_name.
@@ -539,21 +539,35 @@ define Device/lenovo_newifi-d1
 endef
 TARGET_DEVICES += lenovo_newifi-d1
 
-define Device/linksys_ea7500-v2
+define Device/linksys_ea7xxx
   $(Device/uimage-lzma-loader)
   BLOCKSIZE := 128k
   PAGESIZE := 2048
   KERNEL_SIZE := 4096k
   IMAGE_SIZE := 36864k
   DEVICE_VENDOR := Linksys
-  DEVICE_MODEL := EA7500
-  DEVICE_VARIANT := v2
-  DEVICE_PACKAGES := kmod-usb3 kmod-mt7615e kmod-mt7615-firmware wpad-basic uboot-envtools
+  DEVICE_PACKAGES := kmod-usb3 kmod-mt7615e kmod-mt7615-firmware wpad-basic \
+       uboot-envtools
   UBINIZE_OPTS := -E 5
   IMAGES := sysupgrade.bin factory.bin
   IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata | check-size
   IMAGE/factory.bin := append-kernel | pad-to $$$$(KERNEL_SIZE) | \
-       append-ubi | check-size | linksys-image type=EA7500v2
+       append-ubi | check-size | linksys-image type=$$$$(LINKSYS_HWNAME)
+endef
+
+define Device/linksys_ea7300-v1
+  $(Device/linksys_ea7xxx)
+  DEVICE_MODEL := EA7300
+  DEVICE_VARIANT := v1
+  LINKSYS_HWNAME := EA7300
+endef
+TARGET_DEVICES += linksys_ea7300-v1
+
+define Device/linksys_ea7500-v2
+  $(Device/linksys_ea7xxx)
+  DEVICE_MODEL := EA7500
+  DEVICE_VARIANT := v2
+  LINKSYS_HWNAME := EA7500v2
 endef
 TARGET_DEVICES += linksys_ea7500-v2
 
index 02f264fb4284b900c5ab1fd105d13f9bac70ac90..a44b1a09d06a4a78e4b631b8ffdd204cc0b01ef6 100755 (executable)
@@ -35,6 +35,7 @@ gnubee,gb-pc2)
        ucidef_set_led_netdev "lan1" "lan1" "$boardname:green:lan1" "lan1"
        ucidef_set_led_netdev "lan2" "lan2" "$boardname:green:lan2" "lan2"
        ;;
+linksys,ea7300-v1|\
 linksys,ea7500-v2)
        ucidef_set_led_netdev "lan1" "lan1 link" "$boardname:green:lan1" "lan1" "link"
        ucidef_set_led_netdev "lan2" "lan2 link" "$boardname:green:lan2" "lan2" "link"
index ec05def88fbd7c002cd225037f88ada321eba4da..9c32f59ab8be53c962c6e5b35bcf7e145d5abe3b 100755 (executable)
@@ -100,6 +100,7 @@ ramips_setup_macs()
                wan_mac=$(mtd_get_mac_ascii u-boot-env wanaddr)
                label_mac=$wan_mac
                ;;
+       linksys,ea7300-v1|\
        linksys,ea7500-v2)
                lan_mac=$(mtd_get_mac_ascii devinfo hw_mac_addr)
                wan_mac=$lan_mac
index e05078648bd52ff9d51dbbe2623c3abf07f2383e..3f7fdc1a79a900c12df744538840298b49d92f1b 100644 (file)
@@ -10,6 +10,7 @@ PHYNBR=${DEVPATH##*/phy}
 board=$(board_name)
 
 case "$board" in
+       linksys,ea7300-v1|\
        linksys,ea7500-v2)
                hw_mac_addr=$(mtd_get_mac_ascii devinfo hw_mac_addr)
                [ "$PHYNBR" = "0" ] && macaddr_add $hw_mac_addr 1 > /sys${DEVPATH}/macaddress
index e92912bbcc19e599a1555cdbd857cf29e992323f..b17161a50a588136c64be75bc4b0acb034ef8bd5 100755 (executable)
@@ -8,6 +8,7 @@ boot() {
                [ -n "$(fw_printenv bootcount bootchanged 2>/dev/null)" ] &&\
                        echo -e "bootcount\nbootchanged\n" | /usr/sbin/fw_setenv -s -
                ;;
+       linksys,ea7300-v1|\
        linksys,ea7500-v2)
                mtd resetbc s_env || true
                ;;
index a9a0bd40b9d6dced2050b1a24df589ab0fc4b8a3..01db733c9815a5f3711de17b986bef1980133ca0 100755 (executable)
@@ -45,6 +45,7 @@ platform_do_upgrade() {
        asus,rt-ac65p|\
        asus,rt-ac85p|\
        hiwifi,hc5962|\
+       linksys,ea7300-v1|\
        linksys,ea7500-v2|\
        netgear,r6220|\
        netgear,r6260|\