Skip to content

Commit

Permalink
ramips: add support for Beeline SmartBox Flash
Browse files Browse the repository at this point in the history
Beeline SmartBox Flash is a wireless AC1300 (WiFi 5) router manufactured
by Arcadyan company.

Device specification
--------------------
SoC Type: MediaTek MT7621AT
RAM: 256 MiB, Winbond W632GU6NB
Flash: 128 MiB (NAND), Winbond W29N01HVSINF
Wireless 2.4 GHz (MT7615DN): b/g/n, 2x2
Wireless 5 GHz (MT7615DN): a/n/ac, 2x2
Ethernet: 3xGbE (WAN, LAN1, LAN2)
USB ports: 1xUSB3.0
Button: 1 (Reset/WPS)
LEDs: 1 RGB LED
Power: 12 VDC, 1.5 A
Connector type: Barrel
Bootloader: U-Boot (Ralink UBoot Version: 5.0.0.2)
OEM: Arcadyan WE42022

Installation
------------
1. Place *factory.trx on any web server (192.168.1.2 in this example)
2. Connect to the router using telnet shell (no password required)
3. Save MAC adresses to U-Boot environment:
   uboot_env --set --name eth2macaddr --value $(ifconfig | grep eth2 | \
    awk '{print $5}')
   uboot_env --set --name eth3macaddr --value $(ifconfig | grep eth3 | \
    awk '{print $5}')
   uboot_env --set --name ra0macaddr --value $(ifconfig | grep ra0 | \
    awk '{print $5}')
   uboot_env --set --name rax0macaddr --value $(ifconfig | grep rax0 | \
    awk '{print $5}')
4. Ensure that MACs were saved correctly:
   uboot_env --get --name eth2macaddr
   uboot_env --get --name eth3macaddr
   uboot_env --get --name ra0macaddr
   uboot_env --get --name rax0macaddr
5. Download and write the OpenWrt images:
   cd /tmp
   wget http://192.168.1.2/factory.trx
   mtd_write erase /dev/mtd4
   mtd_write write factory.trx /dev/mtd4
6. Set 1st boot partition and reboot:
   uboot_env --set --name bootpartition --value 0
   reboot

Back to Stock
-------------
1. Run in the OpenWrt shell:
   fw_setenv bootpartition 1
   reboot
2. Optional step. Upgrade the stock firmware with any version to
   overwrite the OpenWrt in Slot 1.

MAC addresses
-------------
+-----------+-------------------+----------------+
| Interface | MAC               | Source         |
+-----------+-------------------+----------------+
| label     | 30:xx:xx:51:xx:09 | No MACs was    |
| LAN       | 30:xx:xx:51:xx:09 | found on Flash |
| WAN       | 30:xx:xx:51:xx:06 | [1]            |
| WLAN_2g   | 30:xx:xx:51:xx:07 |                |
| WLAN_5g   | 32:xx:xx:41:xx:07 |                |
+-----------+-------------------+----------------+
[1]:
a. Label wasb't found neither in factory nor in other places.
b. MAC addresses are stored in encrypted partition "glbcfg". Encryption
   key hasn't known yet. To ensure the correct MACs in OpenWrt, a hack
   with saving of the MACs to u-boot-env during the installation was
   applied.
c. Default Ralink ethernet MAC address (00:0C:43:28:80:36) was found in
   "Factory" 0xfff0. It's the same for all Smartbox Flash devices. OEM
   firmware also uses this MAC when initialazes ethernet driver. In
   OpenWrt we use it only as internal GMAC (eth0), all other MACs are
   unique. Therefore, there is no any barriers to the operation of several
   Smartbox Flash devices even within the same broadcast domain.

Stock firmware image format
---------------------------
+--------------+---------------+----------------------------------------+
| Offset       | 1.0.15        | Description                            |
+==============+===============+========================================+
| 0x0          | 5d 43 6f 74   | TRX magic "]Cot"                       |
+--------------+---------------+----------------------------------------+
| 0x4          | 00 70 ff 00   | Length (reverse)                       |
+--------------+---------------+----------------------------------------+
|              |               | htonl(~crc) from 0xc ("flag_version")  |
| 0x8          | 72 b3 93 16   | to "Length"                            |
+--------------+---------------+----------------------------------------+
| 0xc          | 00 00 01 00   | Flags                                  |
+--------------+---------------+----------------------------------------+
|              |               | Offset (reverse) of Kernel partition   |
| 0x10         | 1c 00 00 00   | from the start of the header           |
+--------------+---------------+----------------------------------------+
|              |               | Offset (reverse) of RootFS partition   |
| 0x14         | 00 00 42 00   | from the start of the header           |
+--------------+---------------+----------------------------------------+
| 0x18         | 00 00 00 00   | Zeroes                                 |
+--------------+---------------+----------------------------------------+
| 0x1c         | 27 05 19 56 … | Kernel data + zero padding             |
+--------------+---------------+----------------------------------------+
|              |               | RootFS data (starting with "hsqs") +   |
| 0x420000     | 68 73 71 73 … | zero padding to "Length"               |
+--------------+---------------+----------------------------------------+
|              |               | Some signature data (format is         |
|              |               | unknown). Necessary for the fw         |
| "Lenght"     | 00 00 00 00 … | update via oem fw web interface.       |
+--------------+---------------+----------------------------------------+
| "Lenght" +   |               | TRX magic "HDR0". U-Boot is            |
| 0x10c        | 48 44 52 30   | checking it at every boot.             |
+--------------+---------------+----------------------------------------+
|              |               | 1.00:                                  |
|              |               |   Zero padding to ("Lenght" + 0x23000) |
|              |               | 1.0.12:                                |
|              |               |   Zero padding to ("Lenght" + 0x2a000) |
| "Lenght" +   |               | 1.0.13, 1.0.15, 1.0.16:                |
| 0x110        | 00 00 00 00   |   Zero padding to ("Lenght" + 0x10000) |
+--------------+---------------+----------------------------------------+

Signed-off-by: Mikhail Zhilkin <csharper2005@gmail.com>
  • Loading branch information
csharper2005 authored and hauke committed Mar 19, 2022
1 parent 09c41ea commit f8b0213
Show file tree
Hide file tree
Showing 7 changed files with 253 additions and 0 deletions.
1 change: 1 addition & 0 deletions package/boot/uboot-envtools/files/ramips
Expand Up @@ -52,6 +52,7 @@ ravpower,rp-wd03)
jcg,q20)
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000"
;;
beeline,smartbox-flash|\
linksys,ea6350-v4|\
linksys,ea7300-v1|\
linksys,ea7300-v2|\
Expand Down
202 changes: 202 additions & 0 deletions target/linux/ramips/dts/mt7621_beeline_smartbox-flash.dts
@@ -0,0 +1,202 @@
// 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-flash", "mediatek,mt7621-soc";
model = "Beeline SmartBox Flash";

aliases {
led-boot = &led_status_red;
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 14 GPIO_ACTIVE_LOW>;
};

led_status_green: led-1 {
label = "green:status";
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_STATUS;
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
};

led_status_red: led-2 {
label = "red:status";
color = <LED_COLOR_ID_RED>;
function = LED_FUNCTION_STATUS;
gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
};
};

keys {
compatible = "gpio-keys";

reset {
label = "reset";
gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
};
};

ubi-concat {
compatible = "mtd-concat";
devices = <&ubiconcat0 &ubiconcat1>;

partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

partition@0 {
label = "ubi";
reg = <0x0 0x5240000>;
};
};
};
};

&nand {
status = "okay";

partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

partition@0 {
label = "u-boot";
reg = <0x0 0x100000>;
read-only;
};

partition@100000 {
label = "u-boot-env";
reg = <0x100000 0x100000>;
};

factory: partition@200000 {
label = "Factory";
reg = <0x200000 0x100000>;
read-only;

compatible = "nvmem-cells";
#address-cells = <1>;
#size-cells = <1>;

macaddr_factory_fff0: macaddr@fff0 {
reg = <0xfff0 0x6>;
};
};

partition@300000 {
label = "firmware";
reg = <0x300000 0x2000000>;

compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

partition@0 {
label = "kernel";
reg = <0x0 0x440000>;
};

ubiconcat0: partition@400000 {
label = "ubiconcat0";
reg = <0x440000 0x1bc0000>;
};
};

partition@2300000 {
label = "Firmware2";
reg = <0x2300000 0x2000000>;
read-only;
};

partition@4300000 {
label = "glbcfg";
reg = <0x4300000 0x200000>;
read-only;
};

partition@4500000 {
label = "board_data";
reg = <0x4500000 0x100000>;
read-only;
};

partition@4600000 {
label = "glbcfg2";
reg = <0x4600000 0x200000>;
read-only;
};

partition@4800000 {
label = "board_data2";
reg = <0x4800000 0x100000>;
read-only;
};

ubiconcat1: partition@4900000 {
label = "ubiconcat1";
reg = <0x4900000 0x3680000>;
};
};
};

&pcie {
status = "okay";
};

&pcie0 {
wifi@0,0 {
compatible = "mediatek,mt76";
reg = <0x0000 0 0 0 0>;
mediatek,mtd-eeprom = <&factory 0x0>;
};
};

&gmac0 {
nvmem-cells = <&macaddr_factory_fff0>;
nvmem-cell-names = "mac-address";
};

&switch0 {
ports {
port@2 {
status = "okay";
label = "lan2";
};

port@3 {
status = "okay";
label = "lan1";
};

port@4 {
status = "okay";
label = "wan";
};
};
};

&state_default {
gpio {
groups = "i2c", "jtag";
function = "gpio";
};
};
34 changes: 34 additions & 0 deletions target/linux/ramips/image/mt7621.mk
Expand Up @@ -9,6 +9,18 @@ DEFAULT_SOC := mt7621
KERNEL_DTB += -d21
DEVICE_VARS += ELECOM_HWNAME LINKSYS_HWNAME

define Build/beeline-trx
echo -ne "hsqs" > $@.hsqs
$(STAGING_DIR_HOST)/bin/otrx create $@.trx -M 0x746f435d -f $@ \
-a 0x20000 -b 0x420000 -f $@.hsqs -a 1000
mv $@.trx $@
dd if=/dev/zero bs=1024 count=1 >> $@.tail
echo -ne "HDR0" | dd of=$@.tail bs=1 seek=$$((0x10c)) count=4 \
conv=notrunc 2>/dev/null
dd if=$@.tail >> $@ 2>/dev/null
rm $@.hsqs $@.tail
endef

define Build/gemtek-trailer
printf "%s%08X" ".GEMTEK." "$$(cksum $@ | cut -d ' ' -f1)" >> $@
endef
Expand Down Expand Up @@ -215,6 +227,28 @@ define Device/asus_rt-n56u-b1
endef
TARGET_DEVICES += asus_rt-n56u-b1

define Device/beeline_smartbox-flash
$(Device/dsa-migration)
$(Device/uimage-lzma-loader)
DEVICE_VENDOR := Beeline
DEVICE_MODEL := SmartBox Flash
IMAGE_SIZE := 32768k
KERNEL_SIZE := 4352k
UBINIZE_OPTS := -E 5
BLOCKSIZE := 128k
PAGESIZE := 2048
KERNEL := kernel-bin | append-dtb | lzma | loader-kernel | \
uImage none | beeline-trx | pad-to $$(KERNEL_SIZE)
KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma | loader-kernel | \
uImage none
IMAGES += factory.trx
IMAGE/factory.trx := append-kernel | append-ubi | check-size
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
DEVICE_PACKAGES := kmod-usb3 kmod-mt7615e kmod-mt7615-firmware \
uboot-envtools
endef
TARGET_DEVICES += beeline_smartbox-flash

define Device/buffalo_wsr-1166dhp
$(Device/dsa-migration)
$(Device/uimage-lzma-loader)
Expand Down
3 changes: 3 additions & 0 deletions target/linux/ramips/mt7621/base-files/etc/board.d/01_leds
Expand Up @@ -11,6 +11,9 @@ asus,rt-n56u-b1)
ucidef_set_led_netdev "lan" "LAN link" "blue:lan" "br-lan"
ucidef_set_led_netdev "wan" "WAN link" "blue:wan" "wan"
;;
beeline,smartbox-flash)
ucidef_set_led_netdev "wan" "wan" "blue:wan" "wan"
;;
cudy,wr2100)
ucidef_set_led_netdev "lan1" "lan1" "green:lan1" "lan1"
ucidef_set_led_netdev "lan2" "lan2" "green:lan2" "lan2"
Expand Down
6 changes: 6 additions & 0 deletions target/linux/ramips/mt7621/base-files/etc/board.d/02_network
Expand Up @@ -38,6 +38,7 @@ ramips_setup_interfaces()
ucidef_set_interfaces_lan_wan "lan" "wan"
;;
asiarf,ap7621-nv1|\
beeline,smartbox-flash|\
glinet,gl-mt1300|\
iptime,a3002mesh|\
jcg,q20|\
Expand Down Expand Up @@ -115,6 +116,11 @@ ramips_setup_macs()
wan_mac=$(mtd_get_mac_ascii u-boot-env et1macaddr)
label_mac=$(mtd_get_mac_binary factory 0x4)
;;
beeline,smartbox-flash)
lan_mac=$(mtd_get_mac_ascii u-boot-env eth2macaddr)
wan_mac=$(mtd_get_mac_ascii u-boot-env eth3macaddr)
label_mac=$lan_mac
;;
buffalo,wsr-1166dhp)
local index="$(find_mtd_index "board_data")"
wan_mac="$(grep -m1 mac= "/dev/mtd${index}" | cut -d= -f2)"
Expand Down
Expand Up @@ -10,6 +10,12 @@ PHYNBR=${DEVPATH##*/phy}
board=$(board_name)

case "$board" in
beeline,smartbox-flash)
hw_mac_addr_ra0="$(mtd_get_mac_ascii u-boot-env ra0macaddr)"
hw_mac_addr_rax0="$(mtd_get_mac_ascii u-boot-env rax0macaddr)"
[ "$PHYNBR" = "0" ] && echo -n $hw_mac_addr_ra0 > /sys${DEVPATH}/macaddress
[ "$PHYNBR" = "1" ] && echo -n $hw_mac_addr_rax0 > /sys${DEVPATH}/macaddress
;;
dlink,dir-853-a3)
[ "$PHYNBR" = "0" ] && \
macaddr_setbit_la "$(mtd_get_mac_binary factory 0xe000)" \
Expand Down
Expand Up @@ -53,6 +53,7 @@ platform_do_upgrade() {
ampedwireless,ally-r1900k|\
asus,rt-ac65p|\
asus,rt-ac85p|\
beeline,smartbox-flash|\
dlink,dir-1960-a1|\
dlink,dir-2640-a1|\
dlink,dir-2660-a1|\
Expand Down

0 comments on commit f8b0213

Please sign in to comment.