From 0d6a7f58a53bcc5c719a25f7dd5a4b85f9f26804 Mon Sep 17 00:00:00 2001 From: Mikhail Zhilkin Date: Sat, 31 Aug 2024 14:21:06 +0000 Subject: [PATCH] ramips: add support for netis N6 This commit adds support for netis N6 WiFi 6 router. Specification ------------- - SoC : MediaTek MT7621AT, MIPS, 880 MHz - RAM : 256 MiB - Flash : NAND 128 MiB (ESMT PSU1GA30DT) - WLAN : MT7905DAN + MT7975DN - 2.4 GHz : b/g/n/ax, 574 Mbps, MIMO 2x2 - 5 GHz : a/n/ac/ax, 1201 Mbps, MIMO 2x2 - Ethernet : 10/100/1000 Mbps x5 (1x WAN, 4x LAN) - USB : 1x 3.0 - UART : 3.3V, 115200n8 - Buttons : 1x Reset 1x WPS - LEDs : 1x Power (green) 1x System (green) 1x WAN (green) 1x WiFi 2.4 GHz (green), controlled by phy 1x WiFi 5 GHz (green), controlled by phy 1x WPS (green) 1x USB (green) 5x ethernet leds (green), controlled by switch - Power : 12 VDC, 1.5 A Installation ------------ 1. Assign your PC a static IP 192.168.1.2 and connect to the router using the ethernet cable; 2. Power off the router; 3. Press Reset button, power on the router and wait until ethernet led start blinking; 4. Release the button; 5. Open http://192.168.1.1/ (N6 System Recovery Mode) in your browser; 6. Upload OpenWrt initramfs-kernel.bin image and start upgrade; 7. Connect to the 192.168.1.1 using scp (root with no password) and upload OpenWrt sysupgrade.bin image to the /tmp dir; 8. Connect to the 192.168.1.1 using ssh shell (root with no password) and run: sysupgrade -n /tmp/sysupgrade.bin Recovery and return to stock ---------------------------- Repeat installation steps 1-6 and use stock firmware image in the step 6. MAC addresses ------------- +---------+-------------------+ | | MAC example | +---------+-------------------+ | LAN | dc:xx:xx:49:xx:04 | | WAN | dc:xx:xx:49:xx:05 | | WLAN 2g | dc:xx:xx:19:xx:06 | | WLAN 5g | dc:xx:xx:79:xx:06 | +---------+-------------------+ The WLAN MAC prototype was found in 'Factory', 0x4 The LAN MAC was found in 'Factory', 0x7ef20 The WAN MAC was found in 'Factory', 0x7ef26 Known issue ----------- 2.4 GHz WLAN doesn't start with mt76 driver. Probable reason: Original Netis N6 EEPROM contains wrong MT_EE_WIFI_CONF value (0xd2). Other routers with the same WLAN hardware (e.g., Routerich AX1800) have MT_EE_WIFI_CONF = 0x92. Workaround (already included in this commit): Extract EEPROM to a file at the boot time using preinit script '09_prepare_eeprom' and change MT_EE_WIFI_CONF (offset 0x190) value from 0xd2 to 0x92. Signed-off-by: Mikhail Zhilkin --- package/boot/uboot-envtools/files/ramips | 1 + target/linux/ramips/dts/mt7621_netis_n6.dts | 226 ++++++++++++++++++ target/linux/ramips/image/mt7621.mk | 13 + .../mt7621/base-files/etc/board.d/01_leds | 3 + .../etc/hotplug.d/firmware/11-mt76-caldata | 17 ++ .../etc/hotplug.d/ieee80211/10_fix_wifi_mac | 8 + .../base-files/lib/preinit/09_prepare_eeprom | 17 ++ .../mt7621/base-files/lib/upgrade/platform.sh | 1 + 8 files changed, 286 insertions(+) create mode 100644 target/linux/ramips/dts/mt7621_netis_n6.dts create mode 100644 target/linux/ramips/mt7621/base-files/etc/hotplug.d/firmware/11-mt76-caldata create mode 100644 target/linux/ramips/mt7621/base-files/lib/preinit/09_prepare_eeprom diff --git a/package/boot/uboot-envtools/files/ramips b/package/boot/uboot-envtools/files/ramips index cca394a03b01bd..981e2120e1b9a6 100644 --- a/package/boot/uboot-envtools/files/ramips +++ b/package/boot/uboot-envtools/files/ramips @@ -79,6 +79,7 @@ jcg,q20|\ linksys,e7350|\ netgear,eax12|\ netgear,wax202|\ +netis,n6|\ zyxel,wsm20) ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000" ;; diff --git a/target/linux/ramips/dts/mt7621_netis_n6.dts b/target/linux/ramips/dts/mt7621_netis_n6.dts new file mode 100644 index 00000000000000..72aafa20eee757 --- /dev/null +++ b/target/linux/ramips/dts/mt7621_netis_n6.dts @@ -0,0 +1,226 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +#include "mt7621.dtsi" + +#include +#include +#include + +/ { + compatible = "netis,n6", "mediatek,mt7621-soc"; + model = "netis N6"; + + aliases { + label-mac-device = &gmac0; + + led-boot = &led_power_green; + led-failsafe = &led_system_green; + led-running = &led_power_green; + led-upgrade = &led_system_green; + }; + + chosen { + bootargs = "console=ttyS0,115200"; + }; + + keys { + compatible = "gpio-keys"; + + key-0 { + label = "wps"; + gpios = <&gpio 15 GPIO_ACTIVE_LOW>; + linux,code = ; + debounce-interval = <60>; + }; + + key-1 { + label = "reset"; + gpios = <&gpio 18 GPIO_ACTIVE_LOW>; + linux,code = ; + debounce-interval = <60>; + }; + }; + + leds { + compatible = "gpio-leds"; + + led-0 { + color = ; + function = LED_FUNCTION_USB; + gpios = <&gpio 4 GPIO_ACTIVE_LOW>; + trigger-sources = <&xhci_ehci_port1>; + linux,default-trigger = "usbport"; + }; + + led-1 { + color = ; + function = LED_FUNCTION_WPS; + gpios = <&gpio 13 GPIO_ACTIVE_LOW>; + }; + + led_system_green: led-2 { + color = ; + function = LED_FUNCTION_INDICATOR; + gpios = <&gpio 14 GPIO_ACTIVE_LOW>; + }; + + led-3 { + color = ; + function = LED_FUNCTION_WAN; + gpios = <&gpio 16 GPIO_ACTIVE_LOW>; + }; + + led_power_green: led-4 { + color = ; + function = LED_FUNCTION_POWER; + gpios = <&gpio 17 GPIO_ACTIVE_HIGH>; + }; + }; +}; + +&gmac0 { + nvmem-cells = <&macaddr_factory_7ef20 0>; + nvmem-cell-names = "mac-address"; +}; + +&gmac1 { + status = "okay"; + label = "wan"; + phy-handle = <ðphy4>; + + nvmem-cells = <&macaddr_factory_7ef26 0>; + nvmem-cell-names = "mac-address"; +}; + +ðphy4 { + /delete-property/ interrupts; +}; + +&nand { + status = "okay"; + + mediatek,nmbm; + mediatek,bmt-remap-range = <0x000000 0x580000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "u-boot"; + reg = <0x0 0x80000>; + read-only; + }; + + partition@80000 { + label = "Config"; + reg = <0x80000 0x80000>; + }; + + partition@100000 { + label = "Factory"; + reg = <0x100000 0x80000>; + read-only; + + nvmem-layout { + compatible = "fixed-layout"; + #address-cells = <1>; + #size-cells = <1>; + + eeprom_factory_0: eeprom@0 { + reg = <0x0 0xe00>; + }; + + macaddr_factory_7ef20: macaddr@7ef20 { + reg = <0x7ef20 0x6>; + }; + + macaddr_factory_7ef26: macaddr@7ef26 { + reg = <0x7ef26 0x6>; + }; + }; + }; + + partition@180000 { + label = "firmware"; + reg = <0x180000 0x7680000>; + + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "kernel"; + reg = <0x0 0x400000>; + }; + + partition@400000 { + label = "ubi"; + reg = <0x400000 0x7280000>; + }; + }; + }; +}; + +&pcie { + status = "okay"; +}; + +&pcie1 { + wifi@0,0 { + compatible = "mediatek,mt76"; + reg = <0x0000 0 0 0 0>; + + /* + * *** The code block below is commented out *** + * Reason: Probably, original Netis N6 EEPROM has wrong + * MT_EE_WIFI_CONF value 0xd2. As a result 2.4 GHz + * doesn't start with mt76 driver. Other routers + * with the same WLAN chips (e.g., Routerich + * AX1800) have MT_EE_WIFI_CONF = 0x92. + * Workaround: Extract EEPROM to a file at the boot time + * using preinit script '09_prepare_eeprom' and + * change MT_EE_WIFI_CONF (offset 0x190) value + * from 0xd2 to 0x92. + */ + + /* + nvmem-cells = <&eeprom_factory_0>; + nvmem-cell-names = "eeprom"; + */ + + mediatek,disable-radar-background; + }; +}; + +&state_default { + gpio { + groups = "i2c", "jtag", "wdt"; + function = "gpio"; + }; +}; + +&switch0 { + ports { + port@0 { + status = "okay"; + label = "lan4"; + }; + + port@1 { + status = "okay"; + label = "lan3"; + }; + + port@2 { + status = "okay"; + label = "lan2"; + }; + + port@3 { + status = "okay"; + label = "lan1"; + }; + }; +}; diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk index 18dbbcadf31d7b..4c8398ea099abd 100644 --- a/target/linux/ramips/image/mt7621.mk +++ b/target/linux/ramips/image/mt7621.mk @@ -2162,6 +2162,19 @@ define Device/netgear_wndr3700-v5 endef TARGET_DEVICES += netgear_wndr3700-v5 +define Device/netis_n6 + $(Device/dsa-migration) + $(Device/nand) + DEVICE_VENDOR := netis + DEVICE_MODEL := N6 + KERNEL_LOADADDR := 0x82000000 + KERNEL := kernel-bin | relocate-kernel $(loadaddr-y) | lzma | \ + fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb + DEVICE_PACKAGES += kmod-mt7915-firmware kmod-usb-ledtrig-usbport \ + kmod-usb3 +endef +TARGET_DEVICES += netis_n6 + define Device/netis_wf2881 $(Device/nand) $(Device/uimage-lzma-loader) diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds b/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds index 21b1e8ea9162db..c18724a2be54a3 100644 --- a/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds +++ b/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds @@ -187,6 +187,9 @@ netgear,r7450) netgear,wax202) ucidef_set_led_netdev "internet" "Internet" "green:net" "wan" ;; +netis,n6) + ucidef_set_led_netdev "wan" "wan" "green:wan" "wan" "link tx rx" + ;; oraybox,x3a) ucidef_set_led_netdev "wan" "wan link" "red:status" "wan" ucidef_set_led_netdev "lan" "lan link" "green:status" "br-lan" diff --git a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/firmware/11-mt76-caldata b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/firmware/11-mt76-caldata new file mode 100644 index 00000000000000..104acb875a5e0d --- /dev/null +++ b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/firmware/11-mt76-caldata @@ -0,0 +1,17 @@ +#!/bin/sh + +[ -e /lib/firmware/$FIRMWARE ] && exit 0 + +. /lib/functions/caldata.sh + +board=$(board_name) + +case "$FIRMWARE" in +"mediatek/mt7915_eeprom_dbdc.bin") + case "$board" in + netis,n6) + ln -sf /tmp/mt7915_eeprom_dbdc.bin /lib/firmware/$FIRMWARE + ;; + esac + ;; +esac diff --git a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac index 91c17f8a778c2f..1170790a382087 100644 --- a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac +++ b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac @@ -162,6 +162,14 @@ case "$board" in [ "$PHYNBR" = "0" ] && macaddr_add $hw_mac_addr 2 > /sys${DEVPATH}/macaddress [ "$PHYNBR" = "1" ] && macaddr_add $hw_mac_addr 3 > /sys${DEVPATH}/macaddress ;; + netis,n6) + hw_mac_addr="$(mtd_get_mac_binary Factory 0x4)" + hw_mac_addr=$(macaddr_setbit $hw_mac_addr 28) + hw_mac_2g=$(macaddr_unsetbit $hw_mac_addr 26) + hw_mac_5g=$(macaddr_setbit $hw_mac_addr 27) + [ "$PHYNBR" = "0" ] && echo -n "$hw_mac_2g" > /sys${DEVPATH}/macaddress + [ "$PHYNBR" = "1" ] && echo -n "$hw_mac_5g" > /sys${DEVPATH}/macaddress + ;; mercusys,mr70x-v1|\ tplink,archer-ax23-v1) hw_mac_addr="$(mtd_get_mac_binary config 0x8)" diff --git a/target/linux/ramips/mt7621/base-files/lib/preinit/09_prepare_eeprom b/target/linux/ramips/mt7621/base-files/lib/preinit/09_prepare_eeprom new file mode 100644 index 00000000000000..829787251a73a6 --- /dev/null +++ b/target/linux/ramips/mt7621/base-files/lib/preinit/09_prepare_eeprom @@ -0,0 +1,17 @@ +. /lib/functions/system.sh + +preinit_prepare_eeprom() { + case $(board_name) in + netis,n6) + EEPROM="/tmp/mt7915_eeprom_dbdc.bin" + head -c $((0xe00)) /dev/mtd2 > $EEPROM + printf "\x92" | \ + dd of=$EEPROM seek=$((0x190)) bs=1 conv=notrunc \ + 2>/dev/null + ;; + *) + ;; + esac +} + +boot_hook_add preinit_main preinit_prepare_eeprom 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 bad7e30ca65ebf..c5f796c21a8e40 100755 --- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh +++ b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh @@ -124,6 +124,7 @@ platform_do_upgrade() { netgear,wac124|\ netgear,wax202|\ netgear,wax214v2|\ + netis,n6|\ netis,wf2881|\ raisecom,msg1500-x-00|\ rostelecom,rt-fe-1a|\