Ivan Pavlov [Tue, 27 Jan 2026 14:40:18 +0000 (17:40 +0300)]
libpcap: update to 1.10.6
Vulnerabilities fixed: CVE-2025-11961 and CVE-2025-11964
Various improvements and bug fixes.
Changelog: https://github.com/the-tcpdump-group/libpcap/blob/libpcap-1.10.6/CHANGES
Jonas Jelonek [Fri, 16 Jan 2026 09:32:52 +0000 (09:32 +0000)]
realtek: pcs: add XSG write operations
There is some special logic used for certain writes to digital pages for
RTL93xx SerDes, especially when configuring the XSGMII mode. For
RTL930x this applies to SerDes 2 and 3, for RTL93xx to more. In this case,
a dual-read/write to SDS and SDS + 1 is done. While the corresponding
mapping from front to back SDS for RTL931x is currently covered in the
SerDes MDIO driver, it isn't for RTL930x.
To cover these special cases and provide a clear interface on that,
introduce an XSG write SerDes operation. All these dual-read/write cases
can be expressed with such an XSG operation whose internal semantics are
defined for each switchcore family.
This could be done just with plain dual read/write calls however this
isn't a clean approach and may be confusing while comparing our
functionality with the SDK, especially for RTL930x.
In practice, if this isn't handled correctly, only half of the ports of an
XSGMII-connected RTL8218D do work because some required values aren't
applied for the background SerDes 3.
Jonas Jelonek [Sun, 18 Jan 2026 17:58:58 +0000 (17:58 +0000)]
realtek: rtl930x: move SerDes mapping from MDIO to PCS
For RTL930x, the SerDes MDIO driver performed a slight SerDes ID mapping
on certain conditions. Instead of keeping this mapping in the MDIO and
try to extend it for further quirks, lets just be a plain MDIO here and
let the user (PCS) deal with these complex quirks.
Drop the mapping from the SerDes MDIO driver and move it to the PCS
driver by leveraging the previously introduced SerDes operations
structure. Define separate ops which incorporate this mapping and use
those instead of the generic implementations.
Jonas Jelonek [Sun, 18 Jan 2026 17:26:37 +0000 (17:26 +0000)]
realtek: pcs: introduce dedicated SerDes ops
Add a dedicated structure for SerDes operations. This will be used for
several common operations currently called individually in various
places of the code.
Start with defining the basic read and write operations for a SerDes in
this structure. Use generic implementations of these operations for all
variants (RTL83xx, RTL93xx) for now.
Linus Walleij [Wed, 28 Jan 2026 00:31:38 +0000 (01:31 +0100)]
ixp4xx: select CONFIG_BLK_DEV_LOOP
The ixp4xx is using split squashfs/jffs2 root filesystems on
some devices, so without CONFIG_BLK_DEV_LOOP the device does
not gain a writeable root filesystem with these boot messages:
mount_root: unable to create loop device
mount_root: jffs2 not ready yet, using temporary tmpfs overlay
and then it never gets out of that. Fix this so we get writeable
rootfs again.
Christoph Krapp [Mon, 26 Jan 2026 21:13:25 +0000 (22:13 +0100)]
ath79: add calibration variant for TP-Link TL-WA1201 v2
Now that we have a board file, add calibration variant for TP-Link
TL-WA1201 v2 and add ipq-wifi package for it.
Tested-by: Jim McDonald <122668301+jimmyd998@users.noreply.github.com> Signed-off-by: Christoph Krapp <achterin@gmail.com> Link: https://github.com/openwrt/openwrt/pull/21736 Signed-off-by: Robert Marko <robimarko@gmail.com>
Robert Marko [Tue, 27 Jan 2026 12:53:37 +0000 (13:53 +0100)]
mvebu: cortex-a53: fix Methode eDPU migration to upstream DTS
Migration of the eDPU DTS to upstream one broke the eDPU plus model
since the required ethernet aliases are missing and U-Boot then cannot
find the required ethernet nodes.
So, after sending the required fix upstream, lets apply it in OpenWrt
as well.
Fixes: 9852dda4105c ("mvebu: move DTS diff into a patch for Methode uDPU") Signed-off-by: Robert Marko <robert.marko@sartura.hr>
Linus Walleij [Tue, 27 Jan 2026 19:52:37 +0000 (20:52 +0100)]
gemini: select CONFIG_BLK_DEV_LOOP
The gemini is using split squashfs/jffs2 root filesystems on
all devices, so without CONFIG_BLK_DEV_LOOP the device does
not gain a writeable root filesystem with these boot messages:
mount_root: unable to create loop device
mount_root: jffs2 not ready yet, using temporary tmpfs overlay
and then it never gets out of that. Fix this so we get writeable
rootfs again.
This commit adds support for Hasivo S1100WP-8GT-SE switch.
Device specification
--------------------
SoC Type: Realtek RTL9303
RAM: Samsung K4B2G1646F-BYMA (256MB DDR3 SDRAM)
Flash: Fudan FM25Q128A (16 MB)
Ethernet: 8x RTL8221B 10/100/1000/2500Mbps PHY
LEDs: 2 LEDs + 4 LEDs/port
1x power green (no control)
1x system green (via RLT9303 GPIO)
3x RJ45 LEDs/port (via HC595 shift registers on LED spi)
1x Green
1x Green/Orange
1x Orange LED/port for PoE status (below RJ45, on STC8)
Button: Reset
USB ports: None
Bootloader: Realtek U-Boot 2011.12.(3.6.6.55087) (Nov 13 2022 - 14:37:31)
Fan: None installed (but board provision for temp/FET/fan)
POE: 2x HS104PTI for 802.3af/at/bt PoE (Not yet working)
Installing OpenWrt
------------------
1. UART RJ45 requires soldering a connector to the empty footprint (RJ1).
(Amphenol RJHSEE380 or similar)
2. Connect to UART 38400@8n1, using Cisco Console Rollover cable (RS232)
3. Set computer IP to 192.168.0.111, and plug in with 2.5Gbps
4. Enter bootloader by pressing esc key during boot
5. Enter password `Hs2021cfgmg`
6. Type `XXXX` to get into U-Boot
7. Type `rtk network on`
8. Use tftp if you have a 2.5G link (other speeds won't work).
If serial, you can increase baudrate in uboot with `setenv baudrate 115200`
9.1. `tftpboot 0x84f00000 <openwrt-initramfs-filename>`
9.2. Otherwise use serial transfer (Y modem): `loady 0x84f00000`
10. `bootm 0x84f00000`
Now you should be in OpenWRT, and can use sysupgrade to install.
FUKAYA Toshikuni [Mon, 12 Jan 2026 08:51:23 +0000 (17:51 +0900)]
realtek: add support for XikeStor SKS8300-8T
XikeStor SKS8300-8T is a 8 ports Multi-Gig switch, based on the RTL9303.
Specifications:
- SoC : Realtek RTL9303
- RAM : DDR3 512 MiB
- Flash : SPI-NOR 32 MiB (Macronix)
- CPU : 800MHz
- Ethernet : 8× 1G/2.5G/5G/10G Base-T RJ45 ports (RTL8261N)
- Keys (GPIO) : 1x
- UART : "Console" port on the front panel
- type : RS-232C
- connector : RJ-45
- settings : 115200 8N1
- Power : 12 VDC, 4A
- Temperature sensor : LM75 or compatible
- Fan controller : SensyLink CTF2302
Flash instruction using initramfs image:
1. Prepare TFTP server & connect to serial port.
2. Connect your computer to one of the RJ45 ports on SKS8300-8T
3. Power on SKS8300-8T and interrupt autoboot with Shift + A.
4. Use Shift + Q to drop from vendor CLI to U-Boot CLI.
5. Set the boot command to enable network on boot.
> setenv bootcmd 'mw.l 0x8401da94 0; rtk network on; boota'
6. Set switch IP and TFTP server IP (optional, adjust to your setup).
> setenv ipaddr <ip>
> setenv serverip <ip>
7. Download initramfs image from TFTP server.
> tftpboot 0x83000000 <image name>
8. Boot with the downloaded image.
> bootm 0x83000000
9. With rambooted OpenWrt, backup the stock firmware if needed.
10. Copy sysupgrade image to the device.
11. Perform sysupgrade with the sysupgrade image.
12. After reboot, you should have functional OpenWrt.
In OpenWrt, it is necessary to execute "rtk network on" to enable full
networking functionality. However, the internal U-Boot initialization
(which shares logic with "rtk network init" initializing MAC only and
configures the fan controller) sets a flag at memory address 0x8401da94.
Once this flag is set, any subsequent calls to "rtk network on" are
blocked. To bypass this, resetting 0x8401da94 to 0 by step 5, ensuring
that the network can be properly initialized later. This specific
address was confirmed in U-Boot 2011.12.(3.6.11.55242) (Jan 06 2025 -
14:39:46) by decompiling the function that references the "rtk_mac_init"
string.
Reverting to stock firmware:
1. Connect to serial port.
2. Power on SKS8300-8T and interrupt autoboot with Shift + A.
3. Use Shift + Q to drop from vendor CLI to U-Boot CLI.
4. Set the boot command to the firmware default.
> setenv bootcmd boota
5. Enable network.
> rtk network on
6. Boot OpenWrt.
> boota
7. Download latest firmware from XikeStor and upload to your device.
8. Write firmware with 'sysupgrade -F'.
9. After reboot, stock firmware should boot automatically.
- It uses register 29 (write only companion of ext. page register 30)
- "configuration" only reads registers 2/3 and writes a message
- "configuration" is run during probing
Drop the useless coding. As this was the last consumer drop register
29 define too.
Youfu Zhang [Tue, 27 Jan 2026 07:11:15 +0000 (15:11 +0800)]
wifi-scripts: fix ucode mobility_domain default value
The mobility_domain value generated by ucode differed from the previous
shell script implementation. The legacy shell script used `echo` on the
SSID, which appended a trailing newline.
To maintain roaming compatibility with pre-25.12 releases and OpenWrt
forks in default configuration, update the ucode logic to include this
newline character when generating the default value.
Hauke Mehrtens [Mon, 26 Jan 2026 00:17:54 +0000 (01:17 +0100)]
mac80211: update to version 6.18.7
This is based on Linux kernel 6.18.7.
This update contains the following upstream fixes: f75b9d2c9f5b wifi: rtl8xxxu: Add USB ID 2001:3328 for D-Link AN3U rev. A1 401b10a72f5a wifi: rtw88: Add USB ID 2001:3329 for D-Link AC13U rev. A1 c0d93d69e147 staging: rtl8723bs: fix out-of-bounds read in rtw_get_ie() parser e841d8ea7223 staging: rtl8723bs: fix stack buffer overflow in OnAssocReq IE parsing bf323db1d883 staging: rtl8723bs: fix out-of-bounds read in OnBeacon ESR IE parsing b1497ea24639 wifi: ath10k: move recovery check logic into a new work 99fc0689a588 wifi: ath11k: restore register window after global reset ab0554f51e5f wifi: ath12k: Fix MSDU buffer types handling in RX error path d911fa97dab3 wifi: ath12k: fix VHT MCS assignment ca2a33cee1ef wifi: ath12k: fix TX and RX MCS rate configurations in HE mode 18d4706956b7 wifi: ath11k: fix VHT MCS assignment 6b1a0da75932 wifi: ath11k: fix peer HE MCS assignment d0a5b5d56438 wifi: ath12k: restore register window after global reset 1564c04afa92 wifi: iwlwifi: mld: add null check for kzalloc() in iwl_mld_send_proto_offload() d0bb3db7b295 wifi: ath12k: fix potential memory leak in ath12k_wow_arp_ns_offload() 36faecac7a2c wifi: ath12k: fix reusing m3 memory 4f93750fa588 wifi: ath12k: fix error handling in creating hardware group 41b623129175 wifi: ath12k: enforce vdev limit in ath12k_mac_vdev_create() e442e820e953 wifi: ath12k: unassign arvif on scan vdev create failure bcf44fe565bf wifi: rtw89: usb: use common error path for skbs in rtw89_usb_rx_handler() 87cc6fe79c3e wifi: rtw89: usb: fix leak in rtw89_usb_write_port() c7ca777c5879 wifi: ath12k: Fix timeout error during beacon stats retrieval 51b823d7723f wifi: cw1200: Fix potential memory leak in cw1200_bh_rx_helper() c9d1c4152e6d wifi: rtl818x: Fix potential memory leaks in rtl8180_init_rx_ring() a6fb8785b179 wifi: mac80211: fix CMAC functions not handling errors 5ebf0fe7eaef wifi: rtl818x: rtl8187: Fix potential buffer underflow in rtl8187_rx_cb() b8f34c1c5c4f wifi: mt76: mt7996: fix null pointer deref in mt7996_conf_tx() cbeca0b7ea20 wifi: mt76: mt7996: Remove unnecessary link_id checks in mt7996_tx d582d0e988d6 wifi: mt76: wed: use proper wed reference in mt76 wed driver callabacks d2d11298dfc3 wifi: mt76: mt7996: Remove useless check in mt7996_msdu_page_get_from_cache() 2cde732373a7 Revert "wifi: mt76: mt792x: improve monitor interface handling" 74bb080717a3 wifi: mt76: mt7996: fix max nss value when getting rx chainmask 95bb36f8d6b3 wifi: mt76: mt7996: fix implicit beamforming support for mt7992 ee94375d06b5 wifi: mt76: mt7996: fix several fields in mt7996_mcu_bss_basic_tlv() d64e6f27260e wifi: mt76: mt7996: fix teardown command for an MLD peer e5c42efeb162 wifi: mt76: mt7996: set link_valid field when initializing wcid 9a43ed9ab800 wifi: mt76: mt7996: fix MLD group index assignment 7d6cd8f51ad8 wifi: mt76: mt7996: fix MLO set key and group key issues 1a4b481a21ae wifi: mt76: mt7996: fix using wrong phy to start in mt7996_mac_restart() b4b789d24319 wifi: mt76: mt7996: fix EMI rings for RRO 46f0648e261c wifi: mt76: mt7996: grab mt76 mutex in mt7996_mac_sta_event() 70656b45467c wifi: mt76: Move mt76_abort_scan out of mt76_reset_device() c319967690d4 wifi: mt76: mt7996: skip deflink accounting for offchannel links abdedd46dc58 wifi: mt76: mt7996: skip ieee80211_iter_keys() on scanning link remove f4c57afff3b0 wifi: mt76: mt7996: Add missing locking in mt7996_mac_sta_rc_work() 4d42aba0ee49 mt76: mt7615: Fix memory leak in mt7615_mcu_wtbl_sta_add() ad26a7ef0488 wifi: ieee80211: correct FILS status codes 40257a2ef1bc wifi: rtl8xxxu: Fix HT40 channel config for RTL8192CU, RTL8723AU c3ab9657866f wifi: cfg80211: stop radar detection in cfg80211_leave() 0283fac52b42 wifi: cfg80211: use cfg80211_leave() in iftype change 9c6f9b2a80ed wifi: mt76: mt792x: fix wifi init fail by setting MCU_RUNNING after CLC load f5323b43019d wifi: brcmfmac: Add DMI nvram filename quirk for Acer A1 840 tablet 498e286941b9 wifi: mt76: Fix DTS power-limits on little endian systems e5c129a05531 wifi: rtw88: limit indirect IO under powered off for RTL8822CS 90a15ff32464 wifi: rtlwifi: 8192cu: fix tid out of range in rtl92cu_tx_fill_desc() 7ea38152a289 wifi: cfg80211: sme: store capped length in __cfg80211_connect_result() 182a2786d248 wifi: mac80211: do not use old MBSSID elements de5eb6b65e9f wifi: iwlwifi: Fix firmware version handling a21704df4024 wifi: mac80211: Discard Beacon frames to non-broadcast address e3c35177103e wifi: avoid kernel-infoleak from struct iw_point b97be67dc06e wifi: mac80211: restore non-chanctx injection behaviour 1251bbdb8f5b wifi: mac80211_hwsim: fix typo in frequency notification
The following patches were applied upstream:
build/130-backports-move-__counted_by-to-compiler_types.h-head.patch patch [1]
build/999-kernel-6.12.64.patch [2]
Jonas Jelonek [Sun, 25 Jan 2026 19:52:37 +0000 (19:52 +0000)]
realtek: pcs: rtl931x: add sequence for LC PLL
The RTL931X CMU code was only capable of setting up ring PLL. This is
fine so far as most modes use this PLL type. Other modes are not handled
by the code, neither here nor in the SDK. Though, the SDK has the needed
sequence to setup the LC PLL. Using LC PLL seems to be handled somewhere
else.
Include the small sequence from the SDK to have it, though not used yet.
This could be helpful for further development which goes beyond the SDK.
Jonas Jelonek [Sun, 25 Jan 2026 19:45:37 +0000 (19:45 +0000)]
realtek: pcs: rtl93xx: improve CMU terminology
The implementations for CMU management for RTL930x and RTL931x differ in
their terminology but not that much in their technical aspect. For both
it seems to be the case that two adjacent SerDes share a CMU. This CMU
contains a ring PLL for low speeds (capable of 1G/2.5G) and an LC PLL for
high speeds (capable of 1G/2.5G/10G).
Introduce an enum for the PLL type, used for both RTL93xx variants.
Align the naming of internal variables, especially in the RTL931x
implementation. Rename cmu_type to pll_type because this is much more
accurate. Use 'force_' instead of 'frc_' to make clear what it means.
Also rename the function from 'cmu_type_set' to 'config_cmu' because it
obviously does more than just setting the CMU type but rather configures
the CMU.
Jonas Jelonek [Sun, 25 Jan 2026 19:35:44 +0000 (19:35 +0000)]
realtek: pcs: rtl931x: fix and cleanup CMU functions
Fix the wrong values bit values when setting CMU band which were the
same for both 'enable == true' and 'enable == false'.
While at it, fix some coding issues in the CMU functions:
- drop confusing debug output
- use ternary value instead of if-else
- return proper error
- make variable declaration in reverse christmas tree
- drop unneeded temporary value
The symbol error reset function misses the default sequence. E.g. kernel
spits the message "rtpcs_930x_sds_sym_err_reset unsupported phy mode" when
working on 2500base-x.
Align the function with the SDK by
- adding QSGMII mode
- adding the "all other modes" switch
- working with "channels" to make clearer what happens
* If "Active Image" has the first option selected, OpenWrt will need to be
flashed to the "Active" partition. If the second option is selected,
OpenWrt will need to be flashed to the "Backup" partition.
* Navigate to Maintenance > Firmware > Upload
* Upload the openwrt-realtek-rtl838x-zyxel_gs1900-24-b1-initramfs-kernel.bin
file by your preferred method to the previously determined partition.
When prompted, select to boot from the newly flashed image, and reboot
the switch.
* Once OpenWrt has booted, scp the sysupgrade image to /tmp and flash it:
* Configure your client with a static 192.168.1.x IP (e.g. 192.168.1.10).
* Set up a TFTP server on your client and make it serve the initramfs
image.
* Connect serial, power up the switch, interrupt U-boot by hitting the
space bar, and enable the network:
> rtk network on
> Since the GS1900-24 B1 is a dual-partition device, you want to keep the
OEM firmware on the backup partition for the time being. OpenWrt can
only be installed in the first partition anyway (hardcoded in the
DTS). To ensure we are set to boot from the first partition, issue the
following commands:
> setsys bootpartition 0
> savesys
* Download the image onto the device and boot from it:
Joe Holden [Sat, 30 Aug 2025 20:34:52 +0000 (20:34 +0000)]
realtek: use common dtsi for Zyxel GS1900-24
As there are actually 2 versions of the GS1900-24 where the only
difference is the amount of ram, use a common dtsi and make the
original A1 model dts include the dtsi and only override the memory size.
Signed-off-by: Joe Holden <jwh@zorins.us>
Move memory size to device dts. Signed-off-by: Goetz Goerisch <ggoerisch@gmail.com> Link: https://github.com/openwrt/openwrt/pull/21595 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
The ethernet driver uses an indirection for access to the MAC_PORT_CTRL
register (aka. MAC_L2_PORT_CTRL on RTL93xx). It defines the base address
and adds up the cpu port offset. This is not needed as the driver does
not handle the non-cpu ports. Use direct register access instead and
avoid register confusion by always using the "_L2_" naming.
While we are here:
- Drop the functions and use defines instead
- Add CPU port defines for better readability
realtek: dsa: rtl839x: fix uninitialized global access
Setup for DSA QOS on RTL839x accesses unitialized memory. For some
reason the handover of the priv structure was realized via global
intermediate variable switch_priv. During refactoring for adbb9a6
("realtek: dsa: rtl83xx: fix init section mismatch") this was not
noticed. Since then RTL839x devices crash during startup.
Fix this by using standard handover via function parameters.
Fixes: adbb9a6 ("realtek: dsa: rtl83xx: fix init section mismatch") Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de> Link: https://github.com/openwrt/openwrt/pull/21703 Signed-off-by: Robert Marko <robimarko@gmail.com>
* 115200,8N1,1.8V
* Three unmarked test points next to QJ2012A:
+---------+
| QJ2012A |
+---------+
o TX
o GND
o RX
o
o
o
Installation via OEM firmware:
* Use the following process to obtain root ssh access
https://forum.openwrt.org/t/150371/24
* Connect using root with no password on port 42000
* Optionally for serial bootloader access run :
fw_setenv bootdelay=3
* SCP factory.bin to /tmp
* Run:
sysupgrade -n /tmp/factory.bin
Installation via serial console and OEM firmware::
* Use console to access OEM firmware shell
* Proceed with SCP & sysupgrade as described above
Other notes:
* This device uses active partition rotation
* Some versions (TCL branded?) have a NOR chip in addition to NAND
* The above is supported by u-boot patching DT partitions
* DT patching does NOT occur on tftpboot/bootm
* Modem is detected as foxconn-sdx55 by kernel (same VID/PID)
* This works OK-ish and should be improved if we can get OEM modem details
Milan Krstic [Sat, 24 Jan 2026 11:17:13 +0000 (11:17 +0000)]
qualcommax: ipq807x: add functions for bootconfig partition
The BOOTCONFIG partition is used by Qualcomm's boot chain to store
metadata about the device's startup configuration. It contains info such
as versioning, configuration flags, primary boot partition, and more.
Newer devices with dual boot partitions not only store the active boot
partition in a U-boot variable but also in partition info in the
BOOTCONFIG partition. As such, add library functions to set and toggle
the active boot partition.
Milan Krstic [Fri, 13 Jun 2025 06:56:14 +0000 (06:56 +0000)]
generic: 6.12: backport aw9523 fix can_sleep flag
The GPIO expander is connected via I2C, thus the can_sleep flag has to
be set to true. This fixes spurious "scheduling while atomic" bugs
in the kernel ringbuffer.
realtek: dsa: remove half-cooked SoC version determination
There are some code pieces that determine the SoC version of the
running system. For RTL83xx it reads out the registers, for RTL93xx
it simply uses a constant value. Without any consumer of this data
drop it.
realtek: phy: drop external RTL8218B firmware blob
No one has looked into the firmware based RTL8218B initializations
for a long time. Instead the basic setup sequences have evolved
so that they can start the RTL8218B PHY from scratch. See
Paweł Owoc [Mon, 19 Jan 2026 19:56:25 +0000 (20:56 +0100)]
odhcpd: update to Git HEAD (2026-01-19)
5a13d875ac71 dhcpv6: set static defines for DHCPv6 option header size 9857adb8ac99 dhcpv6-ia: switch case refactor in dhcpv6_handle_ias() 3cbbea830ddd netlink: clean up sockets, close files 13ef483716a5 dhcpv4: de-escalate error logging to debug
Linus Walleij [Sat, 24 Jan 2026 17:13:24 +0000 (18:13 +0100)]
gemini: create a copy-kernel for 3072k kernels
The Raidsonic devices do not use a 2048k kernel "Kern"
partition like the Storlink reference designs. Instead
it uses a 3072k partition to fit a slightly
larger kernel.
Sadly the current OpenWrt Gemini kernel is still bigger
than 3072k so we need to make use of the Ramdisk
partition as well.
Create a special "copy-kernel" version that can deal
with the Raidsonic 3072k kernels. Tested on the
Raidsonic IB-4220-B booting kernel v6.12.66.
Fix a copy/paste error in the image generation makefile
while we are at it.
qualcommax: ipq60xx: add support for TP-Link EAP620HD v3
Specifications:
* SoC: Qualcomm IPQ6018/AP-CP03-C1 (64-bit Quad-core Arm Cortex-A53 @ 1.2 GHz)
* RAM: 2x Zentel A3T4GF40BBF-HP (1 GiB DDR3-1866 (13-13-13))
* Serial Port: 1v8 TTL 115200n8
* Wi-Fi: Qualcomm QCN5022 (802.11ax/b/g/n)
* Wi-Fi: Qualcomm QCN5052 (802.11ac/ax/n)
* Ethernet: RTL8211FS (10/100/1000BASE-T)
* Flash: GigaDevice PSR1GA30DT (128 MiB)
* LEDs: 1x Blue Status (GPIO 35 Active High)
* Buttons: 1x Reset (GPIO 9 Active Low)
* FCCID: 2AXJ4EAP620HDV3
* UART: 4-pin unpopulated header by the J1 footprint
Installation Instructions (Serial+TFTP):
1. Locate the J1 footprint which contains 4 unpopulated pins
where starting from the arrow, the pins are TX, RX, VCC and GND
respectively.
2. Connect a 1v8 TTL port to the 4 pins. Ensure RX and TX are crossed
over.
3. Copy openwrt-qualcommax-ipq60xx-tplink_eap620-hd-v3-initramfs-uImage.itb
to your TFTP server.
4. Power up the AP and hold Ctrl+B in the serial console (115200n8) until autoboot is halted.
5. Run the following commands in the U-boot prompt:
IPQ6018# setenv serverip <TFTP server addr>
IPQ6018# setenv ipaddr <addr of the AP>
IPQ6018# tftpboot 0x44000000 openwrt-qualcommax-ipq60xx-tplink_eap620-hd-v3-initramfs-uImage.itb
IPQ6018# bootm 0x44000000
You may need to type Ctrl+C and Enter before running these commands
to clear invisible characters from the buffer.
6. Run the following command in a terminal to copy the sysupgrade image
to be installed (check IP address):
$ scp -O openwrt-qualcommax-ipq60xx-tplink_eap620-hd-v3-squashfs-sysupgrade.bin root@192.168.1.1:/tmp/
7. Activate the OpenWrt serial console and run the following commands:
# cd /tmp
# sysupgrade -n openwrt-qualcommax-ipq60xx-tplink_eap620-hd-v3-squashfs-sysupgrade.bin
8. The AP will reboot and OpenWrt will be successfully installed.
Installation Instructions (Web UI method):
1. Set up the device using the vendor's web UI. Navigate to
Management->SSH and enable the "SSH Login" checkbox. Select "Save".
2. Connect to the machine via SSH:
$ ssh -o hostkeyalgorithms=ssh-rsa <ip_of_device>
3. Disable signature verification:
$ cliclientd stopcs
4. Rename the "-web-ui-factory" image to something less than 63
characters, maintaining the ".bin" suffix.
5. Go to System -> Firmware Update.
Under "New Firmware File", click "Browse" and select the image.
Select "Update" and confirm by clicking "OK".
6. If the update fails, the web UI should show an error message.
Otherwise, the device should reboot into OpenWrt.
Device support followed from EAP620HD v2 and eap6xx-outdoor for DTS.
Links: openwrt/openwrt#18227
Update the econet-eth driver to a new version which is of
sufficient quality that it is realistic to think about upstreaming.
This version is now NAPI based, collects stats, downloads without
dropped packets anymore, has debugfs introspection, and can be
unloaded and reloaded (providing the reset controller is present).
PR #21545 is recommended but not required, without this the
ethernet driver will log a warning on startup because it can't get
the resets and it will be impossible to unload and reload the
driver without a reboot. However, the PoC driver was not capable of
reloading so this is not a regression.
That means that we have a "normal" function caller (can be
called during the whole uptime) and a "initialization" function
callee (only available during init.
Fix this and directly fix the unwanted family checks.
Jonas Jelonek [Sun, 11 Jan 2026 10:59:54 +0000 (10:59 +0000)]
realtek: mdio: apply phy polling config for RTL931x
Apply the PHY polling configuration for RTL931x too, as previously
implemented for RTL930x. This is needed for several PHYs on that
platform to function properly.
Add another flag called 'force_res' to the phy_info struct which is for
RTL931x only. The SDK mentions this as a flag to force polling the
Realtek proprietary PHY status resolution register. Effectively, this
changes the polling to proprietary format instead of standard format,
and sets an enable bit in another private polling register field.
Jonas Jelonek [Sun, 11 Jan 2026 10:12:00 +0000 (10:12 +0000)]
realtek: mdio: enhance reading phy id
Reading the PHY ID to assign a PHY config is currently simple. For C45
two MDIO reads of a hardcoded MMD are done to get the standard PHY ID
registers. MMD 31 (MMD_VEND2) is used for that purpose, assuming there
will be a valid PHY ID stored in this MMD in all cases. However, with
Aquantia AQR813 there's at least one example for which this isn't true.
This PHY returns 0 for the PHY ID in MMD_VEND2, instead MMD_VEND1 would
have the correct ID.
Enhance reading the PHY by accessing a common set of MMDs of which most
PHY at least implement one and have a valid PHY ID in. To keep overhead
low, do not scan all MMDs. As soon as a valid PHY ID is found, exit and
use that. This is similar to the kernel logic, jsut reduced to fewer
MMDs.
Also handle possible errors coming from MDIO reads to avoid reading garbage.
While at it, move reading the PHY ID to a separate function to not
pollute the poll fixup retrievel function.
realtek: mdio: use generic bus command function for RTL838x
The Realtek mdio bus works similar for all devices with only
minor family specific differences. Basically command issuing
follows a generic style. Write command type and a trigger.
Afterwards wait until the trigger flag goes back to zero (aka
"command complete"). Unify this sequence in a central helper.
RTL838x read/write callers of this helper use a strange style of
error handling by issuing goto statements. Refactor this for better
readability. Additionally remove all debug prints. These are not
needed as the central read/write handlers provide a common logging
mechanism.
Thomas Richard [Mon, 5 Jan 2026 15:31:36 +0000 (16:31 +0100)]
kernel: add OSNOISE_TRACER kernel config option
This adds the OSNOISE_TRACER kernel configuration option. The osnoise
tracer allows to track interference experienced by an application due to
activities inside the operating system (like NMIs, IRQs ...).
Thomas Richard [Wed, 21 Jan 2026 12:49:32 +0000 (13:49 +0100)]
loongarch64: set PREEMPT_NONE as default preemption model
Loongarch64 currently uses the PREEMPT_VOLUNTARY model, which is not
aligned with OpenWrt's default. Switch to PREEMPT_NONE for consistency with
OpenWrt's default configuration. Preemption model selection is now
available via menuconfig for further customization.
Thomas Richard [Wed, 21 Jan 2026 12:34:33 +0000 (13:34 +0100)]
mediatek: mt7623: set PREEMPT_NONE as default model
Mediatek/mt7623 currently uses the PREEMPT model, which is not aligned with
OpenWrt's default. Switch to PREEMPT_NONE for consistency with OpenWrt's
default configuration. Preemption model selection is now available via
menuconfig for further customization.
Signed-off-by: Thomas Richard <thomas.richard@bootlin.com> Link: https://github.com/openwrt/openwrt/pull/21413
[Added some config options again] Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Thomas Richard [Wed, 21 Jan 2026 12:08:23 +0000 (13:08 +0100)]
gemini: set PREEMPT_NONE as default preemption model
Gemini currently uses the PREEMPT model, which is not aligned with
OpenWrt's default. Switch to PREEMPT_NONE for consistency with OpenWrt's
default configuration. Preemption model selection is now available via
menuconfig for further customization.
Thomas Richard [Wed, 21 Jan 2026 10:54:14 +0000 (11:54 +0100)]
layerscape: set PREEMPT_NONE as default preemption model
Layerscape currently uses the PREEMPT model, which is not aligned with
OpenWrt's default. Switch to PREEMPT_NONE for consistency with
OpenWrt's default configuration. Preemption model selection is now
available via menuconfig for further customization.
Thomas Richard [Mon, 5 Jan 2026 12:46:52 +0000 (13:46 +0100)]
kernel: add preemption models
Introduce preemption model selection with PREEMPT_NONE as the default.
PREEMPT_NONE is the traditional Linux preemption model and also the best
choice for servers.
Hauke Mehrtens [Thu, 22 Jan 2026 22:54:33 +0000 (23:54 +0100)]
firewall: change synflood_protect option name
The `syn_flood` option name is deprecated, `synflood_protect` should
be used instead. firewall3 and firewall4 both support this option since
a long time. LuCI already replaces the option name.
https://github.com/openwrt/luci/commit/0abcb39b623f0eff0fbcdfb99fca8f3224701e86
David Yang [Mon, 19 Jan 2026 17:51:02 +0000 (01:51 +0800)]
iproute2: add dcb utility
KERNEL_DCB was introduced in 40f1db9cb11d, however the dcb utility is not
enabled for iproute2. Although DCB is not generally available among
Ethernet cards, not having the dcb utility renders it completely
unchangeable.
John Audia [Tue, 15 Jul 2025 09:46:52 +0000 (05:46 -0400)]
base-files: remove ftp user and group
Any ftpd package such as vsftpd or atftpd (are there others?) should
create their own unprivileged user. Both of the aforementioned
packages do not even use this ftp user and run as root. That should be
addressed in separate commits.
Linus Walleij [Wed, 21 Jan 2026 21:24:46 +0000 (22:24 +0100)]
gemini: support upgrade on reference designs
The Gemini reference design-derived devices uses a partition
format which is predictable and we can exploit this to offer
some proper upgrade path.
The kernel for these contains a hack to use this partition
format unaltered by combining the partitions "Kern" and "Ramdisk"
to one image with all of the kernel+ramdisk in memory.
Then the "Application" which is used for the rootfs go into its
own partition.
Following the pattern of the factory image we create three
images named zImage, rd.gz and hddapp.tgz (these filenames
are misleading! They are just required by the old firmware.)
and flash each individually with "mtd" during upgrades.
Since the IB-4220-V has a different layout with a bigger kernel
space we parameterize this so we can handle this too. (More
fixes are needed for that device though.)
A way to upgrade older OpenWrt on these platforms to the latest
and greatest will be to copy the file
target/linux/gemini/base-files/lib/upgrade/platform.sh
to /lib/upgrade/platform.sh
on your running system and then run sysupgrade from the image
produced after this patch.
The script is picky to sanity check the partitions before
commencing upgrade.
This was tested with a full sysupgrade on the iTian SQ201.
- phy_probe() for setup of structures
- config_init() for device setup (after reset)
RTL8214FC is a combo phy and the currently active port can be switched
with the SFP helper functions that are triggered during SFP insertion
and removal. In case a fibre SFP is inserted while booting the SFP
trigger is run between the above mentioned stages. During the final
setup in config_init() the phy is reset to the copper port. Thus no
link is available on fibre and the SFP must be reinserted for normal
operation.
For a consistent behaviour the fibre/copper port setup must run before
the SFP probing and not afterwards. Move the setup code from config_init()
into phy_probe().
Fixes: 10ae743 ("realtek: phy: simplify RTL8214FC configuration") Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de> Link: https://github.com/openwrt/openwrt/pull/21582 Signed-off-by: Robert Marko <robimarko@gmail.com>
realtek: phy: optimize RTL8214FC register usage during media set
There are some shortcomings in rtl8214fc_media_set()
- It always uses the mdio raw page (4095) of RTL838x for writes.
That is wrong when the phy is attached to an RTL839x (raw = 8191)
- It uses the internal write only extended page companion (29)
- The extended page content is not preserved