Picks up the two fixes merged in jethome-iot/rtl88x2cs since a2066739:
ae2cc93 makes the rx_ampdu sz_limit init handle an unexpected nss index
instead of indexing past the table, and a2e3fed makes remain_on_channel
and mgmt_tx report the cookie cfg80211 hands them, gated at
KERNEL_VERSION(7, 3, 0) so the 6.12/6.18/7.1/7.2 builds are unchanged.
ARMBIAN_BOARD_CONFIG_REGEX_GENERIC closes its value on either quote
character, greedily. A trailing comment containing an apostrophe or a
quote therefore swallows the rest of the line:
BOARD_NAME="Khadas VIM1S" # don't confuse with VIM1 (S905X)
parses as 'Khadas VIM1S" # don' -- the match runs past the real closing
quote and ends on the apostrophe in "don't". That value rides into
image-info.json and out to every consumer; armbian/autotests names its
NetBox device from BOARD_NAME, so the lab holds a board literally called
'Khadas VIM1S" # don 01'.
Across config/boards this corrupts 14 values on 12 boards, not just the
one name: BOOTPATCHDIR on khadas-vim3/vim3l/odroidn2l, BOOTCONFIG on
radxa-e24c and radxa-nio-12l, BOOT_FDT_FILE on nanopct6-lts, BOOT_SOC and
BOOT_SCENARIO on mixtile-blade3, and more. Builds themselves are fine --
bash sources these files properly -- but the Python info tooling is not.
Fix by cutting the trailing comment before the regex runs: the first '#'
that starts a word and is not inside quotes. Tightening the regex instead
looks tempting but is wrong both ways -- a lazy match with a
backreferenced quote truncates UBOOT_HASH_EXTRA, whose value legitimately
nests quotes inside a command substitution, and staying greedy keeps
nanopct6-lts broken because its comment quotes another .dtb path.
Stripping the comment first leaves both cases alone.
Diffed the real parser against origin/main over every board file: 14
values change, all of them a strict prefix of the old value (trailing
junk removed), and no board gains or loses a variable.
Signed-off-by: Igor Pecovnik <igor@armbian.com>
armbian-resize-filesystem runs with DefaultDependencies=no and
Before=basic.target, so the entire boot waits for it. The script calls
partprobe, which waits for the udev queue to drain. A udev worker that
never finishes its event stalls that queue for the full 180s worker
timeout, and basic.target - together with dbus.service - is delayed by
the same amount.
That delay breaks DNS on the first boot. systemd-resolved is ordered
before sysinit.target, so it starts while dbus is still not up and
never acquires org.freedesktop.resolve1. NetworkManager hands DNS
servers to resolved over D-Bus only, so the DHCP-provided servers never
reach it and name resolution stays dead for the whole session, which is
exactly when armbian-firstrun and apt need it.
Resizing need not run that early: resize2fs operates online on the
mounted rootfs, and the only unit ordered against it is lowmem-mkswap.
Move both units to multi-user.target so a stalled udev queue can no
longer hold up the boot. armbian-firstlogin already waits for queued
jobs through systemctl is-system-running --wait, and the script
disables itself with systemctl disable, which follows the new [Install]
section on its own.
Claude-Session: https://claude.ai/code/session_01SWvjHEYMimjZVj1qy3aR2k
Two rendering bugs on the generated Extension Hooks docs page:
1. The docs formatter emitted the one-line summary as `> <first-comment-line>`.
When a hook's inline doc opened with a `#`-prefixed line (e.g.
btrfs_root_add_subvolumes), that became `> #text` — a level-1 heading inside a
blockquote, which rendered huge and broke the page's table of contents for
every hook after it. Strip a leading `#` from the summary so it can never
become a heading; also guard the body so summary-only hooks emit no trailing
blank.
2. The two btrfs_root_add_subvolumes[_fstab] hook docs were raw shell (comment
lines + example commands), not markdown, so they rendered as run-together
text. Rewrite them as a prose summary + description + a fenced example.
Generated docs are prose (with inline code) as intended; hook doc comments are
markdown and should be written as such.
Signed-off-by: Igor Pecovnik <igor@armbian.com>
Armbian boards are routinely used as routers and VPN endpoints, and the tunnel
drivers are what that needs. They were never decided fleet-wide, so the shipped
configs drifted apart. Across the 122 of them:
NET_IPIP 85 on 7 unset 30 absent
NET_IPGRE 78 on 1 unset 43 absent
NET_IPGRE_DEMUX 79 on 7 unset 36 absent
IPV6_VTI 66 on 10 unset 46 absent
IPV6_SIT_6RD 64 on 10 unset 48 absent
IPV6_GRE 62 on 4 unset 56 absent
IPV6_SIT 54 on 4 unset 64 absent
IPV6_TUNNEL 24 on 8 unset 90 absent
The IPv4 half is nearly universal, the IPv6 half is patchy, and whether a board
can terminate a tunnel came down to which family config it happened to be built
from. Filogic shows the shape of it: edge has IPV6_TUNNEL, current and legacy do
not, while the tree all three build from enables it in the board defconfig.
The IPv6 side is the one that bites. DS-Lite (RFC 6333) terminates an
IPv4-in-IPv6 tunnel on the customer router and needs ip6_tnl. It is the standard
deployment on a large share of European fibre and cable lines, where the carrier
hands out CGNAT-only IPv4 that is not routed, so a board used as a router there
has working IPv6 and no IPv4 at all.
Set from the armbian_kernel_config hook rather than per family, which covers all
three shapes the configs come in -- absent, "is not set", and already enabled --
because scripts/config rewrites the line either way. Verified with the kernel's
own scripts/config against one config of each shape (full .config, minimal
savedefconfig, and one that disables the option outright): all ten apply.
Everything is a module except NET_IPGRE_BROADCAST and IPV6_SIT_6RD, which are
bool options extending a driver rather than separate modules -- they only ever
appear as =y in the shipped configs. Nothing is paid for until a tunnel is
created. Kernels whose dependencies are unmet drop them at olddefconfig, so
families without IPv6 are unaffected. The handful of configs that built one of
these in (=y) are normalised down to a module.
Left out: NET_FOU (foo-over-UDP) is genuinely niche, and WIREGUARD is a VPN
rather than a tunnel driver, already present in 101 of 122.
Supersedes #10568, which enables IPV6_TUNNEL for filogic-current only.
Signed-off-by: Igor Pecovnik <igor@armbian.com>
The onboard MT7530 switch data path was dead on the majority of cold
boots: the ports link at 1G but forward no traffic, so wan/lan get no
DHCP. Root cause is gmac0's TRGMII RX clock failing to lock - a marginal
timing race that hits ~60% of cold boots and that no software reset
recovers deterministically (even a full mtk_soc_eth unbind/rebind only
helps ~40% of the time).
The board's MT7530 declares two CPU ports - port6 (gmac0, TRGMII) and
port5 (gmac1, RGMII). gmac1's plain RGMII path is reliable. Drop port6
and disable the now-unused gmac0 so gmac1/RGMII is the sole CPU port /
DSA conduit. Verified over 20+ cold power cycles: wan/lan come up and
forward (DHCP + gateway + internet, 0% loss) on every cold boot with no
intervention.
Also drop the earlier mtk_eth_soc-pse-reset-single-ppe.patch: it was
based on a wrong hypothesis (re-adding a PSE reset that frank-w had
deliberately removed upstream), did not fix cold boot, and is obsolete
now that the real cause is addressed in the device tree.
Signed-off-by: Igor Pecovnik <igor@armbian.com>
Add armbian.bootdev/armbian.bootdevnum so initramfs hooks can anchor
root/userdata resolution to the disk U-Boot actually loaded the OS from
when several disks carry identical cloned images (duplicate
PARTLABEL/UUID); without the token the first-match scan may assemble
the root from the wrong disk.
The Zero 3W device tree disables the SoC's working on-die RTC and
enables an external hym8563 (on s_twi2) that is not populated on the
board, so every boot starts in 1970 with a probe error and a wrong
clock until NTP syncs (breaking apt on fresh boots, among other things).
- 0009: enable the SoC RTC (allwinner,rtc-v201, driver already =y),
disable the phantom hym8563 node.
- kernel config: point RTC_HCTOSYS_DEVICE and RTC_SYSTOHC_DEVICE at
rtc0 - with the phantom gone the SoC RTC registers as rtc0, so the
kernel both restores the system clock from it at boot and keeps it
updated via the periodic NTP sync.
Verified on hardware: /dev/rtc0 registers, time survives reboots, probe
error gone.
Every autologin console starts the setup at once and flock -n hands it to
whichever ran first. On an image with both HDMI and a serial console that is
usually the one nobody is sitting at: the setup waits for input on an empty
screen, while the session the user is on prints "already running in another
session" and drops to a shell.
Hand it to the session that arrived last instead. The holder names itself in
the lock file and is asked to step aside with SIGTERM, which its trap already
turns into the same clean exit as a power loss: FIRSTLOGIN_SUCCESS stays 0, so
the marker survives and the setup simply runs again in the new session. The
newcomer retries rather than reading the lock file once, so a holder that has
taken the lock but not yet published its pid is displaced on the next pass. A
single console is unaffected, it takes the lock on the first try.
With patching fixed, kernel-x86-edge (7.2.2) reaches the compiler and fails:
drivers/hid/hid-magicmouse.c: In function 'magicmouse_raw_event_usb':
drivers/hid/hid-magicmouse.c:742:21: error: 'nested' undeclared
Linux 7.2 hardened the DOUBLE_REPORT_ID path against unbounded recursion: the
report parser became __magicmouse_raw_event() carrying a 'nested' flag, wrapped
by a thin magicmouse_raw_event(), and the wrapped-report branch refuses to
recurse a second time.
Sub-patch 09/18 of the T2 series splits that very parser into a per-bus handler
plus an input_ops dispatcher. Applied unchanged onto 7.2 it matches the new
__magicmouse_raw_event() and cuts it in the wrong place, with two consequences:
- the "if (nested) return 0;" guard stays behind in the split-out body, which
is now magicmouse_raw_event_usb() and has no such parameter, hence the
build error;
- __magicmouse_raw_event() keeps 'nested' in its signature but its body is
replaced by the ops dispatch, so the flag is silently discarded. Even if it
compiled, the recursion guard would be defeated: the recursive calls pass
true, and nothing reads it.
Rebase 09/18 so the guard moves into the dispatcher. That is the single choke
point every report passes through -- entry via magicmouse_raw_event() with
false, recursion from the DOUBLE_REPORT_ID branch with true -- so checking
"nested && data[0] == DOUBLE_REPORT_ID" there is equivalent to upstream's
check one frame deeper, with a size guard before the data[0] read. Keeping it
out of the handlers means input_ops keeps its 4-argument raw_event signature,
which sub-patches 10, 11, 13 and 4004 all build on; none of them need changes.
Verified by replaying the series over upstream hid-magicmouse.c at 52c36105f76e:
sub-patches 07-14 plus 4004 and 4005 apply with no rejects, 'nested' survives
only inside the dispatcher, all four raw_event handlers still match the ops
signature, and the file has no undefined or duplicated magicmouse_* symbols.
Not compile-tested here -- that needs a full kernel tree.
Signed-off-by: Igor Pecovnik <igor@armbian.com>
kernel-x86-edge (7.2.2) fails patching on sub-patch 12/18 of the T2 series,
"HID: magicmouse: Add .reset_resume for SPI trackpads":
Hunk #1 succeeded at 1429 (offset 74 lines).
Hunk #2 FAILED at 1375.
Linux 7.2 gained its own magicmouse_reset_resume() — a different one, handling
USB Magic Mouse 2 resume via deferred work — along with the matching
.reset_resume entry in magicmouse_driver. So the t2linux patch collides with
upstream on both counts:
- hunk #2 fails because .reset_resume is already in the driver struct, so the
expected ".input_configured," -> "};" context is gone;
- hunk #1 still applies, and that is the more dangerous half: it inserts a
*second* static magicmouse_reset_resume() into the same file. Simply
dropping the failing hunk would trade the patch error for a redefinition
error at compile time.
Fold the SPI branch into the upstream handler instead and drop the
driver-struct hunk as already-upstream. Both behaviours are kept: SPI trackpads
re-request multitouch reports inline on resume, USB Magic Mouse 2 keeps
upstream's deferred schedule_delayed_work(). magicmouse_enable_multitouch() is
forward-declared at the top of the file and BUS_SPI is already used in five
other places there, so no new includes or declarations are needed.
Verified by reconstructing the build state (upstream hid-magicmouse.c at
52c36105f76e with sub-patches 07-11 applied): the original failure reproduces
byte-identically, and with this change sub-patches 07-14 all apply with no
rejects, 12 at zero fuzz and no offset. The result has exactly one
magicmouse_reset_resume() definition and one struct entry.
Note: config/sources/families/uefi-x86.conf re-downloads this series from
t2linux/linux-t2-patches when the patch directory is missing, so the same fix
should go upstream to t2linux to survive a refresh.
Signed-off-by: Igor Pecovnik <igor@armbian.com>
The mt7623 family now targets current 6.18 + edge 7.2, so the
archive/mt7623-7.1 patch directory is no longer selected by any
build - remove it (its two patches, power-key + PSE-reset, already
live in mt7623-6.18 and mt7623-7.2).
Re-ran rewrite-kernel-config against the bumped kernels (KERNEL_BTF=yes
to keep BTF and skip the host-RAM pre-flight): current is unchanged,
edge drops CONFIG_ATALK and CONFIG_DMABUF_SELFTESTS, which are not
offered by the 7.2 kernel.
Signed-off-by: Igor Pecovnik <igor@armbian.com>
Reflect that the DTS patch applies to current 6.18 and edge 7.1/7.2, not
"both ... 6.18, edge 7.1" (addresses a review note). Cosmetic header only.
Signed-off-by: Igor Pecovnik <igor@armbian.com>
With mainline u-boot 2026.07 on SD, current 6.18 / edge 7.2 kernels, and the
onboard MT7530 switch data path fixed (PSE reset for single-PPE mt7623), the
Banana Pi R2 boots and networks end to end. Promote it from community-
supported (.csc) to supported (.conf). Maintainer already set to igorpecovnik.
Signed-off-by: Igor Pecovnik <igor@armbian.com>
The MT7530 DSA switch links up but forwards no data on 6.18/7.1/7.2: user
ports lease nothing and drop all traffic, though management frames reach the
CPU. A driver re-probe of mtk_soc_eth fixes it, isolating the fault to the
frame-engine bring-up. Root cause is upstream e8716b5b0e2e removing the PSE
reset from mtk_open() for multi-PPE SoCs; single-PPE MT7623 needs it.
- add mtk_eth_soc-pse-reset-single-ppe.patch to the mt7623-6.18, -7.1 and
-7.2 kernel dirs: re-add the PSE reset in mtk_open(), gated on ppe_num < 2
so multi-PPE SoCs are unaffected. Verified on hardware: DSA ports now DHCP
and route from boot.
- bump edge target 7.1 -> 7.2.
- carry the shorted-power-key DTS patch into the new mt7623-7.2 dir.
Signed-off-by: Igor Pecovnik <igor@armbian.com>
Two vendor-kernel patches enabling reliable CSI camera capture on the
Orange Pi Zero 3W (tested with IMX219 on CAM1):
- 0007: guard NULL csi_fmt in the VIN CSI stream path. Streaming a
half-negotiated pipeline (sequential v4l2-ctl invocations) previously
dereferenced NULL inside STREAMON and hard-froze the entire SoC.
- 0008: keep BLDO2 (VCC_3V3_CSI, the camera connector rail) always on;
the unused-regulator sweep otherwise kills capture ~30s after boot
while sensor detection keeps working.
Co-authored-by: Alin Ciciu <periqlesfpv@gmail.com>
- `.dts` is copy from rockchip64-7.2
- `recomputer-rk3588_defconfig` is similar to other rk3588 boards, except:
- enable all/most SPI Flash drivers
- enable FUSB302 driver
- `-u-boot.dtsi` just pulls in the generic dtsi + sfc/flash0 bootph
- stores environment in SPI at offset 0xc00000 size 0x20000
- fw_printenv/fw_setenv userspace vs SPI environment
- preboot flashes R/G/B LED (tri-color user LED)
- use mainline AT-F for mainline builds (so HDMI-RX works with mainline kernel)
- keep rkbin blob for vendor builds (although vendor is using rk u-boot for now)
- DeviceTree will be submitted to LKML separately
- identical across v7.1 and v7.2
- board file:
- make way for `edge` by sprinkling "only for vendor" shortcircuits in strategic places
- use a case/esac to gate `aic8800` extension, extra packages, and `recomputer-rk35xx-common.inc` sourcing
- series:
- `dt-bindings: arm: rockchip: Add Seeed Studio reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add USB host to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add USB Type-C to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add DisplayPort to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add PCIe Ethernet to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add M.2 slots to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add HDMI to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add HDMI input to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add analog audio to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add mini PCIe slot to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add 40-pin header to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add cooling fan to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add NPU to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: describe PCIe RTL8125 Ethernet on reComputer RK3588`
- `arm64: dts: rockchip: Name the GPIO lines on Seeed reComputer RK3588`
The fan ships with cooling levels but no thermal trips wired to them,
so the PWM sits at the boot default and the CPU throttles with the fan
barely spinning. Map active trips on the four cpuss and eight gpuss
zones, 40 to 80 degrees with 5 degrees of hysteresis, each stepping the
fan one level up the table, as the 7.0 ROCKNIX tree used to do.
Signed-off-by: SuperKali <hello@superkali.me>
Round-trip the whole sm8750-7.1 series through git so every patch
carries a proper format-patch header and true post-rebase context,
instead of the mixed mbox fragments and stale offsets imported from
the ROCKNIX tree, and restore the original authors and subjects the
round trip had collapsed into the importing commits.
Signed-off-by: SuperKali <hello@superkali.me>
The upstream AYN UCM brings the wcd9395 headphone amp up in CLS_H_ULP
with the compander on, which distorts badly and collapses at high
volume, and its HiFi carries a second Headphones section bound to the
speaker PCM that wins over the real one. Vendor a cleaned-up UCM in
the bsp tree instead of curling the fork zip at build time: a single
Headphones section on PCM 1, a Class-AB HiFi bring-up with HD2
compensation and no compander (the same operating point radxa ships
for the wcd938x Q8B, radxa-pkg/alsa-ucm-conf#18), an entrypoint for
the UEFI card name and slightly higher analog volume.
Signed-off-by: SuperKali <hello@superkali.me>
The integrated jack routing patch resolves the WCD9395 USBSS analog
switch through a qcom,usbss phandle on the codec node, but no dts
ever carried the property so the lookup always came back empty and
the switch never entered audio mode. Add the phandle to the AYN
common dtsi so mechanical jack inserts actually switch the mux.
Signed-off-by: SuperKali <hello@superkali.me>
Trixie still ships a Mesa that predates the Adreno 830, so the desktop
image would run on llvmpipe with no usable GL. Install the GL and
Vulkan stack from trixie-backports in a dedicated hook, and export
FD_MESA_DEBUG=sysmem to dodge the A830 GMEM defect that shows up as
glitches under accelerated browsers.
Signed-off-by: SuperKali <hello@superkali.me>
The ASoC machine driver composes a different card long name when the
kernel is started from GRUB than from the Android boot image, and alsa
ucm only autoloads a conf.d file matching that name. Link the existing
SM8750-AYN entrypoint under the UEFI name as well, mirroring what
ROCKNIX carries downstream.
Signed-off-by: SuperKali <hello@superkali.me>
Bring over the patches ROCKNIX still carries on top of the set imported
in the bringup: the integrated-jack USBSS routing with the HPH PCM HiFi
path, USB-C redriver and probe-defer fixes, the hv-haptics driver with
the rsinput force feedback bridge, UFS support for the SM8750
controller and the thermal, capacity and RTC DT bits. Patches aimed at
other devices (KONKR, Ayaneo) are left out; the collided 0052 rpmhpd
patch is renumbered to 0053.
Signed-off-by: SuperKali <hello@superkali.me>
The stock ABL already exposes UEFI and boots a GRUB image straight off
removable media, so flashing the ROCKNIX ABL is not required and it is
the only part of the bringup that is destructive to the Android side.
Make the GRUB path the default and keep the Android bootimg layout as
an opt-in via WITH_GRUB=no, marked with an -abl image suffix. Bootimg
hooks, qbootctl and the ROCKNIX ABL flasher now ship only on that
variant.
Signed-off-by: SuperKali <hello@superkali.me>
Bootloaders that leave the display block live at ExitBootServices, like
the stock AYN UEFI, make the DPU command-mode panel hang with kickoff
timeouts once the kernel reprograms dispcc on top of that state. Assert
the MDSS core, INT2 and RSCC block resets at probe, hold one frame and
release, so the clocks get programmed like on a cold boot. Needed for
the stock ABL UEFI boot path, harmless where the block is already down.
Signed-off-by: SuperKali <hello@superkali.me>
A fresh image logs root in on tty1, on the serial console and over ssh at
once, and every session runs the setup. Each one killed the other root
shells to get the prompts to itself, so a session could be killed while
sitting at a password prompt and the setup was left unfinished. Take a
lock instead and let the other sessions step aside.