ramips: add support for SIM SIMAX1800T and Haier HAR-20S2U1
authorShiji Yang <yangshiji66@qq.com>
Thu, 15 Sep 2022 17:10:52 +0000 (01:10 +0800)
committerHauke Mehrtens <hauke@hauke-m.de>
Sat, 5 Nov 2022 21:38:01 +0000 (22:38 +0100)
SIM AX18T and Haier HAR-20S2U1 Wi-Fi6 AX1800 routers are designed based
on Tenbay WR1800K. They have the same hardware circuits and u-boot.
SIM AX18T has three carrier customized models: SIMAX1800M (China Mobile),
SIMAX1800T (China Telecom) and SIMAX1800U (China Unicom). All of these
models run the same firmware.

Specifications:
 SOC:      MT7621 + MT7905 + MT7975
 ROM:      128 MiB
 RAM:      256 MiB
 LED:      status *3 R/G/B
 Button:   reset *1 + wps/mesh *1
 Ethernet:      lan *3 + wan *1 (10/100/1000Mbps)
 TTL Baudrate:  115200
 TFTP Server:   192.168.1.254
 TFTP IP:       192.168.1.28 or 192.168.1.160 (when envs is broken)

MAC Address:
 use        address               source
 label      30:xx:xx:xx:xx:62     wan
 lan        30:xx:xx:xx:xx:65     factory.0x8004
 wan        30:xx:xx:xx:xx:62     factory.0x8004 -3
 wlan2g     30:xx:xx:xx:xx:64     factory.0x0004
 wlan5g     32:xx:xx:xx:xx:64     factory.0x0004 set 7th bit

TFTP Installation (initramfs image only & recommend):
1. Set local tftp server IP: 192.168.1.254 and NetMask: 255.255.255.0
2. Rename initramfs-kernel.bin to "factory.bin" and put it in the root
   directory of the tftp server. (tftpd64 is a good choice for Windows)
3. Start the TFTP server, plug in the power supply, and wait for the
   system to boot.
4. Backup "firmware" partition and rename it to "firmware.bin", we need
   it to back to stock firmware.
5. Use "fw_printenv" command to list envs.
   If "firmware_select=2" is observed then set u-boot enviroment:
   /# fw_setenv firmware_select 1
6. Apply sysupgrade.bin in OpenWrt LuCI.

Web UI Installation:
1. Apply update by uploading initramfs-factory.bin to the web UI.
2. Use "fw_printenv" command to list envs.
   If "firmware_select=2" is observed then set u-boot enviroment:
   /# fw_setenv firmware_select 1
3. Apply squashfs-sysupgrade.bin in OpenWrt LuCI.

Recovery to stock firmware:
a. Upload "firmware.bin" to OpenWrt /tmp, then execute:
   /# mtd -r write /tmp/firmware.bin firmware
b. We can also write factory image "UploadBrush-bin.img" to firmware
   partition to recovery. Upload image file to /tmp, then execute:
   /# mtd erase firmware
   /# mtd -r write /tmp/UploadBrush-bin.img firmware

How to extract stock firmware image:
  Download stock firmware, then use openssl:
  openssl aes-256-cbc -d -salt -in [Downloaded_Firmware] \
  -out "firmware.tar.tgz" -k QiLunSmartWL

Signed-off-by: Chen Minqiang <ptpt52@gmail.com>
Signed-off-by: Shiji Yang <yangshiji66@qq.com>
package/boot/uboot-envtools/files/ramips
target/linux/ramips/dts/mt7621_haier-sim_wr1800k.dtsi [new file with mode: 0644]
target/linux/ramips/dts/mt7621_haier_har-20s2u1.dts [new file with mode: 0644]
target/linux/ramips/dts/mt7621_sim_simax1800t.dts [new file with mode: 0644]
target/linux/ramips/image/mt7621.mk
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/lib/upgrade/platform.sh

index 194f6561d46e382d74ce72f20c5074e43b9098a7..70d70dfed05778861898f6b99e4777a79ebcb95a 100644 (file)
@@ -56,6 +56,11 @@ linksys,e7350|\
 netgear,wax202)
        ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000"
        ;;
+haier,har-20s2u1|\
+sim,simax1800t)
+       ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000"
+       ubootenv_add_uci_sys_config "/dev/mtd1" "0x40000" "0x40000" "0x20000"
+       ;;
 hootoo,ht-tm05|\
 ravpower,rp-wd03)
        idx="$(find_mtd_index u-boot-env)"
diff --git a/target/linux/ramips/dts/mt7621_haier-sim_wr1800k.dtsi b/target/linux/ramips/dts/mt7621_haier-sim_wr1800k.dtsi
new file mode 100644 (file)
index 0000000..32d42fe
--- /dev/null
@@ -0,0 +1,186 @@
+// 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>
+
+/ {
+       aliases {
+               label-mac-device = &gmac1;
+               led-boot = &led_status_red;
+               led-failsafe = &led_status_blue;
+               led-running = &led_status_green;
+               led-upgrade = &led_status_blue;
+       };
+
+       chosen {
+               bootargs-override = "console=ttyS0,115200";
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               reset {
+                       label = "reset";
+                       gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+
+               wps {
+                       label = "wps";
+                       gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_WPS_BUTTON>;
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               led_status_blue: led-0 {
+                       label = "blue:status";
+                       color = <LED_COLOR_ID_BLUE>;
+                       function = LED_FUNCTION_STATUS;
+                       gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
+               };
+
+               led_status_green: led-1 {
+                       label = "green:status";
+                       color = <LED_COLOR_ID_GREEN>;
+                       function = LED_FUNCTION_STATUS;
+                       gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
+               };
+
+               led_status_red: led-2 {
+                       label = "red:status";
+                       color = <LED_COLOR_ID_RED>;
+                       function = LED_FUNCTION_STATUS;
+                       gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
+               };
+       };
+};
+
+&gmac0 {
+       nvmem-cells = <&macaddr_factory_8004>;
+       nvmem-cell-names = "mac-address";
+};
+
+&gmac1 {
+       status = "okay";
+       label = "wan";
+       phy-handle = <&ethphy4>;
+
+       nvmem-cells = <&macaddr_factory_8004>;
+       nvmem-cell-names = "mac-address";
+       mac-address-increment = <(-3)>;
+};
+
+&mdio {
+       ethphy4: ethernet-phy@4 {
+               reg = <4>;
+       };
+};
+
+&nand {
+       status = "okay";
+
+       partitions {
+               compatible = "fixed-partitions";
+               #address-cells = <1>;
+               #size-cells = <1>;
+
+               partition@0 {
+                       label = "u-boot";
+                       reg = <0x0000000 0x0080000>;
+                       read-only;
+               };
+
+               partition@80000 {
+                       label = "u-boot-env";
+                       reg = <0x0080000 0x0080000>;
+               };
+
+               factory: partition@100000 {
+                       label = "factory";
+                       reg = <0x0100000 0x0080000>;
+                       read-only;
+
+                       compatible = "nvmem-cells";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       macaddr_factory_8004: macaddr@8004 {
+                               reg = <0x8004 0x6>;
+                       };
+               };
+
+               partition@180000 {
+                       label = "firmware";
+                       reg = <0x0180000 0x7a80000>;
+
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "kernel";
+                               reg = <0x0000000 0x0400000>;
+                       };
+
+                       partition@400000 {
+                               label = "ubi";
+                               reg = <0x0400000 0x7680000>;
+                       };
+               };
+
+               /* last 128KiB *32 is reserved for bad blocks management */
+       };
+};
+
+&pcie {
+       status = "okay";
+};
+
+&pcie1 {
+       wifi@0,0 {
+               compatible = "mediatek,mt76";
+               reg = <0x0000 0 0 0 0>;
+               mediatek,mtd-eeprom = <&factory 0x0>;
+               mediatek,disable-radar-background;
+       };
+};
+
+&pcie2 {
+       status = "disabled";
+};
+
+&state_default {
+       gpio {
+               groups = "i2c", "uart3", "wdt";
+               function = "gpio";
+       };
+};
+
+&switch0 {
+       ports {
+               port@1 {
+                       status = "okay";
+                       label = "lan3";
+               };
+
+               port@2 {
+                       status = "okay";
+                       label = "lan2";
+               };
+
+               port@3 {
+                       status = "okay";
+                       label = "lan1";
+               };
+       };
+};
+
+&xhci {
+       status = "disabled";
+};
diff --git a/target/linux/ramips/dts/mt7621_haier_har-20s2u1.dts b/target/linux/ramips/dts/mt7621_haier_har-20s2u1.dts
new file mode 100644 (file)
index 0000000..dede7db
--- /dev/null
@@ -0,0 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "mt7621_haier-sim_wr1800k.dtsi"
+
+/ {
+       compatible = "haier,har-20s2u1", "mediatek,mt7621-soc";
+       model = "Haier HAR-20S2U1";
+};
diff --git a/target/linux/ramips/dts/mt7621_sim_simax1800t.dts b/target/linux/ramips/dts/mt7621_sim_simax1800t.dts
new file mode 100644 (file)
index 0000000..3c5c917
--- /dev/null
@@ -0,0 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "mt7621_haier-sim_wr1800k.dtsi"
+
+/ {
+       compatible = "sim,simax1800t", "mediatek,mt7621-soc";
+       model = "SIM SIMAX1800T";
+};
index a819abd968ea0cdbdcf996725689ab588d00c28e..60f927eeed31d3b1d00cc5fd259ed2a7e7e265f3 100644 (file)
@@ -37,6 +37,18 @@ define Build/h3c-blank-header
        mv $@.blank $@
 endef
 
+define Build/haier-sim_wr1800k-factory
+  -[ -e $(KDIR)/tmp/$(KERNEL_INITRAMFS_IMAGE) ] && \
+  mkdir -p "$(1).tmp" && \
+  $(CP) $(KDIR)/tmp/$(KERNEL_INITRAMFS_IMAGE) "$(1).tmp/UploadBrush-bin.img" && \
+  $(MKHASH) md5 "$(1).tmp/UploadBrush-bin.img" | head -c32 > "$(1).tmp/check_MD5.txt" && \
+  $(TAR) -czf $(1).tmp.tgz -C "$(1).tmp" UploadBrush-bin.img check_MD5.txt && \
+  $(STAGING_DIR_HOST)/bin/openssl aes-256-cbc -e -salt -in $(1).tmp.tgz -out "$(1)" -k QiLunSmartWL && \
+  printf %32s "$(DEVICE_MODEL)" >> "$(1)" && \
+  rm -rf "$(1).tmp" $(1).tmp.tgz && \
+  $(CP) $(1) $(BIN_DIR)/
+endef
+
 define Build/iodata-factory
        $(eval fw_size=$(word 1,$(1)))
        $(eval fw_type=$(word 2,$(1)))
@@ -869,6 +881,29 @@ define Device/h3c_tx1806
 endef
 TARGET_DEVICES += h3c_tx1806
 
+define Device/haier-sim_wr1800k
+  $(Device/dsa-migration)
+  BLOCKSIZE := 128k
+  PAGESIZE := 2048
+  KERNEL_SIZE := 4096k
+  IMAGE_SIZE := 125440k
+  UBINIZE_OPTS := -E 5
+  KERNEL_LOADADDR := 0x82000000
+  KERNEL := kernel-bin | relocate-kernel 0x80001000 | lzma | \
+       fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
+  KERNEL_INITRAMFS := $$(KERNEL) | \
+       haier-sim_wr1800k-factory $(KDIR)/tmp/$$(KERNEL_INITRAMFS_PREFIX)-factory.bin
+  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
+  DEVICE_PACKAGES := kmod-mt7915e uboot-envtools
+endef
+
+define Device/haier_har-20s2u1
+  $(Device/haier-sim_wr1800k)
+  DEVICE_VENDOR := Haier
+  DEVICE_MODEL := HAR-20S2U1
+endef
+TARGET_DEVICES += haier_har-20s2u1
+
 define Device/hilink_hlk-7621a-evb
   $(Device/dsa-migration)
   $(Device/uimage-lzma-loader)
@@ -1729,6 +1764,13 @@ define Device/sercomm_na502s
 endef
 TARGET_DEVICES += sercomm_na502s
 
+define Device/sim_simax1800t
+  $(Device/haier-sim_wr1800k)
+  DEVICE_VENDOR := SIM
+  DEVICE_MODEL := SIMAX1800T
+endef
+TARGET_DEVICES += sim_simax1800t
+
 define Device/snr_snr-cpe-me2-lite
   $(Device/dsa-migration)
   $(Device/uimage-lzma-loader)
index 39af3af2197900a7b9e084e62ebe6d46b2434d70..14250aa1509f2bb405cec1ec32b408431dacd803 100644 (file)
@@ -35,8 +35,10 @@ ramips_setup_interfaces()
        h3c,tx1800-plus|\
        h3c,tx1801-plus|\
        h3c,tx1806|\
+       haier,har-20s2u1|\
        hiwifi,hc5962|\
        netgear,wax202|\
+       sim,simax1800t|\
        xiaomi,mi-router-3-pro|\
        xiaomi,mi-router-ac2100|\
        xiaomi,mi-router-cr6606|\
index ff3ee281b2984436c7fb4a9f366f66666d2eecaf..69ecaefd27c2b8ba375ed722451a1d0fcf8594ec 100644 (file)
@@ -45,6 +45,12 @@ case "$board" in
                [ "$PHYNBR" = "0" ] && echo -n ${addr:0:9}'1'${addr:10:7} > /sys${DEVPATH}/macaddress
                [ "$PHYNBR" = "1" ] && echo -n ${addr:0:9}'7'${addr:10:7} > /sys${DEVPATH}/macaddress
                ;;
+       haier,har-20s2u1|\
+       jcg,y2|\
+       sim,simax1800t)
+               [ "$PHYNBR" = "1" ] && \
+                       macaddr_setbit_la "$(mtd_get_mac_binary factory 0x4)" > /sys${DEVPATH}/macaddress
+               ;;
        hiwifi,hc5962)
                label_mac=$(mtd_get_mac_ascii bdinfo "Vfac_mac ")
                [ "$PHYNBR" = "0" ] && [ -n "$label_mac" ] && \
@@ -69,10 +75,6 @@ case "$board" in
                [ "$PHYNBR" = "1" ] && \
                        macaddr_setbit_la "$(mtd_get_mac_binary Factory 0x4)" > /sys${DEVPATH}/macaddress
                ;;
-       jcg,y2)
-               [ "$PHYNBR" = "1" ] && \
-                       macaddr_setbit_la "$(mtd_get_mac_binary factory 0x4)" > /sys${DEVPATH}/macaddress
-               ;;
        linksys,e5600|\
        linksys,ea6350-v4|\
        linksys,ea7300-v1|\
index 05907536fe479842e98e7a978bdd1531c2f62257..ebe4c638be883ad5f667f12aba17e44927ada413 100755 (executable)
@@ -65,6 +65,7 @@ platform_do_upgrade() {
        h3c,tx1800-plus|\
        h3c,tx1801-plus|\
        h3c,tx1806|\
+       haier,har-20s2u1|\
        hiwifi,hc5962|\
        iptime,a3004t|\
        iptime,ax2004m|\
@@ -95,6 +96,7 @@ platform_do_upgrade() {
        raisecom,msg1500-x-00|\
        sercomm,na502|\
        sercomm,na502s|\
+       sim,simax1800t|\
        xiaomi,mi-router-3g|\
        xiaomi,mi-router-3-pro|\
        xiaomi,mi-router-4|\