[PATCH] ramips: add support for Notion R281 (mtd5)

Ian Pangilinan ian.pangilinan at upd.edu.ph
Sun Jul 24 02:38:51 PDT 2022


 From: Ian Pangilinan <braveheart_leo at yahoo.com>
Date: Sun, 24 July 2022 12:37:00 +0800
Subject: [PATCH] ramips: add support for Notion R281 (mtd5)

Notion R281 is a Cat.6 LTE CPE.

Product link: https://www.notioni.com/productinfo/759146.html

Hardware highlights:
  - CPU: MT7621A 2C4T @ 880MHz
  - RAM: DDR3 128MB @ 1066MHz
  - FLASH: S34ML01G2 128MB SPI NAND
  - WLAN0: MT7603E 2.4GHz 802.11bgn 2x2:2 @ 300Mbps
  - WLAN1: MT7613BE 5GHz 802.11nac 2x2:2 @ 867Mbps
  - SWITCH: MT7530 4-port GbE
  - WWAN: Marvell PXA1826 (Nezha3) Profile M26H Board Cat.6 LTE
  - SIM: 1x Mini-SIM 2FF
  - USB: 1x USB 2.0 Micro Type-B
  - BUTTONS: WPS, Reset
  - LEDS: Power, Data, Wi-Fi, LAN, Signal1-3
  - POWER: 12VDc 2A


The device comes in two variants depending on where the bootloader
loads the kernel. One variant where the bootloader loads at 0xbc140000
(mtd4), and another at 0xbe800000 (mtd5). This patch is for the latter.
I haven't found a way to change this behavior, so I'm making a
distinction between the two.

This is the MTD partitions from the stock firmware:

0x000000000000-0x000007f80000 : "ALL"
0x000000000000-0x000000080000 : "Bootloader"
0x000000080000-0x000000100000 : "Config"
0x000000100000-0x000000140000 : "Factory"
0x000000140000-0x000002800000 : "firmware1"
0x000002800000-0x000004ec0000 : "firmware2"
0x000002996dfc-0x000004ec0000 : "rootfs"
0x000003180000-0x000004ec0000 : "rootfs_data"
0x000004ec0000-0x000007f00000 : "ota"
0x000007f00000-0x000007f80000 : "Configbak"

This is how it looks when flashed to OpenWrt with this patch:

0x000000000000-0x000000080000 : "u-boot"
0x000000080000-0x0000000a0000 : "u-boot-env"
0x000000100000-0x000000140000 : "factory"
0x000000140000-0x000002800000 : "ubiconcat0"
0x000002800000-0x000002c00000 : "kernel"
0x000002c00000-0x000007f00000 : "ubiconcat1"
0x000007f00000-0x000007f80000 : "configbak"
0x000000000000-0x0000079c0000 : "ubi"

I have the mtd5 variant on hand, and will send another patch for the
other variant once I confirmed some flash offsets, or update this
patch when a way could be found to set this load address.


Installation instructions:

Stock firmware runs an old OpenWrt Chaos Calmer release. Unfortunately,
because of the changes in the flash layout, this cannot be sysupgrade-d
readily from stock. Installation will be via tftpboot in the bootloader.
Connect the USB-TTL serial converter as follows, indicated on the board
by the APTX marking near three round PCB pads:

(RX) (GND) (TX) APTX

Baud rate is 57600.

1. Connect the computer to the device via ethernet cable.
Set a static adddress of 10.10.10.3/24 to the wired interface.
2. Start the TFTP server, point it to where the initramfs image is
located. Rename the image to 'test.bin'.
3. Turn on the device. There will be a three-second delay before the
default 'Boot system code via flash' is selected.
4. Interrupt the boot process by pressing 1 to 'System Load Linux to
SDRAM via TFTP'.
5. Press enter to accept the default 'Input device IP (10.10.10.123)'.
6. Press enter to accept the default 'Input server IP (10.10.10.3)'.
7. Press enter to accept the default 'Input Linux Kernel filename ()',
or enter 'test.bin'.
8. Wait for the initramfs to load.
9. Reconnect the wired interface to any LAN ports of the device
via dhcp.
9. Flash the sysupgrade image at
http://192.168.1.1/cgi-bin/luci/admin/system/flash


The only configurable LEDs are the red and white data, and white wifi
LEDs. I use the red data LED as status indicator for OpenWrt.
The white LAN led is controlled by the switch and functions as expected,
as well as the three green Signal LED indicators controlled by the WWAN.
There is also an exported GPIO to reset the WWAN. These are also the 
same
LEDs and GPIO found on the stock firmware.

Support for WWAN could come at a later date. I have setup LAN1 of the
device as WAN, and implemented a patch in part that achieves '2Gbps CPU
bandwidth', found here: https://github.com/openwrt/openwrt/pull/10238

Signed-off-by: Ian Pangilinan <braveheart_leo at yahoo.com>
---
  package/boot/uboot-envtools/files/ramips                       |   1 +
  target/linux/ramips/dts/mt7621_notion_r281-mtd5.dts (new)      | 240 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  target/linux/ramips/image/mt7621.mk                            |  15 
++++++++
  target/linux/ramips/mt7621/base-files/etc/board.d/02_network   |   3 ++
  target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh  |   1 +
  5 files changed, 260 insertions(+), 0 deletion(-)
  create mode 100644 target/linux/ramips/dts/mt7621_notion_r281-mtd5.dts
diff --git a/package/boot/uboot-envtools/files/ramips 
b/package/boot/uboot-envtools/files/ramips
index eebc08d65d..d9017052ed 100644
--- a/package/boot/uboot-envtools/files/ramips
+++ b/package/boot/uboot-envtools/files/ramips
@@ -61,6 +63,7 @@ linksys,ea7500-v2|\
  linksys,ea8100-v1|\
  linksys,ea8100-v2|\
  mts,wg430223|\
+notion,r281-mtd5|\
  xiaomi,mi-router-3g|\
  xiaomi,mi-router-3-pro|\
  xiaomi,mi-router-4|\
diff --git a/target/linux/ramips/dts/mt7621_notion_r281-mtd5.dts 
b/target/linux/ramips/dts/mt7621_notion_r281-mtd5.dts
new file mode 100644
index 0000000000..4866209fa5
--- /dev/null
+++ b/target/linux/ramips/dts/mt7621_notion_r281-mtd5.dts
@@ -0,0 +1,240 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+// Copyright (C) 2022, Ian Pangilinan <braveheart_leo at yahoo.com>
+
+#include "mt7621.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+	compatible = "notion,r281-mtd5", "mediatek,mt7621-soc";
+	model = "Notion R281 (mtd5)";
+
+	aliases {
+		led-boot = &led_red;
+		led-failsafe = &led_red;
+		/* led-running: skip this LED event as we use
+		 * the red LED indicator for no data,
+		 * which will leave it in the default-on state
+		 */
+		led-upgrade = &led_red;
+		label-mac-device = &label_mac;
+	};
+
+	ubi-concat {
+		compatible = "mtd-concat";
+		devices = <&ubiconcat0 &ubiconcat1>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition at 0 {
+				reg = <0x0 0x79c0000>;
+				label = "ubi";
+			};
+		};
+	};
+
+	gpio-export {
+		compatible = "gpio-export";
+		#size-cells = <0>;
+
+		reset_cp {
+			gpio-export,name = "reset_cp";
+			gpio-export,output = <0>;
+			gpios = <&gpio 5 GPIO_ACTIVE_HIGH>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_red: led-0 {
+			label = "red:data";
+			gpios = <&gpio 16 GPIO_ACTIVE_HIGH>;
+		};
+
+		led-1 {
+			label = "white:data";
+			gpios = <&gpio 15 GPIO_ACTIVE_HIGH>;
+		};
+
+		led-2 {
+			label = "white:wifi";
+			gpios = <&gpio 0 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "phy0tpt";
+		};
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		/* use wps as wifi button */
+		key-wifi {
+			label = "wifi";
+			gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RFKILL>;
+		};
+
+		key-reset {
+			label = "reset";
+			gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+	};
+};
+
+&state_default {
+	gpio {
+		groups = "jtag", "rgmii2", "uart3";
+		function = "gpio";
+	};
+};
+
+&pcie {
+	status = "okay";
+};
+
+&pcie0 {
+	label_mac: wifi at 0,0 {
+		compatible = "pci14c3,7603";
+		reg = <0x0 0 0 0 0>;
+
+		mediatek,mtd-eeprom = <&factory 0x0>;
+		ieee80211-freq-limit = <2400000 2500000>;
+
+		nvmem-cells = <&macaddr_factory_4>;
+		nvmem-cell-names = "mac-address";
+	};
+};
+
+&pcie1 {
+	wifi at 0,0 {
+		compatible = "pci14c3,7663";
+		reg = <0x0 0 0 0 0>;
+
+		mediatek,mtd-eeprom = <&factory 0x8000>;
+		ieee80211-freq-limit = <5000000 6000000>;
+
+		nvmem-cells = <&macaddr_factory_8004>;
+		nvmem-cell-names = "mac-address";
+	};
+};
+
+&nand {
+	status = "okay";
+
+	partitions {
+		compatible = "fixed-partitions";
+		#address-cells = <1>;
+		#size-cells = <1>;
+
+		partition at 0 {
+			label = "u-boot";
+			reg = <0x0 0x80000>;
+			read-only;
+		};
+
+		/* allow setting u-boot-env vars */
+		partition at 80000 {
+			label = "u-boot-env";
+			reg = <0x80000 0x20000>;
+		};
+
+		factory: partition at 100000 {
+			label = "factory";
+			reg = <0x100000 0x40000>;
+			read-only;
+		};
+
+		/* convert firmware1 from stock to ubi */
+		ubiconcat0: partition at 140000 {
+			label = "ubiconcat0";
+			reg = <0x140000 0x26c0000>;
+		};
+
+		/* set kernel mtdsize to 4MB */
+		partition at 2800000 {
+			label = "kernel";
+			reg = <0x2800000 0x400000>;
+		};
+
+		/* convert firmware2, ota from stock to ubi */
+		ubiconcat1: partition at 2c00000 {
+			label = "ubiconcat1";
+			reg = <0x2c00000 0x5300000>;
+		};
+
+		partition at 7f00000 {
+			label = "configbak";
+			reg = <0x7f00000 0x80000>;
+			read-only;
+		};
+
+		/* BBT probably contained in the last 0x80000 or 512K bytes */
+	};
+};
+
+&switch0 {
+	ports {
+		port at 1 {
+			status = "okay";
+			label = "lan2";
+		};
+
+		port at 2 {
+			status = "okay";
+			label = "lan3";
+		};
+
+		port at 3 {
+			status = "okay";
+			label = "lan4";
+		};
+	};
+};
+
+&ethernet {
+	pinctrl-0 = <&mdio_pins>, <&rgmii1_pins>;
+};
+
+&gmac0 {
+	nvmem-cells = <&macaddr_factory_4>;
+	nvmem-cell-names = "mac-address";
+	mac-address-increment = <1>;
+};
+
+&gmac1 {
+	status = "okay";
+	label = "wan";
+	phy-handle = <&ethphy0>;
+
+	nvmem-cells = <&macaddr_factory_4>;
+	nvmem-cell-names = "mac-address";
+	mac-address-increment = <2>;
+};
+
+&mdio {
+	ethphy0: ethernet-phy at 0 {
+		reg = <0>;
+	};
+};
+
+&factory {
+	compatible = "nvmem-cells";
+	#address-cells = <1>;
+	#size-cells = <1>;
+
+	/* WLAN24 MAC address */
+	macaddr_factory_4: macaddr at 4 {
+		reg = <0x4 0x6>;
+	};
+
+	/* WLAN5 MAC address */
+	macaddr_factory_8004: macaddr at 8004 {
+		reg = <0x8004 0x6>;
+	};
+};
diff --git a/target/linux/ramips/image/mt7621.mk 
b/target/linux/ramips/image/mt7621.mk
index aa7adeee60..5570c93223 100644
--- a/target/linux/ramips/image/mt7621.mk
+++ b/target/linux/ramips/image/mt7621.mk
@@ -1451,6 +1451,21 @@ define Device/netis_wf2881
  endef
  TARGET_DEVICES += netis_wf2881

+define Device/notion_r281-mtd5
+  $(Device/dsa-migration)
+  BLOCKSIZE := 128k
+  PAGESIZE := 2048
+  KERNEL_SIZE := 4096k
+  IMAGE_SIZE := 129792k
+  UBINIZE_OPTS := -E 5
+  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
+  DEVICE_VENDOR := Notion
+  DEVICE_MODEL := R281 (mtd5)
+  DEVICE_PACKAGES := kmod-usb3 kmod-mt7603 kmod-mt7615e 
kmod-mt7663-firmware-ap \
+    kmod-usb-net-rndis kmod-usb-acm comgt-ncm uboot-envtools
+endef
+TARGET_DEVICES += notion_r281-mtd5
+
  define Device/oraybox_x3a
    $(Device/dsa-migration)
    $(Device/uimage-lzma-loader)
diff --git 
a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network 
b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
index 29336bad68..a44fb414f4 100644
--- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
@@ -77,6 +78,9 @@ ramips_setup_interfaces()
  	mikrotik,routerboard-760igs)
  		ucidef_set_interfaces_lan_wan "lan2 lan3 lan4 lan5" "wan sfp"
  		;;
+	notion,r281-mtd5)
+		ucidef_set_interfaces_lan_wan "lan2 lan3 lan4" "wan"
+		;;
  	tplink,eap235-wall-v1|\
  	tplink,eap615-wall-v1)
  		ucidef_set_interface_lan "lan0 lan1 lan2 lan3"
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 b4dc34fbec..d9dd2c9423 100755
--- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
@@ -84,6 +84,7 @@ platform_do_upgrade() {
  	netgear,wac104|\
  	netgear,wac124|\
  	netis,wf2881|\
+	notion,r281-mtd5|\
  	raisecom,msg1500-x-00|\
  	sercomm,na502|\
  	sercomm,na502s|\




More information about the openwrt-devel mailing list