Daily update · Sep 23–24, 2026
Pinctrl and architecture fixes: Allwinner GPIO, arm64 PMU trap, parisc stack
A mainline update with pinctrl fixes for Allwinner, Qualcomm, and Tegra, plus arm64 trap and parisc reliability fixes.
In brief
This batch of mainline fixes covers pinctrl drivers for Allwinner, Qualcomm, and Tegra, along with several arm64 and parisc corrections. The pinctrl changes fix GPIO corruption and wrong pinmux selection, while the arm64 updates address a PMU trap, a spurious ioremap warning, and erratum matching. Parisc gains a larger kernel stack and functional HugeTLB boot parameters.
Bug fixes
pinctrl: serialize generic DT node-to-map parsing
pinctrl_generic_dt_node_to_map() adds groups and functions without taking pctldev->mutex, despite the add functions documenting that the caller must lock. Two devices probing against the same pin controller can race on the same selector index.
Why it matters: Fixes a potential crash or misconfiguration on systems with multiple devices sharing one pin controller.
pinctrl: Allwinner: keep shadow output latch to avoid GPIO corruption
Reading an Allwinner data register returns the actual pin level, not the output latch, for pins muxed as inputs. The GPIO set path's read-modify-write can therefore overwrite latches of input-muxed pins in the same bank, breaking emulated open-drain lines.
Why it matters: Corrects GPIO output behavior on Allwinner SoCs; particularly important for bit-banged I2C.
pinctrl: Allwinner A523: fix voltage withstand encoding
The A523 uses the same voltage-threshold mechanism as earlier SoCs but with an inverted encoding for 1.8V vs 3.3V. The patch adds a new bias type and also enables the CTL register so thresholds can be disabled for other voltages.
Why it matters: Fixes eMMC and Ethernet operation on some A523 boards.
pinctrl: Qualcomm Nord: distinguish QUP1 SE2/SE3 lane pairs
QUP1 SE2/SE3 put each lane pair on two pins with different mux values, but both values were named the same function. The mux code always picked the first entry, so the I2C lanes were never selected.
Why it matters: Restores correct I2C and UART pin selection on Qualcomm Nord platforms.
pinctrl: Tegra238: fix AON register bank
Tegra238's AON pin controller has a single register region, but the AON pin groups were assigned bank 1. This caused an invalid index into pmx->regs[] during probe.
Why it matters: Fixes pinmux register access for Tegra238 AON pins.
arm64: prevent PMZR_EL0 write trap on nVHE
The EL2 fine-grained trap configuration wrote the same mask to HDFGRTR2_EL2 and HDFGWTR2_EL2, but PMZR_EL0 is write-only and its trap bit lives only in the write mask. A userspace PMZR_EL0 write then trapped to EL2 and hit a BUG() in the nVHE hypervisor.
Why it matters: Prevents a host crash when kernel.perf_user_access=1 allows userspace PMU register access.
arm64: reject PROT_NONE in ioremap_prot()
generic_access_phys() passes user PTE protection to ioremap_prot(). On arm64, PROT_NONE PTEs are present-invalid, so pte_present() is true and the protection was accepted, triggering a WARN in the /dev/mem path.
Why it matters: Removes a spurious WARN and blocks non-user protection values from reaching ioremap_prot().
arm64: fix erratum MIDR matching for per-CPU workarounds
The MIDR range check used by errata workarounds ignored the @midr argument passed for the CPU being checked and instead scanned the whole target CPU list. That allowed a fixed CPU to make an affected CPU exempt.
Why it matters: Ensures arm64 errata workarounds are applied only when the actual CPU is affected.
parisc: increase kernel stack to 32kB
64-bit parisc defaulted to a 16kB kernel stack, which overflowed during kernel builds with gcc 17, causing a panic. The patch raises THREAD_SIZE_ORDER to give 32kB stacks.
Why it matters: Prevents stack-overflow panics on parisc under heavy workloads.
parisc: parse early parameters in setup_arch()
parisc never called parse_early_param() from setup_arch(), so HugeTLB options like hugepages= and hugetlb_cma= were parsed after mm_core_init_early() had already consumed the defaults, silently dropping them.
Why it matters: Makes HugeTLB command-line parameters work on parisc.
Source commits20 entries +
pinctrl: meson: Fix typo in s4 group name
Sean Anderson · Aug 17, 2026 · 1 files
pinctrl: generic: serialise pinctrl_generic_dt_node_to_map()
Sarah Emery · Aug 28, 2026 · 1 files
pinctrl: qcom: nord: Split QUP1 SE2/SE3 into lane-pair functions
Shawn Guo · Aug 30, 2026 · 2 files
pinctrl: mpfs-mssio: fix width of unused bank voltage setting
Conor Dooley · Aug 31, 2026 · 1 files
pinctrl: mpfs-mssio: use correct regmap function to set bank voltage
Conor Dooley · Aug 31, 2026 · 1 files
pinctrl: sunxi: keep a shadow copy of the data register output latches
Ilya Titov · Sep 3, 2026 · 2 files
pinctrl: qcom: ipq5210: Publish the OF module alias
hpp.iscas · Sep 5, 2026 · 1 files
arm64: errata: match the target implementation CPU's own MIDR
David Carlier · Sep 6, 2026 · 1 files
arm64: io: Reject non-user protection in ioremap_prot()
Zeng Heng · Sep 11, 2026 · 1 files
arm64: Add override for WFxT
Yureka Lilian · Sep 11, 2026 · 2 files
pinctrl: single: free the IRQ on domain creation failure
Myeonghun Pak · Sep 13, 2026 · 1 files
parisc: unwind: Replace open-coded binary search with bsearch()
Sean Young · Sep 13, 2026 · 1 files
pinctrl: sunxi: A523: fix voltage withstand encoding
Andre Przywara · Sep 14, 2026 · 4 files
perf/arm-cmn: Fix multi-filter encoding
Robin Murphy · Sep 15, 2026 · 1 files
mm: memblock: add missing HugeTLB flag name
Meijing Zhao · Sep 15, 2026 · 1 files
pinctrl: tegra238: Fix register bank for AON pin groups
Prathamesh Shete · Sep 16, 2026 · 1 files
parisc: remove unused <asm/compat_ucontext.h> header
Ethan Nelson-Moore · Sep 18, 2026 · 1 files
parisc: parse early parameters in setup_arch()
Zhenghui Hao · Sep 18, 2026 · 1 files
parisc: Increase kernel stack size to 32kb
Helge Deller · Sep 19, 2026 · 1 files
arm64/boot: Disable trapping of PMZR_EL0 writes to EL2
Fuad Tabba · Sep 22, 2026 · 2 files