ramips: add support for Rostelecom RT-FE-1A
authorMikhail Zhilkin <csharper2005@gmail.com>
Sat, 25 Nov 2023 12:14:57 +0000 (12:14 +0000)
committerHauke Mehrtens <hauke@hauke-m.de>
Tue, 5 Dec 2023 23:12:56 +0000 (00:12 +0100)
Rostelecom RT-FE-1A is a wireless WiFi 5 router manufactured by Sercomm
company.

Device specification
--------------------
SoC Type: MediaTek MT7621AT
RAM: 256 MiB
Flash: 128 MiB
Wireless 2.4 GHz (MT7603EN): b/g/n, 2x2
Wireless 5 GHz (MT7615E): a/n/ac, 4x4
Ethernet: 5x GbE (WAN, LAN1, LAN2, LAN3, LAN4)
USB ports: No
Button: 2 buttons (Reset & WPS)
LEDs:
   - 1x Power (green, unmanaged)
   - 1x Status (green, gpio)
   - 1x 2.4G (green, hardware, mt76-phy0)
   - 1x 2.4G (blue, gpio)
   - 1x 5G (green, hardware, mt76-phy1)
   - 1x 5G (blue, gpio)
   - 5x Ethernet (green, hardware, 4x LAN & WAN)
Power: 12 VDC, 1.5 A
Connector type: barrel
Bootloader: U-Boot

Installation
-----------------

1.  Login to the router web interface (default http://192.168.0.1/)
    under "admin" account

2.  Navigate to Settings -> Configuration -> Save to Computer

3.  Decode the configuration. For example, using cfgtool.py tool (see
    related section):
    cfgtool.py -u configurationBackup.cfg

4.  Open configurationBackup.xml and find the following block:

<OBJECT name="User." type="object" writable="1" encryption="0" >
<OBJECT name="1." type="object" writable="1" encryption="0" >
<PARAMETER name="Password" type="string" value="<some value>" writable="1" encryption="1" password="1" />
</OBJECT>

5.  Replace <some value> by a new superadmin password and add a line
    which enabling superadmin login after. For example, the block after
    the changes:

<OBJECT name="User." type="object" writable="1" encryption="0" >
<OBJECT name="1." type="object" writable="1" encryption="0" >
<PARAMETER name="Password" type="string" value="s0meP@ss" writable="1" encryption="1" password="1" />
<PARAMETER name="Enable" type="boolean" value="1" writable="1" encryption="0"/>
</OBJECT>

6.  Encode the configuration. For example, using cfgtool.py tool:
       cfgtool.py -p configurationBackup.xml

7.  Upload the changed configuration (configurationBackup_changed.cfg) to
    the router

8.  Login to the router web interface (superadmin:xxxxxxxxxx, where
    xxxxxxxxxx is a new password from the p.5)

9.  Enable SSH access to the router (Settings -> Access control -> SSH)

10. Connect to the router using SSH shell using superadmin account

11. Run in SSH shell:
    sh

12. Make a mtd backup (optional, see related section)

13. Change bootflag to Sercomm1 and reboot:
    printf 1 | dd bs=1 seek=7 count=1 of=/dev/mtdblock3
    reboot

14. Login to the router web interface under admin account

15. Remove dots from the OpenWrt factory image filename

16. Update firmware via web using OpenWrt factory image

Revert to stock
---------------
Change bootflag to Sercomm1 in OpenWrt CLI and then reboot:
   printf 1 | dd bs=1 seek=7 count=1 of=/dev/mtdblock3

mtd backup
----------
1. Set up a tftp server (e.g. tftpd64 for windows)
2. Connect to a router using SSH shell and run the following commands:
   cd /tmp
   for i in 0 1 2 3 4 5 6 7 8 9; do nanddump -f mtd$i /dev/mtd$i; \
   tftp -l mtd$i -p 192.168.0.2; md5sum mtd$i >> mtd.md5; rm mtd$i; done
   tftp -l mtd.md5 -p 192.168.0.2

MAC Addresses
-------------
+-----+------------+---------+
| use | address    | example |
+-----+------------+---------+
| LAN | label      | f4:*:66 |
| WAN | label + 11 | f4:*:71 |
| 2g  | label + 2  | f4:*:68 |
| 5g  | label + 3  | f4:*:69 |
+-----+------------+---------+
The label MAC address was found in Factory, 0x21000

cfgtool.py
----------
A tool for decoding and encoding Sercomm configs.
Link: https://github.com/r3d5ky/sercomm_cfg_unpacker
Signed-off-by: Mikhail Zhilkin <csharper2005@gmail.com>
package/boot/uboot-envtools/files/ramips
target/linux/ramips/dts/mt7621_rostelecom_rt-fe-1a.dts [new file with mode: 0644]
target/linux/ramips/image/mt7621.mk
target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh

index 60ac40ff3636da1b7fcc8130af5fee83628b921c..30bf635b6df33bdce1a863c5f2b8e1c6cf7e7725 100644 (file)
@@ -44,6 +44,7 @@ beeline,smartbox-giga|\
 beeline,smartbox-turbo|\
 beeline,smartbox-turbo-plus|\
 etisalat,s3|\
+rostelecom,rt-fe-1a|\
 rostelecom,rt-sf-1)
        ubootenv_add_uci_config "/dev/mtd0" "0x80000" "0x1000" "0x20000"
        ;;
diff --git a/target/linux/ramips/dts/mt7621_rostelecom_rt-fe-1a.dts b/target/linux/ramips/dts/mt7621_rostelecom_rt-fe-1a.dts
new file mode 100644 (file)
index 0000000..8afe5f5
--- /dev/null
@@ -0,0 +1,266 @@
+// 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 <dt-bindings/leds/common.h>
+
+/ {
+       compatible = "rostelecom,rt-fe-1a", "mediatek,mt7621-soc";
+       model = "Rostelecom RT-FE-1A";
+
+       aliases {
+               label-mac-device = &gmac0;
+
+               led-boot = &led_status_green;
+               led-failsafe = &led_status_green;
+               led-running = &led_status_green;
+               led-upgrade = &led_status_green;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               led-0 {
+                       color = <LED_COLOR_ID_BLUE>;
+                       function = LED_FUNCTION_WLAN;
+                       function-enumerator = <50>;
+                       gpios = <&gpio 7 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "phy1tpt";
+               };
+
+               led-1 {
+                       color = <LED_COLOR_ID_BLUE>;
+                       function = LED_FUNCTION_WLAN;
+                       function-enumerator = <24>;
+                       gpios = <&gpio 12 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "phy0tpt";
+               };
+
+               led_status_green: led-2 {
+                       color = <LED_COLOR_ID_GREEN>;
+                       function = LED_FUNCTION_STATUS;
+                       gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               button-0 {
+                       label = "wps";
+                       gpios = <&gpio 11 GPIO_ACTIVE_HIGH>;
+                       linux,code = <KEY_WPS_BUTTON>;
+               };
+
+               button-1 {
+                       label = "reset";
+                       gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+       };
+
+       ubi-concat {
+               compatible = "mtd-concat";
+               devices = <&ubiconcat0 &ubiconcat1 &ubiconcat2 \
+                          &ubiconcat3>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "ubi";
+                               reg = <0x0 0x5420000>;
+                       };
+               };
+       };
+};
+
+&nand {
+       status = "okay";
+
+       partitions {
+               compatible = "sercomm,sc-partitions", "fixed-partitions";
+               #address-cells = <1>;
+               #size-cells = <1>;
+
+               partition@0 {
+                       label = "u-boot";
+                       reg = <0x0 0x100000>;
+                       sercomm,scpart-id = <0>;
+                       read-only;
+               };
+
+               partition@100000 {
+                       label = "dynamic partition map";
+                       reg = <0x100000 0x100000>;
+                       sercomm,scpart-id = <1>;
+                       read-only;
+               };
+
+               partition@200000 {
+                       label = "Factory";
+                       reg = <0x200000 0x100000>;
+                       sercomm,scpart-id = <2>;
+                       read-only;
+
+                       nvmem-layout {
+                               compatible = "fixed-layout";
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+
+                               eeprom_2g: eeprom@0 {
+                                       reg = <0x0 0x400>;
+                               };
+
+                               eeprom_5g: eeprom@8000 {
+                                       reg = <0x8000 0x4da8>;
+                               };
+
+                               macaddr_label: macaddr@21000 {
+                                       compatible = "mac-base";
+                                       reg = <0x21000 0x6>;
+                                       #nvmem-cell-cells = <1>;
+                               };
+                       };
+               };
+
+               partition@300000 {
+                       label = "Boot Flag";
+                       reg = <0x300000 0x100000>;
+                       sercomm,scpart-id = <3>;
+               };
+
+               partition@400000 {
+                       label = "kernel";
+                       reg = <0x400000 0x600000>;
+                       sercomm,scpart-id = <4>;
+               };
+
+               partition@a00000 {
+                       label = "Kernel 2";
+                       reg = <0xa00000 0x600000>;
+                       sercomm,scpart-id = <5>;
+                       read-only;
+               };
+
+               ubiconcat0: partition@1000000 {
+                       label = "File System 1";
+                       reg = <0x1000000 0x1800000>;
+                       sercomm,scpart-id = <6>;
+               };
+
+               partition@2800000 {
+                       label = "File System 2";
+                       reg = <0x2800000 0x1800000>;
+                       sercomm,scpart-id = <7>;
+                       read-only;
+               };
+
+               ubiconcat1: partition@4000000 {
+                       label = "Configuration/log";
+                       reg = <0x4000000 0x800000>;
+                       sercomm,scpart-id = <8>;
+               };
+
+               ubiconcat2: partition@4800000 {
+                       label = "application tmp buffer (Ftool)";
+                       reg = <0x4800000 0xc00000>;
+                       sercomm,scpart-id = <9>;
+               };
+
+               ubiconcat3: partition@5400000 {
+                       label = "free space (in stock firmware)";
+                       reg = <0x5400000 0x2820000>;
+                       sercomm,scpart-id = <10>;
+               };
+       };
+};
+
+&pcie {
+       status = "okay";
+};
+
+&pcie0 {
+       wifi@0,0 {
+               compatible = "mediatek,mt76";
+               reg = <0x0000 0 0 0 0>;
+               ieee80211-freq-limit = <5000000 6000000>;
+
+               nvmem-cells = <&eeprom_5g>, <&macaddr_label 3>;
+               nvmem-cell-names = "eeprom", "mac-address";
+
+               led {
+                       led-active-low;
+               };
+       };
+};
+
+&pcie1 {
+       wifi@0,0 {
+               compatible = "mediatek,mt76";
+               reg = <0x0000 0 0 0 0>;
+               ieee80211-freq-limit = <2400000 2500000>;
+
+               nvmem-cells = <&eeprom_2g>, <&macaddr_label 2>;
+               nvmem-cell-names = "eeprom", "mac-address";
+
+               led {
+                       led-active-low;
+               };
+       };
+};
+
+&gmac0 {
+       nvmem-cells = <&macaddr_label 0>;
+       nvmem-cell-names = "mac-address";
+};
+
+&gmac1 {
+       status = "okay";
+       label = "wan";
+       phy-handle = <&ethphy0>;
+
+       nvmem-cells = <&macaddr_label 11>;
+       nvmem-cell-names = "mac-address";
+};
+
+&mdio {
+       ethphy0: ethernet-phy@0 {
+               reg = <0>;
+       };
+};
+
+&switch0 {
+       ports {
+               port@1 {
+                       status = "okay";
+                       label = "lan1";
+               };
+
+               port@2 {
+                       status = "okay";
+                       label = "lan2";
+               };
+
+               port@3 {
+                       status = "okay";
+                       label = "lan3";
+               };
+
+               port@4 {
+                       status = "okay";
+                       label = "lan4";
+               };
+       };
+};
+
+&state_default {
+       gpio {
+               groups = "jtag", "uart2", "uart3", "wdt";
+               function = "gpio";
+       };
+};
index cd42712950641e9897436ce643f6a1bc56f51892..2c25b1ab28a0e659b1e69a5e8304f941267eaa8e 100644 (file)
@@ -2081,6 +2081,20 @@ define Device/renkforce_ws-wn530hp3-a
 endef
 TARGET_DEVICES += renkforce_ws-wn530hp3-a
 
+define Device/rostelecom_rt-fe-1a
+  $(Device/sercomm_dxx)
+  IMAGE_SIZE := 24576k
+  SERCOMM_HWID := CX4
+  SERCOMM_HWVER := 11300
+  SERCOMM_SWVER := 2010
+  DEVICE_VENDOR := Rostelecom
+  DEVICE_MODEL := RT-FE-1A
+  DEVICE_ALT0_VENDOR := Sercomm
+  DEVICE_ALT0_MODEL := RT-FE-1A
+  DEVICE_PACKAGES := kmod-mt7603 kmod-mt7615-firmware
+endef
+TARGET_DEVICES += rostelecom_rt-fe-1a
+
 define Device/rostelecom_rt-sf-1
   $(Device/sercomm_dxx)
   IMAGE_SIZE := 32768k
index 2b789342abe056a948af9dd6abfd7dc83863bc67..40a2fb61dbb9c9eddc6c7b7a02119834643881ed 100755 (executable)
@@ -104,6 +104,7 @@ platform_do_upgrade() {
        netgear,wax202|\
        netis,wf2881|\
        raisecom,msg1500-x-00|\
+       rostelecom,rt-fe-1a|\
        rostelecom,rt-sf-1|\
        sercomm,na502|\
        sercomm,na502s|\