Compare commits

...

192 commits

Author SHA1 Message Date
Hauke Mehrtens
8fca489a02 OpenWrt v25.12.0-rc3: adjust config defaults
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-21 01:24:24 +01:00
Hauke Mehrtens
30527a4c34 Revert "kernel: pcs-mtk-lynxi: backport fix for in-band status capabilities"
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
This reverts commit 7390e63374.

This broke SFP handling on some Mediatek SoCs.
Some SFPs are configured for inband/2500base-x link mode and were
rejected with this change.

Fixes: https://github.com/openwrt/openwrt/issues/21436
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 8076376aca)
2026-01-21 01:20:54 +01:00
Paul Donald
cb206004ea ucode: enable ucode-mod-zlib
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
The module exists in ucode and has been present for a while
but has not been enabled. It provides the ucode zlib module
for handling gzip and zlib compression in ucode scripts.

The package is ~ 5Kb. Installed ~18Kb.

Signed-off-by: Paul Donald <newtwen+github@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21417
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 16ae5c23e5)
Link: https://github.com/openwrt/openwrt/pull/21608
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-20 11:47:57 +01:00
Felix Fietkau
d88e3573a7 ucode: add package for ucode-mod-io
It was included in the last update

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit ed2587c73d)
Link: https://github.com/openwrt/openwrt/pull/21608
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-20 11:47:57 +01:00
John Audia
df2d060dbd kernel: bump 6.12 to 6.12.66
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.66

All patches automatically rebased

Build system: x86/64
Build-tested: flogic/glinet_gl-mt6000
Run-tested: flogic/glinet_gl-mt6000

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/21591
(cherry picked from commit c0fb8e1f35)
Link: https://github.com/openwrt/openwrt/pull/21607
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-20 11:41:15 +01:00
Emre Yavuzalp
aafcf04d0d mediatek: filogic: TP-Link Archer AX80 v1 (EU) support
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
Device specification

SoC Type: MediaTek MT7986B, Cortex-A53, 64-bit 1.6GHz Quad Core
RAM: ESMT M15T4G16256 (512MB)
Flash: ESMT F50L1G41LB (128 MB)
Ethernet: MediaTek MT7531AE + 2.5GbE MaxLinear GPY211C0VC (SLNW8)
Ethernet: 1x2.5Gbe (WAN/LAN 2.5Gbps), 4xGbE (WAN/LAN 1Gbps, LAN1, LAN2, LAN3)
WLAN 2g: MediaTek MT7975
WLAN 5g: MediaTek MT7975
LEDs: All White(probably)

Buttons: 4 (Reset,ledswitch,wps,wlan),
USB ports: 1 (USB 3.0)
Power: 12 VDC, 2.0 A
Connector: Barrel
Bootloader: Main U-Boot - U-Boot 2022.01-rc4. Additionally, both UBI
slots contain "seconduboot" (also U-Boot 2022.01-rc4)
Serial console (UART)

                            V
+-------+-------+-------+-------+
| +3.3V |  GND  |  TX   |  RX   |
+---+---+-------+-------+-------+
    |
    +--- Don't connect

CPU BLOCK HERE                                                         LAN PORTS HERE

Installation (UART)
Note: There might be methods without UART possible soon.
Place OpenWrt initramfs image on tftp server with IP 192.168.1.2

Attach UART, switch on the router and interrupt the boot process by pressing 'Ctrl-C'

Load and run OpenWrt initramfs image:

      tftpboot initramfs-kernel.bin
      bootm

!!Attention!! is very important! After entering OpenWrt, please set / update the environment variables:

fw_setenv bootargs "ubi.mtd=ubi0 console=ttyS0,115200n1 loglevel=8 earlycon=uart8250,mmio32,0x11002000 init=/etc/preinit"
fw_setenv mtdids "spi-nand0=spi-nand0"
fw_setenv mtdparts "spi-nand0:2M(boot),1M(u-boot-env),50M(ubi0),50M(ubi1),8M(userconfig),4M(tp_data),8M(mali_data)"
fw_setenv tp_boot_idx 0

Run 'sysupgrade -n' with the sysupgrade OpenWrt image from console or Luci WebUI.

Recovery

Press Reset button and power on the router
Navigate to U-Boot recovery web server (192.168.1.1) and upload the OEM firmware

Stock layout

0x000000000000-0x000000200000 : "boot"
0x000000200000-0x000000300000 : "u-boot-env"
0x000000300000-0x000003500000 : "ubi0"
0x000003500000-0x000006700000 : "ubi1"
0x000006700000-0x000006f00000 : "userconfig"
0x000006f00000-0x000007300000 : "tp_data"
0x000007300000-0x000007B00000 : "mali_data"

ubi0/ubi1 format
U-Boot at boot checks that all volumes are in place:

+-------------------------------+
| Volume Name: uboot Vol ID: 0|
| Volume Name: kernel Vol ID: 1|
| Volume Name: rootfs Vol ID: 2|
+-------------------------------+
MAC addresses
+---------+-------------------+-----------+
| label | 00:eb:xx:xx:xx:be | label |
| LAN | 00:eb:xx:xx:xx:be | label |
| WAN | 00:eb:xx:xx:xx:bf | label+1 |
| WLAN 2g | 00:eb:xx:xx:xx:be | label |
| WLAN 5g | 00:eb:xx:xx:xx:bd | label-1 |
+---------+-------------------+-----------+
label MAC address was found in UBI partition "tp_data", file "default-mac".
OEM wireless eeprom is also there (file "MT7986_EEPROM.bin").

Signed-off-by: Emre Yavuzalp <emreyavuzalp2@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/20630
(cherry picked from commit 6bfb305394)
Link: https://github.com/openwrt/openwrt/pull/21594
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-20 01:54:03 +01:00
Fil Dunsky
db694b40c9 mediatek: add support for Airpi AP3000M
This adds support for the Airpi AP3000M 5G CPE based on MediaTek MT7981B.

Specifications:

SoC: MediaTek MT7981B (dual-core ARM Cortex-A53)
RAM: 1GB DDR4
Storage: 8GB or 16GB eMMC
Ethernet: 1x 2.5GbE LAN, 1x 1GbE WAN
Wireless: 2.4GHz/5GHz 802.11ax
Buttons: Reset, WPS
LEDs: System, 2.4GHz WiFi, 5GHz WiFi
Cooling: PWM-controlled fan
Expansion: M.2 slot for 5G modem

The factory partition (mmcblk0p2) is empty in stock firmware.
Execute via SSH before flashing OpenWrt:
```
dd if=/lib/firmware/MT7981_iPAiLNA_EEPROM.bin of=/dev/mmcblk0p2 bs=4k count=1
MAC addresses
```
Fixed MAC addresses are derived by macaddr_generate_from_mmc_cid.

Installation via U-Boot web page

Set static IP 192.168.88.2/255.255.255.0 on your computer.
Connect to the 1GbE port (WAN) and hold the reset button while booting the device. Wait for about 6 seconds, and release the reset button.
Open U-boot web page on your browser at http://192.168.88.1
Select the OpenWRT sysupgrade image, upload it, and start the upgrade.
Wait for automatic reboot.
Installation via sysupgrade

Flash the sysupgrade file via LuCI upgrade page without saving the settings.

Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21397
(cherry picked from commit: 6ff4557317)
Link: https://github.com/openwrt/openwrt/pull/21601
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-20 01:49:24 +01:00
Pierre-Emmanuel Frot
067178b7fd x86: cs5535audio: add support for subtarget legacy
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Build kernel module for cs5535 internal audio for target x86 "legacy" also
(so far only for target x86 "geode")

Signed-off-by: Pierre-Emmanuel Frot <piemfrot@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21596
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit e45ba0ef6e)
2026-01-19 12:51:45 +01:00
Maximilian Baumgartner
b590b79a77 mediatek: fix gmac definition for cudy m3000
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Build all core packages / Build all core packages for selected target (push) Has been cancelled
The gmac definition has an offset of 1 compared to the label MAC.
Fixes: a55ab9e134 ("mediatek: filogic: prevent faulty mac address assignment")

Signed-off-by: Maximilian Baumgartner <aufhaxer@googlemail.com>
Link: https://github.com/openwrt/openwrt/pull/21560
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 687a2535d5)
2026-01-18 11:37:02 +01:00
Robert Marko
528bee9e39
microchipsw: drop source-only
Now that there is a consumer board available, lets drop source-only so that
buildbots provide official images.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
2026-01-18 11:33:44 +01:00
Robert Marko
2210c6e632 boot: arm-trusted-firmware-microchipsw: depend on host Ruby
Microchip ATF depends on Ruby scripts to generate the FWU monitor HTML
and more, so make sure that host Ruby is available.

We also need to call the scripts directly via Ruby executable as shebang
wont work due to lack of Ruby in the Buildbot container.

Fixes: 5205c0c426 ("microchipsw: lan969x: add Microchip EV23X71A")
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
(cherry picked from commit 082fe669f7)
2026-01-18 11:21:27 +01:00
Robert Marko
111151379d boot: arm-trusted-firmware-microchipsw: fix compilation against LibreSSL
LibreSSL 3.9+ has dropped support for X509V3 extension API so cert_create
tool does not compile against it at all.

This was hidden by the fact that it was compiling against OpenSSL on my
host which still has that API, however we do not ship libssl-dev in the
Buildbot containers so compiling against distro OpenSSL is not possible.

So, after a long time trying to find any docs on that API I resorted to
LLM(Gemini 3 Pro) to get it to compile.

Our libcrypto is linked against pthread so we must pass -lpthread as well
for cert_tool.

Fixes: 5205c0c426 ("microchipsw: lan969x: add Microchip EV23X71A")
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
(cherry picked from commit 410277ca12)
2026-01-18 11:21:27 +01:00
George Sapkin
43057c5c16 imagebuilder: add ABI suffix to packages when using apk
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Build all core packages / Build all core packages for selected target (push) Has been cancelled
Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
If an apk package with an ABI version doesn't have priority set, it
can't be selected by its base name:

$ make manifest PACKAGES='libustream-openssl libsqlite3'
ERROR: unable to select packages:
  libsqlite3 (virtual):
    note: please select one of the 'provided by'
          packages explicitly
    provided by: libsqlite3-0
    required by: world[libsqlite3]
  libustream-openssl (virtual):
    note: please select one of the 'provided by'
          packages explicitly
    provided by: libustream-openssl20201210
    required by: world[libustream-openssl]

Look up the ABI version in apk index and if present, add an ABI suffix
to all requested packages.

Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21449
(cherry picked from commit 31cdd13d22)
Link: https://github.com/openwrt/openwrt/pull/21547
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-16 17:13:00 +01:00
George Sapkin
d943ebf5b3 build: add default priority to ABI-versioned packages
If a package has an ABI version defined, set priority to 10. The enables
packages with an ABI version to be installed by their base name instead
of a name and an ABI version, e.g.:

libfoo3, where 3 is the ABI version can be installed by just libfoo.

This affects manual installation only, as the dependency resolution
takes care of ABI versions.

Refactor apk priority logic into a helper define.

Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21369
(cherry picked from commit 470e030a5e)
Link: https://github.com/openwrt/openwrt/pull/21547
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-16 17:13:00 +01:00
George Sapkin
f74790057f build: remove redundant shebang from apk lifecycle scripts
Due to the way apk lifecycle scripts are defined, they might end up with
multiple shebangs. Remove them.

Before:

  post-upgrade: |
    #!/bin/sh
    export PKG_UPGRADE=1
    #!/bin/sh
    [ "${IPKG_NO_SCRIPT}" = "1" ] && exit 0
    [ -s ${IPKG_INSTROOT}/lib/functions.sh ] || exit 0
    . ${IPKG_INSTROOT}/lib/functions.sh
    export root="${IPKG_INSTROOT}"
    export pkgname="adblock-fast"
    add_group_and_user
    default_postinst
    #!/bin/sh
    # check if we are on real system
    if [ -z "${IPKG_INSTROOT}" ]; then
    	/etc/init.d/adblock-fast enable
    fi
    exit 0

After:

  post-upgrade: |
    #!/bin/sh
    export PKG_UPGRADE=1
    [ "${IPKG_NO_SCRIPT}" = "1" ] && exit 0
    [ -s ${IPKG_INSTROOT}/lib/functions.sh ] || exit 0
    . ${IPKG_INSTROOT}/lib/functions.sh
    export root="${IPKG_INSTROOT}"
    export pkgname="adblock-fast"
    add_group_and_user
    default_postinst
    # check if we are on real system
    if [ -z "${IPKG_INSTROOT}" ]; then
    	/etc/init.d/adblock-fast enable
    fi
    exit 0

Fixes: b52e897 ("include/package-pack: remove leading whitespace from install scripts")
Fixes: 03880e2 ("include/package-pack: add missing apk package lifecycle events")
Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21369
(cherry picked from commit 1dec4683f6)
Link: https://github.com/openwrt/openwrt/pull/21547
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-16 17:13:00 +01:00
George Sapkin
46244b6b0b build: fix implicit self-provides
Fix setting implicit self-provides for packages when they don't have any
PROVIDES specified.

Remove redundant self-provide for kmods, since kmods are packages and
will have a self-provide added already.

Fixes: 5ed650a ("build: add support for virtual provides")
Fixes: 9b37b71 ("build: provide virtual self in kmods")
Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21369
(cherry picked from commit 2d844a0770)
Link: https://github.com/openwrt/openwrt/pull/21547
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-16 17:13:00 +01:00
George Sapkin
2f644e7cad elfutils: drop libelf1 provide
ABI version is added to a package name during packaging, so there's no
need to specify it manually. And nothing explicitly depends on libelf1.

Fixes: d7bf089 ("elfutils: rename libelf1 to libelf")
Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21369
(cherry picked from commit 8cc2743c48)
Link: https://github.com/openwrt/openwrt/pull/21547
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-16 17:13:00 +01:00
George Sapkin
6543c6800b uclient: provide virtual wget-any
Packages shouldn't provide a package that another package, in this case
wget from packages provides. Explicitly provide a virtual @wget-any
instead to match the implicit wget provide and switch the only consumer
to use the new provider.

Set uclient-fetch as the default variant for wget-any.

Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21369
(cherry picked from commit af1fa176c3)
Link: https://github.com/openwrt/openwrt/pull/21547
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-16 17:12:59 +01:00
George Sapkin
953ef12689 build: fix provides logic when ABI version is set
Same as for the base package name, when a package has an ABI version,
provide both unversioned provider in addition to one with ABI version
and version.

So for each provide instead of providing only:

$provide$ABI_version=$package_version

now provide:

$provide $provide$ABI_version=$package_version

When a provide ends in a number, the ABI version will be prefixed with
a - sign, e.g.: provide1-0

Fixes: 18029977 ("build: fix apk packaging and ABI-versioning")
Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21369
(cherry picked from commit 952c918028)
Link: https://github.com/openwrt/openwrt/pull/21547
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-16 17:12:59 +01:00
George Sapkin
b4e537e9cd build: refactor dependency formatting
Refactor dependencies and extra dependencies logic into a helper define
and document it.

Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21369
(cherry picked from commit 779fa7ff6c)
Link: https://github.com/openwrt/openwrt/pull/21547
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-16 17:12:59 +01:00
George Sapkin
5976c47b9f build: don't auto mark all provides as virtual
Don't mark all provides as virtual when ALTERNATIVES is set.
Automatically marking all provides as virtual prevents variants from
conflicting between each other. Alternatives have nothing to do with
packaging and packages are expected to manage their own provides.

Updated internal provides explanation.

Remove unnecessary back slashes from FormatProvides.

Fixes: 18029977 ("build: fix apk packaging and ABI-versioning")
Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21369
(cherry picked from commit 2a1977a4b8)
Link: https://github.com/openwrt/openwrt/pull/21547
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-16 17:12:59 +01:00
George Sapkin
9a0045bbbf build: remove default provider priority
Remove default provider priority since packages are expected to
explicitly declare virtual provides and set default variants. With
default priority some package variants without PROVIDES and not marked
as default end up with priority 0 and are not picked for installation.

Before the change dnsmasq-dhcpv6 is selected for dnsmasq, because the
former has higher priority:

name <dnsmasq> selected from selectable list
select_package: dnsmasq (requirers=1, autosel=1, iif=0, order_id=0x4000005f)
  consider dnsmasq-2.91-r2 iif_triggered=0, tag_ok=1, selectable=1, available=1, flags=0x0, provider_priority=0, installed=0
   prefer existing package
    choose as new provider
  consider dnsmasq-dhcpv6-2.91-r2 iif_triggered=0, tag_ok=1, selectable=1, available=1, flags=0x0, provider_priority=1, installed=0
    prefer highest declared provider priority
    choose as new provider
  consider dnsmasq-full-2.91-r2 iif_triggered=0, tag_ok=1, selectable=1, available=1, flags=0x0, provider_priority=1, installed=0
    prefer lowest available repository
selecting: dnsmasq-dhcpv6-2.91-r2, available: 1
assign dnsmasq-dhcpv6 to dnsmasq-dhcpv6-2.91-r2
assign dnsmasq to dnsmasq-dhcpv6-2.91-r2
disqualify_package: dnsmasq-2.91-r2 (conflicting provides)
disqualify_package: dnsmasq-full-2.91-r2 (conflicting provides)
    apply_constraint: libc
    apply_constraint: provider: libc-1.2.5-r5: 1

After the change dnsmasq is selected for dnsmasq based on
lexicographical order:

name <dnsmasq> selected from selectable list
select_package: dnsmasq (requirers=1, autosel=1, iif=0, order_id=0x4000005f)
  consider dnsmasq-2.91-r2 iif_triggered=0, tag_ok=1, selectable=1, available=1, flags=0x0, provider_priority=0, installed=0
   prefer existing package
    choose as new provider
  consider dnsmasq-dhcpv6-2.91-r2 iif_triggered=0, tag_ok=1, selectable=1, available=1, flags=0x0, provider_priority=0, installed=0
    prefer lowest available repository
  consider dnsmasq-full-2.91-r2 iif_triggered=0, tag_ok=1, selectable=1, available=1, flags=0x0, provider_priority=0, installed=0
    prefer lowest available repository
selecting: dnsmasq-2.91-r2, available: 1
assign dnsmasq to dnsmasq-2.91-r2
disqualify_package: dnsmasq-dhcpv6-2.91-r2 (conflicting provides)
disqualify_package: dnsmasq-full-2.91-r2 (conflicting provides)
    apply_constraint: libc
    apply_constraint: provider: libc-1.2.5-r5: 1

Fixes: dea8397 ("include/package-pack: add default 'provider_priority' for APK packages")
Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21369
(cherry picked from commit 49fc319033)
Link: https://github.com/openwrt/openwrt/pull/21547
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-16 17:12:59 +01:00
Steffen Förster
e753ed9cec ramips: fix gmac definition for cudy ap1300 outdoor
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
The gmac definition has an offset of 1 at the moment. This leads to an
off by one error in downstream projects that rely on the package label mac.

Signed-off-by: Steffen Förster <nemesis@chemnitz.freifunk.net>
Link: https://github.com/openwrt/openwrt/pull/21543
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 66b6791abe)
2026-01-15 23:11:00 +01:00
Jörg Seitz
8bf63c2289 mediatek: add support for device zbt-z8103ax-c
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
- adopted MTD partition size increase from 64M to 128M
  -> this allows boot to complete
- moved MAC addressing stuff out of partition definitions
- all MAC addressing stuff is in .dtsi

Specifications:

SoC: MediaTek MT7981B
RAM: 256MiB
Flash: Winbond SPI-NAND 128 MiB
Switch: 1 WAN, 3 LAN (Gigabit) MediaTek MT7531
Buttons: Reset, Mesh
Power: DC 12V 1A
WiFi: MT7981B 2.4Ghz & 5.8Ghz

Led Layout from bottom to top:

    Power
    Mesh (RGB Led, user controllable, default set to OpenWrt Status)
    WLAN 2 GHz (user controllable)
    WAN (user controllable)
    LAN3
    LAN2
    LAN1
    WLAN 5 GHz (Not on front panel but blinks through enclosure,
               user controllable)

Buttons:

    Reset
    Mesh (user controllable, no default function)

Installation:

A. Through U-Boot menu:

 -  Prepare your connecting computer to use a static IP in
	network 192.168.1.0/24
 -  Power down the router and hold in the Reset button.
 -  While holding in the button power up the router again.
 -  Hold the button in for 10 seconds and then release.
 -  Use your browser to go to 192.168.1.1
 -  If you see a GUI allowing for flashing firmware then
	you got the right model.
 -  Upload the sysupgrade file.

Note: Recovery GUI can be used to recover from an incorrect
      firmware flash.

B. Through OpenWrt Dashboard:

    If your router comes with OpenWrt preinstalled
	(modified by the seller), you can easily upgrade
	by going to the dashboard (192.168.1.1) and then
	navigate to System -> Backup/Flash firmware,
	then flash the firmware

MAC Addresses were found in Factory partition:

offset 0x4 F8:5E:3C:xx:xx:aa --> Router Label -2
offset 0xa F8:5E:3C:xx:xx:bb --> Router Label -1
offset 0x24 F8:5E:3C:xx:xx:cc --> Router Label +1
offset 0x2a F8:5E:3C:xx:xx:yy --> printed on Router Label

Signed-off-by: Jörg Seitz <github.joeterminal@xoxy.net>
Link: https://github.com/openwrt/openwrt/pull/19823
(cherry picked from commit 479f1403f2)
Link: https://github.com/openwrt/openwrt/pull/21464
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-15 21:28:46 +01:00
Jörg Seitz
5067807ba8 mediatek: extract DTS include for zbt z8103ax
- Use .dtsi for old z8103ax featuring a 64M Nand
- Prepare .dtsi for model C of z8103ax featuring a 128M Nand

This .dtsi is supposed to match boards labeled as hardware
revision Z8103AX_V01. Model variant D of zbt-z8103ax appears
to use very same board.

DTS include does also

- set wifi mac addresses in &wifi section
- set eth mac addresses in &eth section
- set LAN switch mac addresses in &switch section

All of the above allows to get rid of 11_fix_wifi_mac script

Signed-off-by: Jörg Seitz <github.joeterminal@xoxy.net>
Link: https://github.com/openwrt/openwrt/pull/19823
(cherry picked from commit b21b019af4)
Link: https://github.com/openwrt/openwrt/pull/21464
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-15 21:28:31 +01:00
Val Kulkov
f138ad9112 wifi-scripts: fix wifi failure on specifying value of DAE client
The code to be replaced is a glorious no-op. A default value for
config.radius_das_client does not need to be assigned. This parameter
already has non-empty value: see the enclosing 'if' block.

As a result, the value of config.radius_das_client never gets modified
to contain both dae_client and dae_secret. This breaks hostapd.add_iface()
that expects config.radius_das_client to contain both dae_client and
dae_secret separated by a whitespace.

Fixes: #21519
Signed-off-by: Val Kulkov <val.kulkov@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21522
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit c7f585bfc3)
2026-01-15 21:11:02 +01:00
John Audia
e4264e0a22 kernel: bump 6.12 to 6.12.65
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.65

Manually rebased:
  generic/hack-6.12/904-debloat_dma_buf.patch
  econet/patches-6.12/010-v6.16-MAINTAINERS-Add-entry-for-newly-added-EcoNet-platfor.patch

Build system: x86/64
Build-tested: flogic/glinet_gl-mt6000
Run-tested: flogic/glinet_gl-mt6000

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/21431
(cherry picked from commit 226981d49c)
Link: https://github.com/openwrt/openwrt/pull/21546
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-15 20:55:54 +01:00
John Audia
31b1c6541e kernel: bump 6.12 to 6.12.64
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.64

Manually rebased:
  bcm27xx/patches-6.12/950-0019-BCM2708-Add-core-Device-Tree-support.patch
  bcm27xx/patches-6.12/950-0446-i2c-designware-Add-support-for-bus-clear-feature.patch
  bcm27xx/patches-6.12/950-0875-PCI-brcmstb-Add-bcm2712-support.patch
  ipq40xx/patches-6.12/401-mmc-sdhci-msm-comment-unused-sdhci_msm_set_clock.patch

Removed upstreamed:
  generic-backport/403-v6.19-mtd-mtdpart-ignore-error-ENOENT-from-parsers-on-subp.patch[1]
  bcm27xx/patches-6.12/950-0873-PCI-brcmstb-Reuse-config-structure.patch[2]
  bcm27xx/patches-6.12/950-0888-PCI-brcmstb-don-t-use-ASPM-state-defines-for-registe.patch[3]
  bcm27xx/patches-6.12/950-0951-media-i2c-imx219-Restore-the-1920x1080-to-using-a-1-.patch[4]

All other patches automatically rebased.

1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.64&id=846ceb1a94460f7331e879c02ff2dd505435b51b
2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.64&id=8d185636a6299ff9d2e9eec3a4a25026c13d2351
3. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.64&id=38aa6ca6285ff76a7570e5b9acd1151f5cea783a
4. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.64&id=620f9d7bcf771b532bce67ffecf2d97759a4747f

Build system: x86/64
Build-tested: flogic/glinet_gl-mt6000, ramips/tplink_archer-a6-v3
Run-tested: flogic/glinet_gl-mt6000, ramips/tplink_archer-a6-v3

Signed-off-by: John Audia <therealgraysky@proton.me>
Co-Authored-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
Link: https://github.com/openwrt/openwrt/pull/21431
[Fixed: 950-0019-BCM2708-Add-core-Device-Tree-support.patch]
[remove 950-0888-PCI-brcmstb-don-t-use-ASPM-state-defines-for-registe.patch]
(cherry picked from commit ba6b07a4ab)
Link: https://github.com/openwrt/openwrt/pull/21546
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-15 20:55:54 +01:00
Hauke Mehrtens
6656ce2f47 bcm27xx: refresh kernel patches
The patch 950-0019-BCM2708-Add-core-Device-Tree-support.patch creates a
symbolic link. It looks like quilt does not support this and never
refreshed it.

I removed the symbolic link, refreshed the patch and then added it
back again.

Link: https://github.com/openwrt/openwrt/pull/21431
(cherry picked from commit 39700aeaa1)
Link: https://github.com/openwrt/openwrt/pull/21546
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-15 20:55:54 +01:00
John Audia
c8eacec725 mac80211: fix build for 6.12.64 bump
Disable the backport shim on 6.12.64 and newer where the function
is provided by the kernel.

References:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/include/linux/hrtimer.h?h=v6.12.64&id=12493e7e888d266453d1c3898dc160178749afb3
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/include/linux/hrtimer.h?h=v6.12.64&id=d579cc549298a02ba90b7a6d20a2ba8e160f3f31

Co-Authored-by: Pascal Ernster <git@hardfalcon.net>
Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/21431
(cherry picked from commit 5b887135ba)
Link: https://github.com/openwrt/openwrt/pull/21546
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-15 20:55:54 +01:00
Álvaro Fernández Rojas
88f97a9649 netifd: use stable IAID for DHCPv4
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
Commit 9151c7015e introduced support for the global DHCP DUID to
generate a RFC4361-style client identifier.
However, the IAID introduced in those changes is based on ifindex, which
is subject to changes and causes issues on environments requiring a stable
IAID.

This commit switches the IAID to a stable one based on MD5.

(cherry picked from commit e1c125c167)
Fixes: 9151c7015e ("netifd: use the global DHCP DUID for DHCPv4")
Link: https://github.com/openwrt/openwrt/pull/21489
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2026-01-15 11:06:32 +01:00
Álvaro Fernández Rojas
b5d0946351 base-files: introduce a function to generate IAID
Add new function "network_generate_iface_iaid()" to generate a stable IAID
from an interface name.

(cherry picked from commit e1f2b666ff)
Link: https://github.com/openwrt/openwrt/pull/21489
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2026-01-15 11:06:32 +01:00
Hauke Mehrtens
073a8d07e9 libiwinfo: update to Git HEAD (2026-01-14)
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
f5dd57a84cc3 nl80211: fix 5Ghz frequency calculations

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit f6429413d9)
2026-01-15 01:31:18 +01:00
Pawel Dembicki
7f6d739fd7 mpc85xx: fix failsafe iface selection for mpc85xx boards
Some mpc85xx boards still boot with failsafe configured on a non-LAN
interface. Align the preinit interface with the first DSA port or the
interface that LAN is connected to.

This makes failsafe reachable on devices where the default selection does
not map to the primary LAN port.

Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21516
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit a73db6d0a0)
2026-01-15 01:31:17 +01:00
Pawel Dembicki
85a4358432 mpc85xx: p2020: add support for WatchGuard XTM330 (NC5AE7)
Hardware specifications:
  - CPU: Freescale/NXP P2020, dual-core PowerPC @ 1 GHz
  - RAM: 1 GB DDR3
  - Flash: 2 MB NOR, 512 MB NAND
  - Networking: 7x Gigabit Ethernet ports (via two Marvell 88E6171
    switches,  each attached to a different MAC)
  - USB: 2x USB 2.0 ports (front panel)
  - mini-PCIe slot
  - RTC: Ricoh RS5C372A
  - 4 buttons (via external MCU)
  - 3 LEDs (via external MCU)
  - LCD display (via external MCU)

Installation procedure:

1. Obtain the original MAC address table from the stock bootlog, for
   example:

     setting device eth0 to 00:90:7f:00:00:01
     setting device eth1 to 00:90:7f:00:00:02
     setting device eth2 to 00:90:7f:00:00:03
     setting device eth3 to 00:90:7f:00:00:04
     setting device eth4 to 00:90:7f:00:00:05
     setting device eth5 to 00:90:7f:00:00:06
     setting device eth6 to 00:90:7f:00:00:07

2. Open the case and move jumper JP1 from 2-3 to 1-2 to enter FAILSAFE
   mode.
3. Power on the device and interrupt the boot process to access the U-Boot
   shell.
4. Program the MAC base address into the EEPROM (text after '#' is a
   comment):

     mac ports 3
     mac 2 00:90:7f:00:00:01   # first MAC address from bootlog
     mac save

5. Reset the device and enter the U-Boot console again.
6. Connect a TFTP server to port 6 and boot the initramfs image:

     setenv ipaddr 192.168.1.3
     setenv serverip 192.168.1.2
     setenv loadaddr 1000000
     tftpboot $loadaddr openwrt-mpc85xx-p2020-watchguard_xtm330-initramfs-kernel.bin
     bootm $loadaddr

7. (Optional) Backup all MTD partitions if you want the ability to restore
   stock firmware.
8. Perform a normal sysupgrade from the initramfs environment.
9. Power off the device and move jumper JP1 back to 2-3.
10. The device will now boot OpenWrt.

Known issues:
  - LCD, buttons and LEDs are controlled by an external MCU; the protocol is
    currently unknown.
  - The internal connection between the two Marvell switches is unused by
    OpenWrt.
  - The stock firmware uses an empty U-Boot environment; saving variables
    modifies the environment and prevents a normal boot. FAILSAFE U-Boot
    remains functional.
  - WatchGuard configuration is encrypted; DSA MAC addresses are stored in
    this configuration.
  - Failsafe Ethernet works on port1.

Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21020
(cherry picked from commit 6150f9ceab)
Link: https://github.com/openwrt/openwrt/pull/21517
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-15 01:30:29 +01:00
FUKAUMI Naoki
c9e2d8191b rockchip: add "compat_version": "1.1" for Radxa E52C
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
This is something I missed in https://github.com/openwrt/openwrt/pull/20608

Fixes: 1f1db75432 ("rockchip: make NIC name predictable for Radxa E52C/ROCK 5 ITX/ROCK 5T")
Signed-off-by: FUKAUMI Naoki <naoki@radxa.com>
Link: https://github.com/openwrt/openwrt/pull/21533
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 43039157ba)
2026-01-14 11:21:15 +01:00
Carl-Daniel Hailfinger
d01aa41d40 realtek: ethernet: avoid using unitialized memory
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Build all core packages / Build all core packages for selected target (push) Has been cancelled
The mac_addr variable was not zero-initialized, causing weird side effects
when the memory contents were a valid MAC address.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Link: https://github.com/openwrt/openwrt/pull/21504
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
(cherry picked from commit 19b8d391a9)
2026-01-13 00:23:38 +01:00
Til Kaiser
4542656411 kernel: modules: add kmod-pmbus-sensors package
Introduce the kmod-pmbus-sensors package to provide the
generic PMBus hwmon driver (CONFIG_SENSORS_PMBUS).

This enables support for a wide range of PMBus-based devices
including ADP4000, BMR310, BMR480, MAX20796, TPS544B25, and others.

Signed-off-by: Til Kaiser <mail@tk154.de>
Link: https://github.com/openwrt/openwrt/pull/21444
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 9653fd423b)
2026-01-13 00:23:38 +01:00
Anari Jalakas
33ef80f2c6 readline: add $(FPIC) to LDFLAGS
Ensure -fPIC is passed during the linking stage to fix LTO build
failures (relocation errors) on MIPS and other architectures.

Fixes: #20436
Signed-off-by: Anari Jalakas <anari.jalakas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21455
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 4ff0f496a4)
2026-01-13 00:23:38 +01:00
Jakub Vaněk
b413363b47 mediatek: fix PHY autodetection on Cudy WR3000H
Newer Cudy WR3000H units have a Motorcomm YT8821 PHY instead of a
Realtek PHY on the WAN port. Before this commit, the Motorcomm PHY
could not be autodetected by the kernel -- the PHY would show up as
just a generic clause 45 PHY and the proper driver would not be loaded.

The cause of the detection failure likely was that the YT8821 PHY was
held in reset during PHY detection. To fix this, move the reset GPIO
definition to the MDIO bus level. This reset line is deasserted before
the autodetection process, see also [1]. With this change, both Realtek
and Motorcomm PHYs can be supported with a single device tree.

[1]: https://lore.kernel.org/all/20251119134750.394655-1-horatiu.vultur@microchip.com/

Signed-off-by: Jakub Vaněk <linuxtardis@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21399
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 02f0efd60b)
2026-01-13 00:19:55 +01:00
Andrew MacIntyre
7dbacdaa80 mediatek: add Motorcomm PHY driver to Cudy WR3000H
Recent Cudy WR3000H v1 units have a Motorcomm YT8821 2.5G PHY for
the WAN interface instead of the RTL8221B PHY used in earlier units,
so add kmod-phy-motorcomm to be able to use it.

Signed-off-by: Andrew MacIntyre <andymac@pcug.org.au>
[linuxtardis@gmail.com: slightly reworded the commit description]
Signed-off-by: Jakub Vaněk <linuxtardis@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21399
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit dbafbab876)
2026-01-13 00:19:54 +01:00
Andrew MacIntyre
8d407de491 kernel: add kmod-phy-motorcomm
The Motorcomm YT8821 2.5G PHY is being used in some devices as an
alternative to devices like the RTL8221B.  Package it as a kmod
so it can be used as a device package rather than requiring changes
to the target kernel config.

Signed-off-by: Andrew MacIntyre <andymac@pcug.org.au>
Link: https://github.com/openwrt/openwrt/pull/21399
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 96a1337374)
2026-01-13 00:19:52 +01:00
Rany Hany
31daacadd4 wifi-scripts: move no_probe_resp_if_max_sta to wifi-iface
Some checks failed
Build all core packages / Build all core packages for selected target (push) Has been cancelled
It is a BSS-level option and not radio-level. As such,
move it to wifi-iface and ap.uc.

Signed-off-by: Rany Hany <rany_hany@riseup.net>
Link: https://github.com/openwrt/openwrt/pull/21412
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 9b1b5a6aec)
2026-01-11 20:22:36 +01:00
Eric Fahlgren
2c7bce7202 base-files: uci-defaults: migrate time zonename on upgrade
Some checks failed
Build all core packages / Build all core packages for selected target (push) Waiting to run
Build Kernel / Build all affected Kernels (push) Has been cancelled
Timezone names no longer allow spaces, so older installations
upgrading to new will have their timezone reset to UTC.

For example, on 24.10:
  $ uci get system.@system[0].zonename
  America/Los Angeles

After upgrade to 25.12:
  $ uci get system.@system[0].zonename
  UTC

Add a migration script to edit zonename on first boot.

Fixes: https://github.com/openwrt/luci/commit/d9a087e4
Link: https://github.com/openwrt/luci/issues/8203
Link: https://forum.openwrt.org/t/openwrt-25-12-0-rc1-release-candidate/244364/98
Signed-off-by: Eric Fahlgren <ericfahlgren@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21482
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 54c7ad8d8a)
2026-01-11 19:13:32 +01:00
Leo Barsky
09bdb71acc econet: refresh patches 6.12
Manually rebased:
econet/patches-6.12/901-nand-enable-en75-bbt.patch

Fixes: 5230157a16 ("kernel: QCOM SPI NAND: backport multiple fixes")
Signed-off-by: Leo Barsky <leobrsky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/21500
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit cffc2a9102)
2026-01-11 19:10:38 +01:00
Rany Hany
49f9248ec9 wifi-scripts: ucode: fix RRM defaults
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
They are being default enabled unconditionally when they should
depend on 802.11k. 802.11k should not be enabled by default
either as it can cause issues with certain older drivers and
is useless without a userspace program like usteer or DAWN.

If users want to enable 802.11k they will enable it when they
set such programs up.

Another inconsistency with rnr was dealt with so that it is not
default enabled. This is also not done with old wifi-scripts
and is generally unexpected and surprising behavior.

Moreoever, this introduces an inconsistency between old shell
wifi-scripts and ucode version. Old wifi-scripts does not do this.

Signed-off-by: Rany Hany <rany_hany@riseup.net>
Link: https://github.com/openwrt/openwrt/pull/21425
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit ee60b65643)
2026-01-11 17:28:40 +01:00
Thomas Perale
51fab879a7 ppp: update deprecated cpe
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
The CPE 'samba:ppp' added in OpenWrt commit [1], has been deprecated in
favour of 'point-to-point_protocol_project:point-to-point_protocol'
(see [2]).

[1] c61a239514 add PKG_CPE_ID ids to package and tools
[2] https://nvd.nist.gov/products/cpe/detail/1224B76D-6BB3-4088-9F42-23AC04A764F2

Signed-off-by: Thomas Perale <thomas.perale@mind.be>
Link: https://github.com/openwrt/openwrt/pull/21441
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit dd519f6c05)
2026-01-11 16:48:41 +01:00
Tianling Shen
f9e60e980c rockchip: fix kernel tag for backported patches
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
These patches were actually merged in kernel 6.19 instead of 6.18,
fix them to avoid confusing when moving to new kernel version.

While at it, refresh the RK3528 PCIE L1ss patch since it was
accepted in 6.19 as well.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
Link: https://github.com/openwrt/openwrt/pull/21419
(cherry picked from commit c79fa27cbf)
Link: https://github.com/openwrt/openwrt/pull/21448
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-11 13:13:21 +01:00
Robert Marko
1bff8d0210 linux: crypto: fix dependencies for curve25519 and poly1305
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
Currently, kmod-crypto-kpp is only implied for curve25519 and thus it
can get unselected and then building will fail due to missing kpp.ko.

Same issue happens with kmod-crypto-hash for poly1305.

So, lets drop the whole implies logic and make sure to always select
them as dependencies.

Fixes: #21386
Link: https://github.com/openwrt/openwrt/pull/21483
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 93665d0aa3)
2026-01-11 11:12:04 +01:00
JINLIANG GU
46e4aa3283 netifd: dhcp: suppress udhcpc default vendor class if specified in sendopts
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
When DHCP Option 60 is specified via sendopts (hex, decimal, or named
formats), udhcpc sends its default "udhcp <version>" string alongside
the custom value, which causes authentication failures with some ISPs.

This fix detects Option 60 in sendopts and automatically passes -V ""
to udhcpc to suppress the default version string while allowing
multiple user-defined vendor classes.

Supported formats:
- Hexadecimal: 0x3c
- Decimal: 60
- Named: vendor

(cherry picked from commit 89d982d723)
Fixes: #21242
Signed-off-by: JINLIANG GU <ihipop@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21450
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2026-01-10 20:38:54 +01:00
Robert Marko
858bde06b5 microchipsw: lan969x: add Novarq Tactical 1000
Some checks failed
Build all core packages / Build all core packages for selected target (push) Waiting to run
Build Kernel / Build all affected Kernels (push) Has been cancelled
Novarq Tactical 1000 is a LAN9696 based switch.

Specifications:
* CPU: Microchip LAN9696 switch SoC
* DRAM: 2GB DDR4
* Storage:
	* 32MB QSPI NOR
	* 16GB eMMC
* Networking:
	* 24 x 10/100/1000 RJ45 via LAN8804 Quad PHY-s over QSGMII
	* 4 x 100/1000/2500/5000/10000 SFP+ ports
	* 1 x 10/100/1000 management RJ45 via LAN8840 PHY over RGMII (U-Boot too)
* USB: 1 x USB2.0 Type-A
* Management via USB-C (MCP2200):
	* UART @ 115200 baud (Default), 921600 possible
	* GPIO-s for bootstrap and reset
* LED-s:
	* 2 per networking port (Green and Yellow)
	* Green status LED
* Soft reset GPIO
* Power: 12V DC barrel jack
* External PoE:
	* Option for PoE add-on
* Temperature Sensors:
	* TMP1075 onboard
	* CPU temperature
* Microchip MCP79402 RTC with battery back-up
* Microchip ATECC608C secure peripheral
* CPU heatsink with PWM fan
* Onboard header for case fan

Installation instructions:

1. Connect to UART via the USB-C port
2. Connect the management port
3. Boot and interrupt U-Boot
4. TFTP the OpenWrt initramfs image and boot it
5. SCP the OpenWrt eMMC GPT image to a running OpenWrt initramfs to /tmp
openwrt-microchipsw-lan969x-novarq_tactical-1000-squashfs-emmc-gpt.img.gz

And decompress it via:
gzip -d /tmp/openwrt-microchipsw-lan969x-novarq_tactical-1000-squashfs-emmc-gpt.img.gz

6. Wipe eMMC with:
dd if=/dev/zero of=/dev/mmcblk0 bs=1M

7. Flash OpenWrt eMMC image with:
dd if=/tmp/openwrt-microchipsw-lan969x-novarq_tactical-1000-squashfs-emmc-gpt.img
of=/dev/mmcblk0

After a restart OpenWrt will boot, and then regular sysupgrade can be used
for upgrades.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
(cherry picked from commit 29b3d929a6)
2026-01-09 18:55:19 +01:00
Robert Marko
122fcb21da microchipsw: use upstreamed patches
Replace some of the pending patches with the upstreamed versions and mark
them accordingly.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
(cherry picked from commit 7b7a559976)
2026-01-09 18:55:19 +01:00
Robert Marko
1d474646aa boot: arm-trusted-firmware-microchipsw: update to latest
Update microchipsw TF-A to the latest bugfix release that fixes
SHA checksum validation if large files are uploaded via the monitor mode.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
(cherry picked from commit 6e0379deb9)
2026-01-09 18:55:19 +01:00
Robert Marko
7d9602e527 microchipsw: use latest DTS
Use the latest v3 that is sent upstream, it now uses a DTS header for clock
indices.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
(cherry picked from commit 6944f1c6a0)
2026-01-09 18:55:19 +01:00
Shiji Yang
d925dd4887 tools/squashfs4: fix rare data corruption issue
Some checks failed
Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
There is a chance that the squashfs4 tool may create a broken image
under certain conditions. Backport the fix from upstream to address
this issue.

Report: https://forum.openwrt.org/t/bug-squashfs4-tools-4-7-4-create-corrupted-image/244894
Fixes: 64432358e0 ("tools/squashfs4: update to 4.7.3")
Reported-by: Oleg S <remittor@gmail.com>
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21458
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit d93429888c)
2026-01-09 17:09:31 +01:00
Robert Marko
99a46b745c ipq-wifi: rename BDF for EAP623-Outdoor HD v1
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Build all core packages / Build all core packages for selected target (push) Has been cancelled
BDF for EAP623-Outdoor HD v1 was renamed in the repo, but ipq-wifi
was not updated to reflect that, so do it now to fix broken wifi.

Fixes: #21432
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 0ff1553bd7)
2026-01-08 11:18:58 +01:00
Hauke Mehrtens
7082aa3b49 OpenWrt v25.12.0-rc2: revert to branch defaults
Some checks failed
Build all core packages / Build all core packages for selected target (push) Has been cancelled
Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 23:56:34 +01:00
Hauke Mehrtens
4dd2e6ec5b OpenWrt v25.12.0-rc2: adjust config defaults
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 23:56:31 +01:00
George Sapkin
d76c64ad00 build: restore opkg-related provides logic
Re-add opkg provides logic to CONTROL when USE_APK is not set and remove
virtual provider prefix.

Fixes: cefbf11 ("build: refactor provides logic")
Fixes: https://github.com/openwrt/openwrt/issues/21372
Fixes: https://github.com/openwrt/openwrt/issues/21382
Fixes: https://github.com/openwrt/openwrt/issues/21402
Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21409
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 838a9ff1ca)
2026-01-05 23:48:50 +01:00
Hannu Nyman
987214c9f8 mediatek: remove erroneous pipe action from BE7200 recipe
Some checks failed
Build all core packages / Build all core packages for selected target (push) Waiting to run
Build Kernel / Build all affected Kernels (push) Has been cancelled
Remove the errorneous pipe action from the BE7200 device package list.

It causes visible errors into config:

 perus@ub2510:/OpenWrt/aarch64$ make defconfig
 ...
 tmp/.config-target.in:55023:warning: ignoring unsupported character '|'
 tmp/.config-target.in:191877:warning: ignoring unsupported character '|'
 tmp/.config-target.in:191878:warning: ignoring unsupported character '|'
 tmp/.config-target.in:285812:warning: ignoring unsupported character '|'
 tmp/.config-target.in:285815:warning: ignoring unsupported character '|'
 tmp/.config-target.in:285819:warning: ignoring unsupported character '|'
 tmp/.config-target.in:285820:warning: ignoring unsupported character '|'
 #
 # configuration written to .config
 #

 File tmp/.config-target.in:

  55020         select DEFAULT_urandom-seed
  55021         select DEFAULT_urngd
  55022         select DEFAULT_wpad-basic-mbedtls
  55023         select DEFAULT_|
  55024         help
  55025           Build firmware images for Routerich BE7200

Fixes: ff5e66a920 ("mediatek: add support for Routerich BE7200")
Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
Link: https://github.com/openwrt/openwrt/pull/21376
(cherry picked from commit 93e9e67ee9)
Signed-off-by: Mikhail Zhilkin <csharper2005@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21383
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:53:07 +01:00
Mikhail Zhilkin
d1ff5681b4 mediatek: add support for Routerich BE7200
This PR adds support for Routerich BE7200 router.

Specification
-------------
- SoC       : MediaTek MT7987A Quad-core ARM Cortex-A53 2.0 GHz
- RAM       : 1024 MiB DDR4
- Flash     : SPI-NAND 512 MiB (Giga Device)
- WLAN      : MediaTek MT7992E, WiFi 7
  - 2.4 GHz : b/g/n/ax, MIMO 4x4
  - 5 GHz   : a/n/ac/ax, MIMO 4x4
- Ethernet  : 10/100/1000 Mbps x3 (LAN, Airoha AN8855AE)
              10/100/1000/2500 Mbps x1 (WAN, SoC internal phy)
- USB       : 3.0 x1
- Buttons   : Mesh, Reset
- LEDs      : 1x Status (blue), gpio-controlled
              1x WiFi (blue), gpio-controlled
              1x mesh (blue), gpio-controlled
              3x LAN activity (blue), gpio-controlled
              1x WAN activity (blue), gpio-controlled
              1x WAN no-link (red), gpio-controlled
- Power     : 12 VDC, 1.5 A

Installation
------------
1. Update stock firmware via the web interface (don't keep settings).

Update U-Boot (optional)
------------------------
After installing OpenWrt, you may want to install opensource U-Boot.
1. Install kmod-mtd-rw:
   apk update && apk add kmod-mtd-rw
2. Unlock bootloader:
   insmod mtd-rw i_want_a_brick=1
   mtd unlock BL2
   mtd unlock FIP
3. Download and write open-source BL2 and FIP:
   cd /tmp
   wget https://.../openwrt-mediatek-filogic-routerich_be7200-preloader.bin
   wget https://.../openwrt-mediatek-filogic-routerich_be7200-bl31-uboot.fip
   mtd write /tmp/openwrt-mediatek-filogic-routerich_be7200-preloader.bin BL2
   mtd write /tmp/openwrt-mediatek-filogic-routerich_be7200-bl31-uboot.fip FIP
4. Reboot the router.

Return to stock
---------------
1. Update OpenWrt wirh the vendor's firmware (don't keep settings).

Recovery (original U-Boot)
-----------------------------
1. Press Reset button and power on the router. After ~10 sec release
   the button;
2. Upload and flash squashfs-sysupgrade.itb image via the web interface.

Recovery (open-source U-Boot)
-----------------------------
1. Place OpenWrt
   'openwrt-mediatek-filogic-routerich_be7200-initramfs-recovery.itb'
   image on the tftp server (IP: 192.168.1.254)
2. Press Reset button and power on the router. After ~10 sec release
   the button.
3. Use OpenWrt initramfs system for recovery

Recovery (full disaster)
------------------------
Use UART and mtk_uartboot tool.
Link: https://github.com/981213/mtk_uartboot

USB power control
-----------------
Disable: echo disabled > /sys/devices/platform/usb-power/state
Enable: echo enabled > /sys/devices/platform/usb-power/state

UART
----
UART pins are silkscreened on the PCB. Don't connect Vcc.
Serial connection parameters: 115200, 8n1, 3.3V

MAC addresses
-------------
+---------+-------------------+-----------+
|         | MAC               | Algorithm |
+---------+-------------------+-----------+
| WAN     | 24:0f:5e:xx:xx:30 | label     |
| LAN     | 24:0f:5e:xx:xx:31 | label+1   |
| WLAN 2g | 24:0f:5e:xx:xx:32 | label+2   |
| WLAN 5g | 24:0f:5e:xx:xx:33 | label+3   |
+---------+-------------------+-----------+
The WLAN 2g MAC was found in 'Factory', 0x4

Signed-off-by: Mikhail Zhilkin <csharper2005@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21235
(cherry picked from commit ff5e66a920)
Signed-off-by: Mikhail Zhilkin <csharper2005@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21383
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:53:01 +01:00
Mikhail Zhilkin
a21680586c arm-trusted-firmware-mediatek: add mt7987-spim-nand0 build
This commit adds a new non-ubi spim-nand build for mt7987.

Signed-off-by: Mikhail Zhilkin <csharper2005@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21235
(cherry picked from commit 8398a03e29)
Signed-off-by: Mikhail Zhilkin <csharper2005@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21383
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:52:58 +01:00
Robert Senderek
a1bb2cbb9d mvebu: Add support for WD MyCloud EX2 Ultra
Hardware
--------
Marvell Armada 385 (MV88F6820)
1GB RAM
256MB NAND
1x 1Gbit
2x USB 3.0
2x SATA-III
UART: 115200 8N1 3.3V
RTC
Weltrend MCU WT6703F connected via UART1 for Power LED / PWM Fan / hw reset / WoL

Installation
------------
Connect UART 3.3V adapter to JP2  pins: 1-RX / 2-GND / 5-TX

Use USB2.0 FAT32 pendrive with openwrt-mvebu-cortexa9-wd_cloud-ex2-ultra-initramfs-kernel.bin
 1. stop boot by pressing 1
 2. usb start
 3. fatload usb 0:1  0x02000000 openwrt-mvebu-cortexa9-wd_cloud-ex2-ultra-initramfs-kernel.bin;bootm 0x02000000 -
 4. do backup mtd1 mtd3
 5. use sysupgrade

Or tftp
 1. stop boot by pressing 1
 2. setenv ethact egiga2;setenv serverip 192.168.11.114;setenv ipaddr 192.168.11.113
 3. tftpboot 0x02000000 openwrt-mvebu-cortexa9-wd_cloud-ex2-ultra-initramfs-kernel.bin; bootm 0x02000000 -
 4. do backup mtd1 mtd3
 5. use sysupgrade

or Evgeny Kolesnikov <evgenyz@gmail.com> method from his failed PR 2040

- Using original firmware's network settings obtain SSH access to the device.
- Put *-image-cfs-factory.bin and *-uImage-factory.bin images into device's /tmp directory.
- Write kernel (uImage) image 'flash_eraseall /dev/mtd1 && nandwrite --markbad -p /dev/mtd1 /tmp/*-uImage-factory.bin'.
- Write rootfs (image-cfs) image 'ubiformat /dev/mtd3 -f /tmp/*-image.cfs-factory.bin -y'.
- Reboot the device.

Installation (upgrade):

Use *-sysupgrade.bin in a usual way.
Weltrend MCU control is done via uart1 19200
install coreutils-stty
stty -F /dev/ttyS1 raw speed 19200
stty -F /dev/ttyS1 raw speed 19200

PWM Fan Control
off: 00
echo -n -e '\xfa\x02\x00\x00\x00\x00\xfb' > /dev/ttyS1
slow: 5F
echo -n -e '\xfa\x02\x00\x5f\x00\x00\xfb' > /dev/ttyS1
max: FF
echo -n -e '\xfa\x02\x00\xff\x00\x00\xfb' > /dev/ttyS1

Power LED Control
Blue
echo -n -e '\xfa\x26\x00\x11\x00\x01\xfb' > /dev/ttyS1
Red
echo -n -e '\xfa\x26\x00\x14\x00\x01\xfb' > /dev/ttyS1
Orange
echo -n -e '\xfa\x26\x00\x12\x00\x01\xfb' > /dev/ttyS1

more here: https://github.com/c-MM/mcm-daemon/blob/master/mcm.h

Signed-off-by: Robert Senderek <robert.senderek@10g.pl>
Link: https://github.com/openwrt/openwrt/pull/17779
(cherry picked from commit 96ad29a0f3)
Link: https://github.com/openwrt/openwrt/pull/21364
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:26:25 +01:00
Hauke Mehrtens
a78f0078c4 kernel: QCOM SPI NAND: backport multiple fixes
These patches fix bugs in a patch we backported.

These patch were cherry picked from upstream Linux because it references
a patch we backported in the fixes tag.

The patches were reordered to match the ordering in the upstream Linux kernel.

Fixes: 93173aee96 ("qualcommbe: ipq95xx: Add initial support for new target")
Link: https://github.com/openwrt/openwrt/pull/21366
(cherry picked from commit 5230157a16)
Link: https://github.com/openwrt/openwrt/pull/21390
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:23:01 +01:00
Hauke Mehrtens
236149c306 kernel: phylink: disable autoneg for interfaces that have no inband
This patch fixes a bug in a patch we backported.

This patch was cherry picked from upstream Linux because it references a
patch we backported in the fixes tag.

The first two patches are providing function needed by the last patch.

Fixes: 813ecda1f3 ("generic: backport phylink patches for PCS/PHY caps OPs")
Link: https://github.com/openwrt/openwrt/pull/21366
(cherry picked from commit 69d76e3a14)
Link: https://github.com/openwrt/openwrt/pull/21390
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:23:01 +01:00
Hauke Mehrtens
a725b439e9 kernel: RTL8211FVD: restore disabling of PHY-mode EEE
This patch fixes a bug in a patch we backported.

This patch was cherry picked from upstream Linux because it references a
patch we backported in the fixes tag.

Fixes: 48c9e55094 ("kernel: backport upstream Realtek PHY patches")
Link: https://github.com/openwrt/openwrt/pull/21366
(cherry picked from commit 2c7241b209)
Link: https://github.com/openwrt/openwrt/pull/21390
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:23:01 +01:00
Hauke Mehrtens
fafe124d8e kernel: mv88e6xxx: backport fixes
These patches fix bugs in a patch we backported.

These patch were cherry picked from upstream Linux because it references
a patch we backported in the fixes tag.

Fixes: c990f6e156 ("linux: generic: net: dsa: mv88e6xxx LED support")
Link: https://github.com/openwrt/openwrt/pull/21366
(cherry picked from commit 9c4b7fbaad)
Link: https://github.com/openwrt/openwrt/pull/21390
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:23:00 +01:00
Hauke Mehrtens
f575392914 kernel: reserved_mem: add missing IORESOURCE_MEM flag on resources
This patch fixes a bug in a patch we backported.

This patch was cherry picked from upstream Linux because it references a
patch we backported in the fixes tag.

Fixes: 9d3009f426 ("airoha: major backport of Airoha Ethernet driver feature support")
Link: https://github.com/openwrt/openwrt/pull/21366
(cherry picked from commit b3cc77eead)
Link: https://github.com/openwrt/openwrt/pull/21390
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:23:00 +01:00
Hauke Mehrtens
22d30efdc8 kernel: as21xxx: backport patch improve PHY HW reset
This patch fixes a bug in a patch we backported.

This patch was cherry picked from upstream Linux because it references a
patch we backported in the fixes tag.

The function phy_id_compare_vendor() is needed by the fix.
Refresh 782-05-v6.16-net-phy-Add-support-for-Aeonsemi-AS21xxx-PHYs.patch with the upstream code.

Fixes: 08a616b216 ("generic: backport support for Aeonsemi AS21xxx PHY")
Link: https://github.com/openwrt/openwrt/pull/21366
(cherry picked from commit b3318fe819)
Link: https://github.com/openwrt/openwrt/pull/21390
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:23:00 +01:00
Hauke Mehrtens
15eb5f05ef kernel: pcs-mtk-lynxi: backport fix for in-band status capabilities
This patch fixes a bug in a patch we backported.

This patch was cherry picked from upstream Linux because it references a
patch we backported in the fixes tag.

Fixes: 813ecda1f3 ("generic: backport phylink patches for PCS/PHY caps OPs")
Link: https://github.com/openwrt/openwrt/pull/21366
(cherry picked from commit 7390e63374)
Link: https://github.com/openwrt/openwrt/pull/21390
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:23:00 +01:00
Hauke Mehrtens
301515ab7d kernel: PHY: backport led fixes commit
This patch fixes a bug in some patches we backported.

This patch was cherry picked from upstream Linux because it references a
patch we backported in the fixes tag.

Link: https://github.com/openwrt/openwrt/pull/21366
(cherry picked from commit 63b45a10c0)
Link: https://github.com/openwrt/openwrt/pull/21390
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:23:00 +01:00
Hauke Mehrtens
952ec239af kernel: r8169: backport upstream fix
This fixes a bug introduced in a patch we backported.

This patch was cherry picked from upstream Linux because it references a
patch we backported in the fixes tag.

Fixes: 91ce7f606a ("generic: backport upstream v6.16 r8169 patches")
Link: https://github.com/openwrt/openwrt/pull/21366
(cherry picked from commit 6ac5e28902)
Link: https://github.com/openwrt/openwrt/pull/21390
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:23:00 +01:00
Hauke Mehrtens
946541c8cb kernel: move patches to backported
These formally pending patches were merged into upstream Linux some time
ago. Move them to the backports folder and add the kernel version they
were added to the file name.

Link: https://github.com/openwrt/openwrt/pull/21366
(cherry picked from commit 3c821c19a8)
Link: https://github.com/openwrt/openwrt/pull/21390
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:22:59 +01:00
Hauke Mehrtens
f5f4071479 kernel: refresh upstreamed patches
Replace pending patches which are already integrated in upstream Linux
with their upstream versions.

These patches were exported with:
git format-patch -1 -k

Link: https://github.com/openwrt/openwrt/pull/21366
(cherry picked from commit 7130053695)
Link: https://github.com/openwrt/openwrt/pull/21390
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-05 00:22:59 +01:00
George Moussalem
8f0d7ae61b qualcommax: ipq50xx: add support for Linksys MX6200
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
Linksys MX6200 is a triband Wi-Fi 6E wireless router.

Speficiations:
* SoC: Qualcomm IPQ5018 (64-bit dual-core ARM Cortex-A53 @ 1.0Ghz)
* Memory: Nanya NT5CC256M16ER-EK (512 MiB DDR3-933)
* Serial Port: 3v3 TTL 115200n8
* Wi-Fi: IPQ5018 (2x2 2.4 Ghz 802.11b/g/n/ax)
	 QCN6102 (2x2:2 5 Ghz 802.11an/ac/ax)
	 QCN6122 (2x2:2 6 Ghz 802.11an/ac/ax)
* Ethernet: IPQ5018 integrated virtual switch connected to:
	    - LAN Port: Internal IPQ5018 GE PHY
	    - WAN Port: Maxlinear Ethernet GPY115C PHY
* Flash: Macronix MX35UF2GE4AD (256 MiB)
* LEDs: 1x multi-color PWM LED
* Buttons: 1x WPS (GPIO 27 Active Low)
           1x Reset (GPIO 28 Acive Low)
* FCC ID: 2AYRA-08436

Flash instructions:
************************************************************************
NOTE: serial access is required! Although the web UI allows you to
install the Openwrt image, secure boot is enabled which will prevent
booting an unsigned image. The boot sequence must be adjusted in U-boot
to allow booting unsigned images.
************************************************************************

1. On OEM firmware, login to the web UI (typically @ http://192.168.1.1)
and click 'CA' in the bottom right corner.
Then click -> Connectivity -> Manual Upgrade.
Alternatively, browse to
http://<router IP>/fwupdate.html.
Upload openwrt-qualcommax-ipq50xx-linksys_mx6200-squashfs-factory.ubi.
Continue with step 5.
2. Installation on alternate partition using serial connection from OEM
firmware (default login: root, password: admin):
flash_erase /dev/mtd19 0 0
nandwrite -p /dev/mtd19 openwrt-qualcommax-ipq50xx-linksys_mx6200-squashfs-factory.ubi
reboot
Continue with step 5.
3. Installation using serial connection from initramfs
setup tftp server listening on IP in 192.168.1.0/24 (other than the
router IP 192.168.1.1). In U-boot, load the initramfs image to memory:
tftp $loadaddr <your IP>:openwrt-qualcommax-ipq50xx-linksys_mx6200-initramfs-uImage.itb
boot the image using command:
bootm $loadaddr
when fully booted, scp the sysupgrade image to your router IP (default:
192.168.1.1):
scp -O <path>/openwrt-qualcommax-ipq50xx-linksys_mx6200-squashfs-sysypgrade.bin root@192.168.1.1:/tmp/
use sysupgrade to flash the image to nand:
sysupgrade -n -v /tmp/openwrt-qualcommax-ipq50xx-linksys_mx6200-squashfs-sysupgrade.bin
Continue with step 5.
4. Optionally install on alternate partition. From Openwrt:
mtd -r -e rootfs_1 -n write openwrt-qualcommax-ipq50xx-linksys_mx6200-squashfs-factory.ubi rootfs_1
Continue with step 5.
5. Setup U-boot for ability to dual boot signed (stock) and non-signed
(Openwrt) images with auto-detection.
From U-boot, run (be aware: copy line by line):
setenv setnandbootargs 'setenv bootargs init=/sbin/init ubi.mtd=rootfs rootfstype=squashfs rootwait'
setenv nandinitcmd 'setenv mtdids nand0=nand0; run setrootfscmd; ubi part rootfs 2048'
setenv setrootfscmd 'if test $boot_part = 1; then setenv mtdparts mtdparts=nand0:0x${imgsize}@0x${prikern}(rootfs); else setenv mtdparts mtdparts=nand0:0x${imgsize}@0x${altkern}(rootfs); fi'
setenv readhdr1cmd 'ubi read $loadaddr kernel 0x40; setexpr IMGOFF $loadaddr + 0x10; setexpr CODEOFF $loadaddr + 0x14; setexpr SIGOFF $loadaddr + 0x1c; setexpr CERTOFF $loadaddr + 0x24'
setenv readhdr2cmd 'setexpr.l HDR *$loadaddr; setexpr.l IMGSZ *$IMGOFF; setexpr.l CODESZ *$CODEOFF; setexpr.l SIGSZ *$SIGOFF; setexpr.l CERTSZ *$CERTOFF; setexpr TSIZE $CODESZ + $SIGSZ; setexpr TSIZE $TSIZE + $CERTSZ'
setenv testmbncmd 'if test $HDR -ne edfe0dd0 -a $IMGSZ -eq $TSIZE; then bootipq; else ubi read $loadaddr kernel $kernsize; run setnandbootargs; bootm $loadaddr; fi'
setenv bootcmd2 'if test $auto_recovery = no; then bootipq; else run nandinitcmd; run readhdr1cmd; run readhdr2cmd; run testmbncmd; fi'
setenv bootcmd 'run bootcmd2'
saveenv
6. Back to the OEM firmware.
Download firmware from OEM website:
MX6200: https://support.linksys.com/kb/article/408-en/
From serial/SSH, in Openwrt, flash OEM firmware to alternate partition:
mtd -r -e rootfs_1 -n write FW_MX6200_1.0.11.216041_prod.signed.img rootfs_1

Switching active partition:
1. From U-boot, executive the following to switch to partition 1:
setenv boot_part 1
for partition 2:
setenv boot_part 2
2. From Openwrt:
fw_printenv boot_part
In case it's 1:
fw_setenv boot_part 2
. /lib/upgrade/platform.sh
linksys_bootconfig_set_primaryboot "0:bootconfig" 1
linksys_bootconfig_set_primaryboot "0:bootconfig1" 1
In case it's 2:
fw_setenv boot_part 1
. /lib/upgrade/platform.sh
linksys_bootconfig_set_primaryboot "0:bootconfig" 0
linksys_bootconfig_set_primaryboot "0:bootconfig1" 0
and
reboot

Signed-off-by: George Moussalem <george.moussalem@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21038
Link: https://github.com/openwrt/openwrt/pull/21273
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-04 19:07:39 +01:00
George Moussalem
c936a98ed3 qualcommax: ipq50xx: upgrade SMEM dualboot Linksys devices
Add support for upgrades on dual firmware Linksys devices with the
partition table stored in SMEM and that store both the kernel and rootfs
in a single partition. Switching the active boot partition requires
updating the partition info table in SMEM in addition to setting
the active boot partition in a U-boot variable as U-boot will keep them
in sync upon reboot if they're not.

U-boot always sets the name of the active partition to rootfs and that
of the inactive partition to rootfs_1 in SMEM. when Linux loads the
partition table from SMEM it will load the right partition based on the
offset set in the SMEM partition table. For upgrades, flashing to the
alternate partition will always be to rootfs_1, while flashing the
current partition will be on rootfs.

Signed-off-by: George Moussalem <george.moussalem@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21038
Link: https://github.com/openwrt/openwrt/pull/21273
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-04 19:07:39 +01:00
George Moussalem
46e8c1b502 qualcommax: ipq50xx: 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.

Signed-off-by: George Moussalem <george.moussalem@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21038
Link: https://github.com/openwrt/openwrt/pull/21273
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-04 19:07:39 +01:00
George Moussalem
898b1668c0 qualcommax: ipq50xx: move bootargs to Linksys board files
Move setting kernel bootargs from the base template down to the
respective Linksys board files. This allows for having devices which
require different bootargs use the base template device tree file.

Signed-off-by: George Moussalem <george.moussalem@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21038
Link: https://github.com/openwrt/openwrt/pull/21273
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-04 19:07:39 +01:00
George Moussalem
facaa3d904 qualcommax: ipq50xx: load Linksys partition tables from SMEM
The partition table on Linksys devices with a Qualcomm AX IPQ SoC is
stored in SMEM. As such, load partition table from SMEM rather than
statically defining them in their respective device trees. This helps
generalize the base template and requires less maintenance.

Signed-off-by: George Moussalem <george.moussalem@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21038
Link: https://github.com/openwrt/openwrt/pull/21273
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-04 19:07:39 +01:00
Eric Fahlgren
66662fae91 packages: ethtool: restore CONFLICTS
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
Inadvertent removal of 'CONFLICTS' breaks kconfig selection.
Restore it.

Fixes: ded99c2984 ("treewide: add explicit default variant part 2")
Signed-off-by: Eric Fahlgren <ericfahlgren@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21388
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 8630fa09c7)
2026-01-04 18:43:37 +01:00
Eric Fahlgren
eed0ab3e47 treewide: add explicit default variant part 2
Add 'DEFAULT_VARIANT' to two packages, 'iw' and 'eapol-test',
that were missed in the first pass.  Refactor 'iw' and 'ethtool'
package definitions to be consistent with the pattern used in most
other packages.

Fixes: https://github.com/openwrt/openwrt/commit/f4fdb996
Fixes: https://github.com/openwrt/openwrt/commit/7a78dc4a
Signed-off-by: Eric Fahlgren <ericfahlgren@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21380
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit ded99c2984)
2026-01-04 18:42:42 +01:00
Linus Walleij
ed2d3b143c ixp4xx: fix bug in Actiontec DTS file
This misassigned ethernet port bug was merged in the upstream
kernel.

Link: https://github.com/openwrt/openwrt/pull/21367
Signed-off-by: Linus Walleij <linusw@kernel.org>
(cherry picked from commit b73fd273b3)
2026-01-04 18:20:34 +01:00
Valent Turkovic
b52a3124db wifi-scripts: wdev.uc: fix mesh mode frequency handling
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
Mesh mode interface creation fails when the freq parameter is empty or
undefined. Unlike adhoc mode which checks if freq exists before using it,
mesh mode blindly constructs the iw command with freq parameter, resulting
in invalid syntax like:

  iw dev mesh0 mesh join ssid freq  NOHT

This causes the mesh interface to be created without joining the mesh
network, leaving it in a DOWN state with no channel assigned.

Fix by adding freq validation check similar to adhoc mode.

Tested on two routers in parallel as mesh peers:
- Xiaomi AX3000T (MediaTek MT7981)
- OpenWrt One (MediaTek MT7981)
- OpenWrt 6.6.119, 802.11s mesh on 5GHz (Channel 36, HE80)

Signed-off-by: Valent Turkovic <valent@meshpointone.com>
Link: https://github.com/openwrt/openwrt/pull/21373
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 7214acd759)
2026-01-04 16:57:20 +01:00
Felix Fietkau
c0b24e2a9f cli: fix typo in error reporting
Return the proper error code for COMMAND_FAILED

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit a10d10edd7)
2026-01-04 16:57:20 +01:00
Felix Fietkau
ec16f2532d unetmsg: fix variable shadowing bug in network_rx_cleanup_state()
Some checks failed
Build all core packages / Build all core packages for selected target (push) Has been cancelled
The for-in loop variable 'name' was shadowing the function parameter,
causing remote subscription cleanup to fail when hosts disconnect.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry picked from commit e782341848)
2026-01-02 21:30:01 +01:00
Fil Dunsky
8004708f2d mediatek: add ubootmod layout for Cudy WBR3000UAX v1
Some checks failed
Build all core packages / Build all core packages for selected target (push) Waiting to run
Build Kernel / Build all affected Kernels (push) Has been cancelled
This allows us to use the full size of nand,
which extends ubi size from 64Mb to 122.25Mb.

If you are at factory firmware, please refer
to [PR](https://github.com/openwrt/openwrt/pull/21141)
to boot into OpenWrt first.

1. Log in to the device and backup all the partitions,
especially unique `Factory` and `bdata` partitions
from System -> Backup / Flash Firmware -> Save mtdblock contents.
2. Install kmod-mtd-rw to unlock mtd partitions for writing:
```bash
apk update && apk add kmod-mtd-rw && insmod mtd-rw i_want_a_brick=1
```
3. Write new OpenWrt (U-Boot Layout) `BL2` and `FIP`:
```bash
mtd write openwrt-mediatek-filogic-cudy_wbr3000uax-v1-ubootmod-preloader.bin BL2
mtd write openwrt-mediatek-filogic-cudy_wbr3000uax-v1-ubootmod-bl31-uboot.fip FIP
```
4. Set static IP on your PC: `192.168.1.254`, gateway `192.168.1.1`
5. Serve openwrt-mediatek-filogic-cudy_wbr3000uax-v1-ubootmod-initramfs-recovery.itb
using TFTP server.
6. Connect Router LAN with PC LAN.
7. Cut off the power and re-engage, wait for TFTP recovery to complete.
8. After OpenWrt initramfs recovery has booted,
clean `/dev/mtd5` ubi partition to utilize maximum of free space & create ubootenvs:
```bash
ubidetach -p /dev/mtd5; ubiformat /dev/mtd5 -y; ubiattach -p /dev/mtd5
ubimkvol /dev/ubi0 -n 0 -N ubootenv -s 128KiB
ubimkvol /dev/ubi0 -n 1 -N ubootenv2 -s 128KiB
```
4. Perform sysupgrade.

Tested-by: 4pda users
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21225
(cherry picked from commit 15df98f3b5)
Link: https://github.com/openwrt/openwrt/pull/21342
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-02 19:45:43 +01:00
Fil Dunsky
2a78fc851c mediatek: add support for Cudy WBR3000UAX v1
Another OEM variation of a Cudy WR3000 series device made for Russian market.

Hardware:
 - SoC: MediaTek MT7981B
 - CPU: 2x 1.3 GHz Cortex-A53
 - Flash: 128 MiB GigaDevice SPI NAND. Flash Model: F50L1G41LB, ID: C801
 - RAM: DDR3, 512 MiB
 - WLAN: 2.4 GHz, 5 GHz (MediaTek MT7976CN, 802.11ax)
 - 1x WAN MT7531 (JXD 2531Z) 10/100/1000 Mbps
 - 4x LAN 2x MT7530 (JXD 2529S) 10/100/1000 Mbps
 - USB 3.0 port
 - Buttons: Reset, WPS
 - 8x LEDs: 2x Red, 6x Blue
 - Serial console: no need to solder, just open the case and unskrew the radiator, TX-RX, RX-TX, GND-GND, VCC do not connect, 115200 8n1
 - Power: 12 VDC, 1.5 A

+---------+-------------------+-----------+
|         | MAC               | Algorithm |
+---------+-------------------+-----------+
| WAN     | 80:AF:CA:xx:xx:x1 | label+1   |
| LAN     | 80:AF:CA:xx:xx:x0 | label     |
| WLAN 2g | 80:AF:CA:xx:xx:x0 | label     |
| WLAN 5g | 82:AF:CA:xx:xx:x1 | label+1   |
+---------+-------------------+-----------+

Based on a factory layout with only 64mb partition for easier transition from factory to OpenWrt for users if the "intermediate" RSA signed firmware will be provided by Cudy.

**Installation**
The installation must be done via UART & TFTP by disassembling the router. On other occasions Cudy has distributed intermediate firmware and dts to make installation easier, but since this router is OEM special WB order for local RU market there is a possibility they will not provide it.

**Install using UART & TFTP**
1. Connect to UART.
2. Since the factory BL is locked and the boot process can not be stopped, you have to use mtkuartboot, hold reset, engage the power, boot into your payloaded bl2 & fip.
3. Connect to LAN and set your IP to 192.168.1.254.
4. Configure a TFTP server to serve openwrt-mediatek-filogic-cudy_wbr3000uax-v1-initramfs-kernel.bin file.
5. Run these steps in u-boot using the name of your file:

```
setenv bootfile openwrt-mediatek-filogic-cudy_wbr3000uax-v1-initramfs-kernel.bin
setenv ipaddr 192.168.1.1
setenv serverip 192.168.1.254
tftpboot
bootm
```

6. Router will boot into OpenWrt initramfs recovery, just open your browser `192.168.1.1` and sysupgrade with the `Keep settings` option turned off.

Tested-by: many 4pda users
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21225
(cherry picked from commit d7d6faf26f)
Link: https://github.com/openwrt/openwrt/pull/21342
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-02 19:45:43 +01:00
Fil Dunsky
ea9cf72722 arm-trusted-firmware-mediatek: add Cudy DDR3 target
Since there are many similar devices from Cudy (TR3000 / WR3000E / WR3000P / WR3000S / WBR3000UAX) this will allow to create OpenWrt U-Boot layout for all of them using same DDR3 target.

Tested-by: 4pda users
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21225
(cherry picked from commit f4c9ab6591)
Link: https://github.com/openwrt/openwrt/pull/21342
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-02 19:45:43 +01:00
Jacob Potter
482d5e5c41 realtek: rtl838x: fix lan9 and lan10 on Netgear GS110TUP
Some checks failed
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
The GS110TUP's lan9 port is connected via a QSGMII PHY to SERDES 2, and
therefore should use the SWITCH_PORT_SDS macro instead of SWITCH_PORT. This
was missed in e956adfe because the GS110TUP is not particularly well
documented and the old code was confusing.

lan10 is an SFP and doesn't have an onboard PHY, so also remove its
associated PHY references and update it to match other devices' SFP ports.

Fixes: https://github.com/openwrt/openwrt/issues/21324
Signed-off-by: Jacob Potter <jacob@j4cbo.com>
Link: https://github.com/openwrt/openwrt/pull/21346
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit b2c0182f26)
2026-01-02 18:12:56 +01:00
Eric Fahlgren
107ac00404 package: ethtool: specify just one default variant
Inadvertently defining 'DEFAULT_VARIANT' on both ethool and
ethtool-full variants resulted in

    $ make defconfig
    tmp/.config-package.in:121615:error: recursive dependency detected!
    tmp/.config-package.in:121615:  symbol PACKAGE_ethtool-full is selected by PACKAGE_ethtool
    tmp/.config-package.in:121605:  symbol PACKAGE_ethtool depends on PACKAGE_ethtool-full

Fix this by simply undefining 'DEFAULT_VARIANT' on the ethtool-full
variant, which is ugly, but expedient.

Fixes: https://github.com/openwrt/openwrt/commit/f4fdb996
Signed-off-by: Eric Fahlgren <ericfahlgren@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21363
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 7a78dc4a5d)
2026-01-02 18:11:33 +01:00
Eric Fahlgren
c80bae3c18 treewide: add explicit default variant
Some packages with variants did not specify the default among the
alternatives, so were left without any apk 'provider_priority'
for that package.  This caused the apk solver to select the wrong
variant, silently changing the requested package list.

Notable among these were busybox, procd and the hostapd/wpad suite.
This behavior presented in the imagebuilders when creating the
image as follows, silently replacing packages even when explicitly
requested:

    $ make image PACKAGES=busybox
    ...
    ( 14/148) Installing busybox-selinux (1.37.0-r6)
    ...

We add 'DEFAULT_VARIANT:=1' to the packages that were missing one,
providing apk with sufficient information to choose the correct
package.

See link below for further examples and discussion.

Link: https://github.com/openwrt/openwrt/pull/21288#issuecomment-3704101422
Signed-off-by: Eric Fahlgren <ericfahlgren@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21358
(cherry picked from commit f4fdb9964a)
Link: https://github.com/openwrt/openwrt/pull/21355
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-02 18:11:04 +01:00
George Sapkin
038546e2e5 kernel/rtl8812au-ct: provide a virtual kmod
Switch rtl8812au-ct to use the new virtual kmod provides semantic.

Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21288
(cherry picked from commit 2c81176f2b)
Link: https://github.com/openwrt/openwrt/pull/21355
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-02 18:11:03 +01:00
George Sapkin
f1520c2871 kernel/ath10k: provide a virtual kmod
Switch ath10k and related kmods to use the new virtual kmod provides
semantic and mark ath10k as the default variant.

Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21288
(cherry picked from commit 8f4c64b930)
Link: https://github.com/openwrt/openwrt/pull/21355
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-02 18:11:03 +01:00
George Sapkin
90dfdc78fe kernel/r8169: provide a virtual kmod
Switch r8169 and related kmods to use the new virtual kmod provides
semantic and mark r8169 as the default variant.

Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21288
(cherry picked from commit 01fa50b774)
Link: https://github.com/openwrt/openwrt/pull/21355
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-02 18:11:03 +01:00
George Sapkin
832d373272 ca-certificates: provide a virtual package
Switch ca-certs provides to use the new virtual provides semantic that
enables ca-bundle and ca-certificates to be installed side-by-side.

Provide the new format virtual ca-certificates-any in ca-bundle.

Fixes: https://github.com/openwrt/openwrt/issues/21257
Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21288
(cherry picked from commit d75a6bed7a)
Link: https://github.com/openwrt/openwrt/pull/21355
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-02 18:11:03 +01:00
George Sapkin
d1b08c2d82 build: provide virtual self in kmods
Add an implicit self-provide to kmods. apk can't handle self provides,
be it versioned or virtual, so opt for a prefix and a suffix instead.
Package name without a prefix/suffix is too generic and might conflict
with other packages, e.g. wireguard. This allows several variants to
provide the same virtual package without adding extra provides to the
default one, e.g. r8169 implicitly provides kmod-r8169-any and is marked
as default, so r8125 can explicitly provide @kmod-r8169-any as well.

Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21288
(cherry picked from commit 9b37b7185c)
Link: https://github.com/openwrt/openwrt/pull/21355
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-02 18:11:03 +01:00
George Sapkin
40baf2f82c build: add support for virtual provides
Allow defining virtual provides using the PROVIDES field by prefixing
them with @, e.g.:

PROVIDES:=@ca-certs

Virtual provides don't own the provided name and multiple packages with
the same virtual provides can be installed side-by-side. Packages must
still take care not to override each other's files.

Add an implicit self-provide to packages. apk can't handle self
provides, be it versioned or virtual, so opt for a suffix instead. This
allows several variants to provide the same virtual package without
adding extra provides to the default one, e.g. wget implicitly provides
wget-any and is marked as default, so wget-ssl can explicitly provide
@wget-any as well.

Filter out virtual provides when generating metadata.

Filter out virtual provides prefix and self provide where appropriate.

Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21288
(cherry picked from commit 5ed650acbf)
Link: https://github.com/openwrt/openwrt/pull/21355
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-02 18:11:03 +01:00
George Sapkin
3abc02c2eb build: refactor provides logic
Refactor provides logic into a helper define and use it for both apk and
control. Document the behavior.

Store preformatted provides in Package/$(1)/PROVIDES similar to defines.

Remove unnecessary logging.

Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21288
(cherry picked from commit cefbf1184f)
Link: https://github.com/openwrt/openwrt/pull/21355
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-02 18:11:03 +01:00
Daniel Golle
5d017aeeeb mediatek: filogic: asus,rt-ax57m: remove unused pinctrl groups
Some checks failed
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
Build host tools / Build host tools for linux and macos based systems (push) Waiting to run
Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
Remove unused pinctrl groups defined in the device tree, probably as a
result of importing the vendor device tree which is based on the
reference board from MediaTek's SDK.

114b5c2063 ("mediatek: filogic: Add support ASUS RT-AX57M")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit 96205c99d01cf7f5e69f03ccdea790d0eb9ddb36)
Signed-off-by: Garrett Mesmer <garrettmesm@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21237
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-02 14:42:36 +01:00
Garrett Mesmer
fafb36f865 mediatek: filogic: Add support ASUS RT-AX57M
ASUS RT-AX57M, RT-AX54HP V2, RT-AX1800HP V2, RT-AX1800S V2, and RT-AX3000S all use the same firmware and have identical hardware

Hardware
--------
SOC: MediaTek MT7981b
RAM: 256MB DDR3L (Winbond W632GU6NB-09)
FLASH: 128MB SPI-NAND (Winbond W25N01KVZEIR)
WIFI: Mediatek MT7981b + Mediatek MT7976DAN 802.11ax 2.4/5 GHz
ETH: MediaTek MT7531AE Switch
UART: 3V3 115200 8N1 (Pinout silkscreened / Do not connect VCC)

MAC addresses
-------------
LAN	Label MAC (stored in mtd ubi Factory partition at offset 0x4)
WAN	LAN
2.4G	LAN + 2 in first octet
5G	LAN

Installation
-----------------------------------------------------------
Vendor-UI Method
-----------------------------------------------------------
1. Download the OpenWrt initramfs.trx image.

2. Connect the PC via LAN to one of the yellow router ports and wait
   until your PC to get a DHCP lease.

3. Browse to http://192.168.1.1 (or whatever your router IP is configured as)

4. If your router is brand new, finish the setup process and log into
   the Web-UI.

5. Navigate to Administration -> Firmware Upgrade and upload the
   downloaded OpenWrt initramfs.trx image.

6. Wait for OpenWrt to boot. Open the default OpenWrt IP in a web browser and perform a system upgrade using the sysupgrade image as instructed in the top banner.

---------------------------------------------------------------------------
Revert to stock firmware:
1: Install package facinstall -> https://forum.openwrt.org/t/facinstall-package-for-easy-installation-factory-images/177587
2. Install Asus stock trx image via OpenWRT LuCI interface.

Signed-off-by: Garrett Mesmer <garrettmesm@gmail.com>
Co-Authored-By: Oleg S <remittor@gmail.com>
Signed-off-by: Oleg S <remittor@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/20491
(cherry picked from commit d09e2b1926a6009299eb034928df2c6b6b04dfa8)
Link: https://github.com/openwrt/openwrt/pull/21237
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-02 14:39:54 +01:00
Wei-Ting Yang
4c645e84c0 util-linux: update to 2.41.3
Release notes:
https://www.kernel.org/pub/linux/utils/util-linux/v2.41/v2.41.3-ReleaseNotes

Also update URL to use HTTPS.

Signed-off-by: Wei-Ting Yang <williamatcg@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21276
(cherry picked from commit c1281a501e)
Link: https://github.com/openwrt/openwrt/pull/21357
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-02 14:34:58 +01:00
Wei-Ting Yang
a20349be32 tools: util-linux: update to 2.41.3
Release notes:
https://www.kernel.org/pub/linux/utils/util-linux/v2.41/v2.41.3-ReleaseNotes

Remove upstreamed:
110-meson-fix-a-bug-in-posixipc_libs-configuration.patch

Signed-off-by: Wei-Ting Yang <williamatcg@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21276
(cherry picked from commit 99fd5aa496)
Link: https://github.com/openwrt/openwrt/pull/21357
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-02 14:34:58 +01:00
Hauke Mehrtens
787c268cbc libiwinfo: update to Git HEAD (2025-11-29)
2ebef3da84e8 iwinfo: Query hostapd for 'ssid2'

Link: https://github.com/openwrt/openwrt/pull/21347
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 2139360a78)
Link: https://github.com/openwrt/openwrt/pull/21357
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-02 14:34:58 +01:00
Liangbin Lian
e04ebcc06b base-files: fix default_postinst clearing luci cache
The path to the LuCI index cache file has changed to
/tmp/luci-indexcache.*.json since OpenWrt 22.03.

Update functions.sh to align with luci.mk.

Signed-off-by: Liangbin Lian <jjm2473@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21280
(cherry picked from commit e9fd3facd0)
Link: https://github.com/openwrt/openwrt/pull/21357
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-02 14:34:58 +01:00
John Audia
8db96adeb1 kernel: bump 6.12 to 6.12.63
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.63

Manually rebased:
  qualcommax/patches-6.12/0113-remoteproc-qcom-Add-secure-PIL-support.patch
  qualcommax/patches-6.12/0116-remoteproc-qcom-Update-regmap-offsets-for-halt-regis.patch

Removed upstreamed:
  airoha/patches-6.12/029-14-spi-airoha-snfi-en7523-workaround-flash-damaging.patch[1]

All other patches automatically rebased.

1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.63&id=7be679104357439ff6eab076975f5f74368acd69

Build system: x86/64
Build-tested: flogic/glinet_gl-mt6000, ramips/tplink_archer-a6-v3, x86/64-glibc
Run-tested: flogic/glinet_gl-mt6000, ramips/tplink_archer-a6-v3, x86/64-glibc

Co-authored-by: Goetz Goerisch <ggoerisch@gmail.com>
Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/21329
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit b638d886f0)
Link: https://github.com/openwrt/openwrt/pull/21356
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-02 14:32:36 +01:00
John Audia
8b464ef4ce generic: add missing symbol
Set SND_SOC_NAU8325 to no

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/21329
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit b3d1da9115)
Link: https://github.com/openwrt/openwrt/pull/21356
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-02 14:32:36 +01:00
Eric Fahlgren
0d3e93e7ba mediatek: filogic: fix supported_devices list for gl-mt2500
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Build all core packages / Build all core packages for selected target (push) Has been cancelled
The SUPPORTED_DEVICES sets for both Maxlinear (v1) and Airoha (v2)
devices were identical, so sysupgrade was unable to detect when an
incorrect image was being installed.  This caused "soft bricking" of
devices when a v1 image was installed on a v2 device, and vice versa.

Fix this by making the supported_devices distinct for each device
version, by renaming the devices with a version-specific name.
This is reflected in the file name and the image metadata.

Fixes: https://github.com/openwrt/openwrt/issues/20566
Fixes: https://github.com/openwrt/asu/issues/1525
Signed-off-by: Eric Fahlgren <ericfahlgren@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/20632
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit b71f4665cd)
2025-12-30 23:03:26 +01:00
Andrii Kuiukoff
234b367b10 uboot-mediatek: comfast,cf-wr632ax: fix missing escape sequence
Add missing escape sequence to restore terminal coloring in the OpenWrt U-Boot boot menu.

Signed-off-by: Andrii Kuiukoff <andros.ua@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21283
[Fix _bootmenu_update_title too]
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 3af16b2359)
2025-12-30 23:03:26 +01:00
Hauke Mehrtens
1818f4fbce wifi-scripts: use OWE + country for 6GHz
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
Wifi on the 6GHz band does not support open networks, configure owe by
default. 6GHz wifi also needs a country code, configure a broken country
code '00' by default to hint the user to change it.

Link: https://github.com/openwrt/openwrt/pull/21313
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 01a87f4bd0)
2025-12-30 14:46:05 +01:00
Leon M. Busch-George
ff713d3d9e wifi-scripts: don't set wpa_pairwise for wpa=0
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
Without this patch, the

    if (!config.wpa)
	  	config.wpa_pairwise = null;

is overwritten immediately.

Signed-off-by: Leon M. Busch-George <leon@georgemail.eu>
Link: https://github.com/openwrt/openwrt/pull/21215
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit bc4e7fd38e)
2025-12-30 10:40:18 +01:00
Álvaro Fernández Rojas
948b1b564d odhcp6c: update to 25.12 Git HEAD (2025-12-29)
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
699cc61568b6 dhcpv6: omit IA_NA on Request
8774d3c0ec9c dhcpv6: dhcpv6_send: convert whitespaces to tabs
11abe3790431 ra: convert if block to switch
c05b803d38e9 odhcp6c: do cleanup at exit
6aa4e491a869 config: fix potential memory leaks in error paths
235cdc97d73b all: add log helpers
6e3272d609d3 dhcpv6: clarifying comments
04aea4e3f870 dhcpv6: offload FQDN construction to init_dhcpv6
449ce8374275 dhcpv6: migrate dhcpv6_response_is_valid to switch case

5ab3203875...699cc61568

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2025-12-29 18:26:52 +01:00
Mikhail Kshevetskiy
d819a05a8e airoha: spi: update airoha-snfi patches and en7523 dts
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Changes:
* use upstream patches for airoha-snfi driver
* update in kernel en7523 dts to add spinand support

Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
Link: https://github.com/openwrt/openwrt/pull/21299
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit d9b1c74780)
2025-12-28 12:48:49 +01:00
Qingfang Deng
ffd0e5c9f0 mvebu: enable tickless idle
Switch to NO_HZ_IDLE for energy saving. Also enable Menu cpuidle
governor for tickless systems.

Run-tested: Linksys WRT1900AC v2

Signed-off-by: Qingfang Deng <dqfext@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21136
(cherry picked from commit c13f299918)
Link: https://github.com/openwrt/openwrt/pull/21305
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-12-28 12:46:23 +01:00
Florian Maurer
a9bc5059c2 ath79: cf-ew71-v2: set label-mac-device to eth1
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
The EW71v2 has the WAN port configured at eth1.
The printed label-mac is configured on this iface in openwrt.

Signed-off-by: Florian Maurer <f.maurer@outlook.de>
(cherry picked from commit 7f3537ee2c)
2025-12-27 18:29:22 +01:00
Nick Hainke
571d716e69 wifi-scripts: fix race in wireless interface creation
Some checks failed
Build all core packages / Build all core packages for selected target (push) Has been cancelled
When wdev interfaces and hostapd interfaces are mixed, race conditions
can occur. Sometimes all interfaces are started correctly, sometimes only
the wdev interface and some of the hostapd interfaces, and sometimes only
the wdev interface.

Fix this by creating the wdev interfaces first, before processing
wpa_supplicant or hostapd interfaces.

Link: https://github.com/openwrt/openwrt/pull/21303
Signed-off-by: Nick Hainke <vincent@systemli.org>
(cherry picked from commit 2015a40c38)
2025-12-27 16:28:11 +01:00
Markus Stockhausen
380e5ea1f2 realtek: fix Linksys LGS328C dts memory definition
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
RTL930x devices have highmem starting address at 0x20000000.
The Linksys LGS328C highmem definition is wrongly shared with
the larger LGS352C RTL931x model and starts at 0x90000000.
Fix it by splitting the definition.

Fixes: 853d73f ("realtek: add support for Linksys LGS328C")

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/21262
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 5d7470d4ca)
2025-12-27 14:19:46 +01:00
Nick Hainke
a06553be26 wifi-scripts: fix mcast_rate type (number, not array)
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
The multicast rate (mcast_rate) is defined as a single numeric value,
not an array. The ucode scripts already expect a single number, and
the OpenWrt documentation specifies this option as an integer [0].

Adjust the wireless schema accordingly. This also fixes the wdev.uc
call path for the iw fallback mesh setup.

[0] - https://openwrt.org/docs/guide-user/network/wifi/basic

Link: https://github.com/openwrt/openwrt/pull/21291
(cherry picked from commit a6eb3d9536)
Link: https://github.com/openwrt/openwrt/pull/21301
Signed-off-by: Nick Hainke <vincent@systemli.org>
2025-12-27 12:20:17 +01:00
Nick Hainke
a32c5c69dc wifi-scripts: fix wdev fallback for mesh interfaces
The previous wdev.uc invocation failed for mesh interfaces.
Rewrite it as a loop so the mesh interface is created correctly
when no wpa_supplicant mesh support is installed.

Link: https://github.com/openwrt/openwrt/pull/21291
(cherry picked from commit a18ef412ae)
Link: https://github.com/openwrt/openwrt/pull/21301
Signed-off-by: Nick Hainke <vincent@systemli.org>
2025-12-27 12:20:17 +01:00
Dmitry Mostovoy
d23f614451 mediatek: add kmod-usb3 to default package set of WR3000P
Some checks failed
Build all core packages / Build all core packages for selected target (push) Waiting to run
Build Kernel / Build all affected Kernels (push) Has been cancelled
Include XHCI USB drivers on the Cudy WR3000P v1 router, the drivers are
required to be able to use the USB port for USD devices.

Closes: https://github.com/openwrt/openwrt/issues/21231
Fixes: 04e9d154f2 ("mediatek: filogic: add support for Cudy WR3000P v1")
Signed-off-by: Dmitry Mostovoy <dmitry.mostovoy@ceifx.com>
Link: https://github.com/openwrt/openwrt/pull/21281
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 9da57e2f82)
2025-12-26 13:57:41 +01:00
Nick French
e7d89ac0ea ath79: Fix syntax error in 10_fix_wifi_mac
This typo makes the script fail with:
-ash: /etc/hotplug.d/ieee80211/10_fix_wifi_mac: line 66: syntax error: unexpected word (expecting ")")

which ultimately prevents the mac address for certain devices wireless cards being set correctly

Signed-off-by: Nick French <nickfrench@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21287
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit cb94962ac4)
2025-12-26 13:48:16 +01:00
Elwin Huang
51aa6d184a wifi-scripts: add missing 802.11be type in hwmodelist
Add EHT* check so that the hwmode will display 802.11be capability correctly.

Signed-off-by: Elwin Huang <s09289728096@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21267
Signed-off-by: Nick Hainke <vincent@systemli.org>
(cherry picked from commit 95112a4939)
2025-12-26 13:48:15 +01:00
Robert Senderek
400c1c5ea8 qualcommax: ipq50xx: remove cpufreq scaling
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
ipq5018 do not support freq scaling and therefore stuck on 800Mhz
This patch allows CPU to run with 1.008 Ghz as designed

Signed-off-by: Robert Senderek <robert.senderek@10g.pl>
Link: https://github.com/openwrt/openwrt/pull/21185
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit c1290fa48c)
2025-12-26 12:24:53 +01:00
Nick Hainke
2acfd9f8ab wifi-scripts: ucode: fix wpa_supplicant mesh
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
Mesh interfaces may not define an encryption setting. This results in
a ucode runtime error when parse_encryption() is called:
  Reference error: left-hand side expression is null
  In parse_encryption(), file /usr/share/ucode/wifi/iface.uc, line 20, byte 32:
    called from function setup_sta (/usr/share/ucode/wifi/supplicant.uc:59:31)
    called from function generate (/usr/share/ucode/wifi/supplicant.uc:243:41)
    called from function setup (./mac80211.sh:254:61)
    called from anonymous function (./mac80211.sh:342:14)
   `    config.auth_type = encryption[0] ?? 'none';`
    Near here ------------------------^

Link: https://github.com/openwrt/openwrt/pull/21293
(cherry picked from commit 00e6c18a93)
Link: https://github.com/openwrt/openwrt/pull/21295
Signed-off-by: Nick Hainke <vincent@systemli.org>
2025-12-25 22:39:34 +01:00
Dominic Germain
8bf13dcb36 kernel: add option for USB FunctionFS gadget
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
Add menuconfig option 'kmod-usb-gadget-fs' for the USB FunctionFS gadget
module

OpenWRT is perfect for USB gadgets that are network-enabled, since it
provides everything needed to easily manage the device. Having support
for the FunctionFS gadget enables the use of any custom USB devices
that does not have a specific module, like Media Transfer Protocol.

Signed-off-by: Dominic Germain <dominic@germain.cc>
Link: https://github.com/openwrt/openwrt/pull/21207
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 22a69dfa4a)
2025-12-25 16:22:49 +01:00
Alexander Patrakov
c8b98eab98 comgt-ncm: fix setting ip[46]table and MTU
The ncm proto handler ignored ip4table, ip6table, and mtu settings.

The fix is based on the existing code in the mbim proto handler.

Fixes: #20216.
Signed-off-by: Alexander Patrakov <patrakov@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/20217
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit b289edd84b)
2025-12-25 16:11:35 +01:00
George Sapkin
116083dd91 toolchain: fix libgcc ABI for libc
Some checks failed
Build all core packages / Build all core packages for selected target (push) Waiting to run
Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
libc depends on knowing libgcc's ABI, so it needs to be evaluated first.
Otherwise libc will depend on an ABI-less libgcc causing the rest of the
toolchain to fail.

Building package index...
ERROR: unable to select packages:
  libgcc (virtual):
    note: please select one of the 'provided by'
          packages explicitly
    provided by: libgcc1
    required by: world[libgcc]

Before:

libc fused dependencies: libgcc
libgcc fused dependencies:
libatomic fused dependencies: libgcc1

After:

libgcc fused dependencies:
libc fused dependencies: libgcc1
libatomic fused dependencies: libgcc1

Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21265
(cherry picked from commit 5e32bfbf4b)
Link: https://github.com/openwrt/openwrt/pull/21253
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-12-24 19:39:54 +01:00
George Sapkin
eaeae068cc build: fix missing PKG_INFO_DIR
If the first built package has an ABI, PKG_INFO_DIR might not exist, so
ensure it does.

Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/21265
(cherry picked from commit 56bc4a0d89)
Link: https://github.com/openwrt/openwrt/pull/21253
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-12-24 19:39:54 +01:00
George Sapkin
e0ea3d73d2 build: fix apk packaging and ABI-versioning
The updated logic for the APK dependencies and provides is as follows:

- If ABI version is defined:
  - package is named `package_name-ABI_version`
  - package implicitly provides
    `package_name-ABI_version=package_version`
    this implies that only one version of a package per ABI can be
    installed at the same time
  - additionally provide `package_name` so multiple packages can be
    looked up by its base name
  - for each `provides`, provide `provide-ABI_version=package_version`
    this implies that only one version of a provide can be installed at
    the same time

- else if ABI version is _not_ defined
  - package is named `package_name`
  - package implicitly provides `package_name=package_version`
    this implies that only one version of a package can be installed at
    the same time
  - if `alternatives` is defined
    - for each `provides`, provide `provide`
      this implies that multiple versions of a provide can be installed
      at the same time
  - else if `alternatives` is _not_ defined
    - for each `provides`, provide `provide=package_version`
      this implies that only one version of a provide can be installed
      at the same time

Both cases a package can be looked up by its base name.

ABI version `alternatives`, `conffiles`, `conffiles_static`, `list` and
`rusers` files so multiple versions of the same ABI package can be
installed side by side, and so they don't overwrite each other's
packaging files.

ABI version `EXTRA_DEPENDS` so dependencies can be correctly looked up
using the existing OpenWrt semantics without the ABI specified. This is
needed since ABI-versioned libraries no longer provide
`package_name=package_version`, so that they can be installed side by
side.

Remove duplicate dependencies when `EXTRA_DEPENDS` specifies a versioned
one that is already in `DEPENDS`.

ABI is defined
------------------------------------------------------------------------

`libsqlite3` has `PROVIDES` set to `libfake` and has two different ABI
versions installed. `libfake` is just an example to demonstrate the
mechanics, as the library can already be depended upon using e.g.
`libsqlite3-0=3.51.0-r1`. Note the ABI-versioned lists.

```
root@OpenWrt:/tmp# apk add --allow-untrusted ./libsqlite3-0-3.51.0-r1.apk
(1/1) Installing libsqlite3-0 (3.51.0-r1)
libsqlite3-0-3.51.0-r1.post-install: Executing script...
OK: 22 MiB in 157 packages

root@OpenWrt:/tmp# apk add --allow-untrusted ./libsqlite3-1-4.00.0-r1.apk
(1/1) Installing libsqlite3-1 (4.00.0-r1)
libsqlite3-1-4.00.0-r1.post-install: Executing script...
OK: 23 MiB in 158 packages

root@OpenWrt:/tmp# apk query --fields name,version,contents,provides libsqlite3-0 libsqlite3-1
Name: libsqlite3-0
Version: 3.51.0-r2
Provides: libfake-0=3.51.0-r2 libsqlite3
Contents:
  lib/apk/packages/libsqlite3-0.list
  usr/lib/libsqlite3.so.0
  usr/lib/libsqlite3.so.3.51.0

Name: libsqlite3-1
Version: 4.00.0-r1
Provides: libfake-1=4.00.0-r1 libsqlite3
Contents:
  lib/apk/packages/libsqlite3-1.list
  usr/lib/libsqlite3.so.1
  usr/lib/libsqlite3.so.4.00.0

root@OpenWrt:/tmp# ls -lh /usr/lib/libsqlite3.so.*
lrwxrwxrwx    1 root     root          20 Nov 20 00:23 /usr/lib/libsqlite3.so.0 -> libsqlite3.so.3.51.0
lrwxrwxrwx    1 root     root          20 Nov 20 00:27 /usr/lib/libsqlite3.so.1 -> libsqlite3.so.4.00.0
-rwxr-xr-x    1 root     root        1.0M Nov  6 18:19 /usr/lib/libsqlite3.so.3.51.0
-rwxr-xr-x    1 root     root        1.0M Nov  6 18:19 /usr/lib/libsqlite3.so.4.00.0
```

ABI is not defined
------------------------------------------------------------------------

Both `avahi-dbus-daemon` and `avahi-nodbus-daemon` provide `avahi-daemon`,
but have no ABI specified. This results in `avahi-daemon=0.8-r11` provides
for both packages and only one being able to be installed at the same time:

```
root@OpenWrt:/tmp# apk add --allow-untrusted ./avahi-nodbus-daemon-0.8-r11.apk
(1/4) Installing libavahi-nodbus-support (0.8-r10)
libavahi-nodbus-support-0.8-r10.post-install: Executing script...
(2/4) Installing libdaemon (0.14-r5)
libdaemon-0.14-r5.post-install: Executing script...
(3/4) Installing libexpat (2.7.3-r1)
libexpat-2.7.3-r1.post-install: Executing script...
(4/4) Installing avahi-nodbus-daemon (0.8-r11)
avahi-nodbus-daemon-0.8-r11.post-install: Executing script...
23 MiB in 160 packages

root@OpenWrt:/tmp# apk query --fields provides avahi-nodbus-daemon
Provides: avahi-daemon=0.8-r11

root@OpenWrt:/tmp# apk add --allow-untrusted ./avahi-dbus-daemon-0.8-r11.apk
ERROR: unable to select packages:
  avahi-dbus-daemon-0.8-r11:
    conflicts: avahi-nodbus-daemon-0.8-r11[avahi-daemon=0.8-r11]
    satisfies: world[avahi-dbus-daemon><Q1R111s+ke9Vf+eCxDHX2BZVUK54Q=]
  avahi-nodbus-daemon-0.8-r11:
    conflicts: avahi-dbus-daemon-0.8-r11[avahi-daemon=0.8-r11]
    satisfies: world[avahi-nodbus-daemon><Q1BAu7nLI2MgRabpveLTGO2ksQz7E=]
```

Provides and alternatives
------------------------------------------------------------------------

Both `uclient-fetch` and `wget-nossl` provide `wget` and specify
alternatives, so provides are not versioned and both packages can be
installed at the same time:

```
root@OpenWrt:/tmp# apk query --fields name,version,contents,provides uclient-fetch wget-nossl
Name: uclient-fetch
Version: 2025.10.03~dc909ca7-r1
Provides: wget
Contents:
  bin/uclient-fetch
  lib/apk/packages/uclient-fetch.alternatives
  lib/apk/packages/uclient-fetch.list

Name: wget-nossl
Version: 1.25.0-r1
Provides: gnu-wget wget
Contents:
  lib/apk/packages/wget-nossl.alternatives
  lib/apk/packages/wget-nossl.list
  usr/libexec/wget-nossl

```

Fixes: https://github.com/openwrt/openwrt/issues/20582
Fixes: https://github.com/openwrt/openwrt/issues/20802
Signed-off-by: George Sapkin <george@sapk.in>
Link: https://github.com/openwrt/openwrt/pull/20819
(cherry picked from commit 18029977f6)
Link: https://github.com/openwrt/openwrt/pull/21253
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-12-24 19:39:54 +01:00
George Moussalem
2da39423ed qualcommax: ipq50xx: fix reo2host-status interrupt vector
Some checks failed
Build all core packages / Build all core packages for selected target (push) Waiting to run
Build Kernel / Build all affected Kernels (push) Has been cancelled
Interrupt vector for reo2host-status is wrongly assigned.
Status interrupts weren't received and a workaround was applied to
mac80211 to periodically poll the reo status ring. Therefore, the
workaround can be removed with the proper hardware interrupt line
assigned.

Signed-off-by: George Moussalem <george.moussalem@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21272
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-12-24 13:07:01 +01:00
Robert Marko
a4a2638590
microchipsw: sync with DTS sent upstream
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Sync the DTS with the version sent upstream, clock bindings also.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
(cherry picked from commit bce8432bbd)
2025-12-24 11:04:32 +01:00
Radek Dostál
c3cf33f98b ath79: fix build of big images for TP RE355v1, RE450v1 & v2
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
After merge of https://github.com/openwrt/openwrt/pull/20709 I noticed,
that https://mirror-03.infra.openwrt.org/snapshots/targets/ath79/tiny/
still does not contain the build for RE450.

I analyzed the problem and noticed, that only builds which fits into
original size can be build and if the image is larger, it fails with
the following error: "WARNING: Image file .../openwrt/build_dir/
target-mips_24kc_musl/linux-ath79_tiny/tmp/
openwrt-ath79-tiny-tplink_re450-v1-squashfs-sysupgrade.bin is too big:
  > 7864320".

This error is quite misleading as the image is smaller than 7864320. The
reason for this error is that default tplink-safeloader has hardcoded
factory partition structure and fails to generate any file.

Rather then fixing tplink-safeloader I followed approach from commit
ebd5e5fb53 ("ramips: switched TP-Link RE305 v1 to new partition layout")
and switched away from "tplink-safeloader sysupgrade".

I did not include "IMAGES := sysupgrade.bin", because with tiny target it
is still possible to locally build even factory image.

Fixes commit e768731dc8 ("ath79: switch TP-Link RE355 v1, RE450 v1 and
RE450 v2 to mtd-concat").

Signed-off-by: Radek Dostál <rd@radekdostal.com>
Link: https://github.com/openwrt/openwrt/pull/21158
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit bdbb4bdfa0)
2025-12-22 18:51:03 +01:00
Mikhail Kshevetskiy
623e329a52 mediatek: fix pwn fan settings for sinovoip bpi-r3 (v3)
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Popular cheap PWM fans for this machine, like the ones coming in
heatsink+fan combos will not work properly at the currently defined
medium speed. Trying different pwm setting using a command

  echo $value > /sys/devices/platform/pwm-fan/hwmon/hwmon1/pwm1

I found:

  pwm1 value     fan rotation speed   cpu temperature     notes
  -----------------------------------------------------------------
    0            maximal              31.5 Celsius        too noisy
   40            optimal              35.2 Celsius        no noise hearable
   95            minimal
   above 95      does not rotate      55.5 Celsius
  -----------------------------------------------------------------

Current cooling levels are:

	cooling-levels = <255 96 0>;

Thus only cpu-active-high and cpu-active-low modes are usable.
This patch fixes cpu-active-medium settings for bpi-r3 board.

This patch may not be enough. Users may wants to tweak their thermal_zone0
trip points, thus tuning fan rotation speed depending on cpu temperature.
That can be done on the base of the following example:

  === example =========
  # cpu temperature below 25 Celsius degrees, no rotation
  echo 25000 > /sys/class/thermal/thermal_zone0/trip_point_4_temp
  # cpu temperature in [25..32] Celsius degrees, normal rotation speed
  echo 32000 > /sys/class/thermal/thermal_zone0/trip_point_3_temp
  # cpu temperature above 50 Celsius degrees, max rotation speed
  echo 50000 > /sys/class/thermal/thermal_zone0/trip_point_2_temp
  =====================

Changes v2:
* put patch to a proper directory
* updated patch description
* tested with latest openwrt based on linux-6.6

Changes v3:
* use upstream linux patch
* update patch description

Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17130
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 095151b235)
2025-12-22 10:34:23 +01:00
Hauke Mehrtens
02f9e71dd2 OpenWrt v25.12.0-rc1: revert to branch defaults
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-12-20 00:20:16 +01:00
Hauke Mehrtens
b1a74b1cde OpenWrt v25.12.0-rc1: adjust config defaults
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-12-20 00:20:13 +01:00
Álvaro Fernández Rojas
9e9b05130c odhcpd: update to 25.12 Git HEAD (2025-12-18)
Some checks failed
Build all core packages / Build all core packages for selected target (push) Has been cancelled
0779ee287db5 dhcpv6-ia: reconfigure message length bug fix
d69896b0ac7c all: remove dead code
3f6b3b4b9f8a odhcpd: remove fallback DNS search domain
ff3f72fdd01d router: remove some log spam in send_router_advert()
c1cc541e1065 router: improve send_router_advert()
901851b883da router: Modify relayed RA PIO P flag according to interface policy
179429ba477d router: Modify relayed RA PIO A flags according to interface policy

cb1b8770b7...0779ee287d

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2025-12-18 21:25:49 +01:00
Álvaro Fernández Rojas
988902fa9a odhcp6c: update to 25.12 Git HEAD (2025-12-18)
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
5ab3203875ad dhcpv6: use stable IAID for IA_NA
29922b7fb497 odhcp6c: avoid clearing CLIENT_ID

2582843959...5ab3203875

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2025-12-18 18:58:45 +01:00
Álvaro Fernández Rojas
f1984e2e5a odhcpd: update to 25.12 Git HEAD (2025-12-14)
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
cb1b8770b782 config: add default value for dhcpv6_pd_min_len
20eb94d02dfe config: allow minimum PD len up to 64
7ebd96083971 Revert "router: optimize duplicated PIO comparison"
90ae6fc6e478 statefiles: don't consider no hostname as broken

1ff1328a4f...cb1b8770b7

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2025-12-17 23:40:38 +01:00
Álvaro Fernández Rojas
68e2095a8b odhcp6c: update to 25.12 Git HEAD (2025-12-17)
2582843959a7 dhcpv6: fix NA/PD=try when NA/PD aren't provided
db6bec98ead1 odhcp6c: fix "-S" usage
b9ab6b6abc64 odhcp6c: reset res variable on INIT state

5212a1019d...2582843959

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2025-12-17 23:37:32 +01:00
Markus Petri
da669004ef vrx518_tc: fix rx_len_adj
Some checks failed
Build all core packages / Build all core packages for selected target (push) Waiting to run
Build Kernel / Build all affected Kernels (push) Has been cancelled
Fix rx_len_adj to avoid leaking the ethernet FCS into the actual frame
data in single line mode (the default)

Fixes: https://github.com/openwrt/openwrt/issues/20983
Signed-off-by: Markus Petri <devel@isjunk.org>
Link: https://github.com/openwrt/openwrt/pull/21045
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 487178f8b0)
2025-12-17 22:07:42 +01:00
Janusz Dziedzic
131071cd26 linux-firmware: intel: bump BE200 wifi firmware
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
Latest backports require newer firmware (bump to 101).
8788f6b3c6

Signed-off-by: Janusz Dziedzic <janusz.dziedzic@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21194
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 7bfe7788b1)
2025-12-17 21:26:17 +01:00
Petr Štetiar
fe635c56ac
dropbear: bump to 2025.89 (CVE-2025-14282, CVE-2019-6111)
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
- Security: Avoid privilege escalation via unix stream forwarding in Dropbear
  server. Other programs on a system may authenticate unix sockets via
  SO_PEERCRED, which would be root user for Dropbear forwarded connections,
  allowing root privilege escalation.
  Reported by Turistu, and thanks for advice on the fix.
  This is tracked as CVE-2025-14282, and affects 2024.84 to 2025.88.

  It is fixed by dropping privileges of the dropbear process after
  authentication. Unix stream sockets are now disallowed when a
  forced command is used, either with authorized_key restrictions or
  "dropbear -c command".

  In previous affected releases running with "dropbear -j" (will also disable
  TCP fowarding) or building with localoptions.h/distrooptions.h
  "#define DROPBEAR_SVR_LOCALSTREAMFWD 0" is a mitigation.

- Security: Include scp fix for CVE-2019-6111. This allowed
  a malicious server to overwrite arbitrary local files.
  The missing fix was reported by Ashish Kunwar.

- Server dropping privileges post-auth is enabled by default. This requires
  setresgid() support, so some platforms such as netbsd or macos will have to
  disable DROPBEAR_SVR_DROP_PRIVS in localoptions.h. Unix stream forwarding is
  not available if DROPBEAR_SVR_DROP_PRIVS is disabled.

  Remote server TCP socket forwarding will now use OS privileged port
  restrictions rather than having a fixed "allow >=1024 for non-root" rule.

  A future release may implement privilege dropping for netbsd/macos.

- Fix a regression in 2025.87 when RSA and DSS are not built. This would lead
  to a crash at startup with bad_bufptr().
  Reported by Dani Schmitt and Sebastian Priebe.

- Don't limit channel window to 500MB. That is could cause stuck connections
  if peers advise a large window and don't send an increment within 500MB.
  Affects SSH.NET https://github.com/sshnet/SSH.NET/issues/1671
  Reported by Rob Hague.

- Ignore -g -s when passwords arent enabled. Patch from Norbert Lange.
  Ignore -m (disable MOTD), -j/-k (tcp forwarding) when not enabled.

- Report SIGBUS and SIGTRAP signals. Patch from Loïc Mangeonjean.

- Fix incorrect server auth delay. Was meant to be 250-350ms, it was actually
  150-350ms or possibly negative (zero). Reported by pickaxprograms.

- Fix building without public key options. Thanks to Konstantin Demin

- Fix building with proxycmd but without netcat. Thanks to Konstantin Demin

- Fix incorrect path documentation for distrooptions, thanks to Todd Zullinger

- Fix SO_REUSEADDR for TCP tests, reported by vt-alt.

Dropped:

 * 050-dropbear-multihop-fix.patch as its included in the release 5cc0127000db5f
 * 051-fix-pubkey-options.patch as its included in the release 1d4c4a542cd5df
 * 052-fix-missing-depends-for-sntrup761x25519-sha512.patch as its included
   in the release 1a2c1e649a1824
 * 053-Don-t-limit-channel-window-to-500MB.patch as its included in the release a8610f7b98ad

Manually rebased:

 * 110-change_user.patch

Fixes: CVE-2025-14282, CVE-2019-6111
Reviewed-by: Hauke Mehrtens <hauke@hauke-m.de>
Reviewed-by: Konstantin Demin <rockdrilla@gmail.com>
Tested-by: Konstantin Demin <rockdrilla@gmail.com> [mediatek/filogic (GL.iNet GL-MT6000)]
Link: https://github.com/openwrt/openwrt/pull/21186
Signed-off-by: Petr Štetiar <ynezz@true.cz>
(cherry picked from commit 70a4da1ceb)
2025-12-17 03:59:24 +00:00
Hauke Mehrtens
fe1b06f725 kernel: Fix boot of realtek rtl838x
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
Revert two patches from upstream Linux:
135178e90a
63a93d1cd6

This fixes a boot hang on realtek rtl838x switches.
This is the last printed message:
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear)

Thread on mips mailing list:
https://lore.kernel.org/linux-mips/b35fe4b3-8f42-49f4-a6bf-9f0e56d4050c@hauke-m.de/T/#u

Link: https://github.com/openwrt/openwrt/pull/21166
Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/21126
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 0bfc66e7b5)
2025-12-17 00:32:25 +01:00
John Audia
0669972095 kernel: bump 6.12 to 6.12.62
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.62

Manually rebased:
  bcm27xx/patches-6.12/950-0358-mmc-sdhci-of-dwcmshc-define-sdio-timeout-clocks.patch

Removed upstreamed:
  backport-6.12/830-v6.18-spi-bcm63xx-fix-premature-CS-deassertion-on-RX-only-transactions.patch[1]

All other patches automatically rebased.

1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.62&id=e31194bf494f6900a5f96f55ed194a00e458f8d1

Build system: x86/64
Build-tested: flogic/glinet_gl-mt6000, ramips/tplink_archer-a6-v3, x86/64-glibc
Run-tested: flogic/glinet_gl-mt6000, ramips/tplink_archer-a6-v3, x86/64-glibc

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/21126
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 97e9d7038e)
2025-12-17 00:32:23 +01:00
Hauke Mehrtens
74247287ad uboot-sunxi: fix u-boot build
The u-boot target name has to match the u-boot configuration. Switch
this back to the old names.

Fixes: d871e95e7f ("sunxi: image: sync target profiles names with DT compatible")
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 86996634f0)
2025-12-17 00:10:36 +01:00
Rany Hany
c432647d18 wifi-scripts: update phys after rename_phy_by_name call
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
This fixes a failed bring up of the radio on bootup
if the model defines a rename of phy in its /etc/board.json.
This specifically impacts Redmi AX6S and any router that does so
in its /etc/board.json. The fix fortunately is simple, just update
phy name in phys after rename.

The entry that specifically causes this issue is the following:

{
	<omitted>
	"wlan": {
		"wl0": {
			"path": "platform/18000000.wmac",
			"info": {
				"antenna_rx": 15,
				"antenna_tx": 15,
				"bands": {
					"2G": {
						"ht": true,
						"max_width": 40,
						"modes": [
							"NOHT",
							"HT20",
							"HT40"
						],
						"default_channel": 1
					}
				},
				"radios": [
				]
			}
		},
	...
}

The issue is that after rename, referenced phy in config is going to be
wl0 but in phys array it is still phy0; and so it fails to find phy
and does not bring up radio.

Fixes: https://github.com/openwrt/openwrt/issues/20250
Fixes: https://github.com/openwrt/openwrt/issues/20339
Signed-off-by: Rany Hany <rany_hany@riseup.net>
Link: https://github.com/openwrt/openwrt/pull/21175
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit e4d5e76af0)
2025-12-16 20:23:29 +01:00
Jonas Jelonek
88ab3205fe realtek: mdio-serdes: use correct device table identifier
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Use the correct identifier 'rtsds_of_match' instead of
'rtsds_mdio_of_match' because the latter doesn't exist.

This doesn't cause an error for 6.12. However, with 6.18 the
implementation of MODULE_DEVICE_TABLE has changed to use 'static' and
'used' [1] instead of 'extern' and 'unused' [2].

[1] 7d0a66e4bb/include/linux/module.h (L260)
[2] adc218676e/include/linux/module.h (L249)

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21182
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit d519a3ee86)
2025-12-16 14:03:11 +01:00
Jonas Jelonek
c870f16350 realtek: pcs: move polarity into SerDes struct
As a first real usage of the new SerDes struct, move the polarity
configuration there. It was previously located in the global rtpcs_ctrl
struct as an array, indexed by SerDes id. Because this is per-SerDes
information, the new SerDes struct is the correct place to live in.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21146
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 56a71f3c82)
2025-12-16 13:38:14 +01:00
Jonas Jelonek
4d86ac6401 realtek: pcs: drop unneeded SerDes number range checks
By using references to pre-initiated SerDes instances instead of plain
SerDes number, there is no need to check for the range anymore in
various places. During driver/pcs init it is ensured that only valid
SerDes will reach the configuration functions.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21146
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 18eea05483)
2025-12-16 13:38:14 +01:00
Jonas Jelonek
d2a34744fe realtek: pcs: make use of SerDes struct in set_autoneg
Also switch set_autoneg (and related helper rtpcs_sds_modify) to the
SerDes struct instead of the plain SerDes id by using just the reference
to the SerDes instance instead of (ctrl, sds_id) tuple. This completes
the transition.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21146
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit d8dd8bd88f)
2025-12-16 13:38:14 +01:00
Jonas Jelonek
cf03520c71 realtek: pcs: make use of SerDes struct in SerDes setup
Make use of the previously added SerDes struct in SerDes setup and all
functions in its call path by removing (ctrl, sds_num) being passed to
every function call and instead just pass the reference to the
corresponding SerDes instance.

Various SerDes calculations for even, odd and neighbor are unified by
switching to previously introduced helpers.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21146
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 1fccb0eb16)
2025-12-16 13:38:13 +01:00
Jonas Jelonek
0fe7f97896 realtek: pcs: switch to id from SerDes struct
Drop usage of the to-be-phased-out SerDes id stored in rtpcs_link and
use the reference to the SerDes instance to use the embedded id in
rtpcs_serdes instead.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21146
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 4d9400f86b)
2025-12-16 13:38:13 +01:00
Jonas Jelonek
6f98353eec realtek: pcs: assign SerDes reference upon PCS creation
Upon creation of a phylink_pcs instance by calling rtpcs_create, assign
a reference to the corresponding SerDes to the link structure. In the
next step, this should be used everywhere instead of the plain SerDes
number.

Rename the field used to hold the SerDes number from 'sds' to 'sds_num'
and name the new field 'sds' to make clear what is what.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21146
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 69bbcc685b)
2025-12-16 13:38:13 +01:00
Jonas Jelonek
01cfdb1610 realtek: pcs: add helpers for even, odd, neighbor SerDes
Add dedicated helpers to get references to even, odd and neigbor SerDes
if needed. This should replace the various calculations scattered
throughout the code, providing a unified way to work with adjacent
SerDes.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21146
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 232c1fb14a)
2025-12-16 13:38:13 +01:00
Jonas Jelonek
40201e7f73 realtek: pcs: add separate SerDes struct
Add a separate structure for a SerDes. This is needed to appropriately
store per-SerDes information, which in turn is needed for future work.
Additionally, it's intended to reduce boilerplate and several
inconsistencies.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21146
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 6b3f8fb16f)
2025-12-16 13:38:13 +01:00
Jonas Jelonek
b9e5803d04 realtek: pcs: use per-variant SerDes count
Use a separate configuration field for the number of SerDes for each
variant of the Realtek Otto family. Add this field to the config
structure, assign it and use it during driver probe. This narrows
possible error cases and is needed for upcoming extensions.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21146
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 6cf33aacfe)
2025-12-16 13:38:13 +01:00
Jonas Jelonek
d8b1a54c78 realtek: pcs: add dedicated enum for SerDes modes
The Realtek SerDes mode capabilities do not map 1:1 to the
PHY_INTERFACE_MODE_* modes used in the kernel and passed to the PCS.
For example, some PHY chips use the proprietary XSGMII mode for which
there isn't an equivalent in the kernel, or HSGMII.

In the past, this led to problems and confusion using kernel's XGMII to
handle the XSGMII mode, and needed a downstream patch for HSGMII. They
have been solved/worked around for now, but XSGMII is currently not
implemented at all. And who knows what might come in the future.

To make our life easier, introduce a dedicated internal representation
of SerDes modes which differs from kernel's PHY_INTERFACE_MODE_*. This
allows us to map "external" modes to different internal modes as needed
instead of carrying the PHY_INTERFACE_MODE_* through the whole SerDes
configuration code. The PCS driver needs to map PHY_INTERFACE_MODE_* to
RTPCS_SDS_MODE_* in pcs_config, and the latter should be used as the
only one.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21146
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit a4d6e10bf2)
2025-12-16 13:38:13 +01:00
Jonas Jelonek
96c86b2ff1 realtek: pcs: rtl930x: drop unused and broken function
Drop the unused and broken function rtpcs_930x_sds_clock_wait from the
PCS driver. The proper working variant is already some lines above and
called rtpcs_930x_sds_wait_clock_ready.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21146
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit decc4f6ba8)
2025-12-16 13:38:13 +01:00
Jonas Jelonek
e989bf80a8 realtek: pcs: drop PCS creation without SerDes ref
Since the beginning, the PCS driver had the ability to call its
rtpcs_create without a reference to a valid PCS node. A comment in the
code mentions that this is done for RTL838X and its built-in octa-PHY
which is connected directly instead of via a SerDes. Further
explanations are not provided.

Drop this ability and make the rtpcs_create call in the dsa driver
conditional. As the built-in PHY of RTL838X isn't attached to a SerDes,
there is no obvious point of having the PCS driver in that chain. The
ports are marked as internal and have no pcs-handle, thus no phylink_pcs
instance should be created.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21146
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit a58e41e522)
2025-12-16 13:38:13 +01:00
Jonas Jelonek
2e56a1ffc6 realtek: mdio-serdes: improve debugfs creation
Commit 3c073b5cb2 cleaned up the debugfs creation in
mdio-realtek-otto-serdes driver to not explicitly check if the root
directory already exists. This is fine because kernel handles the case
properly so there's no need to check anymore.

However, this pollutes the boot log with:
[..] debugfs: 'realtek_otto_serdes' already exists in '/'
[..] debugfs: 'realtek_otto_serdes' already exists in '/'
[..] debugfs: 'realtek_otto_serdes' already exists in '/'
[..] debugfs: 'realtek_otto_serdes' already exists in '/'
[..] debugfs: 'realtek_otto_serdes' already exists in '/'
[..] debugfs: 'realtek_otto_serdes' already exists in '/'
[..] debugfs: 'realtek_otto_serdes' already exists in '/'
[..] debugfs: 'realtek_otto_serdes' already exists in '/'
[..] debugfs: 'realtek_otto_serdes' already exists in '/'
[..] debugfs: 'realtek_otto_serdes' already exists in '/'
[..] debugfs: 'realtek_otto_serdes' already exists in '/'

Now, the root directory creation is attempted multiple times, causing
the kernel to print an error message because the directory already
exists.

Fix this by moving the SerDes loop into rtsds_debug_init and only try
to create the root debugfs directory once.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21179
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 8e4730fd60)
2025-12-16 13:12:15 +01:00
Christoph Krapp
86ebe649c2 ipq40xx: convert Orbi led labels to function/color
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
The eight leds controlled by the LED controller are RGB leds themselves
but are flashing white by default. The color part is controlled by GPIOs
53 (green), 54 (red), 57 (blue) and 60 (white).
Therefore define the led nodes of the controller as white instead of RBG
as well as backlight as their function.

Signed-off-by: Christoph Krapp <achterin@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/20877
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 3045f205b3)
2025-12-16 10:30:26 +01:00
Christoph Krapp
ce54f6e893 ipq40xx: fix second 5ghz radio on Netgear RBx40
When support was added for the RBR40 and RBS40 it was assumed that they
also share the same second 5ghz wifi chip as their bigger siblings.
Turns out that instead of QCA9984 (RBx50, SRx60) these devices use
QCA9886 like the RBx20 devices to.
They also load different boardfiles for the IPQ4019 chip.

This moves the wifi nodes from the orbi.dtsi to each device dts file and
change the RBx40 boardfile variants.

Signed-off-by: Christoph Krapp <achterin@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/20877
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit f0909f7a05)
2025-12-16 10:30:26 +01:00
Christoph Krapp
368c9c0c99 ipq-wifi: add entry for Netgear RBK40
Add boardfile override packages for Netgear RBK40 devices.

Signed-off-by: Christoph Krapp <achterin@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/20877
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit e9d6015bef)
2025-12-16 10:30:26 +01:00
Christoph Krapp
d4274a10f6 ipq40xx: fix Netgear RBR40 wan mac
The WAN port currently has the same MAC set as all the other LAN ports.
Fix this by adding the missing case in ipq40xx_setup_macs().

Signed-off-by: Christoph Krapp <achterin@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/20877
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 0f0f578d0a)
2025-12-16 10:30:26 +01:00
Christoph Krapp
8e5cdd84eb ipq40xx: split orbi devices in router and satellite
Netgear Orbi devices are split into router and satellite units. Even
though the hardware is mostly the same, the network configuration is
different. Router units have a designated WAN port while satellite units
have all available ports labeled as "Ethernet".
This splits the device trees into both unit types and adjusts the port
labels.

Signed-off-by: Christoph Krapp <achterin@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/20877
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 314dbb7fec)
2025-12-16 10:30:26 +01:00
Robert Marko
872fd1f0b6 ipq-wifi: update to Git HEAD (2025-12-16)
10eddd6f1cba qca4019: qca9888: add bdfs for Netgear RBK40

Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 4e688db5a8)
2025-12-16 10:28:20 +01:00
Christoph Krapp
d18dfbdcbc qualcommax: ipq807x: use ascii-env driver for Linksys MX4200v1
Just like it has already been changed for v2, use the ascii-eq-delim-env
driver to extract the label mac from the devinfo partition.

Signed-off-by: Christoph Krapp <achterin@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/20732
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit f0c5348775)
2025-12-16 10:24:17 +01:00
Mario Andrés Pérez
6d7fbcccac sunxi: image: sync target profiles names with DT compatible
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
Following up with errors reported in the ASU repo, these bananapi cases
do not match the DT compatible "bpi", sync with dts sources.
Also some profiles were overwriting SUPPORTED_DEVICES.
Sysupgrade would be failing in SUPPORTED_DEVICES check since
the DT compatible(/tmp/sysinfo/board_name) is not in SUPPORTED_DEVICES.
This should also fix errors when using ASU sysupgrade clients.
- Sync profile makefile target names with DT compatibles.
- Fix overwrites of SUPPORTED_DEVICES instead of appending.
- Adapt the uboot-sunxi profiles accordingly.
*bpi-p2-zero dts is still not upstream.

V2:
- Include fixes for arm926ejs(ARM926EJ-S) subtarget (LicheePi Nano and
PopStick v1.1) (profile rename for correct default SUPPORTED_DEVICES)

Fixes: https://forum.openwrt.org/t/luci-attended-sysupgrade-support-thread/230552/246
Fixes: https://github.com/openwrt/asu/issues/486
Fixes: https://github.com/openwrt/asu/issues/524
Fixes: 9aa66b8ce7 "sunxi: add support for Banana Pi M2 Berry"
Fixes: d5f615bf2a "sunxi: add support for Sinovoip Banana Pi M2 Plus"
Fixes: 3819c1638a "sunxi: Add support for Banana Pi M2 Ultra"
Fixes: 6bf8193b25 "sunxi: add support for Bananapi P2 Zero"
Fixes: 80edfaf675 "sunxi: add support for Banana Pi M3"
Fixes: 3c24a1d423 "sunxi: add support for NanoPi NEO Plus2 board"
Fixes: a689307c97 "sunxi: build image/uboot for the NanoPi NEO2"
Fixes: fde68cb809 "sunxi: add support for FriendlyARM NanoPi R1S H5"
Fixes: 3ec468ff4f "sunxi: add F1C100 (arm926ej-s) support"

Signed-off-by: Mario Andrés Pérez <mapb_@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21095
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit d871e95e7f)
2025-12-16 01:46:49 +01:00
Karsten Sperling
946e43c3d8 scripts,ipkg-build: Fix error message for invalid package name
Use the correct variable ($pkg instead of $name) in the error message.

Signed-off-by: Karsten Sperling <ksperling@apple.com>
Link: https://github.com/openwrt/openwrt/pull/20077
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 63bf77b801)
2025-12-16 01:41:45 +01:00
Hauke Mehrtens
7f4272dc18 libcap: Revert "libcap: update to 2.77"
This reverts commit c25265953b.

Linking of libpsx.so from libcap 2.77 fails on powerpc 464fp. Revert
back to the older version which works.

Bug report: https://bugzilla.kernel.org/show_bug.cgi?id=220860
Fixes: c25265953b ("libcap: update to 2.77")
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 5b0617ae1f)
2025-12-16 01:26:24 +01:00
Martin Nadvornik
81d7d379c7 mediatek: fix IPv4 address missing on interface in failsafe mode for cudy ap3000-v1
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
cudy ap3000-v1 did not work correctly in failsafe mode
because the address 192.168.1.1 was missing on the eth0 inteface.
it was reachable via it's IPv6 link-local address however.
this commit fixes the issue.

Fixes: https://github.com/openwrt/openwrt/issues/20750
Signed-off-by: Martin Nadvornik <martin.nadvornik@gmx.at>
Link: https://github.com/openwrt/openwrt/pull/21172
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit e5cd6461c9)
2025-12-16 00:29:13 +01:00
Rany Hany
7c4da36cf2 wifi-scripts: ucode: improve formatting of expected throughput
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
Convert to MBit/s like all other fields and specify the unit.
Most users probably aren't aware that this is in kilobits/s.

Signed-off-by: Rany Hany <rany_hany@riseup.net>
Link: https://github.com/openwrt/openwrt/pull/20567
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 36da03a6c1)
2025-12-15 12:39:57 +01:00
Rany Hany
c743099fe1 wifi-scripts: add support for using list for iface in wifi-station/vlan
Some checks are pending
Build all core packages / Build all core packages for selected target (push) Waiting to run
This is a trivial change to allow users to use 'list' on iface.
Old wifi-scripts already implements this, so this just ensures
that shell-based and ucode wifi-scripts are on-par with each other.

Signed-off-by: Rany Hany <rany_hany@riseup.net>
Link: https://github.com/openwrt/openwrt/pull/20977
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 1ead4e6e16)
2025-12-15 12:31:14 +01:00
Rany Hany
b13c6a732a wifi-scripts: fix broken match all case for wifi-vlan
When iface is omitted, wifi-vlan will apply to all interfaces.
However, netifd.set_vlan call is not successful as it assumes
that every wifi-vlan section corresponds to one VIF.

For this reason in the wifi-vlan case (cur_type == "vlan")
we create a composite key in the form `${vif.name}/${vlan.name}`
allowing the same vlan section to correspond to multiple VAPs.
`/` was decided as a delimiter as it is an invalid character
for a network interface name and UCI identifier; so it is
impossible for it to cause conflicts.

It was verified that the `ubus call network.wireless status`
works as expected with this change. Moreover, wifi-station
is not susceptible to this problem.

This also means that it is now possible for wifi-vlan
to support `list` iface similar to old shell-based wifi-scripts.
This will be done in a follow-up commit.

Fixes: 98435a37a7 ("wifi-scripts: iface should be optional in wifi-vlan definition")
Signed-off-by: Rany Hany <rany_hany@riseup.net>
Link: https://github.com/openwrt/openwrt/pull/20977
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 211b11a56e)
2025-12-15 12:31:14 +01:00
Robert Marko
87fd61bd02 ipq-wifi: update to Git HEAD (2025-12-15)
Some checks are pending
Build Kernel / Build all affected Kernels (push) Waiting to run
Build all core packages / Build all core packages for selected target (push) Waiting to run
c6202981872e ipq5018: use correct board for GL-iNet B3000 IPQ5018 radio
ec72376cadf1 qca4019: Add Meraki Underdog
059b7114c77b ipq6018: add tp-link eap620hd v2

Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit b4bc9ed318)
2025-12-15 09:56:30 +01:00
Shiji Yang
ec22ac9401 kernel: rtl836x: remove legacy platform_data support
There are no platform_data based devices using it anymore. Also move
header files to the driver folder.

Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21138
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 852d17ed82)
2025-12-15 09:32:10 +01:00
Markus Stockhausen
bcbf4bd8ac realtek: use devm_kzalloc() for serdes debugfs setup
This will free memory automatically during driver unloading.

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/21157
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit a4011797c2)
2025-12-15 09:30:03 +01:00
Markus Stockhausen
77b47f33e5 realtek: cleanup debugfs creation in serdes driver
debugfs_create_dir() has a proper logic to handle existing directories.
Skip the manual test. Additionally quit early if directory creation fails.

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/21157
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 3c073b5cb2)
2025-12-15 09:30:03 +01:00
Markus Stockhausen
a53655ed14 realtek: simplify backing serdes calculation
Calculating the backing serdes of a given frontend serdes does
not need any info about the control structure. Drop the reference.

Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Link: https://github.com/openwrt/openwrt/pull/21157
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit dcbc8722e9)
2025-12-15 09:30:03 +01:00
Álvaro Fernández Rojas
5db1b65d3e odhcpd: update to 25.12 Git HEAD (2025-12-13)
1ff1328a4fc1 odhcpd: fix captive_portal_uri reset
74f00bf43eab dhcpv4: fix DNS server option
0d0fc5ffe993 README.md: update dhcp ubus events

ca00527e5f...1ff1328a4f

Also remove duplicated /usr/share/libubox/jshn.sh include.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2025-12-13 13:02:35 +01:00
David Woodhouse
74c8435ebd
image: add CONFIG_EXTRA_IMAGE_NAME
This allows an optional tag to be put in the .config file which is
included in the filename of the resulting images, so it's easier to
build images with different functionality for the same target hardware.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Link: https://github.com/openwrt/openwrt/pull/20984
Signed-off-by: Petr Štetiar <ynezz@true.cz>
(cherry picked from commit 24b8db118b)
2025-12-12 22:08:27 +00:00
Paul Donald
25f32651f8 apk: bump to 3.0.2
We drop patch 0020-apk-fix-compile: integrated at source.
Compressed help now functions normally.

Signed-off-by: Paul Donald <newtwen+github@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21127
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit b15628ec80)
2025-12-12 14:00:35 +01:00
David Härdeman
4444f314ac
base-files: always generate default DUID
The previous logic was copied from 12_network-generate-ula, but fails to
account for upgrades where the "auto" value isn't set (it is set by
base-files/files/bin/config_generate). Fix this to always set the
default duid if it isn't set.

Also, rename the file to better reflect what it does.

Closes: #21029
Fixes: a660a076db ("base-files: generate a global DHCP DUID")
Link: https://github.com/openwrt/openwrt/pull/21118
Signed-off-by: David Härdeman <david@hardeman.nu>
Signed-off-by: Petr Štetiar <ynezz@true.cz> [fixes,closes tag]
(cherry picked from commit 52fa3728e5)
2025-12-11 06:42:18 +00:00
Shiji Yang
65a60d2fa7
bcm27xx: fix patch wrong CRLF line-ending
Use Unix LF style instead of Windows CRLF style.

Fixes: 738876e76b ("kernel: bump 6.12 to 6.12.58")
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/20973
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 86bd55c4fd)
2025-12-11 00:57:57 +01:00
Chukun Pan
8117f30f6f
arm-trusted-firmware-mediatek: remove DDR combo for MT7987
The DRAM_USE_COMB option is only valid for the MT7988. There
is no DRAM type selection for the MT7987, so remove it.

Fixes: de8fc8b ("arm-trusted-firmware-mediatek: add builds for MT7987")
Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
Link: https://github.com/openwrt/openwrt/pull/21000
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit bb2d9c1a65)
2025-12-11 00:57:57 +01:00
Chukun Pan
4f889c2caa
arm-trusted-firmware-mediatek: add MT7987 DDR4 4BG images
Add the DDR4_4BG_MODE option, which supports 4GB DDR4 RAM
for the MT7987 and 8GB DDR4 RAM for the MT7988. If this mode
is not enabled, bl2 can only recognize half the size of RAM.

Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
Link: https://github.com/openwrt/openwrt/pull/21000
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit f037a2e8bb)
2025-12-11 00:57:57 +01:00
Chukun Pan
c6d74b2ddd
arm-trusted-firmware-mediatek: add MT7981 sdmmc images
Add bl2 images for mt7981 sdmmc ddr4 devices.

Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
Link: https://github.com/openwrt/openwrt/pull/21000
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 3b14ace444)
2025-12-11 00:57:56 +01:00
Chukun Pan
e402882943
arm-trusted-firmware-mediatek: rearrange some images
Rearrange some images to maintain consistency.

Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
Link: https://github.com/openwrt/openwrt/pull/21000
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 69918d1e0b)
2025-12-11 00:57:56 +01:00
Qingfang Deng
cd88eb969f
kernel: add network teaming modules
Teaming is a link aggregation implementation similar to bonding, but
it's configured by a userspace program.

Signed-off-by: Qingfang Deng <dqfext@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21120
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 8b05db405b)
2025-12-11 00:57:56 +01:00
Shine
4e5e8b95a6
mpc85xx: add support for Watchguard Firebox T10-W, T15(-W)
This commit adds support for the Watchguard Firebox models
T10-W, T15 and T15-W.

CPU:      Freescale P1010
RAM:      512MB (T10) / 1024MB (T15)
Flash:    1MB SPI-NOR, 512MB NAND (T10) / 1024MB NAND (T15)
WiFi:     802.11abgn 2T2R AR9582 based Mini-PCIe card (-W models only)
Ethernet: 3x GBE (via AR8033 PHY)
LEDs:     7x hard-wired (6x LAN, 1x Power)
          4x GPIO single-colored (Attn/Status/Mode/Failover)
          1x GPIO dual-colored (2.4/5G WiFi, -W models only)
Serial:   RJ45, Cisco pinout, 115200/8N1
Other:    Battery backed RTC
          Atmel TPM 1.2 chip (unsupported)

Based on 35f6d79, which introduced Watchguard Firebox T10 support.

The T10 and T15 are identical hardware, with the exception of the T15
having twice the flash and RAM size.

The T10-W and T15-W models have their Mini-PCIe slot populated with an ath9
(AR9582) based WiFi card. The slot is either unpopulated or empty for
non-WiFi models. All required drivers are present by default on the mpc85xx
target, so T10/T10-W resp. T15/T15-W can use the same OpenWrt image.

This commit also introduces the zImage loader from 7d768a9 to boot the
kernel. This is required, since the U-Boot version used in these devices
appears to have a hard limit of 16MB for the kernel size it can handle. The
current kernel size is around 17MB, though, due to kernel page alignment
required for memory protection.

Installation (replaces previous instructions for T10):

1. If the U-Boot password is known, proceed with step 2.

   If the U-Boot password is unknown, dump the NOR flash using a SPI
   programmer and patch the unknown password to a known one. You can use
   blocktrron's Python script:

   https://github.com/blocktrron/t10-uboot-patcher/

   This script will patch the password to '1234' (without quotes).

   Alternatively, you can search for the hashed password in the NOR dump
   yourself and overwrite it with a known one. The SHA1 hash is:

   E597301A1D89FF3F6D318DBF4DBA0A5ABC5ECBEA

   Write the patched NOR dump back to the device.

2. Connect the device via serial cable, power it on and interrupt
   the boot process by pressing Ctrl+C. Enter the U-Boot password to access
   the CLI.

3. (Optional) Populate the uboot-env partition by entering:

   saveenv

   This will allow you to use uboot-envtools from within OpenWrt later,
   e.g. to increase the loadable kernel size.

   The default loadable kernel size is 5MB, the compressed kernel size at
   the time of this commit is 3.1MB.

4. Serve the initramfs OpenWrt image from a TFTP server at 10.0.1.13/24,
   connected to eth0 (WAN) of the device. File name must be 'uImage'. Boot
   with:

   tftpboot; bootm;

   Make sure to use the correct image for your device (T10 resp. T15)!

5. After booting, connect to OpenWrt on eth1 (LAN) via SSH. Verify
   that the UBI partiton is mtd7, format it and install the sysupgrade
   image.

   $ cat /proc/mtd
   $ ubiformat /dev/mtd7 -y
   $ sysupgrade -n <path to sysupgrade.bin>

6. The device should now boot OpenWrt from NAND flash. Enjoy.

Back to stock:

Use the vendor recovery procedure.

Stock recovery might also be necessary in case you have accidentally used
the fw_setenv command from within OpenWrt without using saveenv in U-Boot
first.

In order to use the vendor firmware recovery procedure, the NAND partitions
mtd3 to mtd6 must remain intact. Make sure not to overwrite them, or keep
dumps of them for later recovery.

Signed-off-by: Shine <4c.fce2@proton.me>
Link: https://github.com/openwrt/openwrt/pull/16776
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit be7aa5bda4)
2025-12-11 00:57:55 +01:00
Shine
bb61b5b31d
mpc85xx: p1010: use common DTSI for Watchguard Firebox T1X
In preparation of adding support for additional Watchguard Firebox devices
based on Freescale P1010, introduce a common DTSI.

Signed-off-by: Shine <4c.fce2@proton.me>
Link: https://github.com/openwrt/openwrt/pull/16776
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 15ef024805)
2025-12-11 00:57:55 +01:00
Hauke Mehrtens
39b578147b
ucode: update to Git HEAD (2025-12-01)
afe4be60628a lib/fs: fix return value for flush
5f08ecf8e372 lib/uloop: fix return value doc for run()
1affe484f302 lib/uloop: pass eof and error to cb
559860cbd76d lib: introduce io library
ef07e2448a56 vm: optimize string+string concat with ucv_string_alloc

Changes: 48ed18d253...f7c2b97a82

Backport PR to fix compilation with Ubuntu 18.04:
https://github.com/jow-/ucode/pull/355

Link: https://github.com/openwrt/openwrt/pull/21100
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit e40ca676ee)
2025-12-11 00:57:55 +01:00
Christian Marangi
12316d0280
OpenWrt v25.12: set branch defaults
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2025-12-11 00:49:28 +01:00
470 changed files with 10223 additions and 6070 deletions

View file

@ -1,8 +1,5 @@
src-git packages https://git.openwrt.org/feed/packages.git
src-git luci https://git.openwrt.org/project/luci.git
src-git routing https://git.openwrt.org/feed/routing.git
src-git telephony https://git.openwrt.org/feed/telephony.git
src-git video https://github.com/openwrt/video.git
#src-git targets https://github.com/openwrt/targets.git
#src-git oldpackages http://git.openwrt.org/packages.git
#src-link custom /usr/src/openwrt/custom-feed
src-git packages https://git.openwrt.org/feed/packages.git^594c3c8c8c5b7e98fd9d4d0cce7905324f18384a
src-git luci https://git.openwrt.org/project/luci.git^8d9defc6a2b0a283f3595503e4aae597e6f684d0
src-git routing https://git.openwrt.org/feed/routing.git^b43e4ac560ccbafba21dc3ab0dbe57afc07e7b88
src-git telephony https://git.openwrt.org/feed/telephony.git^2618106d5846a4a542fdf5809f0d3ed228ce439b
src-git video https://github.com/openwrt/video.git^094bf58da6682f895255a35a84349a79dab4bf95

View file

@ -41,6 +41,9 @@ KDIR=$(KERNEL_BUILD_DIR)
KDIR_TMP=$(KDIR)/tmp
DTS_DIR:=$(LINUX_DIR)/arch/$(LINUX_KARCH)/boot/dts
ifeq ($(EXTRA_IMAGE_NAME),)
EXTRA_IMAGE_NAME:=$(call qstrip,$(CONFIG_EXTRA_IMAGE_NAME))
endif
IMG_PREFIX_EXTRA:=$(if $(EXTRA_IMAGE_NAME),$(call sanitize,$(EXTRA_IMAGE_NAME))-)
IMG_PREFIX_VERNUM:=$(if $(CONFIG_VERSION_FILENAMES),$(call sanitize,$(VERSION_NUMBER))-)
IMG_PREFIX_VERCODE:=$(if $(CONFIG_VERSION_CODE_FILENAMES),$(call sanitize,$(VERSION_CODE))-)

View file

@ -306,4 +306,3 @@ kernel_patchver_ge=$(call kernel_version_cmp,-ge,$(KERNEL_PATCHVER),$(1))
kernel_patchver_eq=$(call kernel_version_cmp,-eq,$(KERNEL_PATCHVER),$(1))
kernel_patchver_le=$(call kernel_version_cmp,-le,$(KERNEL_PATCHVER),$(1))
kernel_patchver_lt=$(call kernel_version_cmp,-lt,$(KERNEL_PATCHVER),$(1))

View file

@ -78,6 +78,196 @@ define FixupDependencies
$(call AddDependency,$(1),$$(DEPS))
endef
# Format dependencies and extra dependencies
#
# ABI-version EXTRA_DEPENDS so dependencies can be correctly looked up using the
# existing semantics without the ABI specified. This is needed since ABI-
# versioned libraries don't provide `${package_name}=${package_version}`, so
# that same library but with different ABI versions can be installed side by
# side.
#
# Remove duplicate dependencies when EXTRA_DEPENDS specifies a versioned one
# that is already in DEPENDS.
#
# 1: list of dependencies
# 2: list of extra dependencies
define FormatDepends
$(strip
$(eval _COMMA_SEP := __COMMA_SEP__)
$(eval _SPACE_SEP := __SPACE_SEP__)
$(eval _DEPENDS := $(1))
$(eval _EXTRA_DEPENDS_ABI := )
$(eval _DEP_ITEMS := $(subst $(_COMMA_SEP),$(space),$(subst $(space),$(_SPACE_SEP),$(subst $(comma),$(_COMMA_SEP),$(2)))))
$(foreach dep,$(_DEP_ITEMS),
$(eval _EXTRA_DEP := )
$(eval _CUR_DEP := $(subst $(_SPACE_SEP),$(space),$(strip $(dep))))
$(eval _PKG_NAME := $(word 1,$(_CUR_DEP)))
$(if $(findstring $(paren_left), $(_PKG_NAME)),
$(error "Unsupported extra dependency format: no space before '(': $(_CUR_DEP)"))
)
$(eval _ABI_SUFFIX := $(call GetABISuffix,$(_PKG_NAME)))
$(eval _PKG_NAME_ABI := $(_PKG_NAME)$(_ABI_SUFFIX))
$(eval _VERSION_CONSTRAINT := $(word 2,$(_CUR_DEP)))
$(if $(_VERSION_CONSTRAINT),
$(eval _EXTRA_DEP := $(_PKG_NAME_ABI) $(_VERSION_CONSTRAINT)),
$(error "Extra dependencies must have version constraints. $(_PKG_NAME) seems to be unversioned.")
)
$(if $(and $(_EXTRA_DEPENDS_ABI),$(_EXTRA_DEP)),
$(eval _EXTRA_DEPENDS_ABI := $(_EXTRA_DEPENDS_ABI)$(comma)$(_EXTRA_DEP)),
$(eval _EXTRA_DEPENDS_ABI := $(_EXTRA_DEP))
)
$(if $(_DEPENDS),
$(eval _DEPENDS := $(filter-out $(_PKG_NAME_ABI),$(_DEPENDS)))
)
)
$(eval _DEPENDS := $(call mergelist,$(_DEPENDS)))
$(_EXTRA_DEPENDS_ABI)$(if $(_DEPENDS),$(comma) $(_DEPENDS))
)
endef
# Format provide and add ABI and version if it's not a virtual provide marked
# with an @.
#
# Same as for the base package name, if ABI version is set, provide both
# unversioned provide and one with ABI version and version.
#
# 1: provide name
# 2: provide version
# 3: (optional) ABI version
define AddProvide
$(strip
$(if $(filter @%,$(1)),
$(patsubst @%,%,$(1)),
$(if $(3),
$(1) $(1)$(call FormatABISuffix,$(1),$(3))=$(2),
$(1)=$(2)
)
)
)
endef
# Remove virtual provides prefix and self. apk doesn't like it when packages
# specify a redundant provide pointing to self.
#
# 1: package name
# 2: list of provides
define SanitizeProvides
$(filter-out $(1),$(patsubst @%,%,$(2)))
endef
# Format provides both for apk and control
#
# - If ABI version is defined:
# - package is named `${package_name}${ABI_version}`
# if a `package_name` ends in a number, the `ABI_version` will be prefixed
# with a - sign, e.g.: libsqlite3-0
# - package implicitly provides
# `${package_name}${ABI_version}=${package_version}`
# this implies that only one version of a package per ABI can be installed
# at the same time
# - additionally provide `${package_name}` so multiple packages can be looked
# up by its base name
# - for each `provides`:
# - provide `${provide}${ABI_version}=${package_version}`
# this implies that only one version of a provide can be installed at the
# same time
# - if a `provide` ends in a number, the `ABI_version` will be prefixed with
# a - sign, e.g.: provide1-0
# - additionally provide `${provide}` so multiple packages can be looked up
# by its base name
#
# - else if ABI version is _not_ defined
# - package is named `${package_name}`
# - package implicitly provides `${package_name}=${package_version}`
# this implies that only one version of a package can be installed at the
# same time
# - for each `provides`, provide `${provide}=${package_version}` this implies
# that only one version of a provide can be installed at the same time
#
# - Both with and without an ABI, if a provide starts with an @, treat it as a
# virtual provide, that doesn't own the name by not appending version.
# Multiple packages with the same virtual provides can be installed
# side-by-side.
#
# - apk doesn't like it when packages specify a redundant provide pointing to
# self. Filter it out, but keep virtual self provides, in the form of
# @(kmod-)?${package_name}-any.
#
# - Packages implicitly add a virtual @${package_name}-any provide in Package,
# which implies that kmods, which are also packages, will have a virtual
# @kmod-${package_name}-any provide.
#
# - Aside from the two aforementioned implicit provides, packages are expected
# to manage their provides themselves.
#
# - When multiple variants inside the same package have the same provide, a
# default variant must be set using DEFAULT_VARIANT:=1.
#
# - Cross-package provides must be virtual and a default variant must be set. If
# different packages provide the same versioned (i.e. non-virtual) provide the
# package with a higher version will be preferred, which results in unintended
# behavior, because the order might change with package updates.
#
# Example:
# - both uclient-fetch and wget provide wget
# - wget doesn't have a default variant called wget that would provide an
# implicit @wget-any
# - add wget to PROVIDES for both wget-ssl and wget-nossl variants so they
# can't be installed at the same time
# - add @wget-any to both packages so packages outside of wget can provide
# it
# - uclient-fetch has only one variant
# - add @wget-any to PROVIDES
# - mark uclient-fetch as the default variant using DEFAULT_VARIANT:=1
# - switch wget consumer that don't depend on a specific version like apk to
# depend on @wget-any
#
# - Alternatives don't affect the packaging.
#
# 1: package name
# 2: package version
# 3: ABI version
# 4: list of provides
define FormatProvides
$(strip
$(if $(call FormatABISuffix,$(1),$(3)),
$(1) $(foreach provide,
$(filter-out $(1),$(4)),
$(call AddProvide,$(provide),$(2),$(3))
),
$(foreach provide,
$(filter-out $(1),$(4)),
$(call AddProvide,$(provide),$(2))
)
)
)
endef
# Get apk provider priority
#
# - if a package is marked as a default variant, set it to 100.
#
# - if a package has an ABI version defined, set it to 10.
# The enables packages with an ABI version to be installed by their base name
# instead of a name and an ABI version, e.g.:
# libfoo3, where 3 is the ABI version can be installed by just libfoo.
# This affects manual installation only, as the dependency resolution takes
# care of ABI versions.
#
# - otherwise return nothing, i.e. package will have the default priority 0.
#
# 1: Default variant
# 2: ABI version
define GetProviderPriority
$(strip
$(if $(1),100,
$(if $(2),10)
)
)
endef
ifneq ($(PKG_NAME),toolchain)
define CheckDependencies
@( \
@ -191,17 +381,33 @@ endif
$(STAGING_DIR_ROOT)/stamp/.$(1)_installed: $(PKG_BUILD_DIR)/.pkgdir/$(1).installed
mkdir -p $(STAGING_DIR_ROOT)/stamp
$(if $(ABI_VERSION),echo '$(ABI_VERSION)' | cmp -s - $(PKG_INFO_DIR)/$(1).version || { \
mkdir -p $(PKG_INFO_DIR); \
echo '$(ABI_VERSION)' > $(PKG_INFO_DIR)/$(1).version; \
$(foreach pkg,$(filter-out $(1),$(PROVIDES)), \
$(foreach pkg,$(call SanitizeProvides,$(1),$(PROVIDES)), \
cp $(PKG_INFO_DIR)/$(1).version $(PKG_INFO_DIR)/$(pkg).version; \
) \
} )
$(call locked,$(CP) $(PKG_BUILD_DIR)/.pkgdir/$(1)/. $(STAGING_DIR_ROOT)/,root-copy)
touch $$@
Package/$(1)/DEPENDS := $$(call mergelist,$$(foreach dep,$$(filter-out @%,$$(IDEPEND_$(1))),$$(dep)$$(call GetABISuffix,$$(dep))))
Package/$(1)/DEPENDS := $$(foreach dep,$$(filter-out @%,$$(IDEPEND_$(1))),$$(dep)$$(call GetABISuffix,$$(dep)))
ifneq ($$(EXTRA_DEPENDS),)
Package/$(1)/DEPENDS := $$(EXTRA_DEPENDS)$$(if $$(Package/$(1)/DEPENDS),$$(comma) $$(Package/$(1)/DEPENDS))
ifeq ($(CONFIG_USE_APK),)
Package/$(1)/DEPENDS := $$(call mergelist,$$(Package/$(1)/DEPENDS))
Package/$(1)/DEPENDS := $$(EXTRA_DEPENDS)$$(if $$(Package/$(1)/DEPENDS),$$(comma) $$(Package/$(1)/DEPENDS))
else
Package/$(1)/DEPENDS := $$(call FormatDepends,$$(Package/$(1)/DEPENDS),$$(EXTRA_DEPENDS))
endif
else
Package/$(1)/DEPENDS := $$(call mergelist,$$(Package/$(1)/DEPENDS))
endif
ifeq ($(CONFIG_USE_APK),)
Package/$(1)/PROVIDES := $$(patsubst @%,%,$(PROVIDES))
Package/$(1)/PROVIDES := $$(filter-out $(1)$$(ABIV_$(1)),$$(Package/$(1)/PROVIDES)$$(if $$(ABIV_$(1)), $(1) $$(foreach provide,$$(Package/$(1)/PROVIDES),$$(provide)$$(ABIV_$(1)))))
else
Package/$(1)/PROVIDES := $$(call FormatProvides,$(1),$(VERSION),$(ABI_VERSION),$(PROVIDES))
Package/$(1)/PRIORITY := $$(call GetProviderPriority,$(DEFAULT_VARIANT),$(ABI_VERSION))
endif
$(_define) Package/$(1)/CONTROL
@ -209,7 +415,7 @@ Package: $(1)$$(ABIV_$(1))
Version: $(VERSION)
$$(call addfield,Depends,$$(Package/$(1)/DEPENDS)
)$$(call addfield,Conflicts,$$(call mergelist,$(CONFLICTS))
)$$(call addfield,Provides,$$(call mergelist,$$(filter-out $(1)$$(ABIV_$(1)),$(PROVIDES)$$(if $$(ABIV_$(1)), $(1) $(foreach provide,$(PROVIDES),$(provide)$$(ABIV_$(1))))))
)$$(call addfield,Provides,$$(call mergelist,$$(Package/$(1)/PROVIDES))
)$$(call addfield,Alternatives,$$(call mergelist,$(ALTERNATIVES))
)$$(call addfield,Source,$(SOURCE)
)$$(call addfield,SourceName,$(PKG_NAME)
@ -253,7 +459,7 @@ endif
fi; \
done; $(Package/$(1)/extra_provides) \
) | sort -u > $(PKG_INFO_DIR)/$(1).provides
$(if $(PROVIDES),@for pkg in $(filter-out $(1),$(PROVIDES)); do cp $(PKG_INFO_DIR)/$(1).provides $(PKG_INFO_DIR)/$$$$pkg.provides; done)
$(if $(PROVIDES),@for pkg in $(call SanitizeProvides,$(1),$(PROVIDES)); do cp $(PKG_INFO_DIR)/$(1).provides $(PKG_INFO_DIR)/$$$$pkg.provides; done)
$(CheckDependencies)
$(RSTRIP) $$(IDIR_$(1))
@ -320,24 +526,24 @@ else
echo "[ -s "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \
echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \
echo 'export root="$$$${IPKG_INSTROOT}"'; \
echo 'export pkgname="$(1)"'; \
echo 'export pkgname="$(1)$$(ABIV_$(1))"'; \
echo "add_group_and_user"; \
echo "default_postinst"; \
[ ! -f $$(ADIR_$(1))/postinst-pkg ] || sed -z 's/^\s*#!/#!/' "$$(ADIR_$(1))/postinst-pkg"; \
[ ! -f $$(ADIR_$(1))/postinst-pkg ] || sed '/^\s*#!/d' "$$(ADIR_$(1))/postinst-pkg"; \
) > $$(ADIR_$(1))/post-install;
ifdef Package/$(1)/preinst
( \
echo "#!/bin/sh"; \
echo 'export PKG_UPGRADE=1'; \
[ ! -f $$(ADIR_$(1))/preinst ] || sed -z 's/^\s*#!/#!/' "$$(ADIR_$(1))/preinst"; \
[ ! -f $$(ADIR_$(1))/preinst ] || sed '/^\s*#!/d' "$$(ADIR_$(1))/preinst"; \
) > $$(ADIR_$(1))/pre-upgrade;
endif
( \
echo "#!/bin/sh"; \
echo 'export PKG_UPGRADE=1'; \
[ ! -f $$(ADIR_$(1))/post-install ] || sed -z 's/^\s*#!/#!/' "$$(ADIR_$(1))/post-install"; \
[ ! -f $$(ADIR_$(1))/post-install ] || sed '/^\s*#!/d' "$$(ADIR_$(1))/post-install"; \
) > $$(ADIR_$(1))/post-upgrade;
( \
@ -345,34 +551,34 @@ else
echo "[ -s "\$$$${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; \
echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \
echo 'export root="$$$${IPKG_INSTROOT}"'; \
echo 'export pkgname="$(1)"'; \
echo 'export pkgname="$(1)$$(ABIV_$(1))"'; \
echo "default_prerm"; \
[ ! -f $$(ADIR_$(1))/prerm-pkg ] || sed -z 's/^\s*#!/#!/' "$$(ADIR_$(1))/prerm-pkg"; \
[ ! -f $$(ADIR_$(1))/prerm-pkg ] || sed '/^\s*#!/d' "$$(ADIR_$(1))/prerm-pkg"; \
) > $$(ADIR_$(1))/pre-deinstall;
[ ! -f $$(ADIR_$(1))/postrm ] || sed -zi 's/^\s*#!/#!/' "$$(ADIR_$(1))/postrm";
if [ -n "$(USERID)" ]; then echo $(USERID) > $$(IDIR_$(1))/lib/apk/packages/$(1).rusers; fi;
if [ -n "$(ALTERNATIVES)" ]; then echo $(ALTERNATIVES) > $$(IDIR_$(1))/lib/apk/packages/$(1).alternatives; fi;
(cd $$(IDIR_$(1)) && find . -type f,l -printf "/%P\n" | sort > $(TMP_DIR)/$(1).list && mv $(TMP_DIR)/$(1).list $$(IDIR_$(1))/lib/apk/packages/$(1).list)
if [ -n "$(USERID)" ]; then echo $(USERID) > $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).rusers; fi;
if [ -n "$(ALTERNATIVES)" ]; then echo $(ALTERNATIVES) > $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).alternatives; fi;
(cd $$(IDIR_$(1)) && find . -type f,l -printf "/%P\n" | sort > $(TMP_DIR)/$(1).list && mv $(TMP_DIR)/$(1).list $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).list)
# Move conffiles to IDIR and build conffiles_static with csums
if [ -f $$(ADIR_$(1))/conffiles ]; then \
mv -f $$(ADIR_$(1))/conffiles $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles; \
for file in $$$$(cat $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles); do \
mv -f $$(ADIR_$(1))/conffiles $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).conffiles; \
for file in $$$$(cat $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).conffiles); do \
[ -f $$(IDIR_$(1))/$$$$file ] || continue; \
csum=$$$$($(MKHASH) sha256 $$(IDIR_$(1))/$$$$file); \
echo $$$$file $$$$csum >> $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles_static; \
echo $$$$file $$$$csum >> $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).conffiles_static; \
done; \
fi
# Some package (base-files) manually append stuff to conffiles
# Append stuff from it and delete the CONTROL directory since everything else should be migrated
if [ -f $$(IDIR_$(1))/CONTROL/conffiles ]; then \
echo $$$$(IDIR_$(1))/CONTROL/conffiles >> $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles; \
echo $$$$(IDIR_$(1))/CONTROL/conffiles >> $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).conffiles; \
for file in $$$$(cat $$(IDIR_$(1))/CONTROL/conffiles); do \
[ -f $$(IDIR_$(1))/$$$$file ] || continue; \
csum=$$$$($(MKHASH) sha256 $$(IDIR_$(1))/$$$$file); \
echo $$$$file $$$$csum >> $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles_static; \
echo $$$$file $$$$csum >> $$(IDIR_$(1))/lib/apk/packages/$(1)$$(ABIV_$(1)).conffiles_static; \
done; \
rm -rf $$(IDIR_$(1))/CONTROL/conffiles; \
fi
@ -394,17 +600,8 @@ else
--info "origin:$(SOURCE)" \
--info "url:$(URL)" \
--info "maintainer:$(MAINTAINER)" \
--info "provides:$$(foreach prov,\
$$(filter-out $(1)$$(ABIV_$(1)), \
$(PROVIDES)$$(if $$(ABIV_$(1)), \
$(1)=$(VERSION) $(foreach provide, \
$(PROVIDES), \
$(provide)$$(ABIV_$(1))=$(VERSION) \
) \
) \
), \
$$(prov) )" \
$(if $(DEFAULT_VARIANT),--info "provider-priority:100",$(if $(PROVIDES),--info "provider-priority:1")) \
$$(if $$(Package/$(1)/PROVIDES),--info "provides:$$(Package/$(1)/PROVIDES)") \
$$(if $$(Package/$(1)/PRIORITY),--info "provider-priority:$$(Package/$(1)/PRIORITY)") \
$$(APK_SCRIPTS_$(1)) \
--info "depends:$$(foreach depends,$$(subst $$(comma),$$(space),$$(subst $$(space),,$$(subst $$(paren_right),,$$(subst $$(paren_left),,$$(Package/$(1)/DEPENDS))))),$$(depends))" \
--files "$$(IDIR_$(1))" \

View file

@ -332,6 +332,13 @@ define BuildPackage
$(eval $(Package/Default))
$(eval $(Package/$(1)))
# Add an implicit self-provide. apk can't handle self provides, be it
# versioned or virtual, so opt for a suffix instead. This allows several
# variants to provide the same virtual package without adding extra provides
# to the default one, e.g. wget implicitly provides wget-any and is marked as
# default, so wget-ssl can explicitly provide @wget-any as well.
$(eval PROVIDES:=$(strip @$(1)-any $(PROVIDES)))
ifdef DESCRIPTION
$$(error DESCRIPTION:= is obsolete, use Package/PKG_NAME/description)
endif

View file

@ -27,13 +27,13 @@ PKG_CONFIG_DEPENDS += \
sanitize = $(call tolower,$(subst _,-,$(subst $(space),-,$(1))))
VERSION_NUMBER:=$(call qstrip,$(CONFIG_VERSION_NUMBER))
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),SNAPSHOT)
VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),25.12.0-rc3)
VERSION_CODE:=$(call qstrip,$(CONFIG_VERSION_CODE))
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),$(REVISION))
VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),r32486-30527a4c34)
VERSION_REPO:=$(call qstrip,$(CONFIG_VERSION_REPO))
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),https://downloads.openwrt.org/snapshots)
VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),https://downloads.openwrt.org/releases/25.12.0-rc3)
VERSION_DIST:=$(call qstrip,$(CONFIG_VERSION_DIST))
VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),OpenWrt)

View file

@ -1,4 +1,4 @@
[ "$(uci -q get network.globals.dhcp_default_duid)" != "auto" ] && exit 0
[ "$(uci -q get network.globals.dhcp_default_duid || echo "auto")" != "auto" ] && exit 0
uci -q batch <<-EOF >/dev/null
# DUID-UUID - RFC6355

View file

@ -0,0 +1,6 @@
zonename="$(uci -q get system.@system[0].zonename)"
case "$zonename" in
*[[:space:]]*) uci set system.@system[0].zonename="${zonename// /_}" ;;
esac
exit 0

View file

@ -382,7 +382,7 @@ default_postinst() {
uci commit
fi
rm -f /tmp/luci-indexcache
rm -f /tmp/luci-indexcache.*
fi
if [ -f "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ]; then

View file

@ -24,6 +24,17 @@ __network_ifstatus() {
eval "$__tmp"
}
# determine the IAID of the given logical interface
# 1: destination variable
# 2: interface
network_generate_iface_iaid() {
local __iaid
__iaid=$(printf '%s' "$2" | md5sum | cut -c 1-8)
export "$1=$__iaid"
}
# determine first IPv4 address of given logical interface
# 1: destination variable
# 2: interface

View file

@ -5,6 +5,14 @@
# See /LICENSE for more information.
#
config EXTRA_IMAGE_NAME
string
prompt "Extra image filename" if IMAGEOPT
default ""
help
Add this to the output image filenames, to distinguish between
different builds for the same hardware type.
config TARGET_DEFAULT_LAN_IP_FROM_PREINIT
bool "Use preinit IP configuration as default LAN IP" if IMAGEOPT
default n
@ -190,7 +198,7 @@ if VERSIONOPT
config VERSION_REPO
string
prompt "Release repository"
default "https://downloads.openwrt.org/snapshots"
default "https://downloads.openwrt.org/releases/25.12.0-rc3"
help
This is the repository address embedded in the image, it defaults
to the trunk snapshot repo; the url may contain the following placeholders:
@ -272,7 +280,7 @@ if VERSIONOPT
config VERSION_CODE_FILENAMES
bool
prompt "Revision code in filenames"
default y
default n
help
Enable this to include the revision identifier or the configured
version code into the firmware image, SDK- and Image Builder archive

View file

@ -30,6 +30,7 @@ define Trusted-Firmware-A/Default
BOOT_DEVICE:=
DDR3_FLYBY:=
DDR3_FREQ_1866:=
DDR4_4BG_MODE:=
DDR_TYPE:=
NAND_TYPE:=
BOARD_QFN:=
@ -139,6 +140,14 @@ define Trusted-Firmware-A/mt7622-sdmmc-2ddr
DDR3_FLYBY:=1
endef
define Trusted-Firmware-A/mt7981-nor-ddr4
NAME:=MediaTek MT7981 (SPI-NOR, DDR4)
BOOT_DEVICE:=nor
BUILD_SUBTARGET:=filogic
PLAT:=mt7981
DDR_TYPE:=ddr4
endef
define Trusted-Firmware-A/mt7981-ram-ddr4
NAME:=MediaTek MT7981 (RAM, DDR4)
BOOT_DEVICE:=ram
@ -158,6 +167,14 @@ define Trusted-Firmware-A/mt7981-emmc-ddr4
DDR_TYPE:=ddr4
endef
define Trusted-Firmware-A/mt7981-sdmmc-ddr4
NAME:=MediaTek MT7981 (SD card, DDR4)
BOOT_DEVICE:=sdmmc
BUILD_SUBTARGET:=filogic
PLAT:=mt7981
DDR_TYPE:=ddr4
endef
define Trusted-Firmware-A/mt7981-spim-nand-ddr4
NAME:=MediaTek MT7981 (SPI-NAND via SPIM, DDR4)
BOOT_DEVICE:=spim-nand
@ -186,14 +203,6 @@ define Trusted-Firmware-A/mt7981-ram-ddr3
DEFAULT:=TARGET_mediatek_filogic
endef
define Trusted-Firmware-A/mt7981-nor-ddr4
NAME:=MediaTek MT7981 (SPI-NOR, DDR4)
BOOT_DEVICE:=nor
BUILD_SUBTARGET:=filogic
PLAT:=mt7981
DDR_TYPE:=ddr4
endef
define Trusted-Firmware-A/mt7981-emmc-ddr3
NAME:=MediaTek MT7981 (eMMC, DDR3)
BOOT_DEVICE:=emmc
@ -244,8 +253,17 @@ define Trusted-Firmware-A/mt7981-spim-nand-ddr3-1866mhz
DDR3_FREQ_1866:=1
endef
define Trusted-Firmware-A/mt7981-cudy-tr3000-v1
NAME:=Cudy TR3000 v1 (SPI-NAND via SPIM, DDR3)
define Trusted-Firmware-A/mt7981-spim-nand-ubi-ddr4
NAME:=MediaTek MT7981 (SPI-NAND via SPIM, DDR4)
BOOT_DEVICE:=spim-nand
BUILD_SUBTARGET:=filogic
PLAT:=mt7981
DDR_TYPE:=ddr4
USE_UBI:=1
endef
define Trusted-Firmware-A/mt7981-cudy-ddr3
NAME:=Cudy (SPI-NAND via SPIM, DDR3)
BOOT_DEVICE:=spim-nand
BUILD_SUBTARGET:=filogic
PLAT:=mt7981
@ -265,15 +283,6 @@ define Trusted-Firmware-A/mt7986-ram-ddr4
DEFAULT:=TARGET_mediatek_filogic
endef
define Trusted-Firmware-A/mt7981-spim-nand-ubi-ddr4
NAME:=MediaTek MT7981 (SPI-NAND via SPIM, DDR4)
BOOT_DEVICE:=spim-nand
BUILD_SUBTARGET:=filogic
PLAT:=mt7981
DDR_TYPE:=ddr4
USE_UBI:=1
endef
define Trusted-Firmware-A/mt7986-nor-ddr4
NAME:=MediaTek MT7986 (SPI-NOR, DDR4)
BOOT_DEVICE:=nor
@ -399,7 +408,14 @@ define Trusted-Firmware-A/mt7987-emmc-comb
BOOT_DEVICE:=emmc
BUILD_SUBTARGET:=filogic
PLAT:=mt7987
DRAM_USE_COMB:=1
endef
define Trusted-Firmware-A/mt7987-emmc-ddr4-4bg
NAME:=MediaTek MT7987 (eMMC, DDR4 4GB)
BOOT_DEVICE:=emmc
BUILD_SUBTARGET:=filogic
PLAT:=mt7987
DDR4_4BG_MODE:=1
endef
define Trusted-Firmware-A/mt7987-nor-comb
@ -407,7 +423,6 @@ define Trusted-Firmware-A/mt7987-nor-comb
BOOT_DEVICE:=nor
BUILD_SUBTARGET:=filogic
PLAT:=mt7987
DRAM_USE_COMB:=1
endef
define Trusted-Firmware-A/mt7987-sdmmc-comb
@ -415,7 +430,22 @@ define Trusted-Firmware-A/mt7987-sdmmc-comb
BOOT_DEVICE:=sdmmc
BUILD_SUBTARGET:=filogic
PLAT:=mt7987
DRAM_USE_COMB:=1
endef
define Trusted-Firmware-A/mt7987-sdmmc-ddr4-4bg
NAME:=MediaTek MT7987 (SD card, DDR4 4GB)
BOOT_DEVICE:=sdmmc
BUILD_SUBTARGET:=filogic
PLAT:=mt7987
DDR4_4BG_MODE:=1
endef
define Trusted-Firmware-A/mt7987-spim-nand0
NAME:=MediaTek MT7987 (SPI-NAND via SPIM)
BOOT_DEVICE:=spim-nand
BUILD_SUBTARGET:=filogic
PLAT:=mt7987
SPIM_CTRL:=0
endef
define Trusted-Firmware-A/mt7987-spim-nand0-ubi-comb
@ -423,7 +453,6 @@ define Trusted-Firmware-A/mt7987-spim-nand0-ubi-comb
BOOT_DEVICE:=spim-nand
BUILD_SUBTARGET:=filogic
PLAT:=mt7987
DRAM_USE_COMB:=1
USE_UBI:=1
SPIM_CTRL:=0
endef
@ -433,7 +462,6 @@ define Trusted-Firmware-A/mt7987-spim-nand2-ubi-comb
BOOT_DEVICE:=spim-nand
BUILD_SUBTARGET:=filogic
PLAT:=mt7987
DRAM_USE_COMB:=1
USE_UBI:=1
SPIM_CTRL:=2
endef
@ -443,7 +471,6 @@ define Trusted-Firmware-A/mt7987-ram-comb
BOOT_DEVICE:=ram
BUILD_SUBTARGET:=filogic
PLAT:=mt7987
DRAM_USE_COMB:=1
RAM_BOOT_UART_DL:=1
HIDDEN:=
DEFAULT:=TARGET_mediatek_filogic
@ -643,8 +670,9 @@ TFA_TARGETS:= \
mt7981-spim-nand-ubi-ddr4 \
mt7981-ram-ddr4 \
mt7981-emmc-ddr4 \
mt7981-sdmmc-ddr4 \
mt7981-spim-nand-ddr4 \
mt7981-cudy-tr3000-v1 \
mt7981-cudy-ddr3 \
mt7986-ram-ddr3 \
mt7986-emmc-ddr3 \
mt7986-nor-ddr3 \
@ -661,8 +689,11 @@ TFA_TARGETS:= \
mt7986-spim-nand-ubi-ddr4 \
mt7986-spim-nand-4k-ddr4 \
mt7987-emmc-comb \
mt7987-emmc-ddr4-4bg \
mt7987-nor-comb \
mt7987-sdmmc-comb \
mt7987-sdmmc-ddr4-4bg \
mt7987-spim-nand0 \
mt7987-spim-nand0-ubi-comb \
mt7987-spim-nand2-ubi-comb \
mt7987-ram-comb \
@ -696,6 +727,7 @@ TFA_MAKE_FLAGS += \
HAVE_DRAM_OBJ_FILE=yes \
$(if $(DDR3_FLYBY),DDR3_FLYBY=1) \
$(if $(DDR3_FREQ_1866),DDR3_FREQ_1866=1) \
$(if $(DDR4_4BG_MODE),DDR4_4BG_MODE=1) \
$(if $(DRAM_USE_COMB),DRAM_USE_COMB=1) \
$(if $(RAM_BOOT_UART_DL),RAM_BOOT_UART_DL=1) \
$(if $(USE_UBI),UBI=1 $(if $(findstring mt7622,$(PLAT)),OVERRIDE_UBI_START_ADDR=0x80000)) \

View file

@ -5,10 +5,11 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=https://github.com/microchip-ung/arm-trusted-firmware.git
PKG_SOURCE_DATE:=2024-08-13
PKG_SOURCE_VERSION:=67fcfcab71f78ac7d4af834c37b29f8c98dd5ff1
PKG_MIRROR_HASH:=777c68273e84028de77750f3fe8a1219b02f01d43ce35948893ac642d8eb10d7
PKG_SOURCE_DATE:=2026-01-07
PKG_SOURCE_VERSION:=7696c9aaaae7c677f4c373a61a1289cba7f824aa
PKG_MIRROR_HASH:=331548d7c73896bd5e4438c0ec9c71bbe58d3bf9a29350496ad94c382e922b9c
PKG_BUILD_DEPENDS:=ruby/host
PKG_MAINTAINER:=Robert Marko <robert.marko@sartura.hr>
include $(INCLUDE_DIR)/kernel.mk
@ -28,7 +29,17 @@ define Trusted-Firmware-A/ev23x71a
DEPENDS:=+u-boot-ev23x71a
endef
TFA_TARGETS:= ev23x71a
define Trusted-Firmware-A/tactical-1000
NAME:=Novarq Tactical 1000
BUILD_SUBTARGET:=lan969x
BUILD_DEVICES:=novarq_tactical-1000
PLAT:=novarq_tactical_1000_v3
DEPENDS:=+u-boot-tactical-1000
endef
TFA_TARGETS:= \
ev23x71a \
tactical-1000
MBEDTLS_NAME:=mbedtls
MBEDTLS_RELEASE:=2.28.10
@ -52,17 +63,6 @@ define Build/Prepare
$(TAR) -C $(PKG_BUILD_DIR) -xf $(DL_DIR)/$(MBEDTLS_SOURCE)
endef
# We must not pass OPENSSL_DIR as locally built mbedtls is used
define Build/Compile
+unset CC; \
$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
CROSS_COMPILE=$(TARGET_CROSS) \
$(if $(DTC),DTC="$(DTC)") \
PLAT=$(PLAT) \
BUILD_STRING="OpenWrt $(PKG_VERSION_PREFIX)$(PKG_VERSION)-$(PKG_RELEASE) ($(VARIANT))" \
$(TFA_MAKE_FLAGS)
endef
TFA_MAKE_FLAGS += \
MBEDTLS_DIR=$(PKG_BUILD_DIR)/$(MBEDTLS_NAME) \
BL33=$(STAGING_DIR_IMAGE)/$(BUILD_VARIANT)-u-boot.bin \

View file

@ -0,0 +1,171 @@
From 190202583edb9dcab5ca49638169d08a332f0fdf Mon Sep 17 00:00:00 2001
From: Robert Marko <robert.marko@sartura.hr>
Date: Sun, 2 Nov 2025 16:57:45 +0100
Subject: [PATCH] microchip: lan969x: add Novarq Tactical 1000 v3
Add support for Novarq Tactical 1000 v3 board as a separate platform since
it uses 2GB of RAM and requires a different RAM configuration.
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
---
.../fdts/lan969x-tactical-1000-v3-ddr.dtsi | 90 +++++++++++++++++++
.../novarq_tactical_1000_v3_tb_fw_config.dts | 30 +++++++
.../novarq_tactical_1000_v3/platform.mk | 12 +++
scripts/fwu/fwu.js | 2 +-
4 files changed, 133 insertions(+), 1 deletion(-)
create mode 100644 plat/microchip/lan969x/fdts/lan969x-tactical-1000-v3-ddr.dtsi
create mode 100644 plat/microchip/lan969x/novarq_tactical_1000_v3/fdts/novarq_tactical_1000_v3_tb_fw_config.dts
create mode 100644 plat/microchip/lan969x/novarq_tactical_1000_v3/platform.mk
--- /dev/null
+++ b/plat/microchip/lan969x/fdts/lan969x-tactical-1000-v3-ddr.dtsi
@@ -0,0 +1,90 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (C) 2022 Microchip Technology Inc. and its subsidiaries.
+ *
+ */
+
+&ddr {
+ microchip,mem-name = "lan969x_tactical_1000_2gb 2025-11-02-13:03:23 7391dfb-dirty";
+ microchip,mem-speed = <2400>;
+ microchip,mem-size = <0x80000000>;
+ microchip,mem-bus-width = <16>;
+
+ microchip,main-reg = <
+ 0x00001091 /* crcparctl1 */
+ 0x00000001 /* dbictl */
+ 0x00000040 /* dfimisc */
+ 0x0391820f /* dfitmg0 */
+ 0x00040201 /* dfitmg1 */
+ 0x40400003 /* dfiupd0 */
+ 0x004000ff /* dfiupd1 */
+ 0x003f7f40 /* ecccfg0 */
+ 0x00020248 /* init0 */
+ 0x00e80000 /* init1 */
+ 0x0c340101 /* init3 */
+ 0x10180200 /* init4 */
+ 0x00110000 /* init5 */
+ 0x00000402 /* init6 */
+ 0x00000c19 /* init7 */
+ 0x81040010 /* mstr */
+ 0x00000000 /* pccfg */
+ 0x00000000 /* pwrctl */
+ 0x00210020 /* rfshctl0 */
+ 0x00000000 /* rfshctl3 */
+ >;
+
+ microchip,timing-reg = <
+ 0x17131413 /* dramtmg0 */
+ 0x0007051b /* dramtmg1 */
+ 0x1a000010 /* dramtmg12 */
+ 0x090b0512 /* dramtmg2 */
+ 0x0000400c /* dramtmg3 */
+ 0x08040409 /* dramtmg4 */
+ 0x07070404 /* dramtmg5 */
+ 0x07060c0b /* dramtmg8 */
+ 0x0003040d /* dramtmg9 */
+ 0x07000610 /* odtcfg */
+ 0x0049014b /* rfshtmg */
+ >;
+
+ microchip,mapping-reg = <
+ 0x0000001f /* addrmap0 */
+ 0x003f0909 /* addrmap1 */
+ 0x00000700 /* addrmap2 */
+ 0x00000000 /* addrmap3 */
+ 0x00001f1f /* addrmap4 */
+ 0x07070707 /* addrmap5 */
+ 0x07070707 /* addrmap6 */
+ 0x00000f07 /* addrmap7 */
+ 0x00003f01 /* addrmap8 */
+ >;
+
+ microchip,phy-reg = <
+ 0x0000040c /* dcr */
+ 0x0064401b /* dsgcr */
+ 0x8000b0cf /* dtcr0 */
+ 0x00010a37 /* dtcr1 */
+ 0x00c01884 /* dxccr */
+ 0x000010ba /* pgcr2 */
+ 0x00000000 /* schcr1 */
+ 0x00079900 /* zq0pr */
+ 0x10077900 /* zq1pr */
+ 0x00000000 /* zq2pr */
+ 0x00058f00 /* zqcr */
+ >;
+
+ microchip,phy_timing-reg = <
+ 0x0827100a /* dtpr0 */
+ 0x28250018 /* dtpr1 */
+ 0x000702a1 /* dtpr2 */
+ 0x03000101 /* dtpr3 */
+ 0x02950808 /* dtpr4 */
+ 0x00361009 /* dtpr5 */
+ 0x4ae25710 /* ptr0 */
+ 0x74f4950e /* ptr1 */
+ 0x00083def /* ptr2 */
+ 0x2a192000 /* ptr3 */
+ 0x1003a000 /* ptr4 */
+ >;
+
+};
--- /dev/null
+++ b/plat/microchip/lan969x/novarq_tactical_1000_v3/fdts/novarq_tactical_1000_v3_tb_fw_config.dts
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2022, Microchip Technology Inc. and its subsidiaries.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+/dts-v1/;
+
+#include "lan969x.dtsi"
+#include "lan969x-tactical-1000-v3-ddr.dtsi"
+
+&emmc_clk {
+ clock-frequency = <100000000>;
+};
+
+&sdmmc0 {
+ status = "okay";
+ bus-width = <8>;
+};
+
+&qspi0 {
+ status = "okay";
+ spi-flash@0 {
+ compatible = "jedec,spi-nor";
+ reg = <0>;
+ spi-max-frequency = <100000000>;
+ spi-tx-bus-width = <4>;
+ spi-rx-bus-width = <4>;
+ };
+};
--- /dev/null
+++ b/plat/microchip/lan969x/novarq_tactical_1000_v3/platform.mk
@@ -0,0 +1,12 @@
+#
+# Copyright (c) 2021, Microchip Technology Inc. and its subsidiaries.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+include plat/microchip/lan969x/common/common.mk
+
+# This is used in lan969x code
+$(eval $(call add_define,LAN969X_ASIC))
+# This is used in common drivers
+$(eval $(call add_define,LAN966X_ASIC))
--- a/scripts/fwu/fwu.js
+++ b/scripts/fwu/fwu.js
@@ -91,7 +91,7 @@ const platforms = [
"ddr_diag": ddr_diag_regs_lan969x,
"ddr_regs": ddr_regs_lan969x,
"ddr_speed": lan969x_speeds,
- "bl2u_compat": ["lan969x_a0", "lan969x_svb"],
+ "bl2u_compat": ["lan969x_a0", "lan969x_svb", "novarq_tactical_1000_v3"],
},
];

View file

@ -0,0 +1,95 @@
From 40166fd8d88f33c621d3cca0b936f31816f3fe2e Mon Sep 17 00:00:00 2001
From: Robert Marko <robert.marko@sartura.hr>
Date: Mon, 12 Jan 2026 14:40:23 +0100
Subject: [PATCH] cert_create: add LibreSSL 3.9+ compatibility
LibreSSL 3.9+ has dropped the whole support for X509V3 extensions.
Generated by Gemini 3 Pro.
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
---
tools/cert_create/src/ext.c | 26 ++++++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)
--- a/tools/cert_create/src/ext.c
+++ b/tools/cert_create/src/ext.c
@@ -51,15 +51,18 @@ int ext_init(void)
{
cmd_opt_t cmd_opt;
ext_t *ext;
+#if !defined(LIBRESSL_VERSION_NUMBER) || LIBRESSL_VERSION_NUMBER < 0x40200000L
X509V3_EXT_METHOD *m;
- int nid, ret;
+ int ret, nid;
+#endif
unsigned int i;
extensions = malloc((num_def_extensions * sizeof(def_extensions[0]))
#ifdef PDEF_EXTS
+ (num_pdef_extensions * sizeof(pdef_extensions[0]))
#endif
- );
+ );
+
if (extensions == NULL) {
ERROR("%s:%d Failed to allocate memory.\n", __func__, __LINE__);
return 1;
@@ -69,7 +72,7 @@ int ext_init(void)
(num_def_extensions * sizeof(def_extensions[0])));
#ifdef PDEF_EXTS
memcpy(&extensions[num_def_extensions], &pdef_extensions[0],
- (num_pdef_extensions * sizeof(pdef_extensions[0])));
+ (num_pdef_extensions * sizeof(pdef_extensions[0])));
num_extensions = num_def_extensions + num_pdef_extensions;
#else
num_extensions = num_def_extensions;
@@ -86,11 +89,15 @@ int ext_init(void)
cmd_opt.help_msg = ext->help_msg;
cmd_opt_add(&cmd_opt);
}
+
/* Register the extension OID in OpenSSL */
if (ext->oid == NULL) {
continue;
}
+
+#if !defined(LIBRESSL_VERSION_NUMBER) || LIBRESSL_VERSION_NUMBER < 0x40200000L
nid = OBJ_create(ext->oid, ext->sn, ext->ln);
+
if (ext->alias) {
X509V3_EXT_add_alias(nid, ext->alias);
} else {
@@ -117,7 +124,16 @@ int ext_init(void)
return 1;
}
}
+#else
+ /*
+ * LibreSSL 4.2.0+ removed X509V3_EXT_add/alias.
+ * We still register the OID, but ignore the returned NID
+ * as we skip method registration.
+ */
+ OBJ_create(ext->oid, ext->sn, ext->ln);
+#endif
}
+
return 0;
}
@@ -323,12 +339,14 @@ void ext_cleanup(void)
for (i = 0; i < num_extensions; i++) {
if (extensions[i].arg != NULL) {
void *ptr = (void *)extensions[i].arg;
-
extensions[i].arg = NULL;
free(ptr);
}
}
free(extensions);
+
+#if !defined(LIBRESSL_VERSION_NUMBER) || LIBRESSL_VERSION_NUMBER < 0x40200000L
X509V3_EXT_cleanup();
+#endif
}

View file

@ -0,0 +1,36 @@
From 11ff8b5e67830d5a09f39e8c1f000b0ddcf8e88f Mon Sep 17 00:00:00 2001
From: Robert Marko <robert.marko@sartura.hr>
Date: Mon, 12 Jan 2026 15:16:07 +0100
Subject: [PATCH] cert_create: pass pthread in LDFLAGS
OpenWrt-s LibreSSL is linked against pthread, so we have to make sure to
pass -lpthread in LDFLAGS to avoid:
/usr/bin/ld: /openwrt/staging_dir/host/lib/libcrypto.a(libcrypto_la-crypto_init.o): in function `OPENSSL_init_crypto':
crypto_init.c:(.text+0x67): undefined reference to `pthread_once'
/usr/bin/ld: /openwrt/staging_dir/host/lib/libcrypto.a(libcrypto_la-err.o): in function `ERR_load_ERR_strings':
err.c:(.text+0x812): undefined reference to `pthread_once'
/usr/bin/ld: /openwrt/staging_dir/host/lib/libcrypto.a(libcrypto_la-conf_sap.o): in function `OpenSSL_config':
conf_sap.c:(.text+0xc0): undefined reference to `pthread_once'
/usr/bin/ld: /openwrt/staging_dir/host/lib/libcrypto.a(libcrypto_la-conf_sap.o): in function `OpenSSL_no_config':
conf_sap.c:(.text+0x107): undefined reference to `pthread_once'
/usr/bin/ld: /openwrt/staging_dir/host/lib/libcrypto.a(libcrypto_la-err_all.o): in function `ERR_load_crypto_strings':
err_all.c:(.text+0xa3): undefined reference to `pthread_once'
collect2: error: ld returned 1 exit status
make[4]: *** [Makefile:93: cert_create] Error 1
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
---
tools/cert_create/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/tools/cert_create/Makefile
+++ b/tools/cert_create/Makefile
@@ -79,7 +79,7 @@ INC_DIR += -I ./include -I ${PLAT_INCLUD
# located under the main project directory (i.e.: ${OPENSSL_DIR}, not
# ${OPENSSL_DIR}/lib/).
LIB_DIR := -L ${OPENSSL_DIR}/lib -L ${OPENSSL_DIR}
-LIB := -lssl -lcrypto
+LIB := -lssl -lcrypto -pthread
HOSTCC ?= gcc

View file

@ -0,0 +1,29 @@
From f78f934710394822a36bd74043ed93a812c1c690 Mon Sep 17 00:00:00 2001
From: Robert Marko <robert.marko@sartura.hr>
Date: Mon, 12 Jan 2026 15:36:35 +0100
Subject: [PATCH] microchip: lan969x: do not rely on Ruby shebang
Host Ruby build in the staging dir must be used, so we cannot rely on the
shebang as that will fail.
So, call the script via Ruby executable instead.
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
---
plat/microchip/lan969x/common/common.mk | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/plat/microchip/lan969x/common/common.mk
+++ b/plat/microchip/lan969x/common/common.mk
@@ -218,9 +218,9 @@ FWU_HTML := ${BUILD_PLAT}/fwu.html
FWU_JS := ${BUILD_PLAT}/fwu_app.js
${FWU_JS}: ${BUILD_PLAT}/${FWU_FIP_NAME}
- ./plat/microchip/scripts/mkjs.rb -p ${PLAT} -o ${FWU_JS} $<
+ $(Q)ruby ./plat/microchip/scripts/mkjs.rb -p ${PLAT} -o ${FWU_JS} $<
${FWU_HTML}: ${FWU_JS}
- ./plat/microchip/scripts/html_inline.rb -i ${BUILD_PLAT} ./scripts/fwu/serial.html > ${FWU_HTML}
+ $(Q)ruby ./plat/microchip/scripts/html_inline.rb -i ${BUILD_PLAT} ./scripts/fwu/serial.html > ${FWU_HTML}
all: ${FWU_HTML}

View file

@ -309,9 +309,20 @@ define U-Boot/mt7981_cudy_tr3000-v1
BUILD_DEVICES:=cudy_tr3000-v1-ubootmod
UBOOT_CONFIG:=mt7981_cudy_tr3000-v1
UBOOT_IMAGE:=u-boot.fip
BL2_BOOTDEV:=cudy-tr3000-v1
BL2_BOOTDEV:=cudy-ddr3
BL2_SOC:=mt7981
DEPENDS:=+trusted-firmware-a-mt7981-cudy-tr3000-v1
DEPENDS:=+trusted-firmware-a-mt7981-cudy-ddr3
endef
define U-Boot/mt7981_cudy_wbr3000uax-v1
NAME:=Cudy WBR3000UAX v1
BUILD_SUBTARGET:=filogic
BUILD_DEVICES:=cudy_wbr3000uax-v1-ubootmod
UBOOT_CONFIG:=mt7981_cudy_wbr3000uax-v1
UBOOT_IMAGE:=u-boot.fip
BL2_BOOTDEV:=cudy-ddr3
BL2_SOC:=mt7981
DEPENDS:=+trusted-firmware-a-mt7981-cudy-ddr3
endef
define U-Boot/mt7981_glinet_gl-mt2500
@ -870,6 +881,17 @@ define U-Boot/mt7987_bananapi_bpi-r4-lite-nor
FIP_COMPRESS:=1
endef
define U-Boot/mt7987_routerich_be7200
NAME:=Routerich BE7200
BUILD_SUBTARGET:=filogic
BUILD_DEVICES:=routerich_be7200
UBOOT_CONFIG:=mt7987a_routerich_be7200
UBOOT_IMAGE:=u-boot.fip
BL2_BOOTDEV:=spim-nand0
BL2_SOC:=mt7987
DEPENDS:=+trusted-firmware-a-mt7987-spim-nand0
endef
define U-Boot/mt7988_arcadyan_mozart
NAME:=Arcadyan Mozart
BUILD_SUBTARGET:=filogic
@ -1091,6 +1113,7 @@ UBOOT_TARGETS := \
mt7981_cmcc_rax3000m-nand-ddr4 \
mt7981_comfast_cf-wr632ax \
mt7981_cudy_tr3000-v1 \
mt7981_cudy_wbr3000uax-v1 \
mt7981_gatonetworks_gdsp \
mt7981_glinet_gl-mt2500 \
mt7981_glinet_gl-x3000 \
@ -1140,6 +1163,7 @@ UBOOT_TARGETS := \
mt7987_rfb-emmc \
mt7987_rfb-sd \
mt7987_rfb-spim-nand \
mt7987_routerich_be7200 \
mt7988_arcadyan_mozart \
mt7988_asus_zenwifi-bt8 \
mt7988_bananapi_bpi-r4-emmc \

View file

@ -283,7 +283,7 @@
+bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60
+bootmenu_default=0
+bootmenu_delay=0
+bootmenu_title= [0;34m( ( ( [1;39mOpenWrt[0;34m ) ) )
+bootmenu_title= ( ( ( OpenWrt ) ) )
+bootmenu_0=Initialize environment.=run _firstboot
+bootmenu_0d=Run default boot command.=run boot_default
+bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return
@ -291,8 +291,8 @@
+bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return
+bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return
+bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return
+bootmenu_6=[31mLoad BL31+U-Boot FIP via TFTP then write to NAND.[0m=run boot_tftp_write_fip ; run bootmenu_confirm_return
+bootmenu_7=[31mLoad BL2 preloader via TFTP then write to NAND.[0m=run boot_tftp_write_bl2 ; run bootmenu_confirm_return
+bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return
+bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return
+bootmenu_8=Reboot.=reset
+bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset
+boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu
@ -320,4 +320,4 @@
+_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv
+_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first
+_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title [33m$ver[0m"
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver"

View file

@ -0,0 +1,355 @@
--- /dev/null
+++ b/configs/mt7981_cudy_wbr3000uax-v1_defconfig
@@ -0,0 +1,108 @@
+CONFIG_ARM=y
+CONFIG_SYS_HAS_NONCACHED_MEMORY=y
+CONFIG_POSITION_INDEPENDENT=y
+CONFIG_ARCH_MEDIATEK=y
+CONFIG_TEXT_BASE=0x41e00000
+CONFIG_SYS_MALLOC_F_LEN=0x4000
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_DEFAULT_DEVICE_TREE="mt7981-cudy-wbr3000uax-v1"
+CONFIG_OF_LIBFDT_OVERLAY=y
+CONFIG_TARGET_MT7981=y
+CONFIG_SYS_LOAD_ADDR=0x46000000
+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00
+CONFIG_DEBUG_UART_BASE=0x11002000
+CONFIG_DEBUG_UART_CLOCK=40000000
+CONFIG_DEBUG_UART=y
+CONFIG_FIT=y
+CONFIG_BOOTDELAY=30
+CONFIG_AUTOBOOT_KEYED=y
+CONFIG_AUTOBOOT_MENU_SHOW=y
+CONFIG_DEFAULT_FDT_FILE="mediatek/mt7981-cudy-wbr3000uax-v1.dtb"
+CONFIG_LOGLEVEL=7
+CONFIG_PRE_CONSOLE_BUFFER=y
+CONFIG_LOG=y
+# CONFIG_BOARD_INIT is not set
+CONFIG_BOARD_LATE_INIT=y
+CONFIG_HUSH_PARSER=y
+CONFIG_SYS_PROMPT="MT7981> "
+CONFIG_CMD_CPU=y
+CONFIG_CMD_LICENSE=y
+CONFIG_CMD_BOOTMENU=y
+CONFIG_CMD_ASKENV=y
+CONFIG_CMD_ERASEENV=y
+CONFIG_CMD_ENV_FLAGS=y
+CONFIG_CMD_STRINGS=y
+CONFIG_CMD_DM=y
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_GPT=y
+CONFIG_CMD_MTD=y
+CONFIG_CMD_PART=y
+CONFIG_CMD_TFTPSRV=y
+CONFIG_CMD_RARP=y
+CONFIG_CMD_CDP=y
+CONFIG_CMD_SNTP=y
+CONFIG_CMD_LINK_LOCAL=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_DNS=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_PXE=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_PSTORE=y
+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000
+CONFIG_CMD_UUID=y
+CONFIG_CMD_HASH=y
+CONFIG_CMD_SMC=y
+CONFIG_CMD_UBI=y
+CONFIG_CMD_UBI_RENAME=y
+CONFIG_OF_EMBED=y
+CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_IN_UBI=y
+CONFIG_ENV_REDUNDANT=y
+CONFIG_ENV_UBI_PART="ubi"
+CONFIG_ENV_UBI_VOLUME="ubootenv"
+CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2"
+CONFIG_ENV_RELOC_GD_ENV_ADDR=y
+CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y
+CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/cudy_wbr3000uax-v1_env"
+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
+CONFIG_VERSION_VARIABLE=y
+CONFIG_NETCONSOLE=y
+CONFIG_USE_IPADDR=y
+CONFIG_IPADDR="192.168.1.1"
+CONFIG_USE_SERVERIP=y
+CONFIG_SERVERIP="192.168.1.254"
+CONFIG_NET_RANDOM_ETHADDR=y
+CONFIG_REGMAP=y
+CONFIG_SYSCON=y
+CONFIG_BUTTON=y
+CONFIG_BUTTON_GPIO=y
+CONFIG_CLK=y
+CONFIG_GPIO_HOG=y
+CONFIG_LED=y
+CONFIG_LED_BLINK=y
+CONFIG_LED_GPIO=y
+# CONFIG_MMC is not set
+CONFIG_MTD=y
+CONFIG_DM_MTD=y
+CONFIG_MTD_SPI_NAND=y
+CONFIG_MTD_UBI_FASTMAP=y
+CONFIG_PHY_FIXED=y
+CONFIG_MEDIATEK_ETH=y
+CONFIG_PHY=y
+CONFIG_PINCTRL=y
+CONFIG_PINCONF=y
+CONFIG_PINCTRL_MT7981=y
+CONFIG_POWER_DOMAIN=y
+CONFIG_MTK_POWER_DOMAIN=y
+CONFIG_DM_REGULATOR=y
+CONFIG_DM_REGULATOR_FIXED=y
+CONFIG_DM_REGULATOR_GPIO=y
+CONFIG_RAM=y
+CONFIG_DM_SERIAL=y
+CONFIG_SERIAL_RX_BUFFER=y
+CONFIG_MTK_SERIAL=y
+CONFIG_SPI=y
+CONFIG_DM_SPI=y
+CONFIG_MTK_SPIM=y
+CONFIG_ZSTD=y
+CONFIG_HEXDUMP=y
--- /dev/null
+++ b/arch/arm/dts/mt7981-cudy-wbr3000uax-v1.dts
@@ -0,0 +1,184 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/dts-v1/;
+#include "mt7981.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/linux-event-codes.h>
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ model = "Cudy WBR3000UAX v1";
+ compatible = "mediatek,mt7981", "mediatek,mt7981-rfb";
+
+ chosen {
+ stdout-path = &uart0;
+ tick-timer = &timer0;
+ };
+
+ memory@40000000 {
+ device_type = "memory";
+ reg = <0x40000000 0x20000000>;
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+
+ button-reset {
+ label = "reset";
+ linux,code = <KEY_RESTART>;
+ gpios = <&pio 1 GPIO_ACTIVE_LOW>;
+ };
+
+ button-wps {
+ label = "wps";
+ linux,code = <KEY_WPS_BUTTON>;
+ gpios = <&pio 0 GPIO_ACTIVE_LOW>;
+ };
+ };
+
+ gpio-leds {
+ compatible = "gpio-leds";
+
+ led_status: led_power {
+ label = "blue:power";
+ gpios = <&pio 8 GPIO_ACTIVE_LOW>;
+ };
+
+ led_wan_blue {
+ label = "blue:wan";
+ gpios = <&pio 10 GPIO_ACTIVE_LOW>;
+ };
+
+ led_wan_red {
+ label = "red:wan";
+ gpios = <&pio 4 GPIO_ACTIVE_LOW>;
+ };
+
+ led_lan {
+ label = "blue:lan";
+ gpios = <&pio 11 GPIO_ACTIVE_LOW>;
+ };
+
+ led_wps_blue {
+ label = "blue:wps";
+ gpios = <&pio 9 GPIO_ACTIVE_LOW>;
+ };
+
+ led_wps_red {
+ label = "red:wps";
+ gpios = <&pio 5 GPIO_ACTIVE_LOW>;
+ };
+
+ led_wifi2g {
+ label = "blue:wifi2g";
+ gpios = <&pio 6 GPIO_ACTIVE_LOW>;
+ };
+
+ led_wifi5g {
+ label = "blue:wifi5g";
+ gpios = <&pio 7 GPIO_ACTIVE_LOW>;
+ };
+ };
+};
+
+&eth {
+ status = "okay";
+ mediatek,gmac-id = <0>;
+ phy-mode = "2500base-x";
+ mediatek,switch = "mt7531";
+ reset-gpios = <&pio 39 GPIO_ACTIVE_HIGH>;
+
+ fixed-link {
+ speed = <2500>;
+ full-duplex;
+ };
+};
+
+&pio {
+ spi_flash_pins: spi0-pins-func-1 {
+ mux {
+ function = "flash";
+ groups = "spi0", "spi0_wp_hold";
+ };
+
+ conf-pu {
+ pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
+ drive-strength = <MTK_DRIVE_8mA>;
+ bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
+ };
+
+ conf-pd {
+ pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
+ drive-strength = <MTK_DRIVE_8mA>;
+ bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
+ };
+ };
+};
+
+&spi0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi_flash_pins>;
+ status = "okay";
+ must_tx;
+ enhance_timing;
+ dma_ext;
+ ipm_design;
+ support_quad;
+ tick_dly = <2>;
+ sample_sel = <0>;
+
+ spi_nand@0 {
+ compatible = "spi-nand";
+ reg = <0>;
+ spi-max-frequency = <52000000>;
+
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "bl2";
+ reg = <0x0 0x100000>;
+ };
+
+ partition@100000 {
+ label = "u-boot-env";
+ reg = <0x100000 0x80000>;
+ };
+
+ partition@180000 {
+ label = "factory";
+ reg = <0x180000 0x200000>;
+ };
+
+ partition@380000 {
+ label = "bdinfo";
+ reg = <0x380000 0x40000>;
+ };
+
+ partition@3c0000 {
+ label = "fip";
+ reg = <0x3c0000 0x200000>;
+ };
+
+ partition@5c0000 {
+ label = "ubi";
+ reg = <0x5c0000 0x7a40000>;
+ compatible = "linux,ubi";
+ };
+ };
+ };
+};
+
+&uart0 {
+ mediatek,force-highspeed;
+ status = "okay";
+};
+
+&watchdog {
+ status = "disabled";
+};
--- /dev/null
+++ b/defenvs/cudy_wbr3000uax-v1_env
@@ -0,0 +1,54 @@
+ipaddr=192.168.1.1
+serverip=192.168.1.254
+loadaddr=0x46000000
+console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0
+bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi
+bootconf=config-1
+bootdelay=0
+bootfile=openwrt-mediatek-filogic-cudy_wbr3000uax-v1-ubootmod-initramfs-recovery.itb
+bootfile_bl2=openwrt-mediatek-filogic-cudy_wbr3000uax-v1-ubootmod-preloader.bin
+bootfile_fip=openwrt-mediatek-filogic-cudy_wbr3000uax-v1-ubootmod-bl31-uboot.fip
+bootfile_upg=openwrt-mediatek-filogic-cudy_wbr3000uax-v1-ubootmod-squashfs-sysupgrade.itb
+bootled_pwr=blue:power
+bootled_rec=red:wan
+bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60
+bootmenu_default=0
+bootmenu_delay=0
+bootmenu_title= ( ( ( OpenWrt ) ) )
+bootmenu_0=Initialize environment.=run _firstboot
+bootmenu_0d=Run default boot command.=run boot_default
+bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return
+bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return
+bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return
+bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return
+bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return
+bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return
+bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return
+bootmenu_8=Reboot.=reset
+bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset
+boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu
+boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever
+boot_production=led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off
+boot_recovery=led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off
+boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever
+boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done
+boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi
+boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi
+boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf
+boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory
+boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2
+reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800
+mtd_write_fip=mtd erase fip && mtd write fip $loadaddr
+mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr
+ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic || run ubi_format ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic || run ubi_format
+ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset
+ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi
+ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs
+ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery
+ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data
+ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize
+ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize
+_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv
+_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first
+_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver"

View file

@ -0,0 +1,373 @@
--- /dev/null
+++ b/configs/mt7987a_routerich_be7200_defconfig
@@ -0,0 +1,133 @@
+CONFIG_ARM=y
+CONFIG_SYS_HAS_NONCACHED_MEMORY=y
+CONFIG_POSITION_INDEPENDENT=y
+CONFIG_ARCH_MEDIATEK=y
+CONFIG_TEXT_BASE=0x41e00000
+CONFIG_SYS_MALLOC_F_LEN=0x4000
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_DEFAULT_DEVICE_TREE="mt7987a-routerich_be7200"
+CONFIG_OF_LIBFDT_OVERLAY=y
+CONFIG_TARGET_MT7987=y
+CONFIG_CPU_ARMV8=y
+CONFIG_SYS_BOOTM_LEN=0x6000000
+CONFIG_SYS_LOAD_ADDR=0x48000000
+CONFIG_PRE_CON_BUF_ADDR=0x4007ef00
+CONFIG_DEBUG_UART_BASE=0x11000000
+CONFIG_DEBUG_UART_CLOCK=40000000
+CONFIG_DEBUG_UART=y
+CONFIG_FIT=y
+CONFIG_AUTOBOOT_MENU_SHOW=y
+CONFIG_DEFAULT_FDT_FILE="mt7987a-routerich_be7200"
+CONFIG_SYS_CBSIZE=512
+CONFIG_SYS_PBSIZE=1049
+CONFIG_LOGLEVEL=7
+CONFIG_PRE_CONSOLE_BUFFER=y
+CONFIG_LOG=y
+# CONFIG_BOARD_INIT is not set
+CONFIG_BOARD_LATE_INIT=y
+CONFIG_HUSH_PARSER=y
+CONFIG_SYS_PROMPT="MT7987> "
+# CONFIG_BOOTM_NETBSD is not set
+# CONFIG_BOOTM_PLAN9 is not set
+# CONFIG_BOOTM_RTEMS is not set
+# CONFIG_BOOTM_VXWORKS is not set
+# CONFIG_CMD_BOOTEFI_BOOTMGR is not set
+CONFIG_CMD_LICENSE=y
+CONFIG_CMD_BOOTMENU=y
+CONFIG_CMD_ASKENV=y
+CONFIG_CMD_ERASEENV=y
+CONFIG_CMD_ENV_FLAGS=y
+CONFIG_CMD_STRINGS=y
+CONFIG_CMD_CPU=y
+CONFIG_CMD_DM=y
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_PWM=y
+CONFIG_CMD_GPT=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_MTD=y
+CONFIG_CMD_PART=y
+CONFIG_CMD_PCI=y
+CONFIG_CMD_USB=y
+CONFIG_CMD_TFTPSRV=y
+CONFIG_CMD_RARP=y
+CONFIG_CMD_CDP=y
+CONFIG_CMD_SNTP=y
+CONFIG_CMD_LINK_LOCAL=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_DNS=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_PXE=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_PSTORE=y
+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000
+CONFIG_CMD_UUID=y
+CONFIG_CMD_HASH=y
+CONFIG_CMD_SMC=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_CMD_FS_UUID=y
+CONFIG_CMD_SF_TEST=y
+CONFIG_CMD_UBI=y
+CONFIG_CMD_UBI_RENAME=y
+# CONFIG_CMD_XIMG is not set
+CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_IN_UBI=y
+CONFIG_ENV_REDUNDANT=y
+CONFIG_ENV_UBI_PART="ubi"
+CONFIG_ENV_UBI_VOLUME="ubootenv"
+CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2"
+CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y
+CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/routerich_be7200_env"
+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
+CONFIG_VERSION_VARIABLE=y
+CONFIG_NETCONSOLE=y
+CONFIG_USE_IPADDR=y
+CONFIG_IPADDR="192.168.1.1"
+CONFIG_USE_NETMASK=y
+CONFIG_NETMASK="255.255.255.0"
+CONFIG_USE_SERVERIP=y
+CONFIG_SERVERIP="192.168.1.254"
+CONFIG_NET_RANDOM_ETHADDR=y
+CONFIG_BUTTON=y
+CONFIG_BUTTON_GPIO=y
+CONFIG_CLK=y
+CONFIG_DM_I2C=y
+CONFIG_SYS_I2C_MTK=y
+CONFIG_LED=y
+CONFIG_LED_BLINK=y
+CONFIG_LED_GPIO=y
+# CONFIG_MMC is not set
+CONFIG_MTD=y
+CONFIG_DM_MTD=y
+CONFIG_MTD_SPI_NAND=y
+CONFIG_MTD_UBI_FASTMAP=y
+CONFIG_PHY_ETHERNET_ID=y
+CONFIG_PHY_FIXED=y
+CONFIG_MEDIATEK_ETH=y
+CONFIG_PHY=y
+CONFIG_PHY_MTK_TPHY=y
+CONFIG_PINCTRL=y
+CONFIG_PINCONF=y
+CONFIG_PINCTRL_MT7987=y
+CONFIG_POWER_DOMAIN=y
+CONFIG_MTK_POWER_DOMAIN=y
+CONFIG_DM_REGULATOR=y
+CONFIG_DM_REGULATOR_FIXED=y
+CONFIG_DM_REGULATOR_GPIO=y
+CONFIG_DM_PWM=y
+CONFIG_PWM_MTK=y
+CONFIG_SCSI=y
+CONFIG_DM_SERIAL=y
+CONFIG_SERIAL_RX_BUFFER=y
+CONFIG_MTK_SERIAL=y
+CONFIG_SPI=y
+CONFIG_DM_SPI=y
+CONFIG_MTK_SPIM=y
+CONFIG_USB=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_XHCI_MTK=y
+CONFIG_USB_STORAGE=y
+CONFIG_ZSTD=y
+CONFIG_HEXDUMP=y
--- /dev/null
+++ b/defenvs/routerich_be7200_env
@@ -0,0 +1,57 @@
+ipaddr=192.168.1.1
+serverip=192.168.1.254
+loadaddr=0x48000000
+console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0
+bootcmd=run check_buttons ; if pstore check ; then run boot_recovery ; else run boot_ubi ; fi
+bootconf=config-1
+bootdelay=0
+bootfile=openwrt-mediatek-filogic-routerich_be7200-initramfs-recovery.itb
+bootfile_bl2=openwrt-mediatek-filogic-routerich_be7200-preloader.bin
+bootfile_fip=openwrt-mediatek-filogic-routerich_be7200-bl31-uboot.fip
+bootfile_upg=openwrt-mediatek-filogic-routerich_be7200-squashfs-sysupgrade.itb
+bootled_status=blue:status
+bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60
+bootmenu_default=0
+bootmenu_delay=0
+bootmenu_title= ( ( ( OpenWrt ) ) )
+bootmenu_0=Initialize environment.=run _firstboot
+bootmenu_0d=Run default boot command.=run boot_default
+bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return
+bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return
+bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return
+bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return
+bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return
+bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return
+bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return
+bootmenu_8=Reboot.=reset
+bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset
+boot_first=if button reset ; then led $bootled_status on ; run boot_default ; fi ; bootmenu
+boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever
+boot_production=led $bootled_status on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led bootled_status off
+boot_recovery=led $bootled_status on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led bootled_status off
+boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever
+boot_tftp_forever=led $bootled_status on ; while true ; do run boot_tftp ; sleep 1 ; done
+boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi
+boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi
+boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf
+boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory
+boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2
+check_buttons=if button reset ; then run boot_tftp ; fi
+ethaddr_factory=mtd read Factory 0x40080000 0x0 0x20000 && env readmem -b ethaddr 0x40080004 0x6 ; setenv ethaddr_factory
+part_default=production
+part_recovery=recovery
+reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800
+mtd_write_fip=mtd erase FIP && mtd write FIP $loadaddr
+mtd_write_bl2=mtd erase BL2 && mtd write BL2 $loadaddr
+ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic || run ubi_format ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic || run ubi_format
+ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset
+ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi
+ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs
+ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery
+ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data
+ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize
+ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize
+_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv
+_firstboot=setenv _firstboot ; run ethaddr_factory ; run _switch_to_menu ; run _init_env ; run boot_first
+_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title
+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver"
--- /dev/null
+++ b/arch/arm/dts/mt7987a-routerich_be7200.dts
@@ -0,0 +1,77 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2025
+ * Author: Mikhail Zhilkin <csharper2005@gmail.com>
+ */
+
+/dts-v1/;
+#include "mt7987a.dtsi"
+#include <dt-bindings/input/input.h>
+
+/ {
+ model = "Routerich BE7200";
+ compatible = "routerich,be7200",
+ "mediatek,mt7987";
+
+ gpio-keys {
+ compatible = "gpio-keys";
+
+ button-0 {
+ label = "mesh";
+ linux,code = <KEY_WPS_BUTTON>;
+ gpios = <&pio 0 GPIO_ACTIVE_LOW>;
+ debounce-interval = <10>;
+ };
+
+ button-1 {
+ label = "reset";
+ linux,code = <KEY_RESTART>;
+ gpios = <&pio 1 GPIO_ACTIVE_LOW>;
+ debounce-interval = <10>;
+ };
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ led-0 {
+ label = "blue:status";
+ gpios = <&pio 4 GPIO_ACTIVE_LOW>;
+ };
+
+ led-1 {
+ label = "blue:wlan5g";
+ gpios = <&pio 5 GPIO_ACTIVE_LOW>;
+ };
+
+ led-2 {
+ label = "blue:mesh";
+ gpios = <&pio 7 GPIO_ACTIVE_LOW>;
+ };
+
+ led-3 {
+ label = "red:wan";
+ gpios = <&pio 8 GPIO_ACTIVE_LOW>;
+ };
+
+ led-4 {
+ label = "blue:wan";
+ gpios = <&pio 9 GPIO_ACTIVE_LOW>;
+ };
+
+ led-5 {
+ label = "blue:lan3";
+ gpios = <&pio 10 GPIO_ACTIVE_LOW>;
+ };
+
+ led-6 {
+ label = "blue:lan2";
+ gpios = <&pio 11 GPIO_ACTIVE_LOW>;
+ };
+
+ led-7 {
+ label = "blue:lan1";
+ gpios = <&pio 12 GPIO_ACTIVE_LOW>;
+ };
+ };
+};
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -1138,6 +1138,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \
mt7986b-emmc-rfb.dtb \
mt7987a-emmc-rfb.dtb \
mt7987a-rfb.dtb \
+ mt7987a-routerich_be7200.dtb \
mt7987a-sd-rfb.dtb \
mt7988-rfb.dtb \
mt7988-sd-rfb.dtb \
--- /dev/null
+++ b/arch/arm/dts/mt7987a-routerich_be7200-u-boot.dtsi
@@ -0,0 +1,84 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2025
+ * Author: Mikhail Zhilkin <csharper2005@gmail.com>
+ */
+
+#include "mt7987a-u-boot.dtsi"
+#include "mt7987-netsys-u-boot.dtsi"
+
+/ {
+ model = "Routerich BE7200";
+ compatible = "routerich,be7200",
+ "mediatek,mt7987";
+};
+
+&eth0 {
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&mdio0_pins>;
+ phy-mode = "2500base-x";
+ mediatek,switch = "auto";
+ reset-gpios = <&pio 42 GPIO_ACTIVE_HIGH>;
+
+ fixed-link {
+ speed = <2500>;
+ full-duplex;
+ pause;
+ };
+};
+
+&spi0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi0_flash_pins>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "okay";
+ must_tx;
+ enhance_timing;
+ dma_ext;
+ ipm_design;
+ support_quad;
+ tick_dly = <2>;
+ sample_sel = <0>;
+
+ spi_nand@0 {
+ compatible = "spi-nand";
+ reg = <0>;
+ spi-max-frequency = <52000000>;
+ spi-rx-bus-width = <4>;
+ spi-tx-bus-width = <4>;
+
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "BL2";
+ reg = <0x0 0x100000>;
+ };
+
+ partition@100000 {
+ label = "u-boot-env (unused)";
+ reg = <0x100000 0x80000>;
+ };
+
+ partition@180000 {
+ label = "Factory";
+ reg = <0x180000 0x400000>;
+ };
+
+ partition@580000 {
+ label = "FIP";
+ reg = <0x580000 0x200000>;
+ };
+
+ partition@780000 {
+ label = "ubi";
+ reg = <0x780000 0x1f880000>;
+ compatible = "linux,ubi";
+ };
+ };
+ };
+};

View file

@ -27,7 +27,16 @@ define U-Boot/ev23x71a
UBOOT_CONFIG:=mchp_lan969x
endef
UBOOT_TARGETS:= ev23x71a
define U-Boot/tactical-1000
NAME:=Novarq Tactical 1000
BUILD_DEVICES:=novarq_tactical-1000
BUILD_SUBTARGET:=lan969x
UBOOT_CONFIG:=mchp_lan969x
endef
UBOOT_TARGETS:= \
ev23x71a \
tactical-1000
define Build/InstallDev
$(INSTALL_DIR) $(STAGING_DIR_IMAGE)

View file

@ -137,14 +137,14 @@ endef
define U-Boot/OLIMEX_A13_SOM
BUILD_SUBTARGET:=cortexa8
NAME:=Olimex A13 SOM
BUILD_DEVICES:=olimex_a13-olimex-som
BUILD_DEVICES:=olimex_a13-olinuxino
endef
define U-Boot/licheepi_nano
BUILD_SUBTARGET:=arm926ejs
NAME:=LicheePi Nano
UENV:=f1c
BUILD_DEVICES:=licheepi-nano
BUILD_DEVICES:=licheepi_licheepi-nano
endef
define U-Boot/Linksprite_pcDuino
@ -268,7 +268,7 @@ define U-Boot/popstick
BUILD_SUBTARGET:=arm926ejs
NAME:=PopStick
UENV:=f1c
BUILD_DEVICES:=popstick-v1.1
BUILD_DEVICES:=sourceparts_popstick-v1.1
endef
define U-Boot/libretech_all_h3_cc_h5
@ -319,13 +319,13 @@ endef
define U-Boot/bananapi_m2_plus_h3
BUILD_SUBTARGET:=cortexa7
NAME:=Bananapi M2 Plus H3
BUILD_DEVICES:=sinovoip_bananapi-m2-plus
BUILD_DEVICES:=sinovoip_bpi-m2-plus
endef
define U-Boot/Sinovoip_BPI_M3
BUILD_SUBTARGET:=cortexa7
NAME:=Bananapi M3
BUILD_DEVICES:=sinovoip_bananapi-m3
BUILD_DEVICES:=sinovoip_bpi-m3
endef
define U-Boot/sopine_baseboard
@ -385,19 +385,19 @@ endef
define U-Boot/Bananapi_M2_Ultra
BUILD_SUBTARGET:=cortexa7
NAME:=Bananapi M2 Ultra
BUILD_DEVICES:=sinovoip_bananapi-m2-ultra
BUILD_DEVICES:=sinovoip_bpi-m2-ultra
endef
define U-Boot/bananapi_m2_berry
BUILD_SUBTARGET:=cortexa7
NAME:=Bananapi M2 Berry
BUILD_DEVICES:=sinovoip_bananapi-m2-berry
BUILD_DEVICES:=sinovoip_bpi-m2-berry
endef
define U-Boot/bananapi_p2_zero
BUILD_SUBTARGET:=cortexa7
NAME:=Bananapi P2 Zero
BUILD_DEVICES:=sinovoip_bananapi-p2-zero
BUILD_DEVICES:=sinovoip_bpi-p2-zero
endef

View file

@ -28,6 +28,7 @@ asus,zenwifi-bt8-ubootmod|\
cmcc,a10-ubootmod|\
comfast,cf-wr632ax-ubootmod|\
cudy,tr3000-v1-ubootmod|\
cudy,wbr3000uax-v1-ubootmod|\
h3c,magic-nx30-pro|\
imou,hx21|\
jcg,q30-pro|\
@ -41,6 +42,7 @@ nokia,ea0326gmp|\
openwrt,one|\
qihoo,360t7|\
routerich,ax3000-ubootmod|\
routerich,be7200|\
snr,snr-cpe-ax2|\
tplink,tl-xdr4288|\
tplink,tl-xdr6086|\
@ -134,6 +136,7 @@ teltonika,rutc50)
ubootenv_add_mtd "u-boot-env" "0x0" "0x10000" "0x10000"
;;
tplink,archer-ax80-v1|\
tplink,archer-ax80-v1-eu|\
tplink,be450)
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000" "8"
;;

View file

@ -20,9 +20,13 @@ ocedo,panda)
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000"
ubootenv_add_uci_config "/dev/mtd2" "0x0" "0x20000" "0x20000"
;;
watchguard,firebox-t10)
watchguard,firebox-t10|\
watchguard,firebox-t15)
ubootenv_add_uci_config "$(find_mtd_part 'u-boot-env')" "0x0" "0x2000" "0x10000"
;;
watchguard,xtm330)
ubootenv_add_uci_config "/dev/mtd4" "0x0" "0x10000" "0x10000"
;;
aerohive,hiveap-330)
ubootenv_add_uci_config "$(find_mtd_part 'u-boot-env')" "0x0" "0x20000" "0x10000"
;;

View file

@ -19,6 +19,7 @@ glinet,gl-b3000)
linksys,mr5500|\
linksys,mx2000|\
linksys,mx5500|\
linksys,mx6200|\
linksys,spnmx56)
ubootenv_add_mtd "u_env" "0x0" "0x40000" "0x20000"
;;

View file

@ -6,9 +6,9 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=$(PROJECT_GIT)/project/firmware/qca-wireless.git
PKG_SOURCE_DATE:=2025-11-15
PKG_SOURCE_VERSION:=7c6b7545f69a3ef3ddaaff68fc97e9e172117e2e
PKG_MIRROR_HASH:=ac77840bafd111b3cc3d6cfc7a3b770fdaabb929209c38cd2109be2efd575dae
PKG_SOURCE_DATE:=2025-12-16
PKG_SOURCE_VERSION:=10eddd6f1cbabd1972a71526d979033325f958c6
PKG_MIRROR_HASH:=1fd55a5cf582f131a371d70de5919b7e54c6ecdc078991dd8a2d21469976c12f
PKG_FLAGS:=nonshared
include $(INCLUDE_DIR)/package.mk
@ -55,6 +55,7 @@ ALLWIFIBOARDS:= \
linksys_mx4200 \
linksys_mx5300 \
linksys_mx5500 \
linksys_mx6200 \
linksys_mx8500 \
linksys_spnmx56 \
linksys_whw03 \
@ -63,6 +64,7 @@ ALLWIFIBOARDS:= \
netgear_lbr20 \
netgear_rax120v2 \
netgear_rbk20 \
netgear_rbk40 \
netgear_sxk80 \
netgear_wax214 \
netgear_wax218 \
@ -79,7 +81,7 @@ ALLWIFIBOARDS:= \
tplink_deco-x80-5g \
tplink_eap610-outdoor \
tplink_eap620hd-v1 \
tplink_eap623od-hd-v1 \
tplink_eap623-outdoor-hd-v1 \
tplink_eap625-outdoor-hd-v1 \
tplink_eap660hd-v1 \
tplink_archer-c59-v1 \
@ -234,6 +236,7 @@ $(eval $(call generate-ipq-wifi-package,linksys_mx2000,Linksys MX2000))
$(eval $(call generate-ipq-wifi-package,linksys_mx4200,Linksys MX4200))
$(eval $(call generate-ipq-wifi-package,linksys_mx5300,Linksys MX5300))
$(eval $(call generate-ipq-wifi-package,linksys_mx5500,Linksys MX5500))
$(eval $(call generate-ipq-wifi-package,linksys_mx6200,Linksys MX6200))
$(eval $(call generate-ipq-wifi-package,linksys_mx8500,Linksys MX8500))
$(eval $(call generate-ipq-wifi-package,linksys_spnmx56,Linksys SPNMX56))
$(eval $(call generate-ipq-wifi-package,linksys_whw03,Linksys WHW03))
@ -242,6 +245,7 @@ $(eval $(call generate-ipq-wifi-package,meraki_z3,Meraki Z3))
$(eval $(call generate-ipq-wifi-package,netgear_lbr20,Netgear LBR20))
$(eval $(call generate-ipq-wifi-package,netgear_rax120v2,Netgear RAX120v2))
$(eval $(call generate-ipq-wifi-package,netgear_rbk20,Netgear RBK20))
$(eval $(call generate-ipq-wifi-package,netgear_rbk40,Netgear RBK40))
$(eval $(call generate-ipq-wifi-package,netgear_sxk80,Netgear SXK80))
$(eval $(call generate-ipq-wifi-package,netgear_wax214,Netgear WAX214))
$(eval $(call generate-ipq-wifi-package,netgear_wax218,Netgear WAX218))
@ -258,7 +262,7 @@ $(eval $(call generate-ipq-wifi-package,spectrum_sax1v1k,Spectrum SAX1V1K))
$(eval $(call generate-ipq-wifi-package,tplink_deco-x80-5g,TP-Link Deco X80-5G))
$(eval $(call generate-ipq-wifi-package,tplink_eap610-outdoor,TPLink EAP610-Outdoor))
$(eval $(call generate-ipq-wifi-package,tplink_eap620hd-v1,TP-Link EAP620 HD v1))
$(eval $(call generate-ipq-wifi-package,tplink_eap623od-hd-v1,TP-Link EAP623-Outdoor HD v1))
$(eval $(call generate-ipq-wifi-package,tplink_eap623-outdoor-hd-v1,TP-Link EAP623-Outdoor HD v1))
$(eval $(call generate-ipq-wifi-package,tplink_eap625-outdoor-hd-v1,TP-Link EAP625-Outdoor HD v1))
$(eval $(call generate-ipq-wifi-package,tplink_eap660hd-v1,TP-Link EAP660 HD v1))
$(eval $(call generate-ipq-wifi-package,tplink_archer-c59-v1,TP-Link Archer C59 V1))

View file

@ -219,7 +219,7 @@ $(eval $(call BuildPackage,iwlwifi-firmware-ax411))
Package/iwlwifi-firmware-be200 = $(call Package/firmware-default,Intel BE200 firmware)
define Package/iwlwifi-firmware-be200/install
$(INSTALL_DIR) $(1)/lib/firmware
$(INSTALL_DATA) $(PKG_BUILD_DIR)/intel/iwlwifi/iwlwifi-gl-c0-fm-c0-98.ucode $(1)/lib/firmware
$(INSTALL_DATA) $(PKG_BUILD_DIR)/intel/iwlwifi/iwlwifi-gl-c0-fm-c0-101.ucode $(1)/lib/firmware
$(INSTALL_DATA) $(PKG_BUILD_DIR)/intel/iwlwifi/iwlwifi-gl-c0-fm-c0.pnvm $(1)/lib/firmware
endef
$(eval $(call BuildPackage,iwlwifi-firmware-be200))

View file

@ -34,7 +34,7 @@ define KernelPackage/ath10k-ct
$(PKG_BUILD_DIR)/ath10k$(CT_KVER)/ath10k_pci.ko \
$(PKG_BUILD_DIR)/ath10k$(CT_KVER)/ath10k_core.ko
AUTOLOAD:=$(call AutoProbe,ath10k_pci)
PROVIDES:=kmod-ath10k
PROVIDES:=@kmod-ath10k-any
VARIANT:=regular
endef

View file

@ -0,0 +1,14 @@
Fixes leaking the ethernet FCS into the frame payload on the RX
path.
--- a/dcdp/ptm_tc.c
+++ b/dcdp/ptm_tc.c
@@ -923,7 +923,7 @@ static void ptm_fw_init(struct ptm_ep_pr
rx_gitf_cfg.rx_inserted_bytes_1h = 0;
rx_gitf_cfg.rx_inserted_bytes_2l = 0;
rx_gitf_cfg.rx_inserted_bytes_2h = 0;
- rx_gitf_cfg.rx_len_adj = -2;
+ rx_gitf_cfg.rx_len_adj = is_bonding ? -2 : -6;
for (i = 0; i < 4; i++) {
dst_addr = __RX_GIF0_CFG_STATS_CFG +
(i * DW_SZ(rx_gitf_cfg));

View file

@ -624,11 +624,7 @@ define KernelPackage/crypto-lib-curve25519
FILES:= \
$(LINUX_DIR)/lib/crypto/libcurve25519.ko \
$(LINUX_DIR)/lib/crypto/libcurve25519-generic.ko
$(call AddDepends/crypto,+PACKAGE_kmod-crypto-kpp:kmod-crypto-kpp)
endef
define KernelPackage/crypto-lib-curve25519/config
imply PACKAGE_kmod-crypto-kpp
$(call AddDepends/crypto,+kmod-crypto-kpp)
endef
ifndef CONFIG_TARGET_uml
@ -661,11 +657,7 @@ define KernelPackage/crypto-lib-poly1305
KCONFIG:=CONFIG_CRYPTO_LIB_POLY1305
HIDDEN:=1
FILES:=$(LINUX_DIR)/lib/crypto/libpoly1305.ko
$(call AddDepends/crypto,+PACKAGE_kmod-crypto-hash:kmod-crypto-hash)
endef
define KernelPackage/crypto-lib-poly1305/config
imply PACKAGE_kmod-crypto-hash
$(call AddDepends/crypto,+kmod-crypto-hash)
endef
ifndef CONFIG_TARGET_uml

View file

@ -493,6 +493,25 @@ endef
$(eval $(call KernelPackage,pmbus-core))
define KernelPackage/pmbus-sensors
TITLE:=Generic PMBus devices monitoring support
KCONFIG:=CONFIG_SENSORS_PMBUS
FILES:=$(LINUX_DIR)/drivers/hwmon/pmbus/pmbus.ko
AUTOLOAD:=$(call AutoProbe,pmbus)
$(call AddDepends/hwmon,+kmod-pmbus-core)
endef
define KernelPackage/pmbus-sensors/description
Kernel modules for generic PMBus devices,
including but not limited to ADP4000, BMR310, BMR453,
BMR454, BMR456, BMR457, BMR458, BMR480, BMR490, BMR491, BMR492,
MAX20796, MDT040, NCP4200, NCP4208, PDT003, PDT006, PDT012,
TPS40400, TPS544B20, TPS544B25, TPS544C20, TPS544C25, and UDT020.
endef
$(eval $(call KernelPackage,pmbus-sensors))
define KernelPackage/pmbus-zl6100
TITLE:=Intersil / Zilker Labs ZL6100 hardware monitoring
KCONFIG:=CONFIG_SENSORS_ZL6100

View file

@ -621,6 +621,23 @@ endef
$(eval $(call KernelPackage,phy-aquantia))
define KernelPackage/phy-motorcomm
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Motorcomm Ethernet PHYs
DEPENDS:=+kmod-libphy
KCONFIG:=CONFIG_MOTORCOMM_PHY
FILES:=$(LINUX_DIR)/drivers/net/phy/motorcomm.ko
AUTOLOAD:=$(call AutoLoad,18,motorcomm,1)
endef
define KernelPackage/phy-motorcomm/description
Supports the Motorcomm 8511/8521/8531/8531S/8821 Ethernet PHYs
endef
$(eval $(call KernelPackage,phy-motorcomm))
define KernelPackage/dsa
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Distributed Switch Architecture support
@ -1207,6 +1224,7 @@ define KernelPackage/r8169
CONFIG_R8169_LEDS=y
FILES:=$(LINUX_DIR)/drivers/net/ethernet/realtek/r8169.ko
AUTOLOAD:=$(call AutoProbe,r8169,1)
DEFAULT_VARIANT:=1
endef
define KernelPackage/r8169/description

View file

@ -1654,3 +1654,68 @@ define KernelPackage/packet-diag
endef
$(eval $(call KernelPackage,packet-diag))
define KernelPackage/team
SUBMENU:=$(NETWORK_SUPPORT_MENU)
TITLE:=Ethernet team driver
KCONFIG:=CONFIG_NET_TEAM
FILES:=$(LINUX_DIR)/drivers/net/team/team.ko
AUTOLOAD:=$(call AutoProbe,team)
endef
$(eval $(call KernelPackage,team))
define KernelPackage/team-mode-broadcast
SUBMENU:=$(NETWORK_SUPPORT_MENU)
TITLE:=Broadcast mode support
DEPENDS:=kmod-team
KCONFIG:=CONFIG_NET_TEAM_MODE_BROADCAST
FILES:=$(LINUX_DIR)/drivers/net/team/team_mode_broadcast.ko
AUTOLOAD:=$(call AutoProbe,team_mode_broadcast)
endef
$(eval $(call KernelPackage,team-mode-broadcast))
define KernelPackage/team-mode-roundrobin
SUBMENU:=$(NETWORK_SUPPORT_MENU)
TITLE:=Round-robin mode support
DEPENDS:=kmod-team
KCONFIG:=CONFIG_NET_TEAM_MODE_ROUNDROBIN
FILES:=$(LINUX_DIR)/drivers/net/team/team_mode_roundrobin.ko
AUTOLOAD:=$(call AutoProbe,team_mode_roundrobin)
endef
$(eval $(call KernelPackage,team-mode-roundrobin))
define KernelPackage/team-mode-random
SUBMENU:=$(NETWORK_SUPPORT_MENU)
TITLE:=Random mode support
DEPENDS:=kmod-team
KCONFIG:=CONFIG_NET_TEAM_MODE_RANDOM
FILES:=$(LINUX_DIR)/drivers/net/team/team_mode_random.ko
AUTOLOAD:=$(call AutoProbe,team_mode_random)
endef
$(eval $(call KernelPackage,team-mode-random))
define KernelPackage/team-mode-activebackup
SUBMENU:=$(NETWORK_SUPPORT_MENU)
TITLE:=Active-backup mode support
DEPENDS:=kmod-team
KCONFIG:=CONFIG_NET_TEAM_MODE_ACTIVEBACKUP
FILES:=$(LINUX_DIR)/drivers/net/team/team_mode_activebackup.ko
AUTOLOAD:=$(call AutoProbe,team_mode_activebackup)
endef
$(eval $(call KernelPackage,team-mode-activebackup))
define KernelPackage/team-mode-loadbalance
SUBMENU:=$(NETWORK_SUPPORT_MENU)
TITLE:=Load-balance mode support
DEPENDS:=kmod-team
KCONFIG:=CONFIG_NET_TEAM_MODE_LOADBALANCE
FILES:=$(LINUX_DIR)/drivers/net/team/team_mode_loadbalance.ko
AUTOLOAD:=$(call AutoProbe,team_mode_loadbalance)
endef
$(eval $(call KernelPackage,team-mode-loadbalance))

View file

@ -154,6 +154,24 @@ endef
$(eval $(call KernelPackage,usb-gadget-hid))
define KernelPackage/usb-gadget-fs
TITLE:=USB FunctionFS Gadget Support
KCONFIG:=CONFIG_USB_FUNCTIONFS \
CONFIG_USB_FUNCTIONFS_ETH=n \
CONFIG_USB_FUNCTIONFS_RNDIS=n
FILES:= \
$(LINUX_DIR)/drivers/usb/gadget/legacy/g_ffs.ko \
$(LINUX_DIR)/drivers/usb/gadget/function/usb_f_fs.ko
AUTOLOAD:=$(call AutoLoad,52,usb_f_fs)
$(call AddDepends/usbgadget,+kmod-usb-lib-composite +kmod-dma-buf)
endef
define KernelPackage/usb-gadget-fs/description
Kernel support for USB FunctionFS Gadget.
endef
$(eval $(call KernelPackage,usb-gadget-fs))
define KernelPackage/usb-gadget-ehci-debug
TITLE:=USB EHCI debug port Gadget support
KCONFIG:=\

View file

@ -265,7 +265,7 @@ This module adds support for wireless adapters based on
Atheros USB AR9271 and AR7010 family of chipsets.
endef
define KernelPackage/ath10k
define KernelPackage/ath10k/Default
$(call KernelPackage/mac80211/Default)
TITLE:=Atheros 802.11ac wireless cards support
URL:=https://wireless.wiki.kernel.org/en/users/drivers/ath10k
@ -276,7 +276,12 @@ define KernelPackage/ath10k
$(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath10k/ath10k_pci.ko
AUTOLOAD:=$(call AutoProbe,ath10k_core ath10k_pci)
MODPARAMS.ath10k_core:=frame_mode=2
endef
define KernelPackage/ath10k
$(call KernelPackage/ath10k/Default)
VARIANT:=regular
DEFAULT_VARIANT:=1
endef
define KernelPackage/ath10k/description
@ -299,9 +304,10 @@ define KernelPackage/ath10k/config
endef
define KernelPackage/ath10k-smallbuffers
$(call KernelPackage/ath10k)
$(call KernelPackage/ath10k/Default)
TITLE+= (small buffers for low-RAM devices)
VARIANT:=smallbuffers
PROVIDES:=@kmod-ath10k-any
endef
define KernelPackage/ath11k

View file

@ -1,164 +0,0 @@
From d890c6d602307c9297df12c7d0287f9ffd26208b Mon Sep 17 00:00:00 2001
From: Sriram R <srirrama@codeaurora.org>
Date: Wed, 12 May 2021 19:21:09 +0530
Subject: [PATCH] ath11k: poll reo status ring for IPQ5018
Currently reo status interrupts are not received
due to wrong mapping of the reo status interrupt
line in IPQ5018.
Hence, until the mapping is resolved in HW, use
polling to reap the reo status ring. Rather than
a period timer to reap the ring, the timer is
triggered only on sending a reo command with
status request.
Without proper reaping of the ring, backpressure
and ring full issues are seen in multi client test
setups which leads to flooding the console with
error messages reporting failure to send reo cmds.
Can be reverted once HW solution is available.
Signed-off-by: Sriram R <srirrama@codeaurora.org>
---
--- a/drivers/net/wireless/ath/ath11k/core.c
+++ b/drivers/net/wireless/ath/ath11k/core.c
@@ -729,6 +729,7 @@ static struct ath11k_hw_params ath11k_hw
.support_fw_mac_sequence = false,
.support_dual_stations = false,
.pdev_suspend = false,
+ .reo_status_poll = true,
},
{
.name = "qca2066 hw2.1",
--- a/drivers/net/wireless/ath/ath11k/dp.c
+++ b/drivers/net/wireless/ath/ath11k/dp.c
@@ -350,12 +350,66 @@ void ath11k_dp_stop_shadow_timers(struct
ath11k_dp_shadow_stop_timer(ab, &ab->dp.reo_cmd_timer);
}
+static void ath11k_dp_handle_reo_status_timer(struct timer_list *timer)
+{
+ struct ath11k_dp *dp = from_timer(dp, timer, reo_status_timer);
+ struct ath11k_base *ab = dp->ab;
+
+ spin_lock_bh(&dp->reo_cmd_lock);
+ dp->reo_status_timer_running = false;
+ spin_unlock_bh(&dp->reo_cmd_lock);
+
+ ath11k_dp_process_reo_status(ab);
+}
+
+void ath11k_dp_start_reo_status_timer(struct ath11k_base *ab)
+{
+ struct ath11k_dp *dp = &ab->dp;
+
+ if (!ab->hw_params.reo_status_poll)
+ return;
+
+ spin_lock_bh(&dp->reo_cmd_lock);
+ if (dp->reo_status_timer_running) {
+ spin_unlock_bh(&dp->reo_cmd_lock);
+ return;
+ }
+ dp->reo_status_timer_running = true;
+ spin_unlock_bh(&dp->reo_cmd_lock);
+
+ mod_timer(&dp->reo_status_timer, jiffies +
+ msecs_to_jiffies(ATH11K_REO_STATUS_POLL_TIMEOUT_MS));
+}
+
+static void ath11k_dp_stop_reo_status_timer(struct ath11k_base *ab)
+{
+ struct ath11k_dp *dp = &ab->dp;
+
+ if (!ab->hw_params.reo_status_poll)
+ return;
+
+ del_timer_sync(&dp->reo_status_timer);
+ dp->reo_status_timer_running = false;
+}
+
+static void ath11k_dp_init_reo_status_timer(struct ath11k_base *ab)
+{
+ struct ath11k_dp *dp = &ab->dp;
+
+ if (!ab->hw_params.reo_status_poll)
+ return;
+
+ timer_setup(&dp->reo_status_timer,
+ ath11k_dp_handle_reo_status_timer, 0);
+}
+
static void ath11k_dp_srng_common_cleanup(struct ath11k_base *ab)
{
struct ath11k_dp *dp = &ab->dp;
int i;
ath11k_dp_stop_shadow_timers(ab);
+ ath11k_dp_stop_reo_status_timer(ab);
ath11k_dp_srng_cleanup(ab, &dp->wbm_desc_rel_ring);
ath11k_dp_srng_cleanup(ab, &dp->tcl_cmd_ring);
ath11k_dp_srng_cleanup(ab, &dp->tcl_status_ring);
@@ -377,6 +431,8 @@ static int ath11k_dp_srng_common_setup(s
int i, ret;
u8 tcl_num, wbm_num;
+ ath11k_dp_init_reo_status_timer(ab);
+
ret = ath11k_dp_srng_setup(ab, &dp->wbm_desc_rel_ring,
HAL_SW2WBM_RELEASE, 0, 0,
DP_WBM_RELEASE_RING_SIZE);
--- a/drivers/net/wireless/ath/ath11k/dp.h
+++ b/drivers/net/wireless/ath/ath11k/dp.h
@@ -46,6 +46,8 @@ struct dp_rx_tid {
#define DP_MON_PURGE_TIMEOUT_MS 100
#define DP_MON_SERVICE_BUDGET 128
+#define ATH11K_REO_STATUS_POLL_TIMEOUT_MS 10
+
struct dp_reo_cache_flush_elem {
struct list_head list;
struct dp_rx_tid data;
@@ -287,6 +289,10 @@ struct ath11k_dp {
spinlock_t reo_cmd_lock;
struct ath11k_hp_update_timer reo_cmd_timer;
struct ath11k_hp_update_timer tx_ring_timer[DP_TCL_NUM_RING_MAX];
+
+ /* reo status timer and flags */
+ struct timer_list reo_status_timer;
+ bool reo_status_timer_running;
};
/* HTT definitions */
@@ -1690,5 +1696,6 @@ void ath11k_dp_shadow_init_timer(struct
struct ath11k_hp_update_timer *update_timer,
u32 interval, u32 ring_id);
void ath11k_dp_stop_shadow_timers(struct ath11k_base *ab);
+void ath11k_dp_start_reo_status_timer(struct ath11k_base *ab);
#endif
--- a/drivers/net/wireless/ath/ath11k/dp_tx.c
+++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
@@ -788,6 +788,10 @@ int ath11k_dp_tx_send_reo_cmd(struct ath
if (cmd_num == 0)
return -EINVAL;
+ /* Trigger reo status polling if required */
+ if (cmd->flag & HAL_REO_CMD_FLG_NEED_STATUS)
+ ath11k_dp_start_reo_status_timer(ab);
+
if (!cb)
return 0;
--- a/drivers/net/wireless/ath/ath11k/hw.h
+++ b/drivers/net/wireless/ath/ath11k/hw.h
@@ -233,6 +233,7 @@ struct ath11k_hw_params {
bool support_fw_mac_sequence;
bool support_dual_stations;
bool pdev_suspend;
+ bool reo_status_poll;
};
struct ath11k_hw_ops {

View file

@ -0,0 +1,19 @@
diff --git a/backport-include/linux/hrtimer.h b/backport-include/linux/hrtimer.h
index 3c351922c81d..d865dbf42e9b 100644
--- a/backport-include/linux/hrtimer.h
+++ b/backport-include/linux/hrtimer.h
@@ -17,12 +17,14 @@ static inline enum hrtimer_restart hrtimer_dummy_timeout(struct hrtimer *unused)
return HRTIMER_NORESTART;
}
+#if LINUX_VERSION_IS_LESS(6,12,64)
static inline void
hrtimer_update_function(struct hrtimer *timer,
enum hrtimer_restart (*function)(struct hrtimer *))
{
timer->function = function;
}
+#endif /* < 6.12.64 */
static inline void
hrtimer_setup(struct hrtimer *timer, enum hrtimer_restart (*function)(struct hrtimer *),

View file

@ -21,7 +21,7 @@ define KernelPackage/r8101
DEPENDS:=@PCI_SUPPORT +kmod-libphy
FILES:=$(PKG_BUILD_DIR)/src/r8101.ko
AUTOLOAD:=$(call AutoProbe,r8101,1)
PROVIDES:=kmod-r8169
PROVIDES:=@kmod-r8169-any
endef
define Build/Compile

View file

@ -21,7 +21,7 @@ define KernelPackage/r8125
DEPENDS:=@PCI_SUPPORT +kmod-libphy
FILES:=$(PKG_BUILD_DIR)/src/r8125.ko
AUTOLOAD:=$(call AutoProbe,r8125,1)
PROVIDES:=kmod-r8169
PROVIDES:=@kmod-r8169-any
VARIANT:=regular
PKG_MAKE_FLAGS += CONFIG_ASPM=n
endef

View file

@ -21,7 +21,7 @@ define KernelPackage/r8126
DEPENDS:=@PCI_SUPPORT +kmod-libphy
FILES:=$(PKG_BUILD_DIR)/src/r8126.ko
AUTOLOAD:=$(call AutoProbe,r8126,1)
PROVIDES:=kmod-r8169
PROVIDES:=@kmod-r8169-any
VARIANT:=regular
endef

View file

@ -21,7 +21,7 @@ define KernelPackage/r8127
DEPENDS:=@PCI_SUPPORT +kmod-libphy
FILES:=$(PKG_BUILD_DIR)/src/r8127.ko
AUTOLOAD:=$(call AutoProbe,r8127,1)
PROVIDES:=kmod-r8169
PROVIDES:=@kmod-r8169-any
VARIANT:=regular
endef

View file

@ -21,7 +21,7 @@ define KernelPackage/r8168
DEPENDS:=@PCI_SUPPORT +kmod-libphy
FILES:=$(PKG_BUILD_DIR)/src/r8168.ko
AUTOLOAD:=$(call AutoProbe,r8168,1)
PROVIDES:=kmod-r8169
PROVIDES:=@kmod-r8169-any
VARIANT:=regular
endef

View file

@ -28,7 +28,7 @@ define KernelPackage/rtl8812au-ct
FILES:=\
$(PKG_BUILD_DIR)/rtl8812au.ko
AUTOLOAD:=$(call AutoProbe,rtl8812au)
PROVIDES:=kmod-rtl8812au
PROVIDES:=@kmod-rtl8812au-any
endef
NOSTDINC_FLAGS := \

View file

@ -51,7 +51,6 @@ define Package/libelf
$(call Package/elfutils/Default)
DEPENDS:=$(INTL_DEPENDS) +zlib
TITLE+= (libelf)
PROVIDES:=libelf1
endef
ifeq ($(CONFIG_BUILD_NLS),y)

View file

@ -6,12 +6,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=libcap
PKG_VERSION:=2.77
PKG_VERSION:=2.69
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/linux/libs/security/linux-privs/libcap2
PKG_HASH:=897bc18b44afc26c70e78cead3dbb31e154acc24bee085a5a09079a88dbf6f52
PKG_HASH:=f311f8f3dad84699d0566d1d6f7ec943a9298b28f714cae3c931dfd57492d7eb
PKG_MAINTAINER:=Paul Wassi <p.wassi@gmx.at>
PKG_LICENSE:=GPL-2.0-only

View file

@ -1,27 +0,0 @@
From 542d7d86ecd2129dd5fe7e5b31ba307304f5b319 Mon Sep 17 00:00:00 2001
From: "Andrew G. Morgan" <morgan@kernel.org>
Date: Mon, 10 Nov 2025 18:26:34 -0800
Subject: [PATCH] Revert "libcap: Add build ldflags to _makenames rule"
This reverts commit c3ddf45d9afaab85d3b7db0dc7bfd1aafb8fde50.
The details of what this broke are here:
https://bugzilla.kernel.org/show_bug.cgi?id=220691#c2
Signed-off-by: Andrew G. Morgan <morgan@kernel.org>
---
libcap/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/libcap/Makefile
+++ b/libcap/Makefile
@@ -80,7 +80,7 @@ $(PSXTITLE).pc: $(PSXTITLE).pc.in
$< >$@
_makenames: _makenames.c cap_names.list.h
- $(BUILD_CC) $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $< -o $@ $(BUILD_LDFLAGS)
+ $(BUILD_CC) $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $< -o $@
cap_names.h: _makenames
./_makenames > cap_names.h

View file

@ -57,7 +57,10 @@ CONFIGURE_VARS += \
bash_cv_termcap_lib=libncursesw
TARGET_CFLAGS += $(FPIC)
HOST_CFLAGS += $(FPIC)
TARGET_LDFLAGS += $(FPIC)
HOST_CFLAGS += $(HOST_FPIC)
HOST_LDFLAGS += $(HOST_FPIC)
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include

View file

@ -781,8 +781,9 @@ else
endif
$(eval $(call BuildPackage,libc))
$(eval $(call BuildPackage,libgcc))
# libc depends on knowing libgcc's ABI, so it needs to be evaluated first
$(eval $(call BuildPackage,libc))
$(eval $(call BuildPackage,libatomic))
$(eval $(call BuildPackage,libquadmath))
$(eval $(call BuildPackage,libstdcpp))

View file

@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=uclient
PKG_RELEASE=1
PKG_RELEASE=2
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=$(PROJECT_GIT)/project/uclient.git
@ -34,7 +34,8 @@ define Package/uclient-fetch
CATEGORY:=Network
TITLE:=Tiny wget replacement using libuclient
ALTERNATIVES:=200:/usr/bin/wget:/bin/uclient-fetch
PROVIDES:=wget
DEFAULT_VARIANT:=1
PROVIDES:=@wget-any
DEPENDS:=+libuclient
endef

View file

@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=netifd
PKG_RELEASE:=1
PKG_RELEASE:=3
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=$(PROJECT_GIT)/project/netifd.git

View file

@ -3,6 +3,7 @@
[ -x /sbin/udhcpc ] || exit 0
. /lib/functions.sh
. /lib/functions/network.sh
. ../netifd-proto.sh
. /lib/config/uci.sh
init_proto "$@"
@ -37,11 +38,11 @@ proto_dhcp_get_default_clientid() {
local iface="$1"
local duid
local iaid="0"
local iaid
[ -e "/sys/class/net/$iface/ifindex" ] && iaid="$(cat "/sys/class/net/$iface/ifindex")"
duid="$(uci_get network @globals[0] dhcp_default_duid)"
[ -n "$duid" ] && printf "ff%08x%s" "$iaid" "$duid"
network_generate_iface_iaid iaid "$iface"
duid="$(uci_get network @globals[0] dhcp_default_duid)"
[ -n "$duid" ] && printf "ff%s%s" "$iaid" "$duid"
}
proto_dhcp_setup() {
@ -66,6 +67,7 @@ proto_dhcp_setup() {
[ "$norelease" = 1 ] && norelease="" || norelease="-R"
[ -z "$clientid" ] && clientid="$(proto_dhcp_get_default_clientid "$iface")"
[ -n "$clientid" ] && clientid="-x 0x3d:${clientid//:/}"
[ -n "$vendorid" ] && append dhcpopts "-x 0x3c:$(echo -n "$vendorid" | hexdump -ve '1/1 "%02x"')"
[ -n "$iface6rd" ] && proto_export "IFACE6RD=$iface6rd"
[ "$iface6rd" != 0 -a -f /lib/netifd/proto/6rd.sh ] && append dhcpopts "-O 212"
[ -n "$zone6rd" ] && proto_export "ZONE6RD=$zone6rd"
@ -76,6 +78,16 @@ proto_dhcp_setup() {
# Request classless route option (see RFC 3442) by default
[ "$classlessroute" = "0" ] || append dhcpopts "-O 121"
# Avoid sending duplicate Option 60 values
local emptyvendorid
case "$dhcpopts" in
*"-x 0"[xX]*"3"[cC]":"* |\
*"-x 60:"* |\
*"-x vendor:"*)
emptyvendorid=1
;;
esac
proto_export "INTERFACE=$config"
proto_run_command "$config" udhcpc \
-p /var/run/udhcpc-$iface.pid \
@ -83,7 +95,7 @@ proto_dhcp_setup() {
-f -t 0 -i "$iface" \
${ipaddr:+-r ${ipaddr/\/*/}} \
${hostname:+-x "hostname:$hostname"} \
${vendorid:+-V "$vendorid"} \
${emptyvendorid:+-V ""} \
$clientid $defaultreqopts $broadcast $norelease $dhcpopts
}

View file

@ -288,14 +288,22 @@ function setup() {
wdev_data[v.config.ifname] = config;
}
for (let ifname in active_ifnames) {
if (!wdev_data[ifname])
continue;
let if_config = {
[ifname]: wdev_data[ifname]
};
system(`ucode /usr/share/hostap/wdev.uc ${data.phy}${data.phy_suffix} set_config '${if_config}'`);
}
if (fs.access('/usr/sbin/wpa_supplicant', 'x'))
supplicant.setup(supplicant_data, data);
if (fs.access('/usr/sbin/hostapd', 'x'))
hostapd.setup(data);
system(`ucode /usr/share/hostap/wdev.uc ${data.phy}${data.phy_suffix} set_config '${printf("%J", wdev_data)}' ${join(' ', active_ifnames)}`);
if (length(supplicant_data) > 0)
supplicant.start(data);

View file

@ -25,7 +25,8 @@ function print_assoclist(stations) {
printf(', %s', flags);
printf('%10d Pkts.\n', bitrate.packets);
}
printf(`\texpected throughput: ${station.expected_throughput}\n\n`);
let expected_throughput = station.expected_throughput;
printf(`\texpected throughput: ${expected_throughput == 'unknown' ? 'unknown' : expected_throughput + ' MBit/s'}\n\n`);
}
}

View file

@ -534,10 +534,6 @@
"type": "number",
"default": 1
},
"no_probe_resp_if_max_sta": {
"description": "Do not answer probe requests if iface_max_num_sta was reached",
"type": "boolean"
},
"noscan": {
"description": "Do not scan for overlapping BSSs in HT40+/- mode.",
"type": "boolean",

View file

@ -424,8 +424,7 @@
},
"ieee80211k": {
"description": "Enables Radio Resource Measurement (802.11k) support",
"type": "boolean",
"default": true
"type": "boolean"
},
"ieee80211r": {
"description": "Enables fast BSS transition (802.11r) support.",
@ -605,11 +604,8 @@
"type": "boolean"
},
"mcast_rate": {
"description": "Allowed multicast rates",
"type": "array",
"items": {
"type": "number"
}
"description": "Allowed multicast rate",
"type": "number"
},
"mesh_auto_open_plinks": {
"type": "boolean"
@ -765,6 +761,10 @@
"description": "Network Authentication Type",
"type": "string"
},
"no_probe_resp_if_max_sta": {
"description": "Do not answer probe requests if iface_max_num_sta was reached",
"type": "boolean"
},
"ocv": {
"description": "Operating Channel Validation",
"type": "number",
@ -932,18 +932,15 @@
},
"rrm_beacon_report": {
"description": "Enable beacon report via radio measurements",
"type": "boolean",
"default": true
"type": "boolean"
},
"rrm_neighbor_report": {
"description": "Enable neighbor report via radio measurements",
"type": "boolean",
"default": true
"type": "boolean"
},
"rnr": {
"description": "Enable reduced neighbor reporting",
"type": "boolean",
"default": true
"type": "boolean"
},
"roaming_consortium": {
"description": "Roaming Consortium List",

View file

@ -169,6 +169,10 @@ function format_rate(rate) {
return rate ? sprintf('%.01f', rate / 10.0) : 'unknown';
}
function format_expected_throughput(rate) {
return rate ? sprintf('%.01f', rate / 1000.0) : 'unknown';
}
function format_mgmt_key(key) {
switch(+key) {
case 1:
@ -312,7 +316,7 @@ function dbm2quality(dbm) {
}
function hwmodelist(name) {
const mode = { 'HT*': 'n', 'VHT*': 'ac', 'HE*': 'ax' };
const mode = { 'HT*': 'n', 'VHT*': 'ac', 'HE*': 'ax', 'EHT*': 'be' };
let iface = ifaces[name];
let phy = board_data.wlan?.['phy' + iface.wiphy];
if (!phy || !iface.radio?.band)
@ -352,7 +356,7 @@ export function assoclist(dev) {
packets: station.sta_info.tx_packets ?? 0,
flags: assoc_flags(station.sta_info.tx_bitrate ?? {}),
},
expected_throughput: station.sta_info.expected_throughput ?? 'unknown',
expected_throughput: format_expected_throughput(station.sta_info.expected_throughput ?? 0),
};
ret[sta.mac] = sta;
}

View file

@ -59,7 +59,7 @@ function iface_setup(config) {
'wds_sta', 'wds_bridge', 'snoop_iface', 'vendor_elements', 'nas_identifier', 'radius_acct_interim_interval',
'ocv', 'beacon_prot', 'spp_amsdu', 'multicast_to_unicast', 'preamble', 'proxy_arp', 'per_sta_vif', 'mbo',
'bss_transition', 'wnm_sleep_mode', 'wnm_sleep_mode_no_keys', 'qos_map_set', 'max_listen_int',
'dtim_period', 'wmm_enabled', 'start_disabled', 'na_mcast_to_ucast',
'dtim_period', 'wmm_enabled', 'start_disabled', 'na_mcast_to_ucast', 'no_probe_resp_if_max_sta',
]);
}
@ -166,7 +166,7 @@ function iface_auth_type(config) {
if (config.radius_das_client && config.radius_das_secret) {
set_default(config, 'radius_das_port', 3799);
set_default(config, 'radius_das_client', `${config.radius_das_client} ${config.radius_das_secret}`);
config.radius_das_client = config.radius_das_client + ' ' + config.radius_das_secret;
}
set_default(config, 'eapol_version', config.wpa & 1);

View file

@ -489,7 +489,7 @@ function generate(config) {
append_vars(config, [ 'airtime_mode' ]);
/* assoc/thresholds */
append_vars(config, [ 'rssi_reject_assoc_rssi', 'rssi_reject_assoc_timeout', 'rssi_ignore_probe_request', 'iface_max_num_sta', 'no_probe_resp_if_max_sta' ]);
append_vars(config, [ 'rssi_reject_assoc_rssi', 'rssi_reject_assoc_timeout', 'rssi_ignore_probe_request', 'iface_max_num_sta' ]);
/* ACS / Radar*/
if (!phy_features.radar_background || config.band != '5g')

View file

@ -4,6 +4,9 @@ import { append_value, log } from 'wifi.common';
import * as fs from 'fs';
export function parse_encryption(config, dev_config) {
if (!config.encryption)
return;
let encryption = split(config.encryption, '+', 2);
config.wpa = 0;
@ -13,10 +16,11 @@ export function parse_encryption(config, dev_config) {
config.wpa = v;
break;
}
if (!config.wpa)
config.wpa_pairwise = null;
config.wpa_pairwise = (config.hw_mode == 'ad') ? 'GCMP' : 'CCMP';
config.wpa_pairwise = null;
if (config.wpa)
config.wpa_pairwise = (config.hw_mode == 'ad') ? 'GCMP' : 'CCMP';
config.auth_type = encryption[0] ?? 'none';
let wpa3_pairwise = config.wpa_pairwise;

View file

@ -488,7 +488,11 @@ function wdev_set_data(wdev, vif, vlan, data)
cur_type = "vlan";
}
wdev.handler_data[cur.name] = {
let key = cur.name;
if (cur_type == "vlan")
key = vif.name + "/" + vlan.name;
wdev.handler_data[key] = {
...cur,
...data,
type: cur_type,
@ -545,9 +549,13 @@ function hotplug(name, add)
}
}
function get_status_data(wdev, vif)
function get_status_data(wdev, vif, parent_vif)
{
let hdata = wdev.handler_data[vif.name];
let key = vif.name;
if (parent_vif)
key = parent_vif.name + "/" + vif.name;
let hdata = wdev.handler_data[key];
let data = {
section: vif.name,
config: vif.config
@ -561,7 +569,7 @@ function get_status_vlans(wdev, vif)
{
let vlans = [];
for (let vlan in vif.vlan)
push(vlans, get_status_data(wdev, vlan));
push(vlans, get_status_data(wdev, vlan, vif));
return vlans;
}

View file

@ -192,8 +192,9 @@ function config_init(uci)
}
for (let name, data in sections.vlan) {
let ifaces = parse_array(data.iface);
for (let iface, iface_vifs in vifs) {
if (data.iface && data.iface != iface)
if (length(ifaces) && index(ifaces, iface) < 0)
continue;
for (let vif in iface_vifs) {
@ -214,8 +215,9 @@ function config_init(uci)
}
for (let name, data in sections.station) {
let ifaces = parse_array(data.iface);
for (let iface, iface_vifs in vifs) {
if (data.iface && data.iface != iface)
if (length(ifaces) && index(ifaces, iface) < 0)
continue;
for (let vif in iface_vifs) {

View file

@ -78,7 +78,13 @@ for (let phy_name, phy in board.wlan) {
band_name = lc(band_name);
let country, defaults, num_global_macaddr;
let country, encryption, defaults, num_global_macaddr;
if (band_name == '6g') {
country = '00';
encryption = 'owe';
} else {
encryption = 'open';
}
if (board.wlan.defaults) {
defaults = board.wlan.defaults.ssids?.[band_name]?.ssid ? board.wlan.defaults.ssids?.[band_name] : board.wlan.defaults.ssids?.all;
country = board.wlan.defaults.country;
@ -105,7 +111,7 @@ set ${si}.device='${name}'
set ${si}.network='lan'
set ${si}.mode='ap'
set ${si}.ssid='${defaults?.ssid || "OpenWrt"}'
set ${si}.encryption='${defaults?.encryption || "none"}'
set ${si}.encryption='${defaults?.encryption || encryption}'
set ${si}.key='${defaults?.key || ""}'
`);

View file

@ -44,7 +44,12 @@ function iface_start(wdev)
push(cmd, key, wdev[key]);
system(cmd);
} else if (wdev.mode == "mesh") {
let cmd = [ "iw", "dev", ifname, "mesh", "join", wdev.ssid, "freq", wdev.freq, htmode ];
let cmd = [ "iw", "dev", ifname, "mesh", "join", wdev.ssid ];
if (wdev.freq) {
push(cmd, "freq", wdev.freq);
if (htmode && htmode != "NOHT")
push(cmd, htmode);
}
for (let key in [ "basic-rates", "mcast-rate", "beacon-interval" ])
if (wdev[key])
push(cmd, key, wdev[key]);

View file

@ -57,6 +57,11 @@ function rename_phy_by_name(phys, name, rename) {
wiphy: idx,
wiphy_name: name
});
let prev_idx = index(phys, prev_name);
if (prev_idx >= 0)
phys[prev_idx] = name;
return true;
}

View file

@ -12,9 +12,9 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=$(PROJECT_GIT)/project/odhcp6c.git
PKG_SOURCE_DATE:=2025-12-09
PKG_SOURCE_VERSION:=5212a1019d75db47a03c95c12e385e4625dda3d0
PKG_MIRROR_HASH:=9c6501ea995c685e4e1b65ae74cbaecb6f787a493fdd5f8d3d095aeb0466b418
PKG_SOURCE_DATE:=2025-12-29
PKG_SOURCE_VERSION:=699cc61568b6816783d17d57dda4ef7851198528
PKG_MIRROR_HASH:=e8a42c429ed83660ccc04d69e3bcbf0056d8e96e08caff0f14518150b89ec352
PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
PKG_LICENSE:=GPL-2.0

View file

@ -42,7 +42,7 @@ proto_dhcpv6_init_config() {
proto_config_add_boolean sourcefilter
proto_config_add_boolean keep_ra_dnslifetime
proto_config_add_int "ra_holdoff"
proto_config_add_boolean verbose
proto_config_add_int 'verbose:range(0, 7)'
proto_config_add_boolean dynamic
}
@ -116,7 +116,7 @@ proto_dhcpv6_setup() {
[ -n "$ra_holdoff" ] && append opts "-m$ra_holdoff"
[ "$verbose" = "1" ] && append opts "-v"
[ -n "$verbose" ] && append opts "-l$verbose"
json_for_each_item proto_dhcpv6_add_sendopts sendopts opts

View file

@ -51,6 +51,7 @@ endef
define Package/dnsmasq
$(call Package/dnsmasq/Default)
VARIANT:=nodhcpv6
DEFAULT_VARIANT:=1
endef
define Package/dnsmasq-dhcpv6

View file

@ -8,14 +8,14 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=dropbear
PKG_VERSION:=2025.88
PKG_RELEASE:=4
PKG_VERSION:=2025.89
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:= \
https://matt.ucc.asn.au/dropbear/releases/ \
https://dropbear.nl/mirror/releases/
PKG_HASH:=783f50ea27b17c16da89578fafdb6decfa44bb8f6590e5698a4e4d3672dc53d4
PKG_HASH:=0d1f7ca711cfc336dc8a85e672cab9cfd8223a02fe2da0a4a7aeb58c9e113634
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE libtomcrypt/LICENSE libtommath/LICENSE

View file

@ -1,70 +0,0 @@
From 5cc0127000db5f7567b54d0495fb91a8e452fe09 Mon Sep 17 00:00:00 2001
From: Konstantin Demin <rockdrilla@gmail.com>
Date: Fri, 9 May 2025 22:39:35 +0300
Subject: Fix proxycmd without netcat
fixes e5a0ef27c2 "Execute multihop commands directly, no shell"
Signed-off-by: Konstantin Demin <rockdrilla@gmail.com>
Forwarded: https://github.com/mkj/dropbear/pull/363
---
src/cli-main.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
--- a/src/cli-main.c
+++ b/src/cli-main.c
@@ -77,7 +77,11 @@ int main(int argc, char ** argv) {
}
#if DROPBEAR_CLI_PROXYCMD
- if (cli_opts.proxycmd || cli_opts.proxyexec) {
+ if (cli_opts.proxycmd
+#if DROPBEAR_CLI_MULTIHOP
+ || cli_opts.proxyexec
+#endif
+ ) {
cli_proxy_cmd(&sock_in, &sock_out, &proxy_cmd_pid);
if (signal(SIGINT, kill_proxy_sighandler) == SIG_ERR ||
signal(SIGTERM, kill_proxy_sighandler) == SIG_ERR ||
@@ -110,11 +114,13 @@ static void shell_proxy_cmd(const void *
dropbear_exit("Failed to run '%s'\n", cmd);
}
+#if DROPBEAR_CLI_MULTIHOP
static void exec_proxy_cmd(const void *unused) {
(void)unused;
run_command(cli_opts.proxyexec[0], cli_opts.proxyexec, ses.maxfd);
dropbear_exit("Failed to run '%s'\n", cli_opts.proxyexec[0]);
}
+#endif
static void cli_proxy_cmd(int *sock_in, int *sock_out, pid_t *pid_out) {
char * cmd_arg = NULL;
@@ -145,9 +151,11 @@ static void cli_proxy_cmd(int *sock_in,
cmd_arg = m_malloc(shell_cmdlen);
snprintf(cmd_arg, shell_cmdlen, "exec %s", cli_opts.proxycmd);
exec_fn = shell_proxy_cmd;
+#if DROPBEAR_CLI_MULTIHOP
} else {
/* No shell */
exec_fn = exec_proxy_cmd;
+#endif
}
ret = spawn_command(exec_fn, cmd_arg, sock_out, sock_in, NULL, pid_out);
@@ -159,6 +167,7 @@ static void cli_proxy_cmd(int *sock_in,
cleanup:
m_free(cli_opts.proxycmd);
m_free(cmd_arg);
+#if DROPBEAR_CLI_MULTIHOP
if (cli_opts.proxyexec) {
char **a = NULL;
for (a = cli_opts.proxyexec; *a; a++) {
@@ -166,6 +175,7 @@ cleanup:
}
m_free(cli_opts.proxyexec);
}
+#endif
}
static void kill_proxy_sighandler(int UNUSED(signo)) {

View file

@ -1,47 +0,0 @@
From 91877a0337f432fd29bb1041be5599ea706e5de6 Mon Sep 17 00:00:00 2001
From: Konstantin Demin <rockdrilla@gmail.com>
Date: Thu, 31 Jul 2025 14:13:35 +0300
Subject: fix build without pubkey options
fixes:
- 98ef42a856 "Don't set pubkey_info directly in checkpubkey_line"
- 62ea53c1e5 "Implement no-touch-required and verify-requred for authorized_keys file"
Signed-off-by: Konstantin Demin <rockdrilla@gmail.com>
Forwarded: https://github.com/mkj/dropbear/pull/374
---
src/svr-authpubkey.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
--- a/src/svr-authpubkey.c
+++ b/src/svr-authpubkey.c
@@ -186,12 +186,14 @@ void svr_auth_pubkey(int valid_user) {
#if DROPBEAR_SK_ECDSA || DROPBEAR_SK_ED25519
key->sk_flags_mask = SSH_SK_USER_PRESENCE_REQD;
+#if DROPBEAR_SVR_PUBKEY_OPTIONS_BUILT
if (ses.authstate.pubkey_options && ses.authstate.pubkey_options->no_touch_required_flag) {
key->sk_flags_mask &= ~SSH_SK_USER_PRESENCE_REQD;
}
if (ses.authstate.pubkey_options && ses.authstate.pubkey_options->verify_required_flag) {
key->sk_flags_mask |= SSH_SK_USER_VERIFICATION_REQD;
}
+#endif /* DROPBEAR_SVR_PUBKEY_OPTIONS */
#endif
/* create the data which has been signed - this a string containing
@@ -513,7 +515,13 @@ static int checkpubkey(const char* keyal
line_num++;
ret = checkpubkey_line(line, line_num, filename, keyalgo, keyalgolen,
- keyblob, keybloblen, &ses.authstate.pubkey_info);
+ keyblob, keybloblen,
+#if DROPBEAR_SVR_PUBKEY_OPTIONS_BUILT
+ &ses.authstate.pubkey_info
+#else
+ NULL
+#endif
+ );
if (ret == DROPBEAR_SUCCESS) {
break;
}

View file

@ -1,24 +0,0 @@
From 4bc1e18948d0918bcb1338a5f1e7856478abf985 Mon Sep 17 00:00:00 2001
From: Konstantin Demin <rockdrilla@gmail.com>
Date: Fri, 8 Aug 2025 10:02:44 +0300
Subject: fix missing depends for sntrup761x25519-sha512
fixes 440b7b5c4f "Add sntrup761x25519-sha512 post-quantum key exchange"
Signed-off-by: Konstantin Demin <rockdrilla@gmail.com>
Forwarded: https://github.com/mkj/dropbear/pull/375
---
src/sysoptions.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/src/sysoptions.h
+++ b/src/sysoptions.h
@@ -207,7 +207,7 @@
/* LTC SHA384 depends on SHA512 */
#define DROPBEAR_SHA512 ((DROPBEAR_SHA2_512_HMAC) || (DROPBEAR_ECC_521) \
|| (DROPBEAR_SHA384) || (DROPBEAR_DH_GROUP16) \
- || (DROPBEAR_ED25519))
+ || (DROPBEAR_ED25519) || (DROPBEAR_SNTRUP761))
#define DROPBEAR_DH_GROUP14 ((DROPBEAR_DH_GROUP14_SHA256) || (DROPBEAR_DH_GROUP14_SHA1))

View file

@ -1,65 +0,0 @@
From a8610f7b98ad4b33ab723602863d60d462fa5af2 Mon Sep 17 00:00:00 2001
From: Matt Johnston <matt@ucc.asn.au>
Date: Sun, 10 Aug 2025 19:46:01 +0800
Subject: Don't limit channel window to 500MB
Previously the channel window and increments were limited to 500MB.
That is incorrect and causes stuck connections if peers advertise
a large window, then don't send an increment within the first 500MB.
That's seen with SSH.NET https://github.com/sshnet/SSH.NET/issues/1671
---
src/common-channel.c | 17 ++++++++++-------
src/sysoptions.h | 3 ---
2 files changed, 10 insertions(+), 10 deletions(-)
--- a/src/common-channel.c
+++ b/src/common-channel.c
@@ -858,17 +858,21 @@ void common_recv_msg_channel_data(struct Channel *channel, int fd,
void recv_msg_channel_window_adjust() {
struct Channel * channel;
- unsigned int incr;
+ unsigned int incr, newwin;
channel = getchannel();
incr = buf_getint(ses.payload);
- TRACE(("received window increment %d", incr))
- incr = MIN(incr, TRANS_MAX_WIN_INCR);
+ TRACE(("received window increment %u", incr))
- channel->transwindow += incr;
- channel->transwindow = MIN(channel->transwindow, TRANS_MAX_WINDOW);
-
+ newwin = channel->transwindow + incr;
+ if (newwin < channel->transwindow) {
+ /* Integer overflow, clamp it at maximum.
+ * Behaviour may be unexpected, senders MUST NOT overflow per rfc4254. */
+ TRACE(("overflow window, prev %u", channel->transwindow));
+ newwin = 0xffffffff;
+ }
+ channel->transwindow = newwin;
}
/* Increment the incoming data window for a channel, and let the remote
@@ -906,7 +910,6 @@ void recv_msg_channel_open() {
remotechan = buf_getint(ses.payload);
transwindow = buf_getint(ses.payload);
- transwindow = MIN(transwindow, TRANS_MAX_WINDOW);
transmaxpacket = buf_getint(ses.payload);
transmaxpacket = MIN(transmaxpacket, TRANS_MAX_PAYLOAD_LEN);
--- a/src/sysoptions.h
+++ b/src/sysoptions.h
@@ -243,9 +243,6 @@
#define RECV_MAX_PACKET_LEN (MAX(35000, ((RECV_MAX_PAYLOAD_LEN)+100)))
/* for channel code */
-#define TRANS_MAX_WINDOW 500000000 /* 500MB is sufficient, stopping overflow */
-#define TRANS_MAX_WIN_INCR 500000000 /* overflow prevention */
-
#define RECV_WINDOWEXTEND (opts.recv_window / 3) /* We send a "window extend" every
RECV_WINDOWEXTEND bytes */
#define MAX_RECV_WINDOW (10*1024*1024) /* 10 MB should be enough */

View file

@ -1,6 +1,6 @@
--- a/src/svr-chansession.c
+++ b/src/svr-chansession.c
@@ -984,12 +984,12 @@ static void execchild(const void *user_d
--- a/src/svr-auth.c
+++ b/src/svr-auth.c
@@ -510,9 +510,9 @@ void svr_switch_user(void) {
/* We can only change uid/gid as root ... */
if (getuid() == 0) {
@ -11,6 +11,11 @@
+ ses.authstate.pw_gid) < 0))) {
dropbear_exit("Error changing user group");
}
@@ -534,7 +534,7 @@ void svr_switch_user(void) {
}
#endif
- if (setuid(ses.authstate.pw_uid) < 0) {
+ if ((ses.authstate.pw_uid != 0) && (setuid(ses.authstate.pw_uid) < 0)) {
dropbear_exit("Error changing user");

View file

@ -1,6 +1,6 @@
--- a/configure.ac
+++ b/configure.ac
@@ -86,54 +86,6 @@ AC_ARG_ENABLE(harden,
@@ -80,54 +80,6 @@ AC_ARG_ENABLE(harden,
if test "$hardenbuild" -eq 1; then
AC_MSG_NOTICE(Checking for available hardened build flags:)

View file

@ -1,6 +1,6 @@
--- a/configure.ac
+++ b/configure.ac
@@ -44,11 +44,8 @@ fi
@@ -38,11 +38,8 @@ fi
# LTM_CFLAGS is given to ./configure by the user,
# DROPBEAR_LTM_CFLAGS is substituted in the LTM Makefile.in
DROPBEAR_LTM_CFLAGS="$LTM_CFLAGS"

View file

@ -248,6 +248,7 @@ $(call Package/hostapd/Default,$(1))
TITLE+= (WPA-PSK, 11r and 11w)
VARIANT:=basic-mbedtls
DEPENDS+=+PACKAGE_hostapd-basic-mbedtls:libmbedtls
DEFAULT_VARIANT:=1
endef
define Package/hostapd-basic-mbedtls/description
@ -543,6 +544,7 @@ define Package/eapol-test
$(call Package/eapol-test/Default,$(1))
TITLE+= (built-in full)
VARIANT:=supplicant-full-internal
DEFAULT_VARIANT:=1
endef
define Package/eapol-test-openssl

View file

@ -12,9 +12,9 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=$(PROJECT_GIT)/project/odhcpd.git
PKG_MIRROR_HASH:=cce1d4f3c88f4eec0cf8b19429f12e6fc2f47dca9b4d643a31569c1209f8fabc
PKG_SOURCE_DATE:=2025-12-10
PKG_SOURCE_VERSION:=ca00527e5fc3d8d2b8c1a60fbeb6a25e2bf68674
PKG_MIRROR_HASH:=e91eb780beb2f6e501ed35fd03d7b529400d72eba766f16f901103e44b1b6a35
PKG_SOURCE_DATE:=2025-12-18
PKG_SOURCE_VERSION:=0779ee287db5ddb209ae057295a8db0e0a3da4fb
PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
PKG_LICENSE:=GPL-2.0

View file

@ -89,8 +89,6 @@ fi
touch /etc/config/dhcp
. /usr/share/libubox/jshn.sh
json_load "$(cat /etc/board.json)"
json_select network
json_select lan

View file

@ -20,7 +20,7 @@ PKG_SOURCE_VERSION:=9f612dc02c34509f062ed63b60bcc7e937e25178
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
PKG_LICENSE:=BSD-4-Clause
PKG_CPE_ID:=cpe:/a:samba:ppp
PKG_CPE_ID:=cpe:/a:point-to-point_protocol_project:point-to-point_protocol
PKG_ASLR_PIE_REGULAR:=1
PKG_BUILD_DEPENDS:=libpcap

View file

@ -49,10 +49,10 @@ function network_socket_close(data)
function network_rx_cleanup_state(name)
{
for (let name, sub in core.remote_subscribe)
for (let cur, sub in core.remote_subscribe)
delete sub[name];
for (let name, sub in core.remote_publish)
for (let cur, sub in core.remote_publish)
delete sub[name];
}

View file

@ -22,6 +22,7 @@ proto_ncm_init_config() {
proto_config_add_boolean sourcefilter
proto_config_add_boolean delegate
proto_config_add_int profile
proto_config_add_int mtu
proto_config_add_defaults
}
@ -30,8 +31,8 @@ proto_ncm_setup() {
local connect context_type devname devpath finalize ifpath initialize manufacturer setmode
local delegate sourcefilter $PROTO_DEFAULT_OPTIONS
json_get_vars delegate sourcefilter $PROTO_DEFAULT_OPTIONS
local delegate ip4table ip6table mtu sourcefilter $PROTO_DEFAULT_OPTIONS
json_get_vars delegate ip4table ip6table mtu sourcefilter $PROTO_DEFAULT_OPTIONS
local apn auth delay device ifname mode password pdptype pincode profile username
json_get_vars apn auth delay device ifname mode password pdptype pincode profile username
@ -192,9 +193,9 @@ proto_ncm_setup() {
json_add_string ifname "@$interface"
json_add_string proto "dhcp"
proto_add_dynamic_defaults
[ -n "$zone" ] && {
json_add_string zone "$zone"
}
[ -n "$zone" ] && json_add_string zone "$zone"
[ -n "$ip4table" ] && json_add_string ip4table "$ip4table"
json_close_object
ubus call network add_dynamic "$(json_dump)"
}
@ -208,13 +209,18 @@ proto_ncm_setup() {
[ "$delegate" = "0" ] && json_add_boolean delegate "0"
[ "$sourcefilter" = "0" ] && json_add_boolean sourcefilter "0"
proto_add_dynamic_defaults
[ -n "$zone" ] && {
json_add_string zone "$zone"
}
[ -n "$zone" ] && json_add_string zone "$zone"
[ -n "$ip6table" ] && json_add_string ip6table "$ip6table"
json_close_object
ubus call network add_dynamic "$(json_dump)"
}
[ -n "$mtu" -a "$mtu" != 0 ] && {
echo "Setting MTU of $ifname to $mtu"
/sbin/ip link set dev $ifname mtu $mtu
}
[ -n "$finalize" ] && {
eval COMMAND="$finalize" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
echo "Failed to configure modem"

View file

@ -26,22 +26,26 @@ PKG_BUILD_PARALLEL:=1
include $(INCLUDE_DIR)/package.mk
define Package/ethtool
define Package/ethtool/Default
SECTION:=net
CATEGORY:=Network
TITLE:=Display or change ethernet card settings
URL:=http://www.kernel.org/pub/software/network/ethtool/
endef
define Package/ethtool
$(call Package/ethtool/Default)
VARIANT:=tiny
CONFLICTS:=ethtool-full
DEFAULT_VARIANT:=1
endef
define Package/ethtool-full
$(Package/ethtool)
$(call Package/ethtool/Default)
TITLE += (full)
VARIANT:=full
PROVIDES:=ethtool
DEPENDS:=+libmnl
CONFLICTS:=
endef
define Package/ethtool/description

View file

@ -23,17 +23,22 @@ PKG_BUILD_FLAGS:=gc-sections lto
include $(INCLUDE_DIR)/package.mk
define Package/iw
define Package/iw/Default
SECTION:=net
CATEGORY:=Network
TITLE:=cfg80211 interface configuration utility
URL:=http://wireless.kernel.org/en/users/Documentation/iw
DEPENDS:= +libnl-tiny
endef
define Package/iw
$(call Package/iw/Default)
VARIANT:=tiny
DEFAULT_VARIANT:=1
endef
define Package/iw-full
$(Package/iw)
$(call Package/iw/Default)
TITLE += (full version)
VARIANT:=full
PROVIDES:=iw

View file

@ -11,9 +11,9 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=$(PROJECT_GIT)/project/iwinfo.git
PKG_SOURCE_DATE:=2025-11-07
PKG_SOURCE_VERSION:=5f4c213fc59f1a82d9f0140642d668ae2969531b
PKG_MIRROR_HASH:=363e245821d9bc6ffe2cf20f4b51670f1f91928df22a2ffe73a06767f737fb6d
PKG_SOURCE_DATE:=2026-01-14
PKG_SOURCE_VERSION:=f5dd57a84cc31a403a1383dd14944fa2e2b5824a
PKG_MIRROR_HASH:=a9ed29ea9f222d222fc554238e9c79675e1784293685198f759785da9940571f
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
PKG_LICENSE:=GPL-2.0

View file

@ -1,15 +1,14 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=apk
PKG_RELEASE:=1
PKG_RELEASE:=2
PKG_SOURCE_URL=https://gitlab.alpinelinux.org/alpine/apk-tools.git
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2025-12-03
PKG_SOURCE_VERSION:=982c9961ad9e71b4068911329c9d8121cedfd9f7
PKG_MIRROR_HASH:=4fc89e2bbbe10edfaa199b1ca9ace139aa39b43d3de6236e8be8b421d81b334b
PKG_SOURCE_VERSION:=d093f7c198a64bff0cd58afeaf638909fda24ca8
PKG_MIRROR_HASH:=596dffa2fa019be2755433ed210e30593a6a8708346cf31486d6ad8008e47556
PKG_VERSION=3.0.1
PKG_VERSION=3.0.2
PKG_MAINTAINER:=Paul Spooren <mail@aparcar.org>
PKG_LICENSE:=GPL-2.0-only
@ -27,7 +26,7 @@ define Package/apk/default
SECTION:=base
CATEGORY:=Base system
TITLE:=apk package manager
DEPENDS:=+zlib +wget
DEPENDS:=+zlib +wget-any
URL:=$(PKG_SOURCE_URL)
PROVIDES:=apk
endef

View file

@ -1,56 +0,0 @@
From 54385e6dc02ada9ec827b6b79b9359951197fee5 Mon Sep 17 00:00:00 2001
From: Paul Donald <newtwen+gitlab@gmail.com>
Date: Tue, 9 Dec 2025 00:31:27 +0100
Subject: [PATCH] apk: fix compile when using C89
The older standard is more strict, and gives rise to errors:
../src/apk.c: In function 'parse_options':
../src/apk.c:584:4: error: a label can only be part of a statement and a declaration is not a statement
584 | char *arg = opt_parse_arg(&st);
| ^~~~
So move the *arg declaration to function start.
../src/app_mkpkg.c: In function 'mkpkg_setup_compat':
../src/app_mkpkg.c:423:2: error: label at end of compound statement
423 | default:
| ^~~~~~~
add break;
Signed-off-by: Paul Donald <newtwen+gitlab@gmail.com>
---
src/apk.c | 3 ++-
src/app_mkpkg.c | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)
--- a/src/apk.c
+++ b/src/apk.c
@@ -556,6 +556,7 @@ static int parse_options(int argc, char
struct apk_opt_match m;
bool applet_arg_pending = false;
int r;
+ char *arg;
applet = applet_from_arg0(argv[0]);
if (!applet) {
@@ -581,7 +582,7 @@ static int parse_options(int argc, char
case 0:
break;
case OPT_MATCH_NON_OPTION:
- char *arg = opt_parse_arg(&st);
+ arg = opt_parse_arg(&st);
if (applet_arg_pending && strcmp(arg, applet->name) == 0)
applet_arg_pending = false;
else if (arg[0] || !applet || !applet->remove_empty_arguments)
--- a/src/app_mkpkg.c
+++ b/src/app_mkpkg.c
@@ -421,6 +421,7 @@ static void mkpkg_setup_compat(struct mk
case 0: ctx->compat_rootnode = 1; // fallthrough
case 1: ctx->compat_dirnode = 1; // fallthrough
default:
+ break;
}
}

View file

@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=ca-certificates
PKG_VERSION:=20250419
PKG_RELEASE:=1
PKG_RELEASE:=2
PKG_MAINTAINER:=
PKG_LICENSE:=GPL-2.0-or-later MPL-2.0
@ -24,12 +24,14 @@ include $(INCLUDE_DIR)/package.mk
TAR_OPTIONS+= --strip-components 1
TAR_CMD=$(HOST_TAR) -C $(1) $(TAR_OPTIONS)
# ca-certs is deprecated and new packages should use ca-certificates-any if
# they don't need a specific package
define Package/ca-certificates
SECTION:=base
CATEGORY:=Base system
TITLE:=System CA certificates
PKGARCH:=all
PROVIDES:=ca-certs
PROVIDES:=@ca-certs
endef
define Package/ca-bundle
@ -37,7 +39,7 @@ define Package/ca-bundle
CATEGORY:=Base system
TITLE:=System CA certificates as a bundle
PKGARCH:=all
PROVIDES:=ca-certs
PROVIDES:=@ca-certs @ca-certificates-any
endef
define Build/Install

View file

@ -33,7 +33,7 @@ Build/Compile=
ifneq ($(CONFIG_USE_APK),)
define Package/openwrt-keyring/install
$(INSTALL_DIR) $(1)/etc/apk/keys/
$(INSTALL_DATA) $(PKG_BUILD_DIR)/apk/openwrt-snapshots.pem $(1)/etc/apk/keys/
$(INSTALL_DATA) $(PKG_BUILD_DIR)/apk/openwrt-25.12.pem $(1)/etc/apk/keys/
endef
else
define Package/openwrt-keyring/install

View file

@ -50,6 +50,7 @@ define Package/procd
$(call Package/procd/Default)
VARIANT:=default
CONFLICTS:=procd-selinux
DEFAULT_VARIANT:=1
endef
define Package/procd-selinux

View file

@ -31,23 +31,25 @@ HOST_BUILD_DEPENDS:=libubox/host libjson-c/host usign/host
HOST_BUILD_PREFIX:=$(STAGING_DIR_HOST)
PKG_BUILD_DEPENDS:=ucert/host
define Package/ucert-full
SECTION:=base
CATEGORY:=Base system
DEPENDS:=+usign +libubox +libjson-c +libblobmsg-json
TITLE:=OpenWrt certificate generation and verification utility
PROVIDES:=ucert
VARIANT:=full
endef
define Package/ucert
define Package/ucert/Default
SECTION:=base
CATEGORY:=Base system
DEPENDS:=+usign +libubox
endef
define Package/ucert
$(call Package/ucert/Default)
TITLE:=OpenWrt certificate verification utility
PROVIDES:=ucert
CONFLICTS:=ucert-full
VARIANT:=tiny
DEFAULT_VARIANT:=1
endef
define Package/ucert-full
$(call Package/ucert/Default)
TITLE:=OpenWrt certificate generation and verification utility
DEPENDS+=+libjson-c +libblobmsg-json
VARIANT:=full
PROVIDES:=ucert
endef
ifeq ($(BUILD_VARIANT),full)

View file

@ -56,6 +56,7 @@ define Package/busybox
$(call Package/busybox/Default)
CONFLICTS:=busybox-selinux
VARIANT:=default
DEFAULT_VARIANT:=1
endef
define Package/busybox-selinux

View file

@ -98,7 +98,7 @@ export const callctx_error_proto = {
return this.error("NOT_FOUND", msg ?? "Not found", ...args);
},
command_failed: function(msg, ...args) {
return this.error("COMMAND_FAILEDu", msg ?? "Command failed", ...args);
return this.error("COMMAND_FAILED", msg ?? "Command failed", ...args);
},
};

View file

@ -48,6 +48,7 @@ define Package/mkf2fs
$(Package/f2fs-tools/Default)
TITLE:=Utility for creating a Flash-Friendly File System (F2FS)
CONFLICTS:=mkf2fs-selinux
DEFAULT_VARIANT:=1
endef
define Package/mkf2fs-selinux
@ -87,6 +88,7 @@ define Package/libf2fs
ABI_VERSION:=6
CONFLICTS:=libf2fs-selinux
VARIANT:=default
DEFAULT_VARIANT:=1
endef
define Package/libf2fs-selinux

View file

@ -12,9 +12,9 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=https://github.com/jow-/ucode.git
PKG_SOURCE_DATE:=2025-11-19
PKG_SOURCE_VERSION:=48ed18d2532e9197212c34473ab926c7b5e8ac73
PKG_MIRROR_HASH:=34529706bcb413dffb3d73e78fe97971bd2b518c097c86470edadc1ca79a480c
PKG_SOURCE_DATE:=2025-12-01
PKG_SOURCE_VERSION:=f7c2b97a82e8b505bf4b2c0d8883b5116e1960f9
PKG_MIRROR_HASH:=7de6a6d5b3c7392624bccefdc03e2dc61f097b414989eeced29ecc3e020bbd0b
PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
PKG_LICENSE:=ISC
@ -53,6 +53,7 @@ CMAKE_HOST_OPTIONS += \
-DULOOP_SUPPORT=OFF \
-DDEBUG_SUPPORT=ON \
-DLOG_SUPPORT=OFF \
-DZLIB_SUPPORT=ON \
-DDIGEST_SUPPORT=OFF
@ -184,6 +185,14 @@ $(eval $(call UcodeModule, \
digest, DIGEST_SUPPORT, , \
The digest module allows ucode scripts to use libmd digests.))
$(eval $(call UcodeModule, \
io, IO_SUPPORT, , \
The io module allows direct file descriptor read/write (including non-blocking).))
$(eval $(call UcodeModule, \
zlib, ZLIB_SUPPORT, +zlib, \
The zlib module allows ucode scripts to de/compress gzip and zlib formats.))
$(eval $(call BuildPackage,libucode))
$(eval $(call BuildPackage,ucode))

View file

@ -0,0 +1,20 @@
From 165d395ffa2a22e293160b24d4791302a156eab8 Mon Sep 17 00:00:00 2001
From: Rosen Penev <rosenp@gmail.com>
Date: Mon, 8 Dec 2025 12:48:01 -0800
Subject: add include for older kernels
in6.h is needed for some macros. Seems newer kernels include this implicitly.
---
lib/socket.c | 1 +
1 file changed, 1 insertion(+)
--- a/lib/socket.c
+++ b/lib/socket.c
@@ -77,6 +77,7 @@
#include "ucode/platform.h"
#if defined(__linux__)
+# include <linux/in6.h>
# include <linux/if_packet.h>
# include <linux/filter.h>

View file

@ -1,5 +1,5 @@
#
# Copyright (C) 2007-2018 OpenWrt.org
# Copyright (C) 2007-2025 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
@ -8,15 +8,14 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=util-linux
PKG_VERSION:=2.41.2
PKG_VERSION:=2.41.3
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/linux/utils/$(PKG_NAME)/v2.41
PKG_HASH:=6062a1d89b571a61932e6fc0211f36060c4183568b81ee866cf363bce9f6583e
PKG_HASH:=3330d873f0fceb5560b89a7dc14e4f3288bbd880e96903ed9b50ec2b5799e58b
PKG_CPE_ID:=cpe:/a:kernel:util-linux
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
@ -26,7 +25,7 @@ define Package/util-linux/Default
SECTION:=utils
CATEGORY:=Utilities
DEPENDS:= +librt
URL:=http://www.kernel.org/pub/linux/utils/util-linux/
URL:=https://www.kernel.org/pub/linux/utils/util-linux/
endef
define Package/libblkid

View file

@ -45,7 +45,7 @@ pkg_appears_sane() {
arch="$(required_field Architecture)"
if echo "$pkg" | grep '[^a-zA-Z0-9_.+-]'; then
echo "*** Error: Package name $name contains illegal characters, (other than [a-z0-9.+-])" >&2
echo "*** Error: Package name '$pkg' contains illegal characters, (other than [a-z0-9.+-])" >&2
PKG_ERROR=1;
fi

View file

@ -263,6 +263,9 @@ sub parse_package_metadata($) {
/^Default: \s*(.+)\s*$/ and $pkg->{default} = $1;
/^Provides: \s*(.+)\s*$/ and do {
my @vpkg = split /\s+/, $1;
foreach (@vpkg) {
s/^@//;
}
@{$pkg->{provides}} = ($pkg->{name}, @vpkg);
foreach my $vpkg (@vpkg) {
next if ($vpkg eq $pkg->{name});

View file

@ -145,6 +145,32 @@ BUILD_PACKAGES:=$(sort $(DEFAULT_PACKAGES) $($(USER_PROFILE)_PACKAGES) kernel)
BUILD_PACKAGES:=$(filter-out $(filter -%,$(BUILD_PACKAGES)) $(patsubst -%,%,$(filter -%,$(BUILD_PACKAGES))),$(BUILD_PACKAGES))
BUILD_PACKAGES:=$(USER_PACKAGES) $(BUILD_PACKAGES)
BUILD_PACKAGES:=$(filter-out $(filter -%,$(BUILD_PACKAGES)) $(patsubst -%,%,$(filter -%,$(BUILD_PACKAGES))),$(BUILD_PACKAGES))
ifneq ($(CONFIG_USE_APK),)
BUILD_PACKAGES+= \
"base-files=$(BASE_FILES_VERSION)" \
"libc=$(LIBC_VERSION)" \
"kernel=$(KERNEL_VERSION)"
endif
# Get ABI version suffix for a package from an apk index
#
# 1: package name
define GetABISuffix
$(shell $(APK) query --fields tags --match provides $(1) | grep openwrt:abiversion | awk -F= '{print $$2; exit}')
endef
# Format packages by adding an ABI version suffix if found
#
# 1: list of packages
define FormatPackages
$(strip $(foreach pkg,$(strip $(subst ",,$(1))),
$(eval pkg_name:=$(firstword $(subst =, ,$(pkg))))
$(if $(findstring =,$(pkg)),$(eval pkg_ver:==$(lastword $(subst =, ,$(pkg)))))
$(pkg_name)$(call GetABISuffix,$(pkg_name))$(pkg_ver)
))
endef
PACKAGES:=
_call_image: staging_dir/host/.prereq-build
@ -229,10 +255,8 @@ ifeq ($(CONFIG_USE_APK),)
$(OPKG) install $(wildcard $(PACKAGE_DIR)/kernel_*.ipk)
$(OPKG) install $(BUILD_PACKAGES)
else
$(APK) add --arch $(ARCH_PACKAGES) --no-scripts $(BUILD_PACKAGES) \
"base-files=$(BASE_FILES_VERSION)" \
"libc=$(LIBC_VERSION)" \
"kernel=$(KERNEL_VERSION)"
$(eval BUILD_PACKAGES:=$(call FormatPackages,$(BUILD_PACKAGES)))
$(APK) add --arch $(ARCH_PACKAGES) --no-scripts $(BUILD_PACKAGES)
endif
prepare_rootfs: FORCE

Some files were not shown because too many files have changed in this diff Show more