ramips: add support for Tenbay T-MB5EU-V01
authorDavid Bauer <mail@david-bauer.net>
Thu, 6 May 2021 16:07:18 +0000 (18:07 +0200)
committerDavid Bauer <mail@david-bauer.net>
Sun, 27 Jun 2021 19:40:27 +0000 (21:40 +0200)
Hardware
--------
MediaTek MT7621 SoC
256M DDR3
16MB BoHong SPI-NOR
MediaTek MT7905+7975 2x2T2R DBDC bgnax / acax
RGB LED
WPS + RESET Button
UART on compute module (silkscreened / 115200n8)

The router itself is just a board with Power / USB / RJ-45 connectors
and DC/DC converters. The SoC and WiFi components are on a
daughterboard which connect using two M.2 connectors.

The compute module has the model number "T-CB1800K-DM2 V02" printed on
it. The main baord has "T-MB5EU V01" printed on it. This information
might be useful, as it's highly likely either of these two will be
reused in similar designs.

The router itself is sold as Tenbay T-MB5EU directly from the OEM as
well as "KuWFI AX1800 Smart WiFi 6 Eouter" on Amazon.de for ~50€ in a
slightly different case.

Installation
------------

A Tool for creating a factory image for the Vendor Web Interface can be
found here: https://github.com/blocktrron/t-mb5eu-v01-factory-creator/

As the OEM Firmware is just a modified LEDE 17.01, you can also access
failsafe mode via UART while the OS boots, by connecting to UART
and pressing "f" when prompted. The Router is reachable at
192.168.1.1 via root without password.

Transfer the OpenWrt sysupgrade image via scp and apply with sysupgrade
using the -n and -F flags.

Alternatively, the board can be flashed by attaching to the UART
console, interrupting the boot process by keeping "0" pressed while
attaching power.

Serve the OpenWrt initramfs using a TFTP server with address
192.168.1.66. Rename the initramfs to ax1800.bin.

Attach your TFTP server to one of the LAN ports. Execute the following
commands.

 $ setenv ipaddr 192.168.1.67
 $ setenv serverip 192.168.1.66
 $ tftpboot 0x84000000 ax1800.bin
 $ bootm

Wait for the device to boot. Then transfer the OpenWrt sysupgrade image
to the device using SCP and apply sysupgrade.

Signed-off-by: David Bauer <mail@david-bauer.net>
target/linux/ramips/dts/mt7621_tenbay_t-mb5eu-v01.dts [new file with mode: 0644]
target/linux/ramips/image/mt7621.mk
target/linux/ramips/mt7621/config-5.10
target/linux/ramips/mt7621/config-5.4
target/linux/ramips/patches-5.10/405-mtd-spi-nor-Add-support-for-BoHong-bh25q128as.patch [new file with mode: 0644]
target/linux/ramips/patches-5.4/405-mtd-spi-nor-Add-support-for-BoHong-bh25q128as.patch [new file with mode: 0644]

diff --git a/target/linux/ramips/dts/mt7621_tenbay_t-mb5eu-v01.dts b/target/linux/ramips/dts/mt7621_tenbay_t-mb5eu-v01.dts
new file mode 100644 (file)
index 0000000..ef0d48b
--- /dev/null
@@ -0,0 +1,196 @@
+// 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>
+
+/ {
+       compatible = "tenbay,t-mb5eu-v01", "mediatek,mt7621-soc";
+       model = "Tenbay T-MB5EU-V01";
+
+       aliases {
+               led-boot = &led_green;
+               led-failsafe = &led_red;
+               led-running = &led_blue;
+               led-upgrade = &led_red;
+               label-mac-device = &wan_port;
+       };
+
+       chosen {
+               bootargs = "console=ttyS0,115200";
+               bootargs-override = "console=ttyS0,115200";
+       };
+
+       leds {
+               compatible = "gpio-leds";
+               pinctrl-names = "default";
+               pinctrl-0 = <&led_pins>;
+
+               led_blue: blue {
+                       label = "blue";
+                       gpios = <&aw9523 0 GPIO_ACTIVE_LOW>;
+               };
+
+               led_red: red {
+                       label = "red";
+                       gpios = <&aw9523 1 GPIO_ACTIVE_LOW>;
+               };
+
+               led_green: green {
+                       label = "green";
+                       gpios = <&aw9523 11 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys-polled";
+               poll-interval = <50>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&button_pins>;
+
+               reset {
+                       label = "reset";
+                       gpios = <&aw9523 9 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+
+               wps {
+                       label = "wps";
+                       gpios = <&aw9523 8 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_WPS_BUTTON>;
+               };
+       };
+
+       i2c-gpio {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               compatible = "i2c-gpio";
+               gpios = <&gpio 7 GPIO_ACTIVE_HIGH &gpio 8 GPIO_ACTIVE_HIGH>;
+               i2c-gpio,delay-us = <10>;
+
+               aw9523: gpio-expander@5b {
+                       compatible = "awinic,aw9523-pinctrl";
+                       reg = <0x5b>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&aw9523 0 0 16>;
+
+                       reset-gpios = <&gpio 6 GPIO_ACTIVE_HIGH>;
+
+                       button_pins: button-pins {
+                               pins = "gpio8", "gpio9";
+                               function = "gpio";
+                               bias-pull-up;
+                               drive-open-drain;
+                               input-enable;
+                       };
+
+                       led_pins: led-pins {
+                               pins = "gpio0", "gpio1", "gpio11";
+                               function = "gpio";
+                               input-disable;
+                               output-low;
+                       };
+               };
+       };
+};
+
+&pcie {
+       status = "okay";
+};
+
+&pcie1 {
+       wifi@0,0 {
+               reg = <0x0 0 0 0 0>;
+               mediatek,mtd-eeprom = <&factory 0x0>;
+       };
+};
+
+&gmac0 {
+       mtd-mac-address = <&factory 0x4>;
+};
+
+&switch0 {
+       ports {
+               wan_port: port@0 {
+                       status = "okay";
+                       label = "wan";
+                       mtd-mac-address = <&factory 0x28>;
+               };
+
+               port@1 {
+                       status = "okay";
+                       label = "lan1";
+               };
+
+               port@2 {
+                       status = "okay";
+                       label = "lan2";
+               };
+
+               port@3 {
+                       status = "okay";
+                       label = "lan3";
+               };
+
+               port@4 {
+                       status = "okay";
+                       label = "lan4";
+               };
+       };
+};
+
+&state_default {
+       gpio {
+               groups = "uart3";
+               function = "gpio";
+       };
+};
+
+&spi0 {
+       status = "okay";
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <50000000>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "u-boot";
+                               reg = <0x0 0x30000>;
+                               read-only;
+                       };
+
+                       partition@30000 {
+                               label = "u-boot-env";
+                               reg = <0x30000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@40000 {
+                               label = "product";
+                               reg = <0x40000 0x10000>;
+                               read-only;
+                       };
+
+                       factory: partition@50000 {
+                               label = "factory";
+                               reg = <0x50000 0x40000>;
+                               read-only;
+                       };
+
+                       partition@90000 {
+                               compatible = "denx,fit";
+                               label = "firmware";
+                               reg = <0x90000 0xf70000>;
+                       };
+               };
+       };
+};
index ae9b4757de832d26aec4ec42e5c3ec9cd2225ff4..cf3225dc81ec3d3f38a0febbc1f78276e1212ec8 100644 (file)
@@ -1200,6 +1200,18 @@ define Device/telco-electronics_x1
 endef
 TARGET_DEVICES += telco-electronics_x1
 
+define Device/tenbay_t-mb5eu-v01
+  $(Device/dsa-migration)
+  DEVICE_VENDOR := Tenbay
+  DEVICE_MODEL := T-MB5EU-V01
+  DEVICE_DTS_CONFIG := config@1
+  DEVICE_PACKAGES += kmod-mt7915e kmod-usb3
+  KERNEL := kernel-bin | lzma | fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
+  IMAGE_SIZE := 15808k
+  SUPPORTED_DEVICES += mt7621-dm2-t-mb5eu-v01-nor
+endef
+TARGET_DEVICES += tenbay_t-mb5eu-v01
+
 define Device/thunder_timecloud
   $(Device/dsa-migration)
   $(Device/uimage-lzma-loader)
index 869e93089344e9191bc442754688e8c7b3a7b4ec..92165590f6cfe57ddd808bb611a79b2eb90b8b23 100644 (file)
@@ -102,6 +102,7 @@ CONFIG_HAS_IOPORT_MAP=y
 CONFIG_HIGHMEM=y
 CONFIG_I2C=y
 CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_GPIO=y
 CONFIG_I2C_MT7621=y
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_IRQCHIP=y
index 3af9b94c50b80162b109982d3cd8eb67b5fdb6f7..0ce300c13845843e2a49895f5558c77104522462 100644 (file)
@@ -100,6 +100,7 @@ CONFIG_HIGHMEM=y
 CONFIG_HZ_PERIODIC=y
 CONFIG_I2C=y
 CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_GPIO=y
 CONFIG_I2C_MT7621=y
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_IRQCHIP=y
diff --git a/target/linux/ramips/patches-5.10/405-mtd-spi-nor-Add-support-for-BoHong-bh25q128as.patch b/target/linux/ramips/patches-5.10/405-mtd-spi-nor-Add-support-for-BoHong-bh25q128as.patch
new file mode 100644 (file)
index 0000000..4c76292
--- /dev/null
@@ -0,0 +1,75 @@
+From 52d14545d2fc276b1bf9ccf48d4612fab6edfb6a Mon Sep 17 00:00:00 2001
+From: David Bauer <mail@david-bauer.net>
+Date: Thu, 6 May 2021 17:49:55 +0200
+Subject: [PATCH] mtd: spi-nor: Add support for BoHong bh25q128as
+
+Add MTD support for the BoHong bh25q128as SPI NOR chip.
+The chip has 16MB of total capacity, divided into a total of 256
+sectors, each 64KB sized. The chip also supports 4KB sectors.
+Additionally, it supports dual and quad read modes.
+
+Functionality was verified on an Tenbay WR1800K / MTK MT7621 board.
+
+Signed-off-by: David Bauer <mail@david-bauer.net>
+---
+ drivers/mtd/spi-nor/Makefile |  1 +
+ drivers/mtd/spi-nor/bohong.c | 21 +++++++++++++++++++++
+ drivers/mtd/spi-nor/core.c   |  1 +
+ drivers/mtd/spi-nor/core.h   |  1 +
+ 4 files changed, 24 insertions(+)
+ create mode 100644 drivers/mtd/spi-nor/bohong.c
+
+--- a/drivers/mtd/spi-nor/Makefile
++++ b/drivers/mtd/spi-nor/Makefile
+@@ -2,6 +2,7 @@
+ spi-nor-objs                  := core.o sfdp.o
+ spi-nor-objs                  += atmel.o
++spi-nor-objs                  += bohong.o
+ spi-nor-objs                  += catalyst.o
+ spi-nor-objs                  += eon.o
+ spi-nor-objs                  += esmt.o
+--- /dev/null
++++ b/drivers/mtd/spi-nor/bohong.c
+@@ -0,0 +1,21 @@
++// SPDX-License-Identifier: GPL-2.0
++/*
++ * Copyright (C) 2005, Intec Automation Inc.
++ * Copyright (C) 2014, Freescale Semiconductor, Inc.
++ */
++
++#include <linux/mtd/spi-nor.h>
++
++#include "core.h"
++
++static const struct flash_info bohong_parts[] = {
++      /* BoHong Microelectronics */
++      { "bh25q128as", INFO(0x684018, 0, 64 * 1024, 256,
++                          SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
++};
++
++const struct spi_nor_manufacturer spi_nor_bohong = {
++      .name = "bohong",
++      .parts = bohong_parts,
++      .nparts = ARRAY_SIZE(bohong_parts),
++};
+--- a/drivers/mtd/spi-nor/core.c
++++ b/drivers/mtd/spi-nor/core.c
+@@ -2038,6 +2038,7 @@ int spi_nor_sr2_bit7_quad_enable(struct
+ static const struct spi_nor_manufacturer *manufacturers[] = {
+       &spi_nor_atmel,
++      &spi_nor_bohong,
+       &spi_nor_catalyst,
+       &spi_nor_eon,
+       &spi_nor_esmt,
+--- a/drivers/mtd/spi-nor/core.h
++++ b/drivers/mtd/spi-nor/core.h
+@@ -382,6 +382,7 @@ struct spi_nor_manufacturer {
+ /* Manufacturer drivers. */
+ extern const struct spi_nor_manufacturer spi_nor_atmel;
++extern const struct spi_nor_manufacturer spi_nor_bohong;
+ extern const struct spi_nor_manufacturer spi_nor_catalyst;
+ extern const struct spi_nor_manufacturer spi_nor_eon;
+ extern const struct spi_nor_manufacturer spi_nor_esmt;
diff --git a/target/linux/ramips/patches-5.4/405-mtd-spi-nor-Add-support-for-BoHong-bh25q128as.patch b/target/linux/ramips/patches-5.4/405-mtd-spi-nor-Add-support-for-BoHong-bh25q128as.patch
new file mode 100644 (file)
index 0000000..7288763
--- /dev/null
@@ -0,0 +1,34 @@
+From 52d14545d2fc276b1bf9ccf48d4612fab6edfb6a Mon Sep 17 00:00:00 2001
+From: David Bauer <mail@david-bauer.net>
+Date: Thu, 6 May 2021 17:49:55 +0200
+Subject: [PATCH] mtd: spi-nor: Add support for BoHong bh25q128as
+
+Add MTD support for the BoHong bh25q128as SPI NOR chip.
+The chip has 16MB of total capacity, divided into a total of 256
+sectors, each 64KB sized. The chip also supports 4KB sectors.
+Additionally, it supports dual and quad read modes.
+
+Functionality was verified on an Tenbay WR1800K / MTK MT7621 board.
+
+Signed-off-by: David Bauer <mail@david-bauer.net>
+---
+ drivers/mtd/spi-nor/Makefile |  1 +
+ drivers/mtd/spi-nor/bohong.c | 21 +++++++++++++++++++++
+ drivers/mtd/spi-nor/core.c   |  1 +
+ drivers/mtd/spi-nor/core.h   |  1 +
+ 4 files changed, 24 insertions(+)
+ create mode 100644 drivers/mtd/spi-nor/bohong.c
+
+--- a/drivers/mtd/spi-nor/spi-nor.c
++++ b/drivers/mtd/spi-nor/spi-nor.c
+@@ -2233,6 +2233,10 @@ static const struct flash_info spi_nor_i
+       { "at45db081d", INFO(0x1f2500, 0, 64 * 1024, 16, SECT_4K) },
++      /* BoHong Microelectronics */
++      { "bh25q128as", INFO(0x684018, 0, 64 * 1024, 256,
++                      SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
++
+       /* EON -- en25xxx */
+       { "en25f32",    INFO(0x1c3116, 0, 64 * 1024,   64, SECT_4K) },
+       { "en25p32",    INFO(0x1c2016, 0, 64 * 1024,   64, 0) },