summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-04-30PCI: dwc: ep: Expose integrated eDMA resources via EPC aux-resource APIKoichiro Den
Implement the EPC aux-resource API for DesignWare endpoint controllers with integrated eDMA. Currently, only report an interrupt-emulation doorbell register (PCI_EPC_AUX_DOORBELL_MMIO), including its Linux IRQ and the write data needed to trigger the interrupt. If the DMA controller MMIO window is already exposed via a platform-owned fixed BAR subregion, also provide the BAR number and offset so EPF drivers can reuse it without reprogramming the BAR. Signed-off-by: Koichiro Den <den@valinux.co.jp> Signed-off-by: Manivannan Sadhasivam <mani@kernel.org> Reviewed-by: Frank Li <Frank.Li@nxp.com> Link: https://patch.msgid.link/20260414141514.1341429-4-den@valinux.co.jp
2026-04-30PCI: dwc: Record integrated eDMA register windowKoichiro Den
Some DesignWare PCIe controllers integrate an eDMA block whose registers are located in a dedicated register window. The EP-side aux-resource code exposes an interrupt-emulation doorbell register (DOORBELL_MMIO) from that window. Its location is derived from the start of the eDMA register window plus the doorbell offset already provided by dw-edma, and the window size is used to validate the computed register location. Record the physical base and size of the integrated eDMA register window in struct dw_pcie so the EP-side DesignWare aux-resource provider can construct that doorbell resource. Signed-off-by: Koichiro Den <den@valinux.co.jp> Signed-off-by: Manivannan Sadhasivam <mani@kernel.org> Tested-by: Niklas Cassel <cassel@kernel.org> Reviewed-by: Frank Li <Frank.Li@nxp.com> Link: https://patch.msgid.link/20260414141514.1341429-3-den@valinux.co.jp
2026-04-30PCI: endpoint: Add auxiliary resource query APIKoichiro Den
Endpoint controller drivers may integrate auxiliary blocks (e.g. DMA engines) whose register windows and descriptor memories metadata need to be exposed to a remote peer. Endpoint function drivers need a generic way to discover such resources without hard-coding controller-specific helpers. Add pci_epc_get_aux_resources_count() / pci_epc_get_aux_resources() and the corresponding pci_epc_ops callbacks. The count helper returns the number of available resources, while the get helper fills a caller-provided array of resources described by type, physical address and size, plus type-specific metadata. Suggested-by: Manivannan Sadhasivam <mani@kernel.org> Suggested-by: Frank Li <Frank.li@nxp.com> Signed-off-by: Koichiro Den <den@valinux.co.jp> Signed-off-by: Manivannan Sadhasivam <mani@kernel.org> Link: https://patch.msgid.link/20260414141514.1341429-2-den@valinux.co.jp
2026-04-30drm/panthor: Use a local iomem base for MMU AS registersKarunika Choo
Add an MMU_AS_CONTROL local iomem pointer to struct panthor_mmu and switch AS register accesses to that base. Interrupt accesses remain routed through the IRQ-local iomem base, while the MMU register definitions are adjusted so AS registers are expressed relative to the local MMU AS window. This completes the conversion away from using the global device mapping for MMU AS register accesses. No functional change intended. v3: - Pick up R-bs from Liviu and Steve v2: - Pick up Ack from Boris. Reviewed-by: Steven Price <steven.price@arm.com> Reviewed-by: Liviu Dudau <liviu.dudau@arm.com> Acked-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Karunika Choo <karunika.choo@arm.com> Tested-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com> Link: https://patch.msgid.link/20260427155934.416502-9-karunika.choo@arm.com
2026-04-30drm/panthor: Use a local iomem base for firmware control registersKarunika Choo
Add an MCU_CONTROL-local iomem pointer to struct panthor_fw and use it for firmware control and status register accesses. Job interrupt accesses continue to go through the IRQ-local base, while doorbell writes stay on the device-wide mapping because they live outside the MCU control window. This keeps firmware register accesses scoped to the component that owns them. No functional change intended. v3: - Pick up R-bs from Liviu and Steve v2: - Pick up Ack from Boris. Reviewed-by: Steven Price <steven.price@arm.com> Reviewed-by: Liviu Dudau <liviu.dudau@arm.com> Acked-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Karunika Choo <karunika.choo@arm.com> Tested-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com> Link: https://patch.msgid.link/20260427155934.416502-8-karunika.choo@arm.com
2026-04-30drm/panthor: Use a local iomem base for PWR registersKarunika Choo
Add a PWR_CONTROL-local iomem pointer to struct panthor_pwr and switch power controller register accesses to that base. Update IRQ-local iomem base to use PWR_CONTROl-local iomem and update the register definitions so the PWR block can be addressed relative to its local base. This removes the remaining dependence on the global device MMIO mapping for PWR register accesses. Update panthor_gpu_info_init() to also use the correct PWR_CONTROL iomem for the *_PRESENT registers. No functional change intended. v3: - Clean up definitions for pwr->iomem and pwr->irq.iomem. - Update PWR_INT_BASE to be relative to pwr->iomem. v2: - Update panthor_gpu_info_init() to use block-local iomem pointer. Signed-off-by: Karunika Choo <karunika.choo@arm.com> Acked-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Steven Price <steven.price@arm.com> Reviewed-by: Liviu Dudau <liviu.dudau@arm.com> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com> Link: https://patch.msgid.link/20260427155934.416502-7-karunika.choo@arm.com
2026-04-30drm/panthor: Use a local iomem base for GPU registersKarunika Choo
Add a GPU_CONTROL-local iomem pointer to struct panthor_gpu and use it for GPU register accesses. This limits GPU register accesses to the GPU block instead of using the device-wide MMIO mapping directly. Interrupt register accesses continue to use the IRQ-local base provided by the common IRQ helpers. Update panthor_gpu_info_init() to also use a local iomem offset for GPU features and capability. This is a refactoring only and does not change behaviour. v3: - Pick up R-bs from Liviu and Steve v2: - Update panthor_gpu_info_init() to use block-local iomem pointer. Reviewed-by: Steven Price <steven.price@arm.com> Reviewed-by: Liviu Dudau <liviu.dudau@arm.com> Signed-off-by: Karunika Choo <karunika.choo@arm.com> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com> Link: https://patch.msgid.link/20260427155934.416502-6-karunika.choo@arm.com
2026-04-30drm/panthor: Store IRQ register base iomem pointer in panthor_irqKarunika Choo
Update common IRQ handling code to work from an IRQ-local iomem base instead of referencing block-specific interrupt register offsets. Store the interrupt base address iomem pointer in struct panthor_irq and switch the shared IRQ helpers to use generic INT_* offsets from that local base. This removes the need for each caller to expose absolute IRQ register addresses while keeping the common IRQ flow unchanged. No functional change intended. v3: - Clean up definition of pwr->irq.iomem. v2: - Change IRQ request function to accept an iomem pointer instead of computing it from an offset argument. Signed-off-by: Karunika Choo <karunika.choo@arm.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Tested-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Steven Price <steven.price@arm.com> Reviewed-by: Liviu Dudau <liviu.dudau@arm.com> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com> Link: https://patch.msgid.link/20260427155934.416502-5-karunika.choo@arm.com
2026-04-30drm/panthor: Replace cross-component register accesses with helpersKarunika Choo
Stop reaching into other components' registers directly and route those operations through the component that owns them. Move the timestamp/coherency helpers into panthor_gpu, add a doorbell helper, and update call sites accordingly. This keeps register knowledge local to each block and avoids spreading cross-component register accesses across the driver. This is a preparatory cleanup for using per-component iomem bases. v3: - Pick up Ack from Boris and R-bs from Liviu and Steve v2: - Fix incorrect spelling of timestamp helpers - Fix unintended trailing backslash Reviewed-by: Steven Price <steven.price@arm.com> Reviewed-by: Liviu Dudau <liviu.dudau@arm.com> Acked-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Karunika Choo <karunika.choo@arm.com> Tested-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com> Link: https://patch.msgid.link/20260427155934.416502-4-karunika.choo@arm.com
2026-04-30drm/panthor: Split register definitions by componentsKarunika Choo
Split the panthor register definitions into per-component headers for the GPU, MMU, firmware, power and generic hardware registers. This makes the register layout easier to follow and prepares the driver for component-local iomem mappings by grouping definitions with the code that owns them. The old monolithic panthor_regs.h header can then be dropped. No functional change intended. v3: - Pick up Ack from Boris and R-bs from Liviu and Steve v2: - Merge GPU_ID definitions into panthor_gpu_regs.h - deleted panthor_hw_regs.h Reviewed-by: Steven Price <steven.price@arm.com> Reviewed-by: Liviu Dudau <liviu.dudau@arm.com> Acked-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Karunika Choo <karunika.choo@arm.com> Tested-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com> Link: https://patch.msgid.link/20260427155934.416502-3-karunika.choo@arm.com
2026-04-30drm/panthor: Pass an iomem pointer to GPU register access helpersKarunika Choo
Convert the Panthor register access helpers to take an iomem pointer instead of a panthor_device pointer. This makes the helpers usable with block-local registers instead of routing all accesses to go through ptdev->iomem. It is a preparatory change for splitting the register space by components and for moving callers away from cross-component register accesses. No functional change intended. v3: - Pick up R-bs from Liviu and Steve v2: - Pick up Ack from Boris. Reviewed-by: Steven Price <steven.price@arm.com> Reviewed-by: Liviu Dudau <liviu.dudau@arm.com> Acked-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Karunika Choo <karunika.choo@arm.com> Tested-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Liviu Dudau <liviu.dudau@arm.com> Link: https://patch.msgid.link/20260427155934.416502-2-karunika.choo@arm.com
2026-04-30scsi: ufs: exynos: Add support for ExynosAutov920 SoCSowon Na
Add a dedicated compatible and drv_data with associated hooks for ExynosAutov920 SoC. ExynosAutov920 has a different mask of UFS sharability from ExynosAutov9, so add related changes for the same. Signed-off-by: Sowon Na <sowon.na@samsung.com> Signed-off-by: Alim Akhtar <alim.akhtar@samsung.com> [Alim: fixed unintended changes, other fixes] Link: https://patch.msgid.link/20260417121452.827054-4-alim.akhtar@samsung.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2026-04-30scsi: ufs: exynos: dt-bindings: Add ExynosAutov920 compatible stringSowon Na
Add samsung,exynosautov920-ufs compatible for ExynosAutov920 SoC. Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Signed-off-by: Sowon Na <sowon.na@samsung.com> Signed-off-by: Alim Akhtar <alim.akhtar@samsung.com> Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com> Link: https://patch.msgid.link/20260417121452.827054-3-alim.akhtar@samsung.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2026-04-30KVM: x86/mmu: remove SPTE_EPT_*Paolo Bonzini
spte.h is already including vmx.h, use the constants it defines. Tested-by: David Riley <d.riley@proxmox.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2026-04-30KVM: x86/mmu: shuffle high bits of SPTEs in preparation for MBECPaolo Bonzini
Access tracking will need to save bit 10 when MBEC is enabled. Right now it is simply shifting the R and X bits into bits 54 and 56, but bit 10 would not fit with the same scheme. Reorganize the high bits so that access tracking will use bits 52, 54 and 62. As a side effect, the free bits are compacted slightly, with 56-59 still unused. Tested-by: David Riley <d.riley@proxmox.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2026-04-30KVM: x86/mmu: free up bit 10 of PTEs in preparation for MBECJon Kohler
Update SPTE_MMIO_ALLOWED_MASK to allow EPT user executable (bit 10) to be treated like EPT RWX bit2:0, as when mode-based execute control is enabled, bit 10 can act like a "present" bit. Likewise do not include it in FROZEN_SPTE. No functional changes intended, other than the reduction of the maximum MMIO generation that is stored in page tables. Cc: Kai Huang <kai.huang@intel.com> Signed-off-by: Jon Kohler <jon@nutanix.com> Message-ID: <20251223054806.1611168-4-jon@nutanix.com> Reviewed-by: Kai Huang <kai.huang@intel.com> Tested-by: David Riley <d.riley@proxmox.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2026-04-30KVM: x86/mmu: remove SPTE_PERM_MASKJon Kohler
SPTE_PERM_MASK is no longer referenced by anything in the kernel. Signed-off-by: Jon Kohler <jon@nutanix.com> Message-ID: <20251223054806.1611168-3-jon@nutanix.com> Tested-by: David Riley <d.riley@proxmox.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2026-04-30KVM: TDX/VMX: rework EPT_VIOLATION_EXEC_FOR_RING3_LIN into PROT_MASKJon Kohler
EPT exit qualification bit 6 is used when mode-based execute control is enabled, and reflects user executable addresses. Rework name to reflect the intention and add to EPT_VIOLATION_PROT_MASK, which allows simplifying the return evaluation in tdx_is_sept_violation_unexpected_pending a pinch. Rework handling in __vmx_handle_ept_violation to unconditionally clear EPT_VIOLATION_PROT_USER_EXEC until MBEC is implemented, as suggested by Sean [1]. Note: Intel SDM Table 29-7 defines bit 6 as: If the "mode-based execute control" VM-execution control is 0, the value of this bit is undefined. If that control is 1, this bit is the logical-AND of bit 10 in the EPT paging-structure entries used to translate the guest-physical address of the access causing the EPT violation. In this case, it indicates whether the guest-physical address was executable for user-mode linear addresses. [1] https://lore.kernel.org/all/aCJDzU1p_SFNRIJd@google.com/ Suggested-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Jon Kohler <jon@nutanix.com> Message-ID: <20251223054806.1611168-2-jon@nutanix.com> Tested-by: David Riley <d.riley@proxmox.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2026-04-30scsi: ufs: dt-bindings: Add compatible for SA8797P UFS Host ControllerDeepti Jaggi
SA8797P is the automotive variant of the Nord SoC. Like SA8255P, its platform firmware implements an SCMI server that manages UFS resources such as the PHY, clocks, regulators and resets via the SCMI power protocol. As a result, the OS-visible DT only describes the controller's MMIO, interrupt, IOMMU and power-domain interfaces, making SA8255P the appropriate fallback compatible. Signed-off-by: Deepti Jaggi <deepti.jaggi@oss.qualcomm.com> Reviewed-by: Manivannan Sadhasivam <mani@kernel.org> Signed-off-by: Shawn Guo <shengchao.guo@oss.qualcomm.com> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> Link: https://patch.msgid.link/20260427013115.231731-3-shengchao.guo@oss.qualcomm.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2026-04-30scsi: ufs: dt-bindings: Add compatible for Nord UFS Host ControllerShawn Guo
Document UFS Host Controller on Qualcomm Nord SoC. Like the Eliza SoC, Nord has a multi-queue command (MCQ) register range in addition to the standard one, making both reg entries required. Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> Reviewed-by: Manivannan Sadhasivam <mani@kernel.org> Signed-off-by: Shawn Guo <shengchao.guo@oss.qualcomm.com> Link: https://patch.msgid.link/20260427013115.231731-2-shengchao.guo@oss.qualcomm.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2026-04-30netfilter: flowtable: ensure sufficient headroom in xmit pathPablo Neira Ayuso
Check for headroom and call skb_expand_head() like in the IP output path to ensure there is sufficient headroom for the mac header when forwarding this packet as suggested by sashiko. Fixes: b5964aac51e0 ("netfilter: flowtable: consolidate xmit path") Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2026-04-30netfilter: xtables: fix L4 header parsing for non-first fragmentsFernando Fernandez Mancera
Multiple targets and matches relies on L4 header to operate. For fragmented packets, every fragment carries the transport protocol identifier, but only the first fragment contains the L4 header. As the 'raw' table can be configured to run at priority -450 (before defragmentation at -400), the target/match can be reached before reassembly. In this case, non-first fragments have their payload incorrectly parsed as a TCP/UDP header. This would be of course a misconfiguration scenario. In most of the cases this just lead to a unreliable behavior for fragmented traffic. Add a fragment check to ensure target/match only evaluates unfragmented packets or the first fragment in the stream. Fixes: 902d6a4c2a4f ("netfilter: nf_defrag: Skip defrag if NOTRACK is set") Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2026-04-30netfilter: nf_tables: skip L4 header parsing for non-first fragmentsFernando Fernandez Mancera
The tproxy, osf and exthdr (SCTP) expressions rely on the presence of transport layer headers to perform socket lookups, fingerprint matching, or chunk extraction. For fragmented packets, while the IP protocol remains constant across all fragments, only the first fragment contains the actual L4 header. The expressions could be attached to a chain with a priority lower than -400, bypassing defragmentation. Or could be used in stateless environments where defragmentation is not happening at all. This could result in garbage data being used for the matching. Add a check for pkt->fragoff so only unfragmented packets or the first fragment is processed. Fixes: 133dc203d77d ("netfilter: nft_exthdr: Support SCTP chunks") Fixes: 4ed8eb6570a4 ("netfilter: nf_tables: Add native tproxy support") Fixes: b96af92d6eaf ("netfilter: nf_tables: implement Passive OS fingerprint module in nft_osf") Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2026-04-30netfilter: nf_socket: skip socket lookup for non-first fragmentsFernando Fernandez Mancera
Both nft_socket and xt_socket relies on L4 headers to perform socket lookup in the slow path. For fragmented packets, while the IP protocol remains constant across all fragments, only the first fragment contains the actual L4 header. As the expression/match could be attached to a chain with a priority lower than -400, it could bypass defragmentation. Add a check for fragmentation in the lookup functions directly so the problem is handled for both nft_socket and xt_socket at the same time. In addition, future users of the functions would not need to care about this. Fixes: 902d6a4c2a4f ("netfilter: nf_defrag: Skip defrag if NOTRACK is set") Fixes: 554ced0a6e29 ("netfilter: nf_tables: add support for native socket matching") Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2026-04-30scsi: ncr53c8xx: Drop CONFIG_ prefix from Zalon-specific compiler definesSasha Levin
kconfiglint reports: X001: CONFIG_NCR53C8XX_PREFETCH referenced in Makefile but not defined in any Kconfig X001: CONFIG_SCSI_NCR53C8XX_NO_WORD_TRANSFERS referenced in Makefile but not defined in any Kconfig The ncr53c8xx SCSI driver uses two preprocessor defines that carry the CONFIG_ prefix but are not defined in any Kconfig file: -DCONFIG_NCR53C8XX_PREFETCH -DCONFIG_SCSI_NCR53C8XX_NO_WORD_TRANSFERS These are hardcoded compiler flags in drivers/scsi/Makefile, passed only when CONFIG_SCSI_ZALON is enabled: ncr53c8xx-flags-$(CONFIG_SCSI_ZALON) \ := -DCONFIG_NCR53C8XX_PREFETCH -DSCSI_NCR_BIG_ENDIAN \ -DCONFIG_SCSI_NCR53C8XX_NO_WORD_TRANSFERS The source files ncr53c8xx.c and ncr53c8xx.h check these defines with #ifdef to enable script prefetching and disable 16-bit word transfers respectively — both specific to the PA-RISC Zalon SCSI controller's big-endian bus requirements. These defines have been present since the initial git import in commit 1da177e4c3f4 ("Linux-2.6.12-rc2"). They predate the modern Kconfig convention that CONFIG_ prefixed symbols should always originate from Kconfig. The third define on the same line, SCSI_NCR_BIG_ENDIAN, already correctly omits the CONFIG_ prefix. The CONFIG_ prefix is misleading: these are not user-configurable options and do not appear in any Kconfig menu. They are unconditionally enabled for all Zalon builds. Remove the CONFIG_ prefix from both symbols — renaming them to NCR53C8XX_PREFETCH and SCSI_NCR53C8XX_NO_WORD_TRANSFERS — to match the convention used by SCSI_NCR_BIG_ENDIAN on the same line and to avoid confusion with actual Kconfig-managed symbols. No functional change. Assisted-by: Claude:claude-opus-4-6 kconfiglint Signed-off-by: Sasha Levin <sashal@kernel.org> Link: https://patch.msgid.link/20260426000330.56137-1-sashal@kernel.org Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2026-04-30Merge tag 'net-7.1-rc2' of ↵Linus Torvalds
git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net Pull networking fixes from Paolo Abeni: "Including fixes from netfilter. Current release - regressions: - ipmr: free mr_table after RCU grace period. Previous releases - regressions: - core: add net_iov_init() and use it to initialize ->page_type - sched: taprio: fix NULL pointer dereference in class dump - netfilter: nf_tables: - use list_del_rcu for netlink hooks - fix strict mode inbound policy matching - tcp: make probe0 timer handle expired user timeout - vrf: fix a potential NPD when removing a port from a VRF - eth: ice: - fix NULL pointer dereference in ice_reset_all_vfs() - fix infinite recursion in ice_cfg_tx_topo via ice_init_dev_hw Previous releases - always broken: - page_pool: fix memory-provider leak in error path - sched: sch_cake: annotate data-races in cake_dump_stats() - mptcp: fix scheduling with atomic in timestamp sockopt - psp: check for device unregister when creating assoc - tls: fix strparser anchor skb leak on offload RX setup failure - eth: - stmmac: prevent NULL deref when RX memory exhausted - airoha: do not read uninitialized fragment address - rtl8150: fix use-after-free in rtl8150_start_xmit() Misc: - add Ido Schimmel as IPv4/IPv6 maintainer - add David Heidelberg as NFC subsystem maintainer" * tag 'net-7.1-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (79 commits) net/sched: cls_flower: revert unintended changes sfc: fix error code in efx_devlink_info_running_versions() net: tls: fix strparser anchor skb leak on offload RX setup failure ice: add dpll peer notification for paired SMA and U.FL pins ice: fix missing dpll notifications for SW pins dpll: export __dpll_pin_change_ntf() for use under dpll_lock ice: fix SMA and U.FL pin state changes affecting paired pin ice: fix missing SMA pin initialization in DPLL subsystem ice: fix infinite recursion in ice_cfg_tx_topo via ice_init_dev_hw ice: fix NULL pointer dereference in ice_reset_all_vfs() iavf: add VIRTCHNL_OP_ADD_VLAN to success completion handler iavf: wait for PF confirmation before removing VLAN filters iavf: stop removing VLAN filters from PF on interface down iavf: rename IAVF_VLAN_IS_NEW to IAVF_VLAN_ADDING page_pool: fix memory-provider leak in page_pool_create_percpu() error path bonding: 3ad: implement proper RCU rules for port->aggregator net: airoha: Do not return err in ndo_stop() callback hv_sock: fix ARM64 support MAINTAINERS: update the IPv4/IPv6 entry and add Ido Schimmel selftests: drv-net: clarify linters and frameworks in README ...
2026-04-30Merge tag 'ata-7.1-rc2' of ↵Linus Torvalds
git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux Pull ata fix from Niklas Cassel: - Fix a reference leak on device_register() failure in pata_parport * tag 'ata-7.1-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux: ata: pata_parport: switch to dynamic root device
2026-04-30Merge tag 'sound-7.1-rc2' of ↵Linus Torvalds
git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "A bunch of small fixes. One minor fix is found in the core side for data race in PCM OSS layer, while remaining changes are various device-specific fixes and quirks. - Core: PCM OSS data race fix - HD-audio: Fixes for TAS2781, CS35L56, and Realtek/Conexant quirks; avoidance of a WARN_ON for HDMI channel mapping - USB-audio: Improvements in UAC3 parsing robustness (leaks, size checks) and fixes for potential endless loops - ASoC: Driver-specific fixes for CS35L56, Intel bytcr_wm5102, Spacemit, AW88395, and others, plus a new quirk for Steam Deck OLED - Misc: A UAF fix in aloop driver, division by zero fix in ua101 driver and leak fixes in caiaq driver" * tag 'sound-7.1-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (32 commits) ALSA: hda/tas2781: Fix incorrect bit update for non-book-zero or book 0 pages >1 ALSA: hda: cs35l56: Fix uninitialized value in cs35l56_hda_read_acpi() ALSA: hda/conexant: Fix missing error check for jack detection ALSA: hda: Avoid WARN_ON() for HDMI chmap slot checks ALSA: usb-audio: Fix quirk entry placement for PreSonus AudioBox USB ASoC: spacemit: adjust FIFO trigger threshold to half FIFO size ASoC: spacemit: move hw constraints from hw_params to startup ASoC: codecs: ab8500: Fix casting of private data ASoC: cs35l56: Fix illegal writes to OTP_MEM registers ASoC: Intel: bytcr_wm5102: Fix MCLK leak on platform_clock_control error ALSA: usb-audio: Avoid potential endless loop in convert_chmap_v3() ALSA: usb-audio: Fix potential leak of pd at parsing UAC3 streams ALSA: caiaq: Don't abort when no input device is available ALSA: caiaq: Fix potentially leftover ep1_in_urb at error path ASoC: aw88395: Fix kernel panic caused by invalid GPIO error pointer ALSA: caiaq: fix usb_dev refcount leak on probe failure sound: ua101: fix division by zero at probe ALSA: usb-audio: apply quirk for Playstation PDP Riffmaster ALSA: hda: Remove duplicate cmedia entries in codecs Makefile ALSA: hda/realtek: Add micmute LED quirk for Acer Aspire A315-44P ...
2026-04-30scsi: advansys: Drop ISA_DMA_API remnantsArnd Bergmann
Support for ISA bus mastering was removed a few years ago, and the VLB mode does not use the ISA DMA API, so drop the dependency and the header inclusion. Fixes: 9b4c8eaa68d0 ("advansys: remove ISA support") Signed-off-by: Arnd Bergmann <arnd@arndb.de> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Link: https://patch.msgid.link/20260429151623.3899875-1-arnd@kernel.org Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2026-04-30drm/xe/pf: Fix MMIO access using PF view instead of VF view during migrationShuicheng Lin
pf_migration_mmio_save() and pf_migration_mmio_restore() initialize a local VF-specific MMIO view via xe_mmio_init_vf_view() but then pass &gt->mmio (the PF base) to all xe_mmio_read32()/xe_mmio_write32() calls instead of the local &mmio. This causes the PF own SW flag registers to be saved/restored rather than the target VF registers, silently corrupting migration state. Use the VF MMIO view for all register accesses, matching the correct pattern used in pf_clear_vf_scratch_regs(). Fixes: b7c1b990f719 ("drm/xe/pf: Handle MMIO migration data as part of PF control") Cc: Michał Winiarski <michal.winiarski@intel.com> Assisted-by: Claude:claude-opus-4.6 Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com> Reviewed-by: Stuart Summers <stuart.summers@intel.com> Link: https://patch.msgid.link/20260429192259.4009211-1-shuicheng.lin@intel.com Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com>
2026-04-30drm/xe/pf: Fix EAGAIN sign in pf_migration_consume()Shuicheng Lin
PTR_ERR() returns a negative value, so comparing against the positive EAGAIN is always true for ERR_PTR(-EAGAIN), causing pf_migration_consume() to bail out instead of continuing to the remaining GTs. On multi-GT platforms this can skip GTs that already have data ready. Compare against -EAGAIN to match the intent (and the following line that correctly uses -EAGAIN). While at it, gate PTR_ERR() with IS_ERR(). v2: add IS_ERR() guard before PTR_ERR(). (Gustavo) Fixes: 67df4a5cbc58 ("drm/xe/pf: Add data structures and handlers for migration rings") Cc: Michał Winiarski <michal.winiarski@intel.com> Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com> Link: https://patch.msgid.link/20260428201448.3999428-1-shuicheng.lin@intel.com Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com>
2026-04-30Merge branch 'dpll-add-pin-operational-state'Paolo Abeni
Ivan Vecera says: ==================== dpll: add pin operational state Add pin operational state (operstate) to the DPLL subsystem to separate administrative intent from actual hardware status. Currently pin-state mixes what the user requested (connected, selectable, disconnected) with what the hardware is actually doing. This makes it difficult to diagnose situations where a user sets a pin as selectable or connected but the hardware cannot use it due to signal issues. The new operstate attribute is reported inside the pin-parent-device nest alongside the existing state and is read-only. Defined values: - active: pin is qualified and actively used by the DPLL - standby: pin is qualified but not actively used by the DPLL - no-signal: pin does not have a valid signal - qual-failed: pin signal failed qualification checks Patch 1 adds the operstate enum, netlink attribute and the operstate_on_dpll_get callback to the DPLL subsystem. It also updates Documentation/driver-api/dpll.rst to describe the separation between admin state and operational state. Patch 2 implements the callback for ZL3073x input pins using the reference monitor status register. It also refactors the existing state_on_dpll_get to return purely administrative state and switches periodic monitoring to track operstate changes. ==================== Link: https://patch.msgid.link/20260428154907.2820654-1-ivecera@redhat.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2026-04-30dpll: zl3073x: implement pin operational state reportingIvan Vecera
Implement operstate_on_dpll_get callback for input pins to report the actual hardware status: - active: pin is the currently locked reference - standby: signal is valid but pin is not actively used - no-signal: reference monitor reports Loss of Signal (LOS) - qual-failed: reference monitor reports a qualification failure (SCM, CFM, GST, PFM, eSync or Split-XO) Separate administrative state (state_on_dpll_get) from operational state: admin state now reports purely the user-requested intent (connected in reflock mode, selectable in auto mode). Switch periodic monitoring to track operstate changes instead of the mixed admin/oper state that was previously reported. Add ref_mon_status bit definitions to regs.h. Signed-off-by: Ivan Vecera <ivecera@redhat.com> Reviewed-by: Petr Oros <poros@redhat.com> Link: https://patch.msgid.link/20260428154907.2820654-3-ivecera@redhat.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2026-04-30dpll: add pin operational stateIvan Vecera
Add pin-operstate enum and operstate_on_dpll_get callback to report the actual hardware status of a pin with respect to its parent DPLL device. Unlike pin-state (which reflects administrative intent set by the user), operstate reflects what the hardware is actually doing. Defined operational states: - active: pin is qualified and actively used by the DPLL - standby: pin is qualified but not actively used by the DPLL - no-signal: pin does not have a valid signal - qual-failed: pin signal failed qualification The operstate is reported inside the pin-parent-device nested attribute alongside the existing state and phase-offset attributes. Signed-off-by: Ivan Vecera <ivecera@redhat.com> Reviewed-by: Jiri Pirko <jiri@nvidia.com> Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev> Reviewed-by: Petr Oros <poros@redhat.com> Link: https://patch.msgid.link/20260428154907.2820654-2-ivecera@redhat.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2026-04-30backlight: Add max25014atg backlightMaud Spierings
The Maxim MAX25014 is a 4-channel automotive grade backlight driver IC with integrated boost controller. Signed-off-by: Maud Spierings <maudspierings@gocontroll.com> Reviewed-by: Daniel Thompson (RISCstar) <danielt@kernel.org> Link: https://patch.msgid.link/20260407-max25014-v8-2-14eac7ed673a@gocontroll.com Signed-off-by: Lee Jones <lee@kernel.org>
2026-04-30dt-bindings: backlight: Add max25014 supportMaud Spierings
The Maxim MAX25014 is a 4-channel automotive grade backlight driver IC with integrated boost controller. Signed-off-by: Maud Spierings <maudspierings@gocontroll.com> Reviewed-by: Rob Herring (Arm) <robh@kernel.org> Reviewed-by: Daniel Thompson (RISCstar) <danielt@kernel.org> Link: https://patch.msgid.link/20260407-max25014-v8-1-14eac7ed673a@gocontroll.com Signed-off-by: Lee Jones <lee@kernel.org>
2026-04-30kcsan: Silence -Wmaybe-uninitialized when calling __kcsan_check_access()refs/merge-window/434fad0bfd31704048031688b14196f088486f6aMarco Elver
Some subsystems enable -Wmaybe-uninitialized [1], which can trigger false positives when KCSAN is enabled. Specifically, passing an uninitialized variable to functions that instrument accesses (e.g., copy_from_user()) results in calls to __kcsan_check_access(). Because __kcsan_check_access() takes a `const volatile void *ptr`, GCC infers that the function may only read the memory location, and thus warns if the passed variable is uninitialized. However, KCSAN is a dynamic analysis tool for data race detection; while it does read the memory location to detect concurrent modifications, the "initialized'ness" of the memory location is irrelevant for its analysis. Use absolute_pointer() in __kcsan_check_write(), kcsan_check_write(), and kcsan_check_atomic_write() to hide the pointer from the compiler, preventing it from concluding that the pointer passed points to uninitialized memory. This fixes warnings like: | CC fs/ntfs3/file.o | In file included from include/asm-generic/rwonce.h:27, | from arch/arm64/include/asm/rwonce.h:81, | from include/linux/compiler.h:369, | from include/linux/array_size.h:5, | from include/linux/kernel.h:16, | from include/linux/backing-dev.h:12, | from fs/ntfs3/file.c:10: | In function 'instrument_copy_from_user_before', | inlined from '_inline_copy_from_user' at include/linux/uaccess.h:184:2, | inlined from 'copy_from_user' at include/linux/uaccess.h:221:9, | inlined from 'ntfs_ioctl_fitrim' at fs/ntfs3/file.c:77:6, | inlined from 'ntfs_ioctl' at fs/ntfs3/file.c:164:10: | include/linux/kcsan-checks.h:220:28: error: 'range' may be used uninitialized [-Werror=maybe-uninitialized] | 220 | #define kcsan_check_access __kcsan_check_access | | ^ | include/linux/kcsan-checks.h:311:9: note: in expansion of macro 'kcsan_check_access' | 311 | kcsan_check_access(ptr, size, KCSAN_ACCESS_WRITE) | | ^~~~~~~~~~~~~~~~~~ | include/linux/instrumented.h:147:9: note: in expansion of macro 'kcsan_check_write' | 147 | kcsan_check_write(to, n); | | ^~~~~~~~~~~~~~~~~ | include/linux/kcsan-checks.h: In function 'ntfs_ioctl': | include/linux/kcsan-checks.h:37:6: note: by argument 1 of type 'const volatile void *' to '__kcsan_check_access' declared here | 37 | void __kcsan_check_access(const volatile void *ptr, size_t size, int type); | | ^~~~~~~~~~~~~~~~~~~~ | fs/ntfs3/file.c:65:29: note: 'range' declared here | 65 | struct fstrim_range range; | | ^~~~~ Link: https://lore.kernel.org/all/5da10cca-875b-418d-b54e-6be3ea32c266@app.fastmail.com/ [1] Reported-by: Arnd Bergmann <arnd@arndb.de> Reviewed-by: Arnd Bergmann <arnd@arndb.de> Tested-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Marco Elver <elver@google.com>
2026-04-30backlight: ktd2801: Enable BL_CORE_SUSPENDRESUMEDuje Mihanović
Boards using this backlight chip do not power the backlight off on suspend. Enable BL_CORE_SUSPENDRESUME so the chip gets powered off by the backlight core on suspend. Tested on samsung,coreprimevelte. Cc: stable@vger.kernel.org # v6.19 Signed-off-by: Duje Mihanović <duje@dujemihanovic.xyz> Reviewed-by: Daniel Thompson (RISCstar) <danielt@kernel.org> Link: https://patch.msgid.link/20260328-ktd2801-pm-fix-v1-1-007cb103faeb@dujemihanovic.xyz Signed-off-by: Lee Jones <lee@kernel.org>
2026-04-30ALSA: hda/realtek: Fix speaker silence after S3 resume on Xiaomi Mi Laptop ↵Yuriy Padlyak
Pro 15 The Xiaomi Mi Laptop Pro 15 (TM1905, subsystem 1d72:1905) ships with the Realtek ALC256 codec on Intel Comet Lake PCH-LP. After S3 resume the codec sets coefficient register 0x10 to 0x0220 instead of 0x0020 — bit 9 is erroneously set, which silences the internal speaker. Bluetooth and HDMI audio are unaffected because they use different paths. This is the same mechanism fixed for Clevo NJ51CU by commit edca7cc4b0ac ("ALSA: hda/realtek: Fix quirk for Clevo NJ51CU"), but the existing ALC256_FIXUP_MIC_NO_PRESENCE_AND_RESUME also reconfigures pin 0x19 as a front mic, which is wrong for this Xiaomi where pin 0x19 default is 0x411111f0 (disabled). Add a minimal fixup that only clears the stuck coef bit, and add the Xiaomi SSID to the quirk table. Verified by reading coef 0x10 with hda-verb after resume (returns 0x0220), writing 0x0020, and confirming the internal speaker resumes output. With this fixup applied the bit is cleared on every codec init, including post-resume. Signed-off-by: Yuriy Padlyak <yuriypadlyak@gmail.com> Cc: <stable@vger.kernel.org> Tested-by: Yuriy Padlyak <yuriypadlyak@gmail.com> Link: https://patch.msgid.link/20260429220903.14918-1-yuriypadlyak@gmail.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
2026-04-30mm: memcontrol: fix rcu unbalance in get_non_dying_memcg_end()Qi Zheng
Currently, get_non_dying_memcg_start() and get_non_dying_memcg_end() both evaluate cgroup_subsys_on_dfl(memory_cgrp_subsys) independently to determine whether to acquire or release the RCU read lock. However, the result of cgroup_subsys_on_dfl() can change dynamically at runtime due to cgroup hierarchy rebinding (e.g., when the memory controller is moved between cgroup v1 and v2 hierarchies). This can cause the following warning: ===================================== WARNING: bad unlock balance detected! 7.0.0-next-20260420+ #83 Tainted: G W ------------------------------------- memcg-repro/270 is trying to release lock (rcu_read_lock) at: [<ffffffff815f57f7>] rcu_read_unlock+0x17/0x60 but there are no more locks to release! other info that might help us debug this: 1 lock held by memcg-repro/270: #0: ffff888102fa2088 (vm_lock){++++}-{0:0}, at: do_user_addr_fault+0x285/0x880 stack backtrace: CPU: 0 UID: 0 PID: 270 Comm: memcg-repro Tainted: G W 7.0.0-next-20260420+ # Tainted: [W]=WARN Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014 Call Trace: <TASK> ? rcu_read_unlock+0x17/0x60 dump_stack_lvl+0x77/0xb0 print_unlock_imbalance_bug+0xe0/0xf0 ? rcu_read_unlock+0x17/0x60 lock_release+0x21d/0x2a0 rcu_read_unlock+0x1c/0x60 do_pte_missing+0x233/0xb40 __handle_mm_fault+0x80e/0xcd0 handle_mm_fault+0x146/0x310 do_user_addr_fault+0x303/0x880 exc_page_fault+0x9b/0x270 asm_exc_page_fault+0x26/0x30 RIP: 0033:0x5590e4eb41ea Code: 61 cc 66 0f 6f e0 66 0f 61 c2 66 0f db cd 66 0f 69 e2 66 0f 6f d0 66 0f 69 d4 66 0f 61 0 RSP: 002b:00007ffcad25f030 EFLAGS: 00010202 RAX: 00005590e4eb8010 RBX: 00007ffcad260f7d RCX: 00007f73c474d44d RDX: 00005590e4eb80a0 RSI: 00005590e4eb503c RDI: 000000000000000f RBP: 00005590e4eb70a0 R08: 0000000000000000 R09: 00007f73c483a680 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 00007ffcad25f180 R14: 00005590e4eb6dd8 R15: 00007f73c4869020 </TASK> ------------[ cut here ]------------ Fix this by explicitly tracking the RCU lock state, ensuring that rcu_read_unlock() in get_non_dying_memcg_end() is strictly paired with the lock acquisition, regardless of any runtime rebinding events. Link: https://lore.kernel.org/20260429073105.44472-1-qi.zheng@linux.dev Fixes: 8285917d6f38 ("mm: memcontrol: prepare for reparenting non-hierarchical stats") Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com> Acked-by: Shakeel Butt <shakeel.butt@linux.dev> Reviewed-by: Muchun Song <muchun.song@linux.dev> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Cc: Qi Zheng <zhengqi.arch@bytedance.com> Cc: Roman Gushchin <roman.gushchin@linux.dev> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2026-04-30io_uring/tw: serialize ctx->retry_llist with ->uring_lockJens Axboe
The DEFER_TASKRUN local task work paths all run under ctx->uring_lock, which serializes them with each other and with the rest of the ring's hot paths. io_move_task_work_from_local() is the exception - it's called from io_ring_exit_work() on a kworker without holding the lock and from the iopoll cancelation side right after dropping it. ->work_llist is fine with this, as it's only ever updated via the expected paths. But the ->retry_llist is updated while runing, and hence it could potentially race between normal task_work running and the task-has-exited shutdown path. Simply grab ->uring_lock while moving the local work to the fallback list for exit purposes, which nicely serializes it across both the normal additions and the exit prune path. Cc: stable@vger.kernel.org Fixes: f46b9cdb22f7 ("io_uring: limit local tw done") Reported-by: Robert Femmer <robert.femmer@x41-dsec.de> Reported-by: Christian Reitter <invd@inhq.net> Reported-by: Michael Rodler <michael.rodler@x41-dsec.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-04-30platform/x86: lenovo: wmi-other: Fix uninitialized variable in ↵Yufei CHENG
lwmi_om_hwmon_write() When the flag relax_fan_constraint is set, local variable 'raw' is never assigned, and lwmi_om_hwmon_write() will pass uninitialized value to lwmi_om_fan_get_set() resulting in undefined behavior. This flag allows user to bypass minimum fan RPM divisor rounding, but assignment to 'raw' only happens in the non-relaxed path. Fix by defaulting 'raw' to user provided 'val' in the else branch. Fixes: 51ed34282f63 ("platform/x86: lenovo-wmi-other: Add HWMON for fan reporting/tuning") Reviewed-by: Rong Zhang <i@rong.moe> Signed-off-by: Yufei CHENG <cd345al@gmail.com> Link: https://patch.msgid.link/20260426165034.9073-1-cd345al@gmail.com Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
2026-04-30platform/x86: hp-wmi: silence unknown board warning for 8D41Krishna Chomal
The HP Omen Max 16-ah0xxx, DMI board ID 8D41 is currently marked with victus_s_thermal_params in the victus_s_thermal_profile_boards[] list. This disables thermal profile readback and adds a dmesg warning during driver init for "unknown board". After testing we know that (similar to another HP Omen Max 16 device, board ID 8D87), the embedded controller on this board does not expose thermal profile which means we have to intentionally disable EC readback. Changing its driver_data to omen_v1_no_ec_thermal_params is sufficient to silence the warning. Tested-by: Benjamin Y <hectare.plains1h@icloud.com> Signed-off-by: Krishna Chomal <krishna.chomal108@gmail.com> Link: https://patch.msgid.link/20260429180953.129885-1-krishna.chomal108@gmail.com Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
2026-04-30platform/wmi: Fix unchecked min_size in wmidev_invoke_method()Kurt Borja
After calling wmidev_evaluate_method(), if the ACPI core does not return an out object, then wmidev_invoke_method() bypasses the min_size check and returns 0. Add a check for min_size if there is not an out object. Fixes: 1aeded2f55f0 ("platform/wmi: Extend wmidev_query_block() to reject undersized data") Closes: https://sashiko.dev/#/patchset/20260406203237.2970-1-W_Armin%40gmx.de Signed-off-by: Kurt Borja <kuurtb@gmail.com> Reviewed-by: Armin Wolf <W_Armin@gmx.de> Link: https://patch.msgid.link/20260429-invoke-fix-v1-1-ce938eb80cd3@gmail.com Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
2026-04-30ASoC: fsl-asoc-card: Add some improvementsMark Brown
Shengjiu Wang <shengjiu.wang@nxp.com> says: This patch series addresses several issues in the Freescale Generic ASoC Sound Card driver related to hardware limitations, DPCM path switching, and codec-specific constraints. The fsl-asoc-card driver provides a generic machine driver for i.MX SoCs, supporting various codecs and optional ASRC (Asynchronous Sample Rate Converter) for sample rate conversion. During testing several issues were identified: 1. Missing channel constraint propagation in DPCM mode 2. DPCM path switching causing audio dropouts 3. Hardware channel alignment requirements 4. Clock generation limitations preventing certain audio formats 5. Codec-specific PLL frequency violations
2026-04-30ASoC: fsl-asoc-card: reduce WM8904 PLL ratio to meet frequency limitShengjiu Wang
WM8904 has a 27 MHz PLL frequency limit. The current S24_LE PLL ratio of 384 exceeds this at high sample rates (96 kHz × 384 = 36.864 MHz). Reduce the ratio to 192 for WM8904, keeping PLL within limits at all supported rates (96 kHz × 192 = 18.432 MHz). Add codec-specific pll_ratio_s24 field, default 384, override to 192 for WM8904. Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com> Link: https://patch.msgid.link/20260429100028.2739711-6-shengjiu.wang@nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-04-30ASoC: fsl-asoc-card: exclude S20_3LE format for WM8960/WM8962 + SAIShengjiu Wang
S20_3LE format cannot be used with WM8960/WM8962 codecs when paired with SAI, due to two distinct BCLK generation limitations: 1. Codec Master Mode: When WM8960/WM8962 generates BCLK, it cannot produce the exact 1.92 MHz required for S20_3LE at 48kHz stereo (48000 × 2 × 20). The codec uses fixed dividers from SYSCLK (12.288 MHz), and the required divider (6.4) is not available. The closest divider is 6, producing 2.048 MHz, which causes right channel corruption. 2. SAI Master Mode: SAI derive BCLK from MCLK using integer dividers only. S20_3LE requires non-integer divider ratios with standard MCLK frequencies. For example, 48kHz stereo needs 1.920 MHz BCLK, which requires a divider of 6.4 from 12.288 MHz MCLK (not an integer). Exclude S20_3LE format for WM8960/WM8962 when used with SAI to prevent these issues. Users should use S16_LE, S24_LE, or S32_LE instead. Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com> Link: https://patch.msgid.link/20260429100028.2739711-5-shengjiu.wang@nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-04-30ASoC: fsl-asoc-card: add channel and rate constraints for CS42888Shengjiu Wang
The CS42888 codec has 4 I2S lanes with 2 channels per lane. Using odd channel counts (3, 5, 7) causes data misalignment in the I2S frame, resulting in incorrect channel mapping. Only mono and even channel counts (1, 2, 4, 6, 8) work correctly. Additionally, the fixed system clock on i.MX platforms limits supported sample rates. With 12.288 MHz MCLK, only 48kHz family rates (48k, 96k, 192k) achieve valid MCLK:LRCK ratios. With 11.2896 MHz MCLK, only 44k family rates are supported. Add a startup callback to apply PCM constraints for both channels and rates, preventing userspace from requesting unsupported configurations. Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com> Link: https://patch.msgid.link/20260429100028.2739711-4-shengjiu.wang@nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-04-30ASoC: fsl-asoc-card: enable ignore_pmdown_time for ASRC caseShengjiu Wang
Problem: When switching from ASRC path (hw:0,1) to direct path (hw:0,0), audio stops after 5 seconds due to DAPM powering down shared widgets. Scenario: 1. Play on hw:0,1 (ASRC): ASRC-Playback → CPU-Playback → Codec 2. Stop playback 3. Play on hw:0,0 (Direct): CPU-Playback → Codec 4. After 5s: No sound (DAPM powered down CPU-Playback) Root Cause: DAPM sees ASRC-Playback disconnected and powers down the entire path including CPU-Playback, even though CPU-Playback is still needed for the direct path. Solution: Enable ignore_pmdown_time for DPCM links to prevent premature widget power-down when switching between paths. Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com> Link: https://patch.msgid.link/20260429100028.2739711-3-shengjiu.wang@nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-04-30ASoC: fsl-asoc-card: enable dpcm_merged_chan flag for ASRC frontendShengjiu Wang
When using ASRC in DPCM mode, the backend DAI (codec) may have channel constraints that differ from the frontend. For example, the ASRC can support 1-8 channels, but the codec might only support stereo (2 channels). Without dpcm_merged_chan, userspace can open the frontend with unsupported channel counts, leading to errors when the backend is configured. Enable dpcm_merged_chan to merge backend channel constraints to the frontend, ensuring userspace only sees valid channel configurations. This fixes issues where applications attempt to use channel counts that the backend codec doesn't support. Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com> Link: https://patch.msgid.link/20260429100028.2739711-2-shengjiu.wang@nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>