The xmonad package ships two sessions: xmonad.desktop runs the window
manager bare, and gnome-flashback-xmonad.desktop runs it inside a GNOME
Flashback session, which is the one that gets a session dbus, a polkit
agent and session management. Autologin hardcoded the bare one, so the
flashback session was never selected even where it was usable.
Pick it when it can actually start, and keep the old behaviour otherwise.
Its TryExec is gnome-flashback, from gnome-session-flashback, which is
not installed on every image, so both the .desktop and the binary are
checked. Images without it are unaffected.
Signed-off-by: Igor Pecovnik <igor@armbian.com>
dialog draws its borders through the ncurses alternate charset: the
VT100 switch ESC(0 followed by letters. PuTTY (default TERM=xterm),
mosh and hterm ignore that switch in UTF-8 mode, so the borders show
up as letters (lqqqk, x, mqqqj).
Set NCURSES_NO_UTF8_ACS=1 for the dialog call. ncurses then emits
U+2500 box-drawing characters directly; every UTF-8 terminal renders
those. Outside UTF-8 locales ncurses ignores the variable, so
non-UTF-8 terminals keep the alternate charset.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- adapt levels similar to vendor (never spins down, spins up to about half duty)
- use fan-recommended frequency
- introduce proper regulator vcc5v0_fan, drive it instead of vcc5v0_sys
- pull the tacho pin up so RPM values are not garbage
Adds automation that keeps the "Work in progress" label in sync with a PR's
review state: present while a review requests changes or any conversation is
unresolved, cleared once neither holds.
GitHub Actions has no trigger for a review conversation being resolved, and
pull_request_review from a fork gets a read-only GITHUB_TOKEN, so a single
pull_request_review-triggered workflow cannot do this. Use a hybrid instead:
- .github/scripts/wip-label.js -- shared logic (reviewDecision + paginated
unresolved reviewThreads -> add/remove the label), so the event and cron
paths can never drift.
- maintenance-listen-review-wip.yml -- listens on pull_request_review with a
read-only token (fork-safe) and just records the PR number as an artifact.
- maintenance-label-wip.yml -- workflow_run worker fired by the listener; runs
in the default-branch context with a write token, checks out the trusted
script and syncs the one PR. Per-PR concurrency, newer reviews supersede.
- maintenance-label-wip-sweep.yml -- scheduled backstop that recomputes the
label for every open PR, catching conversation resolution (which has no
event) and any missed events.
Hardening: the listener artifact is fork-controlled, so the worker downloads it
into RUNNER_TEMP (never the checkout) so it cannot overwrite the trusted script
before github-script runs it; the sweep pins checkout to the default branch so a
workflow_dispatch on another branch cannot run that branch's script; both set
persist-credentials: false.
Also drop "Work in progress" from the blanket removal list in
maintenance-label-on-approval.yml (now owned by this automation) and quote
$GITHUB_OUTPUT there (shellcheck SC2086).
Signed-off-by: Igor Pecovnik <igor@armbian.com>
* sunxi-6.18: dwmac-sun8i: reset the EMAC when opening, not when probing
Fixes Ethernet dying after every warm reboot on Orange Pi Zero 3 and
other H616/H618 boards with an external PHY: "EMAC reset timeout", probe
fails with -110, eth0 never appears. Cold boot always works.
The interface teardown powers the PHY down (phy_detach -> phy_suspend ->
BMCR_PDOWN), and these boards have no PHY reset line and an always-on
shared supply, so nothing powers it back up across a warm reboot. A
powered-down PHY drives no receive clock, and the MAC soft reset is
sequenced on that clock.
Moves the soft reset into sun8i_dwmac_dma_reset(), the stmmac_dma_ops
->reset hook the driver already registers, which runs at ndo_open --
after phylib has attached and resumed the PHY.
Submitted upstream:
https://lore.kernel.org/netdev/20260822045641.19282-1-hartmnn.p@gmail.com/
Signed-off-by: Pedro Santos <hartmnn.p@gmail.com>
* sunxi-7.1: dwmac-sun8i: reset the EMAC when opening, not when probing
edge (7.1) carries the same defect as current (6.18): sun8i_dwmac_dma_reset()
does not reset anything, and the external-PHY branch of the probe does the
soft reset before phylib has powered the PHY back up.
Verified against mainline v6.12, v7.1 and v7.2 -- all three have the probe
reset and the no-op dma reset hook, so legacy, current and edge are all
affected.
The change is byte-identical to the 6.18 one apart from an upstream comment
typo fix (previoulsy -> previously) and line numbers. Applies on top of the
sunxi-7.1 series with zero fuzz.
Signed-off-by: Pedro Santos <hartmnn.p@gmail.com>
---------
Signed-off-by: Pedro Santos <hartmnn.p@gmail.com>
#10313 isolated the ttyGS0 getty in a private device namespace to stop
it deadlocking across USB gadget re-bind cycles. That namespace mounts a
tmpfs over /dev holding only systemd's minimal node set; DeviceAllow=
filters cgroup device access but never creates the ttyGS0 node there.
systemd opens TTYPath=/dev/ttyGS0 before entering the namespace, so
agetty inherits working fds and prints the prompt. util-linux login
however cannot map stdin back to a /dev path via ttyname(), dies with
"FATAL: bad tty", and Restart=always turns that into an endless login
loop over the Type-C serial console.
Wrap /bin/login with `nsenter -t 1 -m` so it runs in PID 1's mount
namespace, where /dev/ttyGS0 exists again. setns does not change cgroup
membership, so the DeviceAllow filter and the re-bind hang protection
from #10313 stay in effect.
Signed-off-by: Mkirin <haohao.wang@seeed.cc>
Refactor the boot infrastructure for Magicsee C400 Plus (aml-c400-plus) to support mainline U-Boot integration and drop the legacy Android hybrid boot implementation.
Key changes include:
- Enabled native U-Boot building using the v2026.07 branch.
- Switched the FIP custom post-processing to use the correct 'tartiflette-s912' signing firmware instead of 'p212'.
- Migrated from legacy boot scripts to full Extlinux support (SRC_EXTLINUX="yes") for a modern, standard boot flow.
- Cleaned up obsolete vendor boot scripts (s905_autoscript, u-boot.ext, emmc_autoscript) to avoid conflicts during package pre-installation steps.
- Addressed custom defconfig, upstream DTS, and U-Boot DTSI overlays into the build tree patch structure.
Tested and verified on XFCE desktop environment with working Wi-Fi (SDIO), Bluetooth, Ethernet, and USB. Internal eMMC storage is successfully detected by the modern kernel.
The node carries pinctrl-0 but never named the state. Without
pinctrl-names, drivers/pinctrl/devicetree.c falls back to the property
index, so the state ends up called "0" while the driver core looks for
"default" at probe — the microsom_phy0_int_pins muxing is simply never
applied.
Verified on helios4 running 7.2.3. Before, /sys/kernel/debug/pinctrl/
pinctrl-handles had no gpio-keys entry at all; with the name in place it
reads
device: gpio-keys current state: default
type: MUX_GROUP group: mpp18 (18) function: gpio (0)
and pinmux-pins shows pin 18 owned by gpio-keys. Wake-on-LAN keeps
working: suspend-to-idle plus a magic packet resumed the board twice in
a row, matching two control runs on the unmodified device tree.
Reported-by: Rosen Penev <rosenp@gmail.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
mvebu boards carry SATA, and the drives report temperature over SMART —
but only smartctl can read it that way. fancontrol, thermal zones and
everything else in the regulation chain read hwmon, so without
CONFIG_SENSORS_DRIVETEMP the drives do not exist as a temperature source
at all.
rockchip64 carries the same option for helios64, the other Kobol NAS, in
all three branches. mvebu is the family that misses it: neither the edge
nor the current config mentions the symbol at all, and legacy has it as
an explicit "is not set". Enable it in all three, since helios4 builds
all three targets.
drivetemp registers a SCSI class_interface rather than a driver with an
id_table, so it carries no modalias and udev never autoloads it. Name it
in MODULES_* for helios4, which is the board this was tested on;
maintainers of the other mvebu boards can add the same line once they
have checked it on their hardware.
Verified on helios4 running 7.2.3: after boot the drives are absent from
hwmon, and modprobe drivetemp brings up one hwmon per disk (33 °C and
29 °C on the two attached drives).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The hunk header claimed line 117 while the gpio-keys block goes in at
line 87 of armada-388-helios4.dts, even with the 20/21/22 supply patches
applied first, so `patch` placed it with "offset -30 lines" on every
build. The mvebu-7.2 copy carries the correct number, which left the two
copies of the same patch differing in that one line.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The mvebu-7.2 patch directory holds its own copy of the three files
fixed here for mvebu-6.18. Keep the copies identical so the next branch
shift is a plain directory copy again.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
gpio-keys.yaml accepts child node names matching
"^(button|event|key|switch|(button|event|key|switch)-[a-z0-9-]+|[a-z0-9-]+-(button|event|key|switch))$".
A bare "wol" matches none of those, so dtbs_check rejects the node.
The driver keys off the node's properties, not its name, so this is a
schema fix only — no behaviour change.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
unlock_atheros_regulatory_restrictions.patch redefines ATH_2GHZ_ALL and
ATH_5GHZ_ALL to a single REG_RULE each and points all five ath world
regdomains at that pair, so every one of them holds exactly two rules.
Their .n_reg_rules fields kept the upstream counts of 5, 4, 3, 3 and 4.
reg_rules[] is a flexible array member, and the regulatory core walks it
.n_reg_rules times — wiphy_apply_custom_regulatory() copies that many
entries. Each of the five objects is therefore read past its own storage,
and whatever .rodata follows is handed to cfg80211 as regulatory rules.
Set all five counts to 2. The world-domain relaxation the patch exists
for is untouched.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
92-mvebu-gpio-multi-pwm-per-bank.patch lets two pwm-fan consumers share a
GPIO bank on legacy mvebu SoCs. Two gaps in it, both found by CodeRabbit
when the patch was copied verbatim into an mvebu-7.2 directory:
- mvebu_pwm_free() returned the counter to the pool without clearing the
line's GPIO_BLINK_EN bit, so a freed line keeps blinking to whatever
duty the counter's next owner programs. A consumer that calls pwm_put()
without disabling first - a sysfs unexport, say - hands the counter back
with its line still running. pwm-fan's own unbind path is safe, since
pwm_fan_cleanup() disables the PWM; the exception is a DT with
fan-shutdown-percent, where pwm-fan deliberately leaves the fan running
at a fallback duty. On a shared counter that fan would end up following
the other line, so free() stops it.
- mvebu_pwm_request() read every empty pool slot as "peer bank not probed
yet" and answered -EPROBE_DEFER. On a device tree where only one bank
carries a "pwm" register range, that slot never fills, so the request
defers forever and a sysfs export hands userspace errno 517. The pool
now sizes itself from the gpio0/gpio1 aliases carrying a "pwm" range -
the same banks that can own a counter, since the driver picks the
counter by of_alias_get_id() - and an exhausted pool answers -EBUSY.
armada-370, armada-xp and armada-38x declare "pwm" on both banks, so
their behaviour is unchanged; armada-375 declares it on neither and has
no PWM at all.
Built for arm/mvebu_v7_defconfig with W=1, no warnings; no new checkpatch
warnings. Hardware check on helios4 is still pending.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- add libssc v0.4.2 source tarball (git archive of upstream tag, commit 300a2a0)
alongside the prebuilt libssc_0.4.2-1_arm64.deb
- add Debian-style copyright file and provenance README
- libssc is GPL-3.0-or-later (upstream codeberg.org/DylanVanAssche/libssc);
shipping the binary together with its corresponding source satisfies the GPL
- add libssc_0.4.2-1_arm64.deb and xiaomi-sheng-thp_0.3.9_arm64.deb under packages/bsp/xiaomi-sheng/
- install both via install_deb_chroot in post_family_tweaks__xiaomi-sheng_enable_services(),
libssc first then the NT36532E touch host processor daemon; apt resolves deps from repo
Switch BOOTBRANCH/BOOTPATCHDIR to the v2026.07 tag and adapt the
self-contained helios64 patch set:
- drop 1000-exception-include-string.patch: upstream carries the same
fix since 8f83a459667 ("cmd/exception: missing include string.h")
- refresh hunk context of 1001-helios64-enable-target.patch and
cmd-fileenv-read-string-from-file-into-env.patch (line offsets and
the "if NET" guard after the CMD_XXD block in cmd/Kconfig); the
added lines are unchanged
- general-fix-btrfs-zstd-decompression.patch and the overlay files
(defconfig, board/, include/configs, u-boot.dtsi, upstream dts)
apply unchanged
All patches apply to v2026.07 with zero fuzz and zero offset.
Assisted-by: Claude:claude-fable-5.1
Pure rename, no content changes. The v2026.07 adaptation follows in a
separate commit so git history of the overlay stays linked.
Assisted-by: Claude:claude-fable-5.1
Fixes patching failure on linux-6.12.y: the patch sets
pc->chip.can_sleep = false, which upstream stable already did in
v6.12.97, so the hunk is now rejected as previously applied.
Signed-off-by: Viacheslav Bocharov <v@baodeep.com>
The unconditional `enable_extension "radxa-aic8800"` and
`source recomputer-rk35xx-common.inc` at the top of the board conf
duplicated what the BRANCH case below already does for vendor, so
BRANCH=vendor sourced common.inc twice. Each sourcing runs
`enable_extension "seeed_armbian_extension"`, which enables
`armbian-ota/ota-support` again; the second pass trips
"OTA_COMMON_ROOTFS: readonly variable" (ota-support.sh declares it
readonly) and aborts the build. The case statement covers both
branches, so the pre-case lines are simply removed.
* board: add Xiangcheng XC3399FR (RK3399)
The XC3399FR is an RK3399 industrial SBC (4GB LPDDR4, eMMC, GbE via
RTL8211E, 2x USB3, HDMI, AP6256 WiFi/BT). The device tree is derived from
rk3399-fine3399.dts, corrected against the vendor Android DTB and verified
on real hardware (rev v1.1a):
- describes the USB3 VBUS-enable regulators the generic config leaves
floating (revives the second USB3 port) and drops the st7735r panel node
that held one of them low
- Bluetooth as brcm,bcm4345c5 @ 1.5M (BT 5.0)
- board-specific RGMII skew; PCIe disabled (no PCIe routed on this board)
- correct fan/LED/backlight/4G-slot/UART4; reference-board junk removed
(HYM8563 RTC proven absent by i2c scan, RT5640, GT911, IR)
The board uses boot.scr (not extlinux), so the stock armbian-install
'boot from eMMC, system on this disk' flow works: the rockchip64 boot
script resolves paths through ${prefix}, which handles both the SD-card
and eMMC-partition /boot layouts.
Product page: https://www.proembed.com/Download/71.html
Signed-off-by: Ho Hoang Nam <liamhnam@gmail.com>
* board: xc3399fr: add BOARD_VENDOR
Signed-off-by: Ho Hoang Nam <liamhnam@gmail.com>
* board: xc3399fr - address review feedback
- drop the duplicated vendor/board name from the header comment
- add INTRODUCED (year the board came to market)
- build for edge and bleedingedge too, and ship the device tree in the
rockchip64-7.2 / rockchip64-7.3 patch directories so the board is not
dropped on the next LTS kernel bump
- reword the SRC_EXTLINUX note and point at armbian/configng#985
Signed-off-by: Ho Hoang Nam <liamhnam@gmail.com>
* board: xc3399fr - align the RK808 interrupt pinmux with its interrupt
pmic_int_l was inherited verbatim from rk3399-fine3399.dts and muxes
GPIO1_B2, while the rk808 node declares its interrupt on GPIO1_C5. Those
two cannot both describe the same line. Every internally consistent
RK3399 board in the tree that takes the PMIC interrupt on GPIO1_C5 also
muxes GPIO1_C5 (am40, emb-3531, orangepi-4, xiaobao-nas); fine3399 is
the only one where the two disagree. Align pmic_int_l with the value the
working configuration already declares.
Nothing else in this device tree claims either pin, so this only moves a
pull-up from an idle pin onto the interrupt line itself.
Also soften the header comment: the vendor Android device tree referenced
there was dumped from an XC3399FR of a different hardware revision, so it
is a cross-check, not an authority.
Signed-off-by: Ho Hoang Nam <liamhnam@gmail.com>
* board: xc3399fr - declare the output voltage of the GPIO load switches
vcc5v0_host, vcc5v0_otg, fan_pwr and vcc_4g are plain GPIO-enabled load
switches, so their output is their input rail. Declare equal min/max
microvolts rather than letting the fixed-regulator driver register them
with microvolts = 0.
vcc_phy is deliberately left without voltage constraints: I have not
measured that rail and would rather describe nothing than describe it
wrongly.
Signed-off-by: Ho Hoang Nam <liamhnam@gmail.com>
---------
Signed-off-by: Ho Hoang Nam <liamhnam@gmail.com>
armbian/build#10448 bumped the "edge" kernel target to 7.2.
rk3528.dtsi renamed the USB2 PHY labels (u2phy* -> usb2phy*) going into
7.2, and usb_host0_xhci now gets its USB2/USB3 phys wired by default at
SoC level, so the board override no longer needs to repeat them. All
other labels this board dts references (gmac1, spi1_csn0/1, i2c5m0_xfer,
uart1m0_xfer, combphy, sdmmc, ...) are unchanged.
* odroidn2: move u-boot board patches v2026.04 -> v2026.07
Pure rename, no content changes; prepares the bump of odroidn2 to
u-boot tag:v2026.07. The v2026.04 patch pool stays for other boards.
* odroidn2: bump u-boot to tag:v2026.07
Move ODROID-N2/N2+ from v2026.04 to the v2026.07 release. Board
patches (meson_gx_mmc f_max cap to 24 MHz, USB/NVMe/SCSI-first boot
order) apply cleanly to v2026.07; the f_max cap is still required
since upstream keeps 40 MHz. The shared v2026.07 pool already carries
the btrfs zstd decompression fix and cmd-fileenv.
The hunk context was re-typed with spaces instead of tabs, so `patch`
rejects it against v7.3-rc1 and every rockchip64 bleedingedge build
stops at kernel patching. Regenerate the hunk from the kernel tree and
name the right file in the diffstat.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Generic GRUB setup adds an Intel-only parameter to arm64 and loong64
images. Restrict it to amd64 while keeping the common Plymouth options.
Signed-off-by: SuperKali <hello@superkali.me>
Linux 7.2 changes interfaces used by Q6A display, Iris, and UFS
drivers. Refresh the stack, add RA620 replug handling, and register the
UFS RPMB bus for the lifetime of the UFS core.
Signed-off-by: SuperKali <hello@superkali.me>
Pin edge to stable v7.2.3 instead of following the moving 7.1 branch.
Regenerate the configuration against the final Q6A patch stack.
Signed-off-by: SuperKali <hello@superkali.me>