[openwrt/openwrt] ramips: Add support for Beeline SmartBox TURBO+

LEDE Commits lede-commits at lists.infradead.org
Sat Jun 17 04:02:24 PDT 2023


hauke pushed a commit to openwrt/openwrt.git, branch openwrt-23.05:
https://git.openwrt.org/8a0746955d1ea2aba9e7836129d89c3523a46e0e

commit 8a0746955d1ea2aba9e7836129d89c3523a46e0e
Author: Maximilian Weinmann <x1 at disroot.org>
AuthorDate: Wed Dec 7 23:44:09 2022 +0700

    ramips: Add support for Beeline SmartBox TURBO+
    
    This adds support for Beeline Smart Box TURBO+ (Serсomm S3 CQR) router.
    
    Device specification
    --------------------
    SoC Type: MediaTek MT7621AT (880 MHz, 2 cores)
    RAM (Nanya NT5CC64M16GP): 128 MiB
    Flash (Macronix MX30LF1G18AC): 128 MiB
    Wireless 2.4 GHz (MT7603EN): b/g/n, 2x2
    Wireless 5 GHz (MT7615N): a/n/ac, 4x4
    Ethernet: 5 ports - 5×GbE (WAN, LAN1-4)
    USB ports: 1xUSB3.0
    Buttons: 2 button (reset, wps)
    LEDs: Red, Green, Blue
    Zigbee (EFR32MG1B232GG): 3.0
    Stock bootloader: U-Boot 1.1.3
    Power: 12 VDC, 1.5 A
    
    Installation (fw 2.0.9)
    -----------------------
    1.  Login to the web interface under SuperUser (root) credentials.
        Password: SDXXXXXXXXXX, where SDXXXXXXXXXX is serial number of the
        device written on the backplate stick.
    2.  Navigate to Setting -> WAN. Add:
           Name - WAN1
           Connection Type - Static
           IP Address - 172.16.0.1
           Netmask - 255.255.255.0
        Save -> Apply. Set default: WAN1
    3.  Enable SSH and HTTP on WAN. Setting -> Remote control. Add:
           Protocol - SSH
           Port - 22
           IP Address - 172.16.0.1
           Netmask - 255.255.255.0
           WAN Interface - WAN1
        Save ->Apply
        Add:
           Protocol - HTTP
           Port - 80
           IP Address - 172.16.0.1
           Netmask - 255.255.255.0
           WAN interface - WAN1
        Save -> Apply
    4.  Set up your PC ethernet:
           Connection Type - Static
           IP Address - 172.16.0.2
           Netmask - 255.255.255.0
           Gateway - 172.16.0.1
    5.  Connect PC using ethernet cable to the WAN port of the router
    6.  Connect to the router using SSH shell under SuperUser account
    7.  Make a mtd backup (optional, see related section)
    8.  Change bootflag to Sercomm1 and reboot:
            printf 1 | dd bs=1 seek=7 count=1 of=/dev/mtdblock3
            reboot
    9.  Login to the router web interface under admin account
    10. Remove dots from the OpenWrt factory image filename
    11. 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 10; do nanddump -f mtd$i /dev/mtd$i; \
          tftp -l mtd$i -p 172.16.0.2; md5sum mtd$i >> mtd.md5; rm mtd$i; done
          tftp -l mtd.md5 -p 171.16.0.2
    
    Recovery
    --------
    Use sercomm-recovery tool.
    Link: https://github.com/danitool/sercomm-recovery
    
    MAC Addresses (fw 2.0.9)
    ------------------------
    +-----+------------+---------+
    | use | address    | example |
    +-----+------------+---------+
    | LAN | label      | *:e8    |
    | WAN | label + 1  | *:e9    |
    | 2g  | label + 4  | *:ec    |
    | 5g  | label + 5  | *:ed    |
    +-----+------------+---------+
    The label MAC address was found in Factory 0x21000
    
    Factory image format
    --------------------
    +---+-------------------+-------------+--------------------+
    | # | Offset            | Size        | Description        |
    +---+-------------------+-------------+--------------------+
    | 1 | 0x0               | 0x200       | Tag Header Factory |
    | 2 | 0x200             | 0x100       | Tag Header Kernel1 |
    | 3 | 0x300             | 0x100       | Tag Header Kernel2 |
    | 4 | 0x400             | SIZE_KERNEL | Kernel             |
    | 5 | 0x400+SIZE_KERNEL | SIZE_ROOTFS | RootFS(UBI)        |
    +---+-------------------+-------------+--------------------+
    
    Co-authored-by: Mikhail Zhilkin <csharper2005 at gmail.com>
    Signed-off-by: Maximilian Weinmann <x1 at disroot.org>
    (cherry picked from commit 8fcfb21b16e7537b9a871a1f67cb218c6be93149)
---
 package/boot/uboot-envtools/files/ramips           |   1 +
 .../dts/mt7621_beeline_smartbox-turbo-plus.dts     | 248 +++++++++++++++++++++
 target/linux/ramips/image/common-sercomm.mk        |  65 +++++-
 target/linux/ramips/image/mt7621.mk                |  12 +
 .../ramips/mt7621/base-files/etc/board.d/01_leds   |   1 +
 .../ramips/mt7621/base-files/etc/init.d/bootcount  |   1 +
 .../mt7621/base-files/lib/upgrade/platform.sh      |   1 +
 7 files changed, 320 insertions(+), 9 deletions(-)

diff --git a/package/boot/uboot-envtools/files/ramips b/package/boot/uboot-envtools/files/ramips
index 6f351af212..b3f37c7c3e 100644
--- a/package/boot/uboot-envtools/files/ramips
+++ b/package/boot/uboot-envtools/files/ramips
@@ -39,6 +39,7 @@ ampedwireless,ally-r1900k)
 	;;
 beeline,smartbox-giga|\
 beeline,smartbox-turbo|\
+beeline,smartbox-turbo-plus|\
 etisalat,s3|\
 rostelecom,rt-sf-1)
 	ubootenv_add_uci_config "/dev/mtd0" "0x80000" "0x1000" "0x20000"
diff --git a/target/linux/ramips/dts/mt7621_beeline_smartbox-turbo-plus.dts b/target/linux/ramips/dts/mt7621_beeline_smartbox-turbo-plus.dts
new file mode 100644
index 0000000000..507920bac2
--- /dev/null
+++ b/target/linux/ramips/dts/mt7621_beeline_smartbox-turbo-plus.dts
@@ -0,0 +1,248 @@
+// 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 = "beeline,smartbox-turbo-plus", "mediatek,mt7621-soc";
+	model = "Beeline SmartBox TURBO+";
+
+	aliases {
+		label-mac-device = &gmac0;
+
+		led-boot = &led_status_green;
+		led-failsafe = &led_status_red;
+		led-running = &led_status_green;
+		led-upgrade = &led_status_red;
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led-0 {
+			label = "blue:wan";
+			color = <LED_COLOR_ID_BLUE>;
+			function = LED_FUNCTION_WAN;
+			gpios = <&gpio 13 GPIO_ACTIVE_HIGH>;
+		};
+
+		led_status_green: led-1 {
+			label = "green:status";
+			color = <LED_COLOR_ID_GREEN>;
+			function = LED_FUNCTION_STATUS;
+			gpios = <&gpio 15 GPIO_ACTIVE_HIGH>;
+		};
+
+		led_status_red: led-2 {
+			label = "red:status";
+			color = <LED_COLOR_ID_RED>;
+			function = LED_FUNCTION_STATUS;
+			gpios = <&gpio 16 GPIO_ACTIVE_HIGH>;
+		};
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		wps {
+			label = "wps";
+			gpios = <&gpio 11 GPIO_ACTIVE_HIGH>;
+			linux,code = <KEY_WPS_BUTTON>;
+		};
+
+		reset {
+			label = "reset";
+			gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+	};
+
+	ubi-concat {
+		compatible = "mtd-concat";
+		devices = <&ubiconcat0 &ubiconcat1 &ubiconcat2>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition at 0 {
+				label = "ubi";
+				reg = <0x0 0x4f80000>;
+			};
+		};
+	};
+};
+
+&nand {
+	status = "okay";
+
+	partitions {
+		compatible = "sercomm,sc-partitions", "fixed-partitions";
+		#address-cells = <1>;
+		#size-cells = <1>;
+
+		partition at 0 {
+			label = "u-boot";
+			reg = <0x0 0x100000>;
+			sercomm,scpart-id = <0>;
+			read-only;
+		};
+
+		partition at 100000 {
+			label = "dynamic partition map";
+			reg = <0x100000 0x100000>;
+			sercomm,scpart-id = <1>;
+			read-only;
+		};
+
+		factory: partition at 200000 {
+			label = "Factory";
+			reg = <0x200000 0x100000>;
+			sercomm,scpart-id = <2>;
+			read-only;
+
+			compatible = "nvmem-cells";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			macaddr_factory_21000: macaddr at 21000 {
+				reg = <0x21000 0x6>;
+			};
+		};
+
+		partition at 300000 {
+			label = "Boot Flag";
+			reg = <0x300000 0x100000>;
+			sercomm,scpart-id = <3>;
+		};
+
+		partition at 400000 {
+			label = "kernel";
+			reg = <0x400000 0x600000>;
+			sercomm,scpart-id = <4>;
+		};
+
+		partition at a00000 {
+			label = "Kernel 2";
+			reg = <0xa00000 0x600000>;
+			sercomm,scpart-id = <5>;
+			read-only;
+		};
+
+		ubiconcat0: partition at 1000000 {
+			label = "File System 1";
+			reg = <0x1000000 0x2000000>;
+			sercomm,scpart-id = <6>;
+		};
+
+		partition at 3000000 {
+			label = "File System 2";
+			reg = <0x3000000 0x2000000>;
+			sercomm,scpart-id = <7>;
+			read-only;
+		};
+
+		ubiconcat1: partition at 5000000 {
+			label = "Configuration/log";
+			reg = <0x5000000 0x1400000>;
+			sercomm,scpart-id = <8>;
+		};
+
+		ubiconcat2: partition at 6400000 {
+			label = "application tmp buffer (Ftool)";
+			reg = <0x6400000 0x1b80000>;
+			sercomm,scpart-id = <9>;
+		};
+	};
+};
+
+&pcie {
+	status = "okay";
+};
+
+&pcie0 {
+	wifi at 0,0 {
+		compatible = "mediatek,mt76";
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x8000>;
+		ieee80211-freq-limit = <5000000 6000000>;
+
+		nvmem-cells = <&macaddr_factory_21000>;
+		nvmem-cell-names = "mac-address";
+		mac-address-increment = <(5)>;
+	};
+};
+
+&pcie1 {
+	wifi at 0,0 {
+		compatible = "mediatek,mt76";
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x0>;
+		ieee80211-freq-limit = <2400000 2500000>;
+
+		nvmem-cells = <&macaddr_factory_21000>;
+		nvmem-cell-names = "mac-address";
+		mac-address-increment = <(4)>;
+	};
+};
+
+&gmac0 {
+	nvmem-cells = <&macaddr_factory_21000>;
+	nvmem-cell-names = "mac-address";
+};
+
+&gmac1 {
+	status = "okay";
+	label = "wan";
+	phy-handle = <&ethphy0>;
+
+	nvmem-cells = <&macaddr_factory_21000>;
+	nvmem-cell-names = "mac-address";
+	mac-address-increment = <(1)>;
+};
+
+&mdio {
+	ethphy0: ethernet-phy at 0 {
+		reg = <0>;
+	};
+};
+
+&switch0 {
+	ports {
+		port at 1 {
+			status = "okay";
+			label = "lan1";
+		};
+
+		port at 2 {
+			status = "okay";
+			label = "lan2";
+		};
+
+		port at 3 {
+			status = "okay";
+			label = "lan3";
+		};
+
+		port at 4 {
+			status = "okay";
+			label = "lan4";
+		};
+	};
+};
+
+&uartlite3 {
+	status = "okay";
+	current-speed = <57600>;
+};
+
+&state_default {
+	gpio {
+		groups = "i2c", "jtag";
+		function = "gpio";
+	};
+};
diff --git a/target/linux/ramips/image/common-sercomm.mk b/target/linux/ramips/image/common-sercomm.mk
index 83bb2a742c..fbe29d7017 100644
--- a/target/linux/ramips/image/common-sercomm.mk
+++ b/target/linux/ramips/image/common-sercomm.mk
@@ -1,4 +1,5 @@
 DEVICE_VARS += SERCOMM_KERNEL_OFFSET SERCOMM_ROOTFS_OFFSET
+DEVICE_VARS += SERCOMM_KERNEL2_OFFSET SERCOMM_ROOTFS2_OFFSET
 
 define Build/sercomm-crypto
 	$(TOPDIR)/scripts/sercomm-crypto.py \
@@ -16,6 +17,23 @@ define Build/sercomm-crypto
 	rm -f $@.enc $@.key
 endef
 
+define Build/sercomm-factory-cqr
+	$(TOPDIR)/scripts/sercomm-pid.py \
+		--hw-version $(SERCOMM_HWVER) \
+		--hw-id $(SERCOMM_HWID) \
+		--sw-version $(SERCOMM_SWVER) \
+		--pid-file $@.fhdr
+	printf $$(stat -c%s $(IMAGE_KERNEL)) | \
+		dd seek=$$((0x70)) of=$@.fhdr bs=1 conv=notrunc 2>/dev/null
+	printf $$(($$(stat -c%s $@)-$$(stat -c%s $(IMAGE_KERNEL))-$$((0x200)))) | \
+		dd seek=$$((0x80)) of=$@.fhdr bs=1 conv=notrunc 2>/dev/null
+	dd bs=$$((0x200)) skip=1 if=$@ conv=notrunc 2>/dev/null | \
+		$(MKHASH) md5 | awk '{print $$1}' | tr -d '\n' | \
+		dd seek=$$((0x1e0)) of=$@.fhdr bs=1 conv=notrunc 2>/dev/null
+	dd if=$@ >> $@.fhdr 2>/dev/null
+	mv $@.fhdr $@
+endef
+
 define Build/sercomm-kernel
 	$(TOPDIR)/scripts/sercomm-kernel-header.py \
 		--kernel-image $@ \
@@ -26,6 +44,22 @@ define Build/sercomm-kernel
 	mv $@.hdr $@
 endef
 
+define Build/sercomm-kernel-factory
+	$(TOPDIR)/scripts/sercomm-kernel-header.py \
+		--kernel-image $@ \
+		--kernel-offset $(SERCOMM_KERNEL_OFFSET) \
+		--rootfs-offset $(SERCOMM_ROOTFS_OFFSET) \
+		--output-header $@.khdr1
+	$(TOPDIR)/scripts/sercomm-kernel-header.py \
+		--kernel-image $@ \
+		--kernel-offset $(SERCOMM_KERNEL2_OFFSET) \
+		--rootfs-offset $(SERCOMM_ROOTFS2_OFFSET) \
+		--output-header $@.khdr2
+	cat $@.khdr1 $@.khdr2 > $@.khdr
+	dd if=$@ >> $@.khdr 2>/dev/null
+	mv $@.khdr $@
+endef
+
 define Build/sercomm-part-tag
 	$(call Build/sercomm-part-tag-common,$(word 1,$(1)) $@)
 endef
@@ -64,24 +98,37 @@ define Build/sercomm-prepend-tagged-kernel
 	mv $(IMAGE_KERNEL).tagged $@
 endef
 
-define Device/sercomm_dxx
-  $(Device/dsa-migration)
-  BLOCKSIZE := 128k
-  PAGESIZE := 2048
-  KERNEL_SIZE := 6144k
-  UBINIZE_OPTS := -E 5
+define Device/sercomm
+  $(Device/nand)
   LOADER_TYPE := bin
+  KERNEL_SIZE := 6144k
   KERNEL_LOADADDR := 0x81001000
   LZMA_TEXT_START := 0x82800000
+  SERCOMM_KERNEL_OFFSET := 0x400100
+  SERCOMM_ROOTFS_OFFSET := 0x1000000
+  IMAGES += factory.img
+endef
+
+define Device/sercomm_cxx
+  $(Device/sercomm)
+  SERCOMM_KERNEL2_OFFSET := 0xa00100
+  SERCOMM_ROOTFS2_OFFSET := 0x3000000
+  KERNEL := kernel-bin | append-dtb | lzma | loader-kernel | lzma -a0 | \
+	uImage lzma
+  IMAGE/sysupgrade.bin := append-kernel | sercomm-kernel | \
+	sysupgrade-tar kernel=$$$$@ | append-metadata
+  IMAGE/factory.img := append-kernel | sercomm-kernel-factory | \
+	append-ubi | sercomm-factory-cqr
+endef
+
+define Device/sercomm_dxx
+  $(Device/sercomm)
   KERNEL := kernel-bin | append-dtb | lzma | loader-kernel | lzma -a0 | \
 	uImage lzma | sercomm-kernel
   KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma | loader-kernel | \
 	lzma -a0 | uImage lzma
-  IMAGES += factory.img
   IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
   IMAGE/factory.img := append-ubi | check-size | \
 	sercomm-part-tag rootfs | sercomm-prepend-tagged-kernel kernel | \
 	gzip | sercomm-payload | sercomm-crypto
-  SERCOMM_KERNEL_OFFSET := 0x400100
-  SERCOMM_ROOTFS_OFFSET := 0x1000000
 endef
diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
index 340d4ba4a1..b8fa0cefdb 100644
--- a/target/linux/ramips/image/mt7621.mk
+++ b/target/linux/ramips/image/mt7621.mk
@@ -410,6 +410,18 @@ define Device/beeline_smartbox-turbo
 endef
 TARGET_DEVICES += beeline_smartbox-turbo
 
+define Device/beeline_smartbox-turbo-plus
+  $(Device/sercomm_cxx)
+  IMAGE_SIZE := 32768k
+  SERCOMM_HWID := CQR
+  SERCOMM_HWVER := 10000
+  SERCOMM_SWVER := 2010
+  DEVICE_VENDOR := Beeline
+  DEVICE_MODEL := SmartBox TURBO+
+  DEVICE_PACKAGES := kmod-mt7603 kmod-mt7615-firmware kmod-usb3
+endef
+TARGET_DEVICES += beeline_smartbox-turbo-plus
+
 define Device/belkin_rt1800
   $(Device/nand)
   IMAGE_SIZE := 49152k
diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds b/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds
index b243acbbbf..9b15da0d22 100644
--- a/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds
+++ b/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds
@@ -35,6 +35,7 @@ asus,rt-n56u-b1)
 beeline,smartbox-flash|\
 beeline,smartbox-giga|\
 beeline,smartbox-turbo|\
+beeline,smartbox-turbo-plus|\
 etisalat,s3|\
 rostelecom,rt-sf-1)
 	ucidef_set_led_netdev "wan" "wan" "blue:wan" "wan"
diff --git a/target/linux/ramips/mt7621/base-files/etc/init.d/bootcount b/target/linux/ramips/mt7621/base-files/etc/init.d/bootcount
index 597c2da60f..9db700bff5 100755
--- a/target/linux/ramips/mt7621/base-files/etc/init.d/bootcount
+++ b/target/linux/ramips/mt7621/base-files/etc/init.d/bootcount
@@ -9,6 +9,7 @@ boot() {
 			echo -e "bootcount\nbootchanged\n" | /usr/sbin/fw_setenv -s -
 		;;
 	beeline,smartbox-turbo|\
+	beeline,smartbox-turbo-plus|\
 	rostelecom,rt-sf-1)
 		[[ $(hexdump -n 1 -e '/1 "%1d"' -s $((0x20001)) /dev/mtd3) == \
 			$((0xff)) ]] || printf '\xff' | dd of=/dev/mtdblock3 \
diff --git a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
index ce5fdd61ed..cef58ec3ba 100755
--- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
@@ -60,6 +60,7 @@ platform_do_upgrade() {
 	beeline,smartbox-flash|\
 	beeline,smartbox-giga|\
 	beeline,smartbox-turbo|\
+	beeline,smartbox-turbo-plus|\
 	belkin,rt1800|\
 	dlink,dap-x1860-a1|\
 	dlink,dir-1960-a1|\




More information about the lede-commits mailing list