Skip to content

Commit

Permalink
ramips: Add support for Beeline SmartBox TURBO+
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Maximilian Weinmann <[email protected]>
(cherry picked from commit 8fcfb21)
  • Loading branch information
MaxS0niX authored and hauke committed Jun 17, 2023
1 parent 63942b5 commit 8a07469
Show file tree
Hide file tree
Showing 7 changed files with 320 additions and 9 deletions.
1 change: 1 addition & 0 deletions package/boot/uboot-envtools/files/ramips
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
248 changes: 248 additions & 0 deletions target/linux/ramips/dts/mt7621_beeline_smartbox-turbo-plus.dts
Original file line number Diff line number Diff line change
@@ -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@0 {
label = "ubi";
reg = <0x0 0x4f80000>;
};
};
};
};

&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;
};

factory: partition@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@21000 {
reg = <0x21000 0x6>;
};
};

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 0x2000000>;
sercomm,scpart-id = <6>;
};

partition@3000000 {
label = "File System 2";
reg = <0x3000000 0x2000000>;
sercomm,scpart-id = <7>;
read-only;
};

ubiconcat1: partition@5000000 {
label = "Configuration/log";
reg = <0x5000000 0x1400000>;
sercomm,scpart-id = <8>;
};

ubiconcat2: partition@6400000 {
label = "application tmp buffer (Ftool)";
reg = <0x6400000 0x1b80000>;
sercomm,scpart-id = <9>;
};
};
};

&pcie {
status = "okay";
};

&pcie0 {
wifi@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@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@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";
};
};
};

&uartlite3 {
status = "okay";
current-speed = <57600>;
};

&state_default {
gpio {
groups = "i2c", "jtag";
function = "gpio";
};
};
65 changes: 56 additions & 9 deletions target/linux/ramips/image/common-sercomm.mk
Original file line number Diff line number Diff line change
@@ -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 \
Expand All @@ -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 $@ \
Expand All @@ -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
Expand Down Expand Up @@ -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
12 changes: 12 additions & 0 deletions target/linux/ramips/image/mt7621.mk
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions target/linux/ramips/mt7621/base-files/etc/board.d/01_leds
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
1 change: 1 addition & 0 deletions target/linux/ramips/mt7621/base-files/etc/init.d/bootcount
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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|\
Expand Down

0 comments on commit 8a07469

Please sign in to comment.