ramips: mt7621: add support for Xiaomi Mi Router 4A Gigabit v2
authorDmitry Sokolov <e323w@proton.me>
Sun, 15 Jan 2023 21:52:27 +0000 (02:52 +0500)
committerHauke Mehrtens <hauke@hauke-m.de>
Sat, 28 Jan 2023 21:11:44 +0000 (22:11 +0100)
Device is the same as Xiaomi Mi Router 4A Gigabit, except of:
- 5G WiFi is MT7663
- addresses of leds, wifi and eth ports are slightly changed

Specs:
  SoC:  MT7621
  CPU:  2 x 880 MHz
  ROM:  16 MB
  RAM:  128 MB
  WLAN: MT7603, MT7663

MAC addresses:
  WAN     ****  factory 0xe006 (label)
  LAN     *:f7  factory 0xe000
  2.4 GHz *:f8  factory 0x0000+0x4 (mtd-eeprom+0x4)
  5 GHz   *:f9  factory 0x8000+0x4 (mtd-eeprom+0x4)

Installation:

Factory firmware is based on a custom OpenWrt 17.x.
Installation is the same as for Xiaomi Mi Router 4A Gigabit.

Probably the easiest way to install is to use the script from
this repository: https://github.com/acecilia/OpenWRTInvasion/pull/155

In a more advanced case, you can do everything yourself:
- gain access to the device through one of the exploits described
  in the link above
- upload sysupgrade image to /tmp
- overwrite stock firmware:
  # mtd -e OS1 -r write /tmp/sysupgrade.bin OS1

Recovery:

Recovery procedure is the same as for Xiaomi Mi Router 4A Gigabit.
Possible options can be found here:
https://openwrt.org/inbox/toh/xiaomi/xiaomi_mi_router_4a_gigabit_edition

One of the ways is to use another router with OpenWrt:
- connect both routers by their LAN ports
- download stock firmware from [1]
- place it inside /tmp/test.bin on the main router
- configure PXE/TFTP on the main router
- power off 4Av2, hold Reset button, power on
- as soon as image download via TFTP starts, Reset can be released
- blinking blue wan LED will indicate the end of the flashing process,
  now router can be rebooted
[1] http://cdn.cnbj1.fds.api.mi-img.com/xiaoqiang/rom/r4av2/miwifi_r4av2_firmware_release_2.30.28.bin

Signed-off-by: Dmitry Sokolov <e323w@proton.me>
target/linux/ramips/dts/mt7621_xiaomi_mi-router-4a-3g-v2.dtsi
target/linux/ramips/dts/mt7621_xiaomi_mi-router-4a-common.dtsi [new file with mode: 0644]
target/linux/ramips/dts/mt7621_xiaomi_mi-router-4a-gigabit-v2.dts [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

index a0ee79ae23ce473087a5099f92d2aec30dcc5f3c..d05872337be26f420ee1d6bf146251ee59050284 100644 (file)
@@ -1,23 +1,12 @@
 // 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>
+#include "mt7621_xiaomi_mi-router-4a-common.dtsi"
 
 / {
        aliases {
-               led-boot = &led_status_yellow;
-               led-failsafe = &led_status_yellow;
-               led-running = &led_status_blue;
-               led-upgrade = &led_status_yellow;
                label-mac-device = &gmac1;
        };
 
-       chosen {
-               bootargs = "console=ttyS0,115200n8";
-       };
-
        leds {
                compatible = "gpio-leds";
 
                        gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
                };
        };
-
-       keys {
-               compatible = "gpio-keys";
-
-               reset {
-                       label = "reset";
-                       gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
-                       linux,code = <KEY_RESTART>;
-               };
-       };
 };
 
-&spi0 {
-       status = "okay";
-
-       flash@0 {
-               compatible = "jedec,spi-nor";
-               reg = <0>;
-               spi-max-frequency = <50000000>;
-               m25p,fast-read;
-
-               partitions {
-                       compatible = "fixed-partitions";
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-
-                       partition@0 {
-                               label = "u-boot";
-                               reg = <0x0 0x30000>;
-                               read-only;
-                       };
-
-                       partition@30000 {
-                               label = "u-boot-env";
-                               reg = <0x30000 0x10000>;
-                               read-only;
-                       };
-
-                       partition@40000 {
-                               label = "Bdata";
-                               reg = <0x40000 0x10000>;
-                               read-only;
-                       };
-
-                       factory: partition@50000 {
-                               label = "factory";
-                               reg = <0x50000 0x10000>;
-                               read-only;
-                       };
-
-                       partition@60000 {
-                               label = "crash";
-                               reg = <0x60000 0x10000>;
-                               read-only;
-                       };
-
-                       partition@70000 {
-                               label = "cfg_bak";
-                               reg = <0x70000 0x10000>;
-                               read-only;
-                       };
-
-                       partition@80000 {
-                               label = "overlay";
-                               reg = <0x80000 0x100000>;
-                               read-only;
-                       };
-
-                       firmware: partition@180000 {
-                               compatible = "denx,uimage";
-                               label = "firmware";
-                               reg = <0x180000 0xe80000>;
-                       };
-               };
-       };
+&wifi0 {
+       mediatek,mtd-eeprom = <&factory 0x8000>;
+       ieee80211-freq-limit = <5000000 6000000>;
 };
 
-&pcie {
-       status = "okay";
-};
-
-&pcie0 {
-       wifi@0,0 {
-               compatible = "pci14c3,7662";
-               reg = <0x0000 0 0 0 0>;
-               mediatek,mtd-eeprom = <&factory 0x8000>;
-               ieee80211-freq-limit = <5000000 6000000>;
-       };
-};
-
-&pcie1 {
-       wifi@0,0 {
-               compatible = "pci14c3,7603";
-               reg = <0x0000 0 0 0 0>;
-               mediatek,mtd-eeprom = <&factory 0x0000>;
-               ieee80211-freq-limit = <2400000 2500000>;
-       };
-};
-
-&gmac0 {
-       nvmem-cells = <&macaddr_factory_e000>;
-       nvmem-cell-names = "mac-address";
+&wifi1 {
+       mediatek,mtd-eeprom = <&factory 0x0000>;
+       ieee80211-freq-limit = <2400000 2500000>;
 };
 
 &gmac1 {
                };
        };
 };
-
-&state_default {
-       gpio {
-               groups = "jtag", "uart2", "uart3", "wdt";
-               function = "gpio";
-       };
-};
-
-&factory {
-       compatible = "nvmem-cells";
-       #address-cells = <1>;
-       #size-cells = <1>;
-
-       macaddr_factory_e000: macaddr@e000 {
-               reg = <0xe000 0x6>;
-       };
-
-       macaddr_factory_e006: macaddr@e006 {
-               reg = <0xe006 0x6>;
-       };
-};
diff --git a/target/linux/ramips/dts/mt7621_xiaomi_mi-router-4a-common.dtsi b/target/linux/ramips/dts/mt7621_xiaomi_mi-router-4a-common.dtsi
new file mode 100644 (file)
index 0000000..efc3273
--- /dev/null
@@ -0,0 +1,138 @@
+// 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>
+
+/ {
+       aliases {
+               led-boot = &led_status_yellow;
+               led-failsafe = &led_status_yellow;
+               led-running = &led_status_blue;
+               led-upgrade = &led_status_yellow;
+       };
+
+       chosen {
+               bootargs = "console=ttyS0,115200n8";
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               reset {
+                       label = "reset";
+                       gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+       };
+};
+
+&spi0 {
+       status = "okay";
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <50000000>;
+               m25p,fast-read;
+
+               partitions: partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "u-boot";
+                               reg = <0x0 0x30000>;
+                               read-only;
+                       };
+
+                       partition@30000 {
+                               label = "u-boot-env";
+                               reg = <0x30000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@40000 {
+                               label = "Bdata";
+                               reg = <0x40000 0x10000>;
+                               read-only;
+                       };
+
+                       factory: partition@50000 {
+                               label = "factory";
+                               reg = <0x50000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@60000 {
+                               label = "crash";
+                               reg = <0x60000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@70000 {
+                               label = "cfg_bak";
+                               reg = <0x70000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@80000 {
+                               label = "overlay";
+                               reg = <0x80000 0x100000>;
+                               read-only;
+                       };
+
+                       firmware: partition@180000 {
+                               compatible = "denx,uimage";
+                               label = "firmware";
+                               reg = <0x180000 0xe80000>;
+                       };
+               };
+       };
+};
+
+&pcie {
+       status = "okay";
+};
+
+&pcie0 {
+       wifi0: wifi@0,0 {
+               compatible = "mediatek,mt76";
+               reg = <0x0000 0 0 0 0>;
+       };
+};
+
+&pcie1 {
+       wifi1: wifi@0,0 {
+               compatible = "mediatek,mt76";
+               reg = <0x0000 0 0 0 0>;
+       };
+};
+
+&gmac0 {
+       nvmem-cells = <&macaddr_factory_e000>;
+       nvmem-cell-names = "mac-address";
+};
+
+&state_default {
+       gpio {
+               groups = "jtag", "uart2", "uart3", "wdt";
+               function = "gpio";
+       };
+};
+
+&factory {
+       compatible = "nvmem-cells";
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       macaddr_factory_e000: macaddr@e000 {
+               reg = <0xe000 0x6>;
+       };
+
+       macaddr_factory_e006: macaddr@e006 {
+               reg = <0xe006 0x6>;
+       };
+};
diff --git a/target/linux/ramips/dts/mt7621_xiaomi_mi-router-4a-gigabit-v2.dts b/target/linux/ramips/dts/mt7621_xiaomi_mi-router-4a-gigabit-v2.dts
new file mode 100644 (file)
index 0000000..67ff6ea
--- /dev/null
@@ -0,0 +1,80 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "mt7621_xiaomi_mi-router-4a-common.dtsi"
+
+/ {
+       compatible = "xiaomi,mi-router-4a-gigabit-v2", "mediatek,mt7621-soc";
+       model = "Xiaomi Mi Router 4A Gigabit Edition v2";
+
+       aliases {
+               label-mac-device = &wan;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               led_status_blue: status_blue {
+                       label = "blue:status";
+                       gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+               };
+
+               led_status_yellow: status_yellow {
+                       label = "yellow:status";
+                       gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
+               };
+
+               wan_blue {
+                       label = "blue:wan";
+                       gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+               };
+
+               wan_yellow {
+                       label = "yellow:wan";
+                       gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
+               };
+       };
+};
+
+&partitions {
+       partition@180000 {
+               // size changed against to the common dtsi
+               reg = <0x180000 0xe70000>;
+       };
+
+       partition@ff0000 {
+               label = "Config";
+               reg = <0xff0000 0x10000>;
+               read-only;
+       };
+};
+
+&wifi0 {
+       mediatek,mtd-eeprom = <&factory 0x0000>;
+       ieee80211-freq-limit = <2400000 2500000>;
+};
+
+&wifi1 {
+       mediatek,mtd-eeprom = <&factory 0x8000>;
+       ieee80211-freq-limit = <5000000 6000000>;
+};
+
+&switch0 {
+       ports {
+               port@1 {
+                       status = "okay";
+                       label = "lan1";
+               };
+
+               port@2 {
+                       status = "okay";
+                       label = "lan2";
+               };
+
+               wan: port@3 {
+                       status = "okay";
+                       label = "wan";
+                       nvmem-cells = <&macaddr_factory_e006>;
+                       nvmem-cell-names = "mac-address";
+               };
+       };
+};
index 6d199b0d6a8312ec3b1a43311d275615b3da0d6f..3587fb613ada360cbadb9f91b872b7e554ab78f1 100644 (file)
@@ -2427,6 +2427,17 @@ define Device/xiaomi_mi-router-4a-gigabit
 endef
 TARGET_DEVICES += xiaomi_mi-router-4a-gigabit
 
+define Device/xiaomi_mi-router-4a-gigabit-v2
+  $(Device/dsa-migration)
+  $(Device/uimage-lzma-loader)
+  IMAGE_SIZE := 14784k
+  DEVICE_VENDOR := Xiaomi
+  DEVICE_MODEL := Mi Router 4A
+  DEVICE_VARIANT := Gigabit Edition v2
+  DEVICE_PACKAGES := kmod-mt7603 kmod-mt7615e kmod-mt7663-firmware-ap
+endef
+TARGET_DEVICES += xiaomi_mi-router-4a-gigabit-v2
+
 define Device/xiaomi_mi-router-ac2100
   $(Device/xiaomi_nand_separate)
   DEVICE_MODEL := Mi Router AC2100
index 91f3fe6e93c13b899c5f93f8488f5295c14331f3..597d7302ac88e1f2a0d5530710c5a79be4247d04 100644 (file)
@@ -179,6 +179,9 @@ tplink,re650-v2)
 tplink,tl-wpa8631p-v3)
        ucidef_set_led_netdev "lan" "LAN" "green:lan" "br-lan"
        ;;
+xiaomi,mi-router-4a-gigabit-v2)
+       ucidef_set_led_netdev "wan" "wan" "blue:wan" "wan" "link"
+       ;;
 xiaomi,mi-router-ac2100)
        ucidef_set_led_netdev "wan-blue" "WAN (blue)" "blue:wan" "wan"
        ;;
index ddbbf9891d63a7e05d6a39dc3da3c2005c6cf201..67f58b10b2715112ae76183d20c95442b4127796 100644 (file)
@@ -72,7 +72,8 @@ ramips_setup_interfaces()
        xiaomi,mi-router-3g|\
        xiaomi,mi-router-3g-v2|\
        xiaomi,mi-router-4|\
-       xiaomi,mi-router-4a-gigabit)
+       xiaomi,mi-router-4a-gigabit|\
+       xiaomi,mi-router-4a-gigabit-v2)
                ucidef_set_interfaces_lan_wan "lan1 lan2" "wan"
                ;;
        bolt,arion)