From 485adc9d3c436d31f9713a7d8d84adf266754e26 Mon Sep 17 00:00:00 2001 From: Mikhail Zhilkin Date: Sat, 9 Dec 2023 17:17:02 +0000 Subject: [PATCH 1/6] mediatek: add support for Routerich AX3000 This PR is continuation of work under "mediatek: add support for Routerich AX3000" #13703 by the agreement with PR #13703 original author (Maximilian Weinmann ). All reviews from the previous PR were taken into into account. Routerich AX3000 is a wireless WiFi 6 router. Specification ------------- - SoC : MediaTek MT7981BA dual-core ARM Cortex-A53 1.3 GHz - RAM : DDR3 256 MiB (ESMT M15T2G16128A) - Flash : SPI-NAND 128 MiB (ESMT F50L1G41LB) - WLAN : MediaTek MT7976CN dual-band WiFi 6 - 2.4 GHz : b/g/n/ax, MIMO 2x2 - 5 GHz : a/n/ac/ax, MIMO 2x2 - Ethernet : 10/100/1000 Mbps x4 (MediaTek MT7531AE) - USB : 1x 2.0 - UART : through-hole on PCB - [J500] GND, TX, RX, 3.3V (115200n8) - Buttons : Mesh, Reset - LEDs : 1x Power (Blue) 1x WiFi 2.4 GHz (Blue) 1x WiFi 5 GHz (Red) 1x Mesh (Blue) 3x LAN activity (Blue) 1x WAN activity (Blue) 2x WAN no-internet (Red) - Power : 12 VDC, 1.5 A Installation ------------ Flash OpenWrt 'sysupgrade.bin' image using stock firmware web-interface (without keeping settings). Return to stock --------------- Install stock firmware image (without keeping settings) using OpenWrt sysupgrade method. Recovery -------- Connect uart, use u-boot menu to flash stock firmware image or boot OpenWrt initramfs image. MAC addresses ------------- +---------+-------------------+-----------+ | | MAC | Algorithm | +---------+-------------------+-----------+ | WAN | 24:0f:5e:xx:xx:b4 | label | | LAN | 24:0f:5e:xx:xx:b5 | label+1 | | WLAN 2g | 24:0f:5e:xx:xx:b6 | label+2 | | WLAN 5g | 24:0f:5e:xx:xx:b7 | label+3 | +---------+-------------------+-----------+ The WLAN 2g MAC was found in 'Factory', 0x4 Co-authored-by: Maximilian Weinmann Signed-off-by: Mikhail Zhilkin --- .../uboot-envtools/files/mediatek_filogic | 3 +- .../mediatek/dts/mt7981b-routerich-ax3000.dts | 337 ++++++++++++++++++ .../filogic/base-files/etc/board.d/01_leds | 7 + .../filogic/base-files/etc/board.d/02_network | 3 +- .../etc/hotplug.d/ieee80211/11_fix_wifi_mac | 1 + target/linux/mediatek/image/filogic.mk | 11 + 6 files changed, 360 insertions(+), 2 deletions(-) create mode 100644 target/linux/mediatek/dts/mt7981b-routerich-ax3000.dts diff --git a/package/boot/uboot-envtools/files/mediatek_filogic b/package/boot/uboot-envtools/files/mediatek_filogic index dd6726713b..8e8cb67a71 100644 --- a/package/boot/uboot-envtools/files/mediatek_filogic +++ b/package/boot/uboot-envtools/files/mediatek_filogic @@ -83,7 +83,8 @@ glinet,gl-mt6000) glinet,gl-mt3000) ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x80000" "0x20000" ;; -mercusys,mr90x-v1) +mercusys,mr90x-v1|\ +routerich,ax3000) local envdev=/dev/mtd$(find_mtd_index "u-boot-env") ubootenv_add_uci_config "$envdev" "0x0" "0x20000" "0x20000" "1" ;; diff --git a/target/linux/mediatek/dts/mt7981b-routerich-ax3000.dts b/target/linux/mediatek/dts/mt7981b-routerich-ax3000.dts new file mode 100644 index 0000000000..1dc4d380b8 --- /dev/null +++ b/target/linux/mediatek/dts/mt7981b-routerich-ax3000.dts @@ -0,0 +1,337 @@ +// SPDX-License-Identifier: GPL-2.0-only OR MIT + +/dts-v1/; +#include +#include +#include + +#include "mt7981.dtsi" + +/ { + model = "Routerich AX3000"; + compatible = "routerich,ax3000", "mediatek,mt7981"; + + aliases { + label-mac-device = &wan; + + led-boot = &led_power_blue; + led-failsafe = &led_power_blue; + led-running = &led_power_blue; + led-upgrade = &led_power_blue; + + serial0 = &uart0; + }; + + chosen { + stdout-path = "serial0:115200n8"; + }; + + gpio-keys { + compatible = "gpio-keys"; + + button-0 { + label = "mesh"; + linux,input-type = ; + linux,code = ; + gpios = <&pio 0 GPIO_ACTIVE_LOW>; + debounce-interval = <60>; + }; + + button-1 { + label = "reset"; + gpios = <&pio 1 GPIO_ACTIVE_LOW>; + linux,code = ; + debounce-interval = <60>; + }; + }; + + leds { + compatible = "gpio-leds"; + + led-0 { + color = ; + function = LED_FUNCTION_WLAN; + function-enumerator = <50>; + gpios = <&pio 5 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy1tpt"; + }; + + led-1 { + color = ; + function = LED_FUNCTION_WAN; + gpios = <&pio 6 GPIO_ACTIVE_HIGH>; + }; + + led_power_blue: led-2 { + color = ; + function = LED_FUNCTION_POWER; + gpios = <&pio 7 GPIO_ACTIVE_LOW>; + }; + + led-3 { + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <1>; + gpios = <&pio 9 GPIO_ACTIVE_LOW>; + }; + + led-4 { + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <2>; + gpios = <&pio 10 GPIO_ACTIVE_LOW>; + }; + + led-5 { + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <3>; + gpios = <&pio 11 GPIO_ACTIVE_LOW>; + }; + + led-6 { + color = ; + function = LED_FUNCTION_WAN; + gpios = <&pio 12 GPIO_ACTIVE_LOW>; + }; + + led-7 { + color = ; + function = LED_FUNCTION_WLAN; + function-enumerator = <24>; + gpios = <&pio 34 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy0tpt"; + }; + + led-8 { + color = ; + /* LED_FUNCTION_MESH isn't implemented yet */ + function = "mesh"; + gpios = <&pio 35 GPIO_ACTIVE_LOW>; + }; + }; + + memory { + reg = <0 0x40000000 0 0x10000000>; + }; +}; + +ð { + status = "okay"; + + gmac0: mac@0 { + compatible = "mediatek,eth-mac"; + reg = <0>; + phy-mode = "2500base-x"; + + nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_factory_4 (-1)>; + + fixed-link { + speed = <2500>; + full-duplex; + pause; + }; + }; +}; + +&mdio_bus { + switch: switch@1f { + compatible = "mediatek,mt7531"; + reg = <0x1f>; + reset-gpios = <&pio 39 GPIO_ACTIVE_HIGH>; + interrupt-controller; + #interrupt-cells = <1>; + interrupt-parent = <&pio>; + interrupts = <38 IRQ_TYPE_LEVEL_HIGH>; + }; +}; + +&spi0 { + pinctrl-names = "default"; + pinctrl-0 = <&spi0_flash_pins>; + status = "okay"; + + /* ESMT F50L1G41LB (128M) */ + spi_nand@0 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "spi-nand"; + reg = <0>; + + spi-max-frequency = <52000000>; + spi-tx-buswidth = <4>; + spi-rx-buswidth = <4>; + + spi-cal-enable; + spi-cal-mode = "read-data"; + spi-cal-datalen = <7>; + spi-cal-data = /bits/ 8 <0x53 0x50 0x49 0x4e 0x41 0x4e 0x44>; + spi-cal-addrlen = <5>; + spi-cal-addr = /bits/ 32 <0x0 0x0 0x0 0x0 0x0>; + + mediatek,nmbm; + mediatek,bmt-max-ratio = <1>; + mediatek,bmt-max-reserved-blocks = <64>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0_all { + label = "spi0.0"; + reg = <0x0 0x8000000>; + read-only; + }; + + partition@0 { + label = "BL2"; + reg = <0x0 0x100000>; + read-only; + }; + + partition@100000 { + label = "u-boot-env"; + reg = <0x100000 0x80000>; + }; + + partition@180000 { + label = "Factory"; + reg = <0x180000 0x200000>; + read-only; + + nvmem-layout { + compatible = "fixed-layout"; + #address-cells = <1>; + #size-cells = <1>; + + eeprom_factory_0: eeprom@0 { + reg = <0x0 0x1000>; + }; + + macaddr_factory_4: macaddr@4 { + compatible = "mac-base"; + reg = <0x4 0x6>; + #nvmem-cell-cells = <1>; + }; + }; + }; + + partition@380000 { + label = "FIP"; + reg = <0x380000 0x200000>; + read-only; + }; + + partition@580000 { + label = "ubi"; + reg = <0x580000 0x4000000>; + }; + + partition@4580000 { + label = "firmware_backup"; + reg = <0x4580000 0x2000000>; + read-only; + }; + + partition@6580000 { + label = "zrsave"; + reg = <0x6580000 0x100000>; + read-only; + }; + + partition@6680000 { + label = "config2"; + reg = <0x6680000 0x100000>; + read-only; + }; + }; + }; +}; + +&switch { + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + label = "lan1"; + }; + + port@2 { + reg = <2>; + label = "lan2"; + }; + + port@3 { + reg = <3>; + label = "lan3"; + }; + + wan: port@4 { + reg = <4>; + label = "wan"; + + nvmem-cell-names = "mac-address"; + nvmem-cells = <&macaddr_factory_4 (-2)>; + }; + + port@6 { + reg = <6>; + ethernet = <&gmac0>; + phy-mode = "2500base-x"; + + fixed-link { + speed = <2500>; + full-duplex; + pause; + }; + }; + }; +}; + +&pio { + spi0_flash_pins: spi0-pins { + mux { + function = "spi"; + groups = "spi0", "spi0_wp_hold"; + }; + + conf-pu { + pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP"; + drive-strength = ; + bias-pull-up = ; + }; + + conf-pd { + pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO"; + drive-strength = ; + bias-pull-down = ; + }; + }; +}; + +&uart0 { + status = "okay"; +}; + +&usb_phy { + status = "okay"; +}; + +&watchdog { + status = "okay"; +}; + +&wifi { + status = "okay"; + nvmem-cell-names = "eeprom"; + nvmem-cells = <&eeprom_factory_0>; +}; + +&xhci { + status = "okay"; + mediatek,u3p-dis-msk = <0x1>; +}; diff --git a/target/linux/mediatek/filogic/base-files/etc/board.d/01_leds b/target/linux/mediatek/filogic/base-files/etc/board.d/01_leds index f1fd58f1d0..360bdea9c8 100644 --- a/target/linux/mediatek/filogic/base-files/etc/board.d/01_leds +++ b/target/linux/mediatek/filogic/base-files/etc/board.d/01_leds @@ -26,6 +26,13 @@ netgear,wax220) ucidef_set_led_netdev "wlan2g" "WLAN2G" "blue:wlan2g" "phy0-ap0" ucidef_set_led_netdev "wlan5g" "WLAN5G" "blue:wlan5g" "phy1-ap0" ;; +routerich,ax3000) + ucidef_set_led_netdev "lan-1" "lan-1" "blue:lan-1" "lan1" "link tx rx" + ucidef_set_led_netdev "lan-2" "lan-2" "blue:lan-2" "lan2" "link tx rx" + ucidef_set_led_netdev "lan-3" "lan-3" "blue:lan-3" "lan3" "link tx rx" + ucidef_set_led_netdev "wan" "wan" "blue:wan" "wan" "link tx rx" + ucidef_set_led_netdev "wan-off" "wan-off" "red:wan" "wan" "link" + ;; xiaomi,mi-router-wr30u-112m-nmbm|\ xiaomi,mi-router-wr30u-stock|\ xiaomi,mi-router-wr30u-ubootmod) diff --git a/target/linux/mediatek/filogic/base-files/etc/board.d/02_network b/target/linux/mediatek/filogic/base-files/etc/board.d/02_network index 4ffb7e53bf..adbd937acf 100644 --- a/target/linux/mediatek/filogic/base-files/etc/board.d/02_network +++ b/target/linux/mediatek/filogic/base-files/etc/board.d/02_network @@ -29,7 +29,8 @@ mediatek_setup_interfaces() confiabits,mt7981|\ cudy,wr3000-v1|\ jcg,q30-pro|\ - qihoo,360t7) + qihoo,360t7|\ + routerich,ax3000) ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" wan ;; cmcc,rax3000m|\ diff --git a/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac b/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac index bf7426fbee..ca98350a1b 100644 --- a/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac +++ b/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac @@ -104,6 +104,7 @@ case "$board" in [ "$PHYNBR" = "0" ] && echo "$addr" > /sys${DEVPATH}/macaddress [ "$PHYNBR" = "1" ] && macaddr_add $addr 1 > /sys${DEVPATH}/macaddress ;; + routerich,ax3000|\ zbtlink,zbt-z8102ax|\ zbtlink,zbt-z8103ax|\ zyxel,ex5601-t0|\ diff --git a/target/linux/mediatek/image/filogic.mk b/target/linux/mediatek/image/filogic.mk index afbdfefd6f..249810bcd8 100644 --- a/target/linux/mediatek/image/filogic.mk +++ b/target/linux/mediatek/image/filogic.mk @@ -653,6 +653,17 @@ define Device/qihoo_360t7 endef TARGET_DEVICES += qihoo_360t7 +define Device/routerich_ax3000 + DEVICE_VENDOR := Routerich + DEVICE_MODEL := AX3000 + DEVICE_DTS := mt7981b-routerich-ax3000 + DEVICE_DTS_DIR := ../dts + DEVICE_PACKAGES := kmod-mt7981-firmware mt7981-wo-firmware kmod-usb3 + IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata + SUPPORTED_DEVICES += mediatek,mt7981-spim-snand-rfb +endef +TARGET_DEVICES += routerich_ax3000 + define Device/tplink_tl-xdr-common DEVICE_VENDOR := TP-Link DEVICE_DTS_DIR := ../dts From b799dd3c705dfd95745cdd94b13d1cd2ad2367a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Sun, 26 Nov 2023 21:24:28 +0100 Subject: [PATCH 2/6] base-files: execute package's "postinst" after executing uci-defaults MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allow "postinst" scripts to perform extra actions after applying all kind of fixups implemented using uci-defaults. This is needed e.g. by uhttpd-mod-ubus which after installation in a running systems needs to: 1. Update uhttpd config using its uci-defaults script 2. Reload uhttpd While this approach makes sense there is a risk it'll blow up some corner case postinst usages. There is only 1 way to find out. Cc: Hauke Mehrtens Signed-off-by: Rafał Miłecki --- package/base-files/files/lib/functions.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package/base-files/files/lib/functions.sh b/package/base-files/files/lib/functions.sh index d9628dbb7a..851d2f1791 100644 --- a/package/base-files/files/lib/functions.sh +++ b/package/base-files/files/lib/functions.sh @@ -270,11 +270,6 @@ default_postinst() { add_group_and_user "${pkgname}" - if [ -f "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ]; then - ( . "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ) - ret=$? - fi - if [ -d "$root/rootfs-overlay" ]; then cp -R $root/rootfs-overlay/. $root/ rm -fR $root/rootfs-overlay/ @@ -300,6 +295,11 @@ default_postinst() { rm -f /tmp/luci-indexcache fi + if [ -f "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ]; then + ( . "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ) + ret=$? + fi + local shell="$(command -v bash)" for i in $(grep -s "^/etc/init.d/" "$root$filelist"); do if [ -n "$root" ]; then From b196a9f6ce8ef7d6b09d20ef79ffcf464d1a15ab Mon Sep 17 00:00:00 2001 From: Chuanhong Guo Date: Sun, 19 Nov 2023 20:56:52 +0800 Subject: [PATCH 3/6] package: new package for usb gadget setup Setting up usb gadgets using g_* kernel modules are considered a legacy approach, but the usb_gadget configfs is a bit annoying to use directly. The usb_gadget configfs works by creating magic directories and writing to magic files under /sys/kernel/config/usbgadget. This new package is an init script to setup usb_gadget configfs using uci. In the config file, gadget/configuration/function sections create corresponding directories. UCI options are magic files available in the configfs and strings/0x409 directories, grabbed with a 'find' command. UDC option in gadget writes the UDC file under the 'gadget' directory to attach the generated gadget config. It's also possible to apply pre-made config templates under /usr/share/usbgadget. The templates use the same UCI config format, with the 'gadget' entry named 'g1'. Currently, there are templates for CDC-ACM and CDC-NCM gadgets written based on existing g_*.ko module code. Certain SBCs come with only a USB device port (e.g. Raspberry Pi Zero). With this script, it's now possible to perform initial setup on them by adding a default NCM gadget. Signed-off-by: Chuanhong Guo --- package/utils/usbgadget/Makefile | 54 +++++++ package/utils/usbgadget/files/presets/acm | 13 ++ package/utils/usbgadget/files/presets/ncm | 13 ++ package/utils/usbgadget/files/usbgadget.conf | 12 ++ package/utils/usbgadget/files/usbgadget.init | 144 +++++++++++++++++++ 5 files changed, 236 insertions(+) create mode 100644 package/utils/usbgadget/Makefile create mode 100644 package/utils/usbgadget/files/presets/acm create mode 100644 package/utils/usbgadget/files/presets/ncm create mode 100644 package/utils/usbgadget/files/usbgadget.conf create mode 100644 package/utils/usbgadget/files/usbgadget.init diff --git a/package/utils/usbgadget/Makefile b/package/utils/usbgadget/Makefile new file mode 100644 index 0000000000..d3a68ea9df --- /dev/null +++ b/package/utils/usbgadget/Makefile @@ -0,0 +1,54 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=usbgadget +PKG_RELEASE:=1 + +PKG_LICENSE:=BSD-2-Clause + +PKG_MAINTAINER:=Chuanhong Guo + +include $(INCLUDE_DIR)/package.mk + +define Package/$(PKG_NAME) + SECTION:=utils + CATEGORY:=Utilities + DEPENDS:=@USB_GADGET_SUPPORT +kmod-usb-gadget +kmod-usb-lib-composite + TITLE:=init script to create USB gadgets +endef + +define Build/Compile +endef + +define Package/$(PKG_NAME)/install + $(INSTALL_DIR) $(1)/etc/config $(1)/etc/init.d + $(INSTALL_CONF) ./files/usbgadget.conf $(1)/etc/config/usbgadget + $(INSTALL_BIN) ./files/usbgadget.init $(1)/etc/init.d/usbgadget +endef + +$(eval $(call BuildPackage,$(PKG_NAME))) + +# 1: short name +# 2: description +# 3: dependencies on other packages +define GadgetPreset + define Package/$(PKG_NAME)-$(1) + SECTION:=utils + CATEGORY:=Utilities + TITLE+= $(2) gadget preset + DEPENDS+= $(3) + endef + + define Package/$(PKG_NAME)-$(1)/description + This package contains the USB gadget preset for $(3). + endef + + define Package/$(PKG_NAME)-$(1)/install + $(INSTALL_DIR) $$(1)/usr/share/usbgadget + $(INSTALL_CONF) ./files/presets/$(1) $$(1)/usr/share/usbgadget + endef + + $$(eval $$(call BuildPackage,$(PKG_NAME)-$(1))) +endef + +$(eval $(call GadgetPreset,ncm,CDC-NCM,+kmod-usb-gadget-ncm)) +$(eval $(call GadgetPreset,acm,CDC-ACM,+kmod-usb-gadget-serial)) \ No newline at end of file diff --git a/package/utils/usbgadget/files/presets/acm b/package/utils/usbgadget/files/presets/acm new file mode 100644 index 0000000000..f8ce9c4a4a --- /dev/null +++ b/package/utils/usbgadget/files/presets/acm @@ -0,0 +1,13 @@ +config gadget 'g1' + option idVendor '0x0525' + option idProduct '0xa4a7' + option bDeviceClass '2' + option product 'Gadget Serial v2.4' + +config configuration 'cfg1' + option configuration 'ACM' + option gadget 'g1' + +config function 'acm1' + option function 'acm' + option configuration 'cfg1' diff --git a/package/utils/usbgadget/files/presets/ncm b/package/utils/usbgadget/files/presets/ncm new file mode 100644 index 0000000000..cb3a19329e --- /dev/null +++ b/package/utils/usbgadget/files/presets/ncm @@ -0,0 +1,13 @@ +config gadget 'g1' + option idVendor '0x0525' + option idProduct '0xa4a1' + option bDeviceClass '2' + option product 'NCM Gadget' + +config configuration 'cfg1' + option configuration 'NCM' + option gadget 'g1' + +config function 'ncm1' + option function 'ncm' + option configuration 'cfg1' diff --git a/package/utils/usbgadget/files/usbgadget.conf b/package/utils/usbgadget/files/usbgadget.conf new file mode 100644 index 0000000000..0d80fc97df --- /dev/null +++ b/package/utils/usbgadget/files/usbgadget.conf @@ -0,0 +1,12 @@ +# apply a preset under /usr/share/usbgadget +config preset + option name 'ncm' + # specify a UDC to enable this gadget: + # option UDC 'musb-hdrc.2.auto' + +# or create a custom gadget here following the content of presets: +#config gadget 'g1' +# option idVendor ... +# ... +# and add an UDC under the gadget section to enable it: +# option UDC 'musb-hdrc.2.auto' diff --git a/package/utils/usbgadget/files/usbgadget.init b/package/utils/usbgadget/files/usbgadget.init new file mode 100644 index 0000000000..f2e105caae --- /dev/null +++ b/package/utils/usbgadget/files/usbgadget.init @@ -0,0 +1,144 @@ +#!/bin/sh /etc/rc.common + +START=19 + +GADGET_FS=/sys/kernel/config/usb_gadget +GADGET_PRESETS_DIR=/usr/share/usbgadget +GADGET_PREFIX=owrt_ + +log() { + logger -t usbgadget "$@" +} + +apply_configs() { + local fs_path="$1" + local cfg="$2" + for param in $(find "$fs_path" -maxdepth 1 -type f -exec basename '{}' ';'); do + [ "$param" = "UDC" ] && continue + + config_get val "$cfg" "$param" + [ -n "$val" ] && echo "$val" > "${fs_path}/${param}" + done +} + +setup_gadget() { + local cfg="$1" + local gadget_path="${GADGET_FS}/${GADGET_PREFIX}${cfg}" + local param udc + + config_get udc "$cfg" UDC + [ -z "$udc" ] && return + + mkdir "$gadget_path" || return + apply_configs "$gadget_path" "$cfg" + + local strings_path="${gadget_path}/strings/0x409" + mkdir "$strings_path" + apply_configs "$strings_path" "$cfg" +} + +setup_configuration() { + local cfg="$1" + local gadget + config_get gadget "$cfg" gadget + local cfgs_path="${GADGET_FS}/${GADGET_PREFIX}${gadget}/configs" + [ -d "${cfgs_path}" ] || return + local cfg_path="${cfgs_path}/${cfg}.1" + mkdir "$cfg_path" || { + log "failed to create configuration ${cfg}" + return + } + + apply_configs "$cfg_path" "$cfg" + + local strings_path="${cfg_path}/strings/0x409" + mkdir "$strings_path" + apply_configs "$strings_path" "$cfg" +} + +setup_function() { + local cfg="$1" + local usbcfg gadget usbfun + + config_get usbcfg "$cfg" configuration + [ -z "$usbcfg" ] && return + config_get usbfun "$cfg" function + [ -z "$usbfun" ] && return + + config_get gadget "$usbcfg" gadget + local gadget_path="${GADGET_FS}/${GADGET_PREFIX}${gadget}" + local cfg_path="${gadget_path}/configs/${usbcfg}.1" + [ -d "${cfg_path}" ] || return + + local fun_path="${gadget_path}/functions/${usbfun}.${cfg}" + mkdir "$fun_path" || { + log "failed to create function ${usbfun}.${cfg}" + return + } + + apply_configs "$fun_path" "$cfg" + + ln -s "$fun_path" "$cfg_path" +} + +attach_gadget() { + local cfg="$1" + local gadget_path="${GADGET_FS}/${GADGET_PREFIX}${cfg}" + local param udc + + config_get udc "$cfg" UDC + [ -z "$udc" ] && return + + echo "$udc" > "$gadget_path/UDC" +} + +load_gadget() { + config_foreach setup_gadget gadget + config_foreach setup_configuration configuration + config_foreach setup_function function + config_foreach attach_gadget gadget +} + +# use subshell for isolated env +apply_preset() ( + local preset="$1" + local gadget="$2" + UCI_CONFIG_DIR=$GADGET_PRESETS_DIR config_load "$1" + config_set g1 UDC "$2" + load_gadget +) + +load_preset() { + local cfg="$1" + config_get name "$cfg" name + config_get udc "$cfg" UDC + [ -z "$udc" ] && return + apply_preset $name $udc +} + +start() { + grep -q /sys/kernel/config /proc/mounts || \ + mount -t configfs configfs /sys/kernel/config + + [ -d /sys/kernel/config/usb_gadget ] || { + log "usb_gadget support not found." + return 1 + } + + config_load usbgadget + config_foreach load_preset preset + load_gadget +} + +stop() { + for gadget_path in ${GADGET_FS}/${GADGET_PREFIX}* ; do + [ -d "$gadget_path" ] || continue + echo "" > ${gadget_path}/UDC + find ${gadget_path}/configs -maxdepth 2 -type l -exec rm '{}' ';' + rmdir ${gadget_path}/configs/*/strings/* + rmdir ${gadget_path}/configs/* + rmdir ${gadget_path}/functions/* + rmdir ${gadget_path}/strings/* + rmdir $gadget_path + done +} From 47818fbc012d7b8ef4129bf702da2d6aae07266e Mon Sep 17 00:00:00 2001 From: David Bauer Date: Tue, 26 Dec 2023 01:17:18 +0100 Subject: [PATCH 4/6] ramips: fix label-mac for Xiaomi RA75 The label-mac of the repeater is the address used on the 2.4 GHz radio, not the ethernet MAC. Signed-off-by: David Bauer --- target/linux/ramips/dts/mt7628an_xiaomi_mi-ra75.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/linux/ramips/dts/mt7628an_xiaomi_mi-ra75.dts b/target/linux/ramips/dts/mt7628an_xiaomi_mi-ra75.dts index 8859038c30..ddbb8b20bf 100644 --- a/target/linux/ramips/dts/mt7628an_xiaomi_mi-ra75.dts +++ b/target/linux/ramips/dts/mt7628an_xiaomi_mi-ra75.dts @@ -10,7 +10,7 @@ led-failsafe = &led_system_amber; led-running = &led_system_blue; led-upgrade = &led_system_amber; - label-mac-device = ðernet; + label-mac-device = &wmac; }; leds { From fab15fa57e45561411788733b80ee49d3eca094b Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 7 Dec 2023 04:44:33 +0100 Subject: [PATCH 5/6] mpc85xx: fix reserved-memory node name Make the node name match the actual memory address. Fixes: 57d7382cb159 ("mpc85xx: increase available RAM on Extreme Networks WS-AP3825i") Signed-off-by: David Bauer --- target/linux/mpc85xx/files/arch/powerpc/boot/dts/ws-ap3825i.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/linux/mpc85xx/files/arch/powerpc/boot/dts/ws-ap3825i.dts b/target/linux/mpc85xx/files/arch/powerpc/boot/dts/ws-ap3825i.dts index e72d8e9354..bdc5e81df2 100644 --- a/target/linux/mpc85xx/files/arch/powerpc/boot/dts/ws-ap3825i.dts +++ b/target/linux/mpc85xx/files/arch/powerpc/boot/dts/ws-ap3825i.dts @@ -312,7 +312,7 @@ #size-cells = <2>; ranges; - cpu1-bootpage@e000000 { + cpu1-bootpage@ff00000 { /* Reserve upper 1 MB for second-core-bootpage */ reg = <0x0 0xff00000 0x0 0x100000>; }; From f95eecfb21ff08662e022accd30e8254028ff63b Mon Sep 17 00:00:00 2001 From: David Bauer Date: Thu, 28 Dec 2023 23:16:02 +0100 Subject: [PATCH 6/6] dropbear: increase default receive window size Increasing the receive window size improves throughout on higher-latency links such as WAN connections. The current default of 24KB caps out at around 500 KB/s. Increasing the receive buffer to 256KB increases the throughput to at least 11 MB/s. Signed-off-by: David Bauer --- package/network/services/dropbear/files/dropbear.init | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/package/network/services/dropbear/files/dropbear.init b/package/network/services/dropbear/files/dropbear.init index b82e967cbc..a40b5f7bae 100755 --- a/package/network/services/dropbear/files/dropbear.init +++ b/package/network/services/dropbear/files/dropbear.init @@ -155,6 +155,12 @@ dropbear_instance() PIDCOUNT="$(( ${PIDCOUNT} + 1))" local pid_file="/var/run/${NAME}.${PIDCOUNT}.pid" + # Increase default receive window size to increase + # throughput on high latency links + if [ "${RecvWindowSize}" -eq "0" ]; then + RecvWindowSize="262144" + fi + procd_open_instance procd_set_param command "$PROG" -F -P "$pid_file" [ "${PasswordAuth}" -eq 0 ] && procd_append_param command -s