ramips: add support for HooToo HT-TM05
authorRussell Morris <rmorris@rkmorris.us>
Wed, 25 Dec 2019 00:38:36 +0000 (18:38 -0600)
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>
Thu, 3 Sep 2020 12:15:30 +0000 (14:15 +0200)
The HooToo HT-TM05 is a battery powered router, with an Ethernet and USB port.
Vendor U-Boot limited to 1.5 MB kernel size, so use lzma loader (loader-okli).

Specifications:

  SOC:     MediaTek MT7620N
  BATTERY: 10400mAh
  WLAN:    802.11bgn
  LAN:     1x 10/100 Mbps Ethernet
  USB:     1x USB 2.0 (Type-A)
  RAM:     64 MB
  FLASH:   GigaDevice GD25Q64, Serial 8 MB Flash, clocked at 50 MHz
           Flash itself specified to 80 MHz, but speed limited by mt7620 SPI
           fast-read enabled (m25p)
  LED:     Status LED (blue after boot, green with WiFi traffic
           4 leds to indicate power level of the battery (unable to control)
  INPUT:   Power, reset button

MAC assignment based on vendor firmware:

  2.4 GHz    *:b4   (factory 0x04)
  LAN/label  *:b4   (factory 0x28)
  WAN        *:b5   (factory 0x2e)

Tested and working:

 - Ethernet
 - 2.4 GHz WiFi (Correct MAC-address)
 - Installation from TFTP (recovery)
 - OpenWRT sysupgrade (Preserving and non-preserving), through the usual
   ways: command line and LuCI
 - LEDs (except as noted above)
 - Button (reset)
 - I2C, which is needed for reading battery charge status and level
 - U-Boot environment / variables (from U-Boot, and OpenWrt)

Installation:

 - Download the needed OpenWrt install files, place them in the root
   of a clean TFTP server running on your computer. Rename the files as,
   - ramips-mt7620-hootoo_tm05-squashfs-kernel.bin => kernel
   - ramips-mt7620-hootoo_tm05-squashfs-rootfs.bin => rootfs
 - Plug the router into your computer via Ethernet
 - Set your computer to use 10.10.10.254 as its IP address
 - With your router shut down, hold down the power button until the first
   white LED lights up.
 - Push and hold the reset button and release the power button. Continue
   holding the reset button for 30 seconds or until it begins searching
   for files on your TFTP server, whichever comes first.
 - The router (10.10.10.128) will look for your computer at 10.10.10.254
   and install the two files. Once it has finished installation, it will
   automatically reboot and start up OpenWrt.
 - Set your computer to use DHCP for its IP address

Notes:

 - U-Boot environment can be modified, u-boot-env is preserved on initial
   install or sysupgrade
 - mtd-concat functionality is included, to leave a "hole" for u-boot-env,
   combining the OEM kernel and rootfs partitions

I would like to thank @mpratt14 and @xabolcs for their help getting the
lzma loader to work!

Signed-off-by: Russell Morris <rmorris@rkmorris.us>
[drop changes in image/Makefile, fix indent and PKG_RELEASE in
uboot-envtools, fix LOADER_FLASH_OFFS, minor commit message facelift,
add COMPILE to Device/Default]
Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
package/boot/uboot-envtools/Makefile
package/boot/uboot-envtools/files/ramips
target/linux/ramips/dts/mt7620n_hootoo_ht-tm05.dts [new file with mode: 0644]
target/linux/ramips/image/Makefile
target/linux/ramips/image/mt7620.mk
target/linux/ramips/mt7620/base-files/etc/board.d/02_network
target/linux/ramips/mt7620/config-5.4

index b032e07c3797d6b56e085365f8490adaaacd27f5..7a27a295967cfb7d840b9cd72e448c8c02c4ea11 100644 (file)
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=uboot-envtools
 PKG_DISTNAME:=u-boot
 PKG_VERSION:=2020.04
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_DISTNAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:= \
index 80a91f0f45e48825a931538011abff8b7cdcb01a..6be2f6dcaeeff4ca6752322e3de0bf71bd1a8d05 100644 (file)
@@ -33,6 +33,11 @@ xiaomi,miwifi-nano|\
 zbtlink,zbt-wg2626)
        ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x1000" "0x10000"
        ;;
+hootoo,ht-tm05)
+       idx="$(find_mtd_index u-boot-env)"
+       [ -n "$idx" ] && \
+               ubootenv_add_uci_config "/dev/mtd$idx" "0x4000" "0x1000" "0x1000"
+       ;;
 linksys,ea7300-v1|\
 linksys,ea7500-v2|\
 xiaomi,mi-router-ac2100|\
diff --git a/target/linux/ramips/dts/mt7620n_hootoo_ht-tm05.dts b/target/linux/ramips/dts/mt7620n_hootoo_ht-tm05.dts
new file mode 100644 (file)
index 0000000..d91986a
--- /dev/null
@@ -0,0 +1,160 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include "mt7620n.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       compatible = "hootoo,ht-tm05", "ralink,mt7620n-soc";
+       model = "HooToo HT-TM05";
+
+       aliases {
+               led-boot = &led_power;
+               led-failsafe = &led_power;
+               led-running = &led_power;
+               led-upgrade = &led_power;
+               label-mac-device = &ethernet;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               led_power: power {
+                       label = "ht-tm05:blue:power";
+                       gpios = <&gpio3 0 GPIO_ACTIVE_LOW>;
+                       default-state = "on";
+               };
+
+               wifi {
+                       label = "ht-tm05:green:wifi";
+                       gpios = <&gpio2 0 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "phy0tpt";
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               reset {
+                       label = "reset";
+                       gpios = <&gpio2 1 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+       };
+
+       virtual_flash {
+               compatible = "mtd-concat";
+
+               devices = <&firmware1 &firmware2 &firmware3>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               compatible = "openwrt,okli";
+                               label = "firmware";
+                               reg = <0x0 0x0>;
+                       };
+               };
+       };
+};
+
+&gpio2 {
+       status = "okay";
+};
+
+&gpio3 {
+       status = "okay";
+};
+
+&i2c {
+       status = "okay";
+};
+
+&spi0 {
+       status = "okay";
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <50000000>;
+               m25p,fast-read;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "u-boot";
+                               reg = <0x0 0x30000>;
+                               read-only;
+                       };
+
+                       partition@30000 {
+                               label = "config";
+                               reg = <0x30000 0x10000>;
+                               read-only;
+                       };
+
+                       factory: partition@40000 {
+                               label = "factory";
+                               reg = <0x40000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@50000 {
+                               label = "loader";
+                               reg = <0x50000 0x10000>;
+                               read-only;
+                       };
+
+                       firmware2: partition@60000 {
+                               label = "firmware2";
+                               reg = <0x60000 0x170000>;
+                       };
+
+                       partition@1d0000 {
+                               label = "u-boot-env";
+                               reg = <0x1d0000 0x10000>;
+                       };
+
+                       firmware3: partition@1e0000 {
+                               label = "firmware3";
+                               reg = <0x1e0000 0x20000>;
+                       };
+
+                       firmware1: partition@200000 {
+                               label = "firmware1";
+                               reg = <0x200000 0x600000>;
+                       };
+               };
+       };
+};
+
+&ehci {
+       status = "okay";
+};
+
+&ohci {
+       status = "okay";
+};
+
+&ethernet {
+       mtd-mac-address = <&factory 0x28>;
+};
+
+&wmac {
+       ralink,mtd-eeprom = <&factory 0x0>;
+};
+
+&state_default {
+       gpio {
+               groups = "wled", "ephy";
+               function = "gpio";
+       };
+};
index 10e9edd3bbfd13036ee80c55b2c2873cd5fff3a4..bcd46d88a811bd9704dbc7788394dcb45df12361 100644 (file)
@@ -187,6 +187,7 @@ define Device/Default
   DEVICE_DTS_DIR := ../dts
   DEVICE_DTS = $$(SOC)_$(1)
   IMAGES := sysupgrade.bin
+  COMPILE :=
   SUPPORTED_DEVICES := $(subst _,$(comma),$(1))
   sysupgrade_bin := append-kernel | append-rootfs | pad-rootfs
   IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | append-metadata | check-size
index 0cfaa95cf0b14e8ae1e20a993d636bd60af3337b..149b666aade0ae680aed23fd82240d83b447275d 100644 (file)
@@ -488,6 +488,25 @@ define Device/hnet_c108
 endef
 TARGET_DEVICES += hnet_c108
 
+define Device/hootoo_ht-tm05
+  SOC := mt7620n
+  IMAGE_SIZE := 6144k
+  DEVICE_VENDOR := HooToo
+  DEVICE_MODEL := HT-TM05
+  DEVICE_PACKAGES := kmod-usb2 kmod-usb-ohci kmod-i2c-ralink
+  LOADER_TYPE := bin
+  LOADER_FLASH_OFFS := 0x200000
+  COMPILE := loader-$(1).bin
+  COMPILE/loader-$(1).bin := loader-okli-compile | pad-to 64k | lzma | \
+       uImage lzma
+  KERNEL := $(KERNEL_DTB) | uImage lzma -M 0x4f4b4c49
+  KERNEL_INITRAMFS := $(KERNEL_DTB) | uImage lzma
+  IMAGES += kernel.bin rootfs.bin
+  IMAGE/kernel.bin := append-loader-okli $(1) | check-size 64k
+  IMAGE/rootfs.bin := $$(sysupgrade_bin) | check-size
+endef
+TARGET_DEVICES += hootoo_ht-tm05
+
 define Device/iodata_wn-ac1167gr
   SOC := mt7620a
   DEVICE_VENDOR := I-O DATA
index bcf122c4270be3a3be9bc47e06a22f842655f4d6..3c77e6ad30349b5686689e1b5d290d8fa2988fd4 100755 (executable)
@@ -46,6 +46,7 @@ ramips_setup_interfaces()
        edimax,ew-7476rpc|\
        edimax,ew-7478ac|\
        elecom,wrh-300cr|\
+       hootoo,ht-tm05|\
        kimax,u25awf-h1|\
        kimax,u35wf|\
        kingston,mlw221|\
index d1170ce036228cf78321edfb0c4a9af69baab160..6a4dde7ecf3abc18f20bb65161d03f6ae884b53c 100644 (file)
@@ -173,6 +173,7 @@ CONFIG_MTD_SPLIT_JIMAGE_FW=y
 CONFIG_MTD_SPLIT_SEAMA_FW=y
 CONFIG_MTD_SPLIT_TPLINK_FW=y
 CONFIG_MTD_SPLIT_UIMAGE_FW=y
+CONFIG_MTD_VIRT_CONCAT=y
 CONFIG_NEED_DMA_MAP_STATE=y
 CONFIG_NEED_PER_CPU_KM=y
 CONFIG_NET_RALINK_GSW_MT7620=y