generic: move backport patches 751-03 and 751-04 to pending
Patches 751-03 and 751-04 as a result of commit 6407ef8d2bcb4a0a6284de09cd77bd1868c1d6ea
were incorrectly placed in the backport folder.
So they return to their proper place.
mac80211: fix compilation error for old stable kernel version
Fix compilation error for old stable version caused by
genlmsg_multicast_allns backport fix pushed middle version.
Version 5.15 version 0-169, 6.1 version 0-115, 6.6 version 0-58 have the
old genlmsg_multicast_allns version with flags variable.
Compiling backport project with these version result in a compilation
error. To handle this, introduce a backport function for the affected
kernel version.
Daniel Golle [Thu, 13 Mar 2025 22:22:39 +0000 (22:22 +0000)]
mediatek: filogic: add build for ASUS ZenWiFi BT8 with OpenWrt's U-Boot
Add 'ubootmod' variant for the ASUS ZenWiFi BT8.
An out-of-tree installer will be provided in Github to allow users an easy
transition from the stock loader to OpenWrt's bootchain which is built from
source.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Unfortunately, LibreSSL 4.0 causes the host APK tools to segfault under
fakeroot when .apk is being generated and it is completely breaking
building under Debian and Ubuntu hosts.
Daniel Golle [Fri, 28 Mar 2025 15:40:28 +0000 (15:40 +0000)]
generic: fitblk: close block device if mapping image failed
In case a broken fit image is present on flash the fitblk driver would
not map any /dev/fit* devices, but also not always close the block device
the image resides on. In case of ubiblock devices this is fatal as one
then cannot remove the ubiblock device (-EBUSY), and hence cannot replace
the broken image.
Always close the block device in case no sub-image was mapped.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Flash instructions (Without Serial):
========
Open Linksys Web UI - http://192.168.1.1/ca or http://linksysxxxxx.lan/ca depending on your setup.
xxxxx is the last 5 digits from the SN found on a sticker under the device.
Click on the Linksys Logo to by-pass smart app registration.
Login with your admin password. The default password can be found on the same sticker.
To enter into the support mode, click on the “CA” link and the bottom of the page.
Open the “Connectivity” menu and upload the squash-factory image with the “Choose file” button.
Click start. Ignore all the prompts and warnings by click “yes” in all the popups.
Flash instructions (With Serial):
========
1. Installation using serial connection from OEM firmware (default login: root, password: admin):
- fw_printenv -n boot_part
In case of 2:
- flash_erase /dev/mtd13 0 0
- nandwrite -p /dev/mtd13 openwrt-qualcommax-ipq60xx-linksys_mr7500-squashfs-factory.bin
or in case of 1:
- flash_erase /dev/mtd15 0 0
- nandwrite -p /dev/mtd15 openwrt-qualcommax-ipq60xx-linksys_mr7500-squashfs-factory.bin
After first boot install firmware on second partition:
- mtd -r -e kernel -n write openwrt-qualcommax-ipq60xx-linksys_mr7500-squashfs-factory.bin kernel
or:
- mtd -r -e alt_kernel -n write openwrt-qualcommax-ipq60xx-linksys_mr7500-squashfs-factory.bin alt_kernel
2. Installation from initramfs image using USB drive:
Put the initramfs image on the USB drive:
- dd bs=1M if=openwrt-qualcommax-ipq60xx-linksys_mr7500-initramfs-uImage.itb of=/dev/sda
Stop u-boot and run:
- usb start && usbboot $loadaddr 0 && bootm $loadaddr
Write firmware to the flash from initramfs:
- mtd -e kernel -n write openwrt-qualcommax-ipq60xx-linksys_mr7500-squashfs-factory.bin kernel
and:
- mtd -r -e alt_kernel -n write openwrt-qualcommax-ipq60xx-linksys_mr7500-squashfs-factory.bin alt_kernel
3. Back to the OEM firmware:
- mtd -e kernel -n write FW_MR7500_1.1.12.211919_prod.img kernel
and:
- mtd -r -e alt_kernel -n write FW_MR7500_1.1.12.211919_prod.img alt_kernel
4. USB recovery:
Put the initramfs image on the USB:
- dd bs=1M if=openwrt-qualcommax-ipq60xx-linksys_mr7500-initramfs-uImage.itb of=/dev/sda
Set u-boot env:
- fw_setenv bootusb 'usb start && usbboot $loadaddr 0 && bootm $loadaddr'
- fw_setenv bootcmd 'run bootusb; if test $auto_recovery = no; then bootipq; elif test $boot_part = 1; then run bootpart1; else run bootpart2; fi'
AQR firmware:
========
0. Firmware extracting:
To extract the firmware, use unblob (unblob.org)
1. Firmware loading:
To properly load the firmware and initialize AQR PHY, we must use the u-boot aq_load_fw function.
To do this, you need to modify u-boot env:
With USB recovery:
- fw_setenv bootcmd 'aq_load_fw; run bootusb; if test $auto_recovery = no; then bootipq; elif test $boot_part = 1; then run bootpart1; else run bootpart2; fi'
and without:
- fw_setenv bootcmd 'aq_load_fw; if test $auto_recovery = no; then bootipq; elif test $boot_part = 1; then run bootpart1; else run bootpart2; fi'
2. Firmware updating:
Newer firmware (AQR114C.cld) is available in the latest OEM firmware (https://downloads.linksys.com/support/assets/firmware/FW_MR7500_1.1.12.211919_prod.img).
Copy AQR114C.cld to /lib/firmware/marvell
Weikai Kong [Mon, 30 Dec 2024 06:09:07 +0000 (01:09 -0500)]
qca-ssdk: enable AQR for ipq60xx targets
MR7500 features IPQ6018 which is CPPE, however, it also utilizes AQR114CB0 as WAN.
Previously, without this patch, aquantia_phy_api_ops was never called.
Therefore, enable `IN_AQUATIA_PHY` so that AQR PHY gets initialized properly on boot.
version: 0.27
date: Sun Sep 1 12:07:24 PM CEST 2024
changes:
- improved modulo detection
- remove all unused local variables from affine expressions
- minor improvements to coalescing
- minor improvements to lexicographic optimization
- improved constraint simplification
- fix handling of empty piecewise expressions
Shymon Samsel [Mon, 24 Mar 2025 17:24:02 +0000 (13:24 -0400)]
qualcommax: ipq807x: Create working factory images for EAP620 HD v1 and EAP660 HD v1
Create factory tar for EAP620 HD v1 and EAP660 HD v1 which is accepted by the stock UI.
Fix bug in ipq807x and ipq60xx makefiles so TPLINK_SUPPORT_STRING is handled properly.
Modify tplink-mkimage-2022 script and relevant makefiles to allow spaces in support strings (required for EAP620 HD v1 and EAP660 HD v1).
Installation steps are identical to EAP610-Outdoor:
Web UI method
-------------
Set up the device using the vendor's web UI. After that go to
Management->SSH and enable the "SSH Login" checkbox. Select "Save".
The connect to the machine via SSH:
ssh -o hostkeyalgorithms=ssh-rsa <ip_of_device>
Disable signature verification:
cliclientd stopcs
Rename the "-web-ui-factory" image to something less than 63
characters, maintaining the ".bin" suffix.
* Go to System -> Firmware Update.
* Under "New Firmware File", click "Browse" and select the image
* Select "Update" and confirm by clicking "OK".
If the update fails, the web UI should show an error message.
Otherwise, the device should reboot into OpenWRT.
Paul Donald [Tue, 25 Mar 2025 00:40:06 +0000 (01:40 +0100)]
lldpd: bump to 1.0.19
Changes:
- Support of both Apple Silicon and Intel for macOS package.
- Add cvlan/svlan/tpmr capabilities.
- Disable LLDP in firmware for Intel X7xx cards on FreeBSD.
- Add lldpctl_watch_sync_unblock to liblldpctl.
- Add C++ wrapper for lldpctl.
Fix:
- Fix AppArmor policy for /run/lldpd/lldpd.socket.lock.
- Do not query stats for a down interface on Linux.
```
# lldpd -vv
lldpd 1.0.19
Built on 2025-03-24T17:43:44Z
C compiler command: C compiler command is not available for reproducible builds
Linker command: Linker compiler command is not available for reproducible builds
```
Magnus Kroken [Wed, 26 Mar 2025 20:42:51 +0000 (21:42 +0100)]
mbedtls: update to 3.6.3
This release of Mbed TLS provides the fix for a tls compatibility issue of handling fragmented handshake messages.
This release includes fixes for security issues.
* Potential authentication bypass in TLS handshake (CVE-2025-27810) [1]
* TLS clients may unwittingly skip server authentication (CVE-2025-27809) [2]
With this patch, iw can now scan APs in the 6 GHz band and shows
their operation parameters:
~~~
6 Ghz Operation Information: 0x0103070f06
Primary Channel: 1
Channel Width: 80+80 or 160 MHz
Regulatory Info: 0
Center Frequency Segment 0: 7
Center Frequency Segment 1: 15
Minimum Rate: 6
~~~
Erik Servili [Mon, 24 Mar 2025 22:12:54 +0000 (23:12 +0100)]
qualcommax: ipq807x: Create working factory tar for WAX620 and WAX630.
Create factory tar for WAX620 and WAX630 which is accepted by the stock UI.
Must use 'Boot up Backup Firmware' button on stock upgrade page after install and reboot to swap partitions.
Nick Hainke [Tue, 25 Mar 2025 16:31:24 +0000 (17:31 +0100)]
libtracefs: update to 1.8.1
ChangeLog 417c2e3 libtracefs: version 1.8.1 41efd9e libtracefs: Add meson build targets to Makefile 310b796 libtracefs utest: Add better logic to cause missed events b589e32 libtracefs: Add cpu-map sample to trace mapped buffer 4ede86e libtracefs: Enable mmapped ring buffer e6737d4 libtracefs: Initialize val in build_filter() 590e452 libtracefs: Close dir in the error path in tracefs_event_systems() 0309a87 libtracefs: Close dir in the error path in tracefs_system_events() f34fb1f libtracefs: Prevent memory leak in tracefs_dynevent_get_all() 48e906b libtracefs: my_yyinput() should return 0 when no data can be read 5e5b2a7 libtracefs: Prevent memory leak in tracefs_instance_create() 8f2593f libtracefs: Prevent a memory leak in open_cpu_files() 7d77b83 libtracefs: Prevent a memory leak in tracefs_system_events() 7fcd8d2 libtracefs: Prevent a memory leak in add_func_str() a01d0ba libtracefs: Don't leak socket file descriptor in open_vsock() efdf7f7 libtracefs: Prevent memory leak in tracefs_event_systems() 2342293 libtracefs: Prevent a memory leak in tracefs_synth_add_end_field() 1c95394 libtracefs: Prevent a memory leak in update_fields() 6b35665 libtracefs: Prevent memory leak in append_filer() aecc0b7 libtracefs: Call va_end() before exiting tracefs_hist_set_sort_key() a5e37f7 libtracefs: Add trace-mmap.c to meson build 8f62e96 libtracefs meson: Use SemVer in the build description e04fa01 meson: Add utest option fb213a4 libtracefs: Update trace_buffer_meta 04505a0 libtracefs utest: Include libgen.h for basename() 7b4a9c9 libtracefs utest: Define _LARGEFILE64_SOURCE for lseek64() with musl ba75081 libtracefs utest: Add PATH_MAX if it is not already defined 5f27b7f libtracefs: Update the kbuf for previous read in trace_mmap_load_subbuf() 73ac9c1 libtracefs: Fix tracefs_instance_reset() of triggers 7d15d77 libtracefs meson: build tracefs-mmap by default
Nick Hainke [Tue, 25 Mar 2025 16:27:01 +0000 (17:27 +0100)]
libtraceevent: update to 1.8.4
ChangeLog: bd47bd5 libtraceevent: 1.8.4 fe0bc49 libtraceevent: Print function pointer address when TEP_EVENT_FL_PRINTRAW is specified f2224d5 libtraceevent: Have sizeof() parsing handle u8/s8 through u64/s64 5f570de libtraceevent: Print arrays like Linux does 645a883 libtraceevent: 1.8.3 d4c1fb4 libtraceevent: Add meson build targets to Makefile c3dc220 libtraceevent: Fix a double free in process_op() 021da90 libtraceevent: Do not return a local stack pointer in get_field_str() 340e2e6 libtraceevent: Have unit test fail when any tests fail c84155f libtraceevent: prevent a memory leak in tep_plugin_add_option() 03551eb libtraceevent: Prevent a memory leak in process_fields() 34ece90 libtraceevent: Close shared object in the error path of load_plugin() 8802f0f libtraceevent: Avoid a simple asprintf case 76a0eb8 libtraceevent: Fix event-parse memory leak in process_cond 5bc98bd libtraceevent: Have single quotes represent characters ec8e0cc libtraceevent: Fix tests running on big endian arch 60ed6c3 libtraceevent: build: Various fixes for the Meson build of libtraceevent 0351241 libtraceevent utest: Include libgen.h for basename() with musl
Robert Marko [Sun, 23 Mar 2025 09:29:28 +0000 (10:29 +0100)]
uboot-tools: dont build tools unconditionally
Currently, both envtools and the rest of U-Boot tools are being built
regardless if the dumpimage package has been selected.
This will fail if only envtools are selected since the rest of tools
require OpenSSL while envtools do not require them.
So, only build tools if dumpimage is selected.
Fixes: 46e376c93514 ("uboot-tools: migrate uboot-envtools to uboot-tools") Fixes: #18327 Tested-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> Link: https://github.com/openwrt/openwrt/pull/18329 Signed-off-by: Robert Marko <robimarko@gmail.com>
Sat Mar 16 19:11:39 2024 daemon.info lldpd[10916]: custom TLV op replace oui 33:44:55 subtype fe
Sat Mar 16 19:11:39 2024 daemon.info lldpd[10916]: custom TLV op add oui 33:44:44 subtype e8
Sat Mar 16 19:11:39 2024 daemon.info lldpd[10916]: custom TLV op add oui 33:44:33 subtype 42
Sat Mar 16 19:11:39 2024 daemon.info lldpd[10916]: custom TLV op add oui 33:44:33 subtype 42
Sat Mar 16 19:11:39 2024 daemon.info lldpd[10916]: custom TLV op add oui 33:44:31 subtype 2c
Sat Mar 16 19:11:39 2024 daemon.info lldpd[10916]: custom TLV op add oui 33:44:31 subtype 2c
Sat Mar 16 19:11:39 2024 daemon.warn lldpcli[10915]: invalid OUI value '3322'
Sat Mar 16 19:11:39 2024 daemon.info lldpcli[10915]: an error occurred while executing last command
Sat Mar 16 19:11:39 2024 daemon.warn lldpcli[10915]: invalid OUI value '3312'
Sat Mar 16 19:11:39 2024 daemon.info lldpcli[10915]: an error occurred while executing last command
Sat Mar 16 19:11:39 2024 daemon.info lldpcli[10915]: lldpd should resume operations
( The last two TLV are invalid: their oui must be three hex bytes, comma
separated. Only the first hex byte of oui-info 5555555555 is used )
As described in #13873, from 23.05.0 onwards logging to a file on an
external filesystem fails under some conditions.
This occurs because the log initscript had code added to prevent start
logging to an external filesystem on boot, and added a trigger to start
said logging when the external filesystem gets mounted.
The issue is that for filesystems mount with fstab uci, the fstab
scripts runs at START=11, while log runs at START=12, which means the
external filesystem may already be mounted by the time the log initscript
runs. Since the external filesystem is already mounted it does not
trigger a hotplug event to trigger the trigger to start logging. This
combination means the logging never automatically starts when the log
file is on an external filesystem.
We therefore add a check for the presence of a mounted filesystem when
the log file is being sent to an fstab mounted filesystem. If the
filesystem is mounted, we don't skip starting logging during boot.
If the filesystem is not mounted then file logging is not started and
the trigger will start the logging when the filesystem is mounted.
Signed-off-by: Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
[improved commit message] Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Daniel Golle [Fri, 21 Mar 2025 11:39:07 +0000 (11:39 +0000)]
mediatek: filogic: fix case statement in 01_leds
Remove a stray '|' character from 01_leds which has accidentally
been added.
Reported-by: Chukun Pan <amadeus@jmu.edu.cn> Fixes: 63d56af6c6 ("mediatek: filogic: migrate Netgate N60 to upstream PHY LED control") Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Daniel Golle [Fri, 21 Mar 2025 01:04:39 +0000 (01:04 +0000)]
mediatek: filogic: PHY LEDs do have an address, gpio-leds don't
Other than GPIO LEDs, PHY LEDs do have an address.
Fix node names such that all gpio-leds do *not* contain an '@' sign and
PHY leds which do have an address also do contain the '@' sign.
This is done to prevent more copy&paste'ry of non-complaint DT
fragments.
Fixes: 7cbe34170e ("mediatek: add support for the GL.iNet GL-MT3000") Fixes: fe10f97439 ("filogic: add support for GL.iNet GL-MT6000") Fixes: e8f7597317 ("mediatek: filogic: add support for Cudy RE3000 v1") Fixes: c9cb6411c1 ("mediatek: add support for Cudy WR3000 v1") Fixes: 7560af7647 ("mediatek: filogic: migrate ASUS TUF AX6000 to upstream PHY LED control") Fixes: 25ea7ff393 ("mediatek: filogic: migrate Acer W6/W6d to upstream PHY LED control") Fixes: d50d51d74e ("mediatek: filogic: migrate Zyxel NWA50AX Pro to upstream PHY LED control") Fixes: b88de5d507 ("mediatek: filogic: migrate Zyxel EX5700 to upstream PHY LED control") Fixes: 63d56af6c6 ("mediatek: filogic: migrate Netgate N60 to upstream PHY LED control") Fixes: fd76a38190 ("mediatek: filogic: migrate SmartRG Bonanza to upstream PHY LED control") Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Lech Perczak [Tue, 28 Feb 2023 01:26:40 +0000 (02:26 +0100)]
ath79: support switch LEDs on TL-WR1043ND v2/v3
Add switch LED definitions for TP-Link TL-WR1043ND family, based on data
extracted from ar71xx board file. Update the LED labels to match current
pattern, i.e. drop the "tp-link:" prefix.
Lech Perczak [Tue, 4 Feb 2025 20:15:21 +0000 (21:15 +0100)]
ath79: TP-link TL-WR1043ND v2/v3: use fixed-link for AR8327 switch connection
Attaching PHY driver to the switch, while adding LEDs binding causes the
PHY driver to create additional LED instances, handled incorrectly by
the PHY driver, which are non-functional. Use fixed-link to attach the
switch driver, instead of PHY driver, to prevent that.
This has a side effect of not logging switch port up/down events in the kernel
log.
Add switch LED definitions for TP-Link Archer C7 v1/2/3 family, based on data
extracted from ar71xx board file. Update the LED labels to match current
pattern, i.e. drop the "tp-link:" prefix.
Lech Perczak [Tue, 4 Feb 2025 20:15:16 +0000 (21:15 +0100)]
ath79: TP-link Archer C7v2: use fixed-link for AR8327 switch connection
Attaching PHY driver to the switch, while adding LEDs binding causes the
PHY driver to create additional LED instances, handled incorrectly by
the PHY driver, which are non-functional. Use fixed-link to attach the
switch driver, instead of PHY driver, to prevent that.
This has a side effect of not logging switch port up/down events in the kernel
log.
Add switch LED definitions for TP-Link TL-WDR4300 family, based on data
extracted from ar71xx board file. Update the LED labels to match current
pattern, i.e. drop the "tp-link:" prefix.
Lech Perczak [Tue, 4 Feb 2025 20:14:52 +0000 (21:14 +0100)]
ath79: TP-link TL-WDR4300: use fixed-link for AR8327 switch connection
Attaching PHY driver to the switch, while adding LEDs binding causes the
PHY driver to create additional LED instances, handled incorrectly by
the PHY driver, which are non-functional. Use fixed-link to attach the
switch driver, instead of PHY driver, to prevent that.
This has a side effect of not logging switch port up/down events in the kernel
log.
The ar8216 switch driver supports exposing configuration of AR8327 and
AR8337 switch LEDs to the userspace, however it is only configurable
through platform data, causing the devices ported from ar71xx target to
lack the support.
Since there is still a long way to go until we can migrate the target to
qca8k, an interim solution is needed.
Extend ar8327_hw_config_of function to parse a "leds"
subnode, which will populate the missing platform data based on device
tree contents, and restore the existing support for the LEDs.
Standard bindings apply, mapping "reg" property to LED index, with
addition of "qca,led-mode" property, which selects HW (0) or SW (1)
mode, defaulting to HW mode.
Lech Perczak [Tue, 4 Feb 2025 20:14:45 +0000 (21:14 +0100)]
kernel: ar8327: fix active-low LED initialization
Switch LEDs configured as active-low remain low instead of high upon
initialization, because in ar8327_leds_init, no distinction is made with
regards to LED pattern based on active_low property - only whether HW
mode is active. Select the proper initial pattern based also on
active_low to fix that.
While at that, simplify the equation ruling pattern selection for
setting brightness, avoiding unnecessary binary XOR operation, not
really valid for 'bool' type.
ramips: add missing LEDs and modem control for ASUS 4G-AX56
Add missing LEDs and modem control for ASUS 4G-AX56
- wifi2.4G white
- wifi5G white
- wan two-coloured, white and red
- modem four-coloured white, blue, yellow and red
change
label = "xxxx:modem";
to
color = <LED_COLOR_ID_xxxx>;
function = LED_FUNCTION_MOBILE;
- rssi-1 white
- rssi-2 white
- rssi-3 white
Felix Fietkau [Fri, 7 Mar 2025 17:20:23 +0000 (18:20 +0100)]
unetmsg: add unet pub/sub message broker based on ubus
This service automatically establishes connections to any hosts that are members
of the same unet network, and allows publish/subscribe exchanges via ubus channels.
Felix Fietkau [Fri, 14 Mar 2025 13:05:06 +0000 (14:05 +0100)]
provision: add script for managing device provisioning data
This is useful for keeping specific data on a device across factory reset.
It uses a separate partition (only UBI supported at the moment) to store
the data. The primary use case is storing sensitive data like cryptographic
keys for maintaining a device as part of a network.
Felix Fietkau [Sat, 15 Mar 2025 20:55:10 +0000 (21:55 +0100)]
unetd: cli: add support for changing network password
This does not actually create a new private key. Instead, the salt is replaced,
and a xor key is generated which when merged with the key derived from the new
password transforms into the original private key.
With upstream changes hitting kernel 6.4 the dtb for u7623 ends up with
both mac (gmac) disabled, since this is now the default status in
mt7623.dtsi. Fix this by including mt7623a.dtsi (which already has all
necessary bits) and enabling all revlevant ports. This will also do
a side hustle of assigning proper clocks for power controller and
specifying proper power domain for few devices.
Apparently U-Boot will discard whole node if requested pin function is
unknown to the driver. This resulted in inability to interact with
U-Boot on the said board, as U-Boot always assumed the recovery key
pressed and issued recovery procedure. Log snippet:
Recovery procedure also booted recovery image, which didn't affect much
the 23.05.x release, since the root fs argument was valid, so changes
persisted. But as 24.10.x hit with fitblk, the board will boot only
recovery image (initramfs) because of default bootargs will reset on each
boot and U-Boot provided bootargs took precedence.
Like #15865, it seems that gmac0 does not rename eth0 to dsa until after the
switch ports are initialized, leading to a name collision (error -17 = EEXIST).
This patch follows #17062 by using openwrt,netdev-name to fix the collision.
Til Kaiser [Sun, 16 Feb 2025 17:03:01 +0000 (18:03 +0100)]
x86: add Supermicro SuperServer E302-9D
This adds a default network configuration for the
Supermicro SuperServer SYS-E302-9D by adding all
onboard network ports to the default `lan` interface.
The network ports `eth0` till `eth3` use the `igb`
driver, whereas `eth4` till `eth7` use `i40e`.
Also, increase those priorities because I think they
are too low since there is currently no "room" for
built-in network device drivers.
That can cause interface order, i.e., name inconsistencies,
when Mellanox ConnectX cards are inserted or removed.
Lech Perczak [Mon, 3 Feb 2025 23:24:21 +0000 (00:24 +0100)]
ath79: ZTE MF281: use specific board definition file for qca9888
Using board definition file extracted from stock firmware yields 50%
throughput improvement in RX direction under iperf3 test.
Make the device use temporary files from firmware_qca-wireless.git
temporarily, as well as select the specific variant in the device tree
files. The device uses same board file as the MF286C.
Lech Perczak [Sun, 24 Nov 2024 23:36:24 +0000 (00:36 +0100)]
ath79: support ZTE MF286C
ZTE MF286 is an indoor LTE category 12 CPE router with simultaneous
dual-band 802.11ac plus 802.11n Wi-Fi radios and quad-port gigabit
Ethernet switch, FXS and external USB 2.0 port.
Software-wise it's compatible with previous MF286A, save for different
5GHz Wi-Fi board definition file, requiring a separate image.
Hardware highlights:
- CPU: QCA9563 SoC at 775MHz,
- RAM: 128MB DDR2,
- NOR Flash: MX25L1606E 2MB SPI Flash, for U-boot only,
- NAND Flash: W25N01GV 128MB SPI NAND-Flash, for all other data,
- Wi-Fi 5GHz: QCA9886 2x2 MIMO 802.11ac Wave2 radio,
- WI-Fi 2.4GHz: QCA9563 3x3 MIMO 802.11n radio,
- Switch: QCA8337v2 4-port gigabit Ethernet, with single SGMII CPU port,
- WWAN: MDM9250-based category 12 internal LTE modem
in extended mini-PCIE form factor, with 5 internal antennas and
2 external antenna connections, single mini-SIM slot.
- FXS: one external ATA port (handled entirely by modem part) with two
physical connections in parallel,
- USB: Single external USB 2.0 port,
- Switches: power switch, WPS, Wi-Fi and reset buttons,
- LEDs: Wi-Fi, Test (internal). Rest of LEDs (Phone, WWAN, Battery,
Signal state) handled entirely by modem. 4 link status LEDs handled by
the switch on the backside.
- Label MAC device: eth0
Internal modem of MF286C is supported via uqmi.
Console connection: connector X2 is the console port, with the following
pinout, starting from pin 1, which is the topmost pin when the board is
upright:
- VCC (3.3V). Do not use unless you need to source power for the
converer from it.
- TX
- RX
- GND
Default port configuration in U-boot as well as in stock firmware is
115200-8-N-1.
Installation:
Due to different flash layout from stock firmware, sysupgrade from
within stock firmware is impossible, despite it's based on QSDK which
itself is based on OpenWrt.
STEP 0: Stock firmware update:
As installing OpenWrt cuts you off from official firmware updates for
the modem part, it is recommended to update the stock firmware to latest
ath79: support ZTE MF286C
STEP 1: Booting initramfs image:
Method 1: using serial console (RECOMMENDED):
- Have TFTP server running, exposing the OpenWrt initramfs image, and
set your computer's IP address as 192.168.0.22. This is the default
expected by U-boot. You may wish to change that, and alter later
commands accordingly.
- Connect the serial console if you haven't done so already,
- Interrupt boot sequence by pressing any key in U-boot when prompted
- Use the following commands to boot OpenWrt initramfs through TFTP:
(Replace server IP and router IP as needed). There is no emergency
TFTP boot sequence triggered by buttons, contrary to MF283+.
- When OpenWrt initramfs finishes booting, proceed to actual
installation.
STEP 2: Backing up original software:
As the stock firmware may be customized by the carrier and is not
officially available in the Internet, IT IS IMPERATIVE to back up the
stock firmware, if you ever plan to returning to stock firmware.
It is highly recommended to perform backup using both methods, to avoid
hassle of reassembling firmware images in future, if a restore is
needed.
Method 1: after booting OpenWrt initramfs image via TFTP:
- Connect your USB-UART adapter
- Dump stock firmware located on stock kernel and ubi partitions:
And keep them in a safe place, should a restore be needed in future.
Method 2: using stock firmware:
- Connect an external USB drive formatted with FAT or ext4 to the USB
port.
- The drive will be auto-mounted to /var/usb_disk
- Check the flash layout of the device:
Differences might indicate that this is NOT a MF286C device but
one of other variants.
- Copy over all MTD partitions, for example by executing the following:
for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do cat /dev/mtd$i > \
/var/usb_disk/mtd$i; done
"Firmware" partition can be skipped, it is a concatenation
of "kernel" and "rootfs".
- If the count of MTD partitions is different, this might indicate that
this is not a MF286C device, but one of its other variants.
- (optionally) rename the files according to MTD partition names from
/proc/mtd
- Unmount the filesystem:
umount /var/usb_disk; sync
and then remove the drive.
- Store the files in safe place if you ever plan to return to stock
firmware. This is especially important, because stock firmware for
this device is not available officially, and is usually customized by
the mobile providers.
STEP 3: Actual installation:
- Set your computer IP to 192.168.1.22/24
- scp the sysupgrade image to the device:
STEP 4: WAN connection establishment
Since the router is equipped with LTE modem as its main WAN interface, it
might be useful to connect to the Internet right away after
installation. To do so, please put the following entries in
/etc/config/network, replacing the specific configuration entries with
one needed for your ISP:
config interface 'wan'
option proto 'qmi'
option device '/dev/cdc-wdm0'
option auth '<auth>' # As required, usually 'none'
option pincode '<pin>' # If required by SIM
option apn '<apn>' # As required by ISP
option pdptype '<pdp>' # Typically 'ipv4', or 'ipv4v6' or 'ipv6'
For example, the following works for most polish ISPs
config interface 'wan'
option proto 'qmi'
option device '/dev/cdc-wdm0'
option auth 'none'
option apn 'internet'
option pdptype 'ipv4'
The required minimum is:
config interface 'wan'
option proto 'qmi'
option device '/dev/cdc-wdm0'
In this case, the modem will use last configured APN from stock
firmware - this should work out of the box, unless your SIM requires
PIN which can't be switched off.
If you have build with LuCI, installing luci-proto-qmi helps with this
task.
Restoring the stock firmware:
- Boot to initramfs as in step 3:
- Completely detach ubi0 partition using ubidetach /dev/ubi0_0
- Copy over the stock kernel image using scp to /tmp
- Erase kernel and restore stock kernel:
(scp mtd4_kernel.bin root@192.168.1.1:/tmp/)
mtd write kernel /tmp/mtd4_kernel.bin
rm /tmp/mtd4_kernel.bin
- Copy over the stock partition backups one-by-one using scp to /tmp, and
restore them individually. Otherwise you might run out of space in
tmpfs:
- If the write was correct, force a device reboot with
reboot -f
Quirks and known issues
- It was observed, that CH340-based USB-UART converters output garbage
during U-boot phase of system boot. At least CP2102 is known to work
properly.
- Kernel partition size is increased to 4MB compared to stock 3MB, to
accomodate future kernel updates - at this moment OpenWrt 5.10 kernel
image is at 2.5MB which is dangerously close to the limit. This has no
effect on booting the system - but keep that in mind when reassembling
an image to restore stock firmware.
- uqmi seems to be unable to change APN manually, so please use the one
you used before in stock firmware first. If you need to change it,
please use protocok '3g' to establish connection once, or use the
following command to change APN (and optionally IP type) manually:
echo -ne 'AT+CGDCONT=1,"IP","<apn>' > /dev/ttyUSB0
- The only usable LED as a "system LED" is the blue debug LED hidden
inside the case. All other LEDs are controlled by modem, on which the
router part has some influence only on Wi-Fi LED.
- GPIO5 used for modem reset is a suicide switch, causing a hardware
reset of whole board, not only the modem. It is attached to
gpio-restart driver, to restart the modem on reboot as well, to ensure
QMI connectivity after reboot, which tends to fail otherwise.
- Modem, as in MF283+, exposes root shell over ADB - while not needed
for OpenWrt operation at all - have fun lurking around.
The same modem module is used as in older MF286.
Lech Perczak [Sun, 24 Nov 2024 23:22:27 +0000 (00:22 +0100)]
ath79: ZTE MF286A: use specific board definition file for qca9888
Using board definition file extracted from stock firmware yields 50%
throughput improvement in RX direction under iperf3 test.
Make the device use temporary files from firmware_qca-wireless.git
temporarily, as well as select the specific variant in the device tree
files.