From nobody Fri Apr 3 04:42:41 2026 Received: from www522.your-server.de (www522.your-server.de [195.201.215.122]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 77DC729B8E8; Tue, 17 Feb 2026 18:57:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.201.215.122 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771354656; cv=none; b=tlEIGZXC72alM5hnmztawpJye/jULOtgZeloRiqsWVcFeA5eHkWDa5pvRsLqYS/t35Mc5yIw1LejhIMPgAD6GnAaabEJKE0vBlTL6NOxyrE0AYJVkfY3Dr46dQ6bGlcuo7ohoEOhGqdkArKAhkSrJCDujNSK7TZSaABeC4f2uiQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771354656; c=relaxed/simple; bh=imlzH067F4JDsj1zdbiGbMYee36NYYzqjex56bk8Qew=; h=Message-Id:Cc:To:From:Date:Subject; b=nugXIxmMU3re8eZJ1CBZkhUrLZyZT8L+lz9joajpYeyXjTQxgYLrw6E49xhUe3QJBnNjWQxNRNPS0JGvTtgiFzqL2AK5R+xN2ACFRI5UvcHXIcgQToGlvnTMETf+LdnfNLzVeuAqdCq2jYId8yXS/6AQP8KgdjE+R/GZ5bi1rcU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=folker-schwesinger.de; spf=pass smtp.mailfrom=folker-schwesinger.de; dkim=pass (2048-bit key) header.d=folker-schwesinger.de header.i=@folker-schwesinger.de header.b=JRfLUWQa; arc=none smtp.client-ip=195.201.215.122 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=folker-schwesinger.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=folker-schwesinger.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=folker-schwesinger.de header.i=@folker-schwesinger.de header.b="JRfLUWQa" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=folker-schwesinger.de; s=default2212; h=Subject:Date:From:To:Cc:Message-Id: Sender:Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References; bh=3XPu6FDZWTL9k9evNBDfynBLXPebQkKUMud/CTiGXZg=; b=JRfLUWQaY0vZHtfEND2YNrWnM8 RsbuEPXFiphPcsv0LWCSVj87pq7/QJA2OAWom92TMdhyGzceM0hZBeIyxYf/6aF5krduSxa/hYMrf WJP1kLRapoRzkamvmVnALASUfHRkSjQhzrfaIKcHe9QHlVqJhny1KCSaJAzj0PlBPxvfmsO2mnYdD ziAvN9VAzCBpmmevxAp2El5GQrytN/OtI4SSZGrahhQ8U1z7fMLef0wSQx1SbcuDTm2TAmAyyxtUI y7kn32mave0+nWSanEeSsYQnYn75/wYB+romOM9N5UBrq1CryI1/ixbFXhMGBDs7lAfB+0xRxz/ps dt8pcHGw==; Received: from sslproxy05.your-server.de ([78.46.172.2]) by www522.your-server.de with esmtpsa (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.96.2) (envelope-from ) id 1vsQGA-0001lc-2z; Tue, 17 Feb 2026 19:57:22 +0100 Received: from localhost ([127.0.0.1]) by sslproxy05.your-server.de with esmtpsa (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vsQGA-0006Eh-0B; Tue, 17 Feb 2026 19:57:22 +0100 Message-Id: Cc: "Vinod Koul" , "Frank Li" , "Michal Simek" , "Suraj Gupta" , "Thomas Gessler" , "Radhey Shyam Pandey" , "Tomi Valkeinen" , , , "Rahul Navale" To: From: "Folker Schwesinger" Date: Tue, 17 Feb 2026 19:49:13 +0100 Subject: [RFC PATCH] dmaengine: xilinx_dma: Fix per-channel direction reporting via device_caps X-Virus-Scanned: Clear (ClamAV 1.4.3/27915/Tue Feb 17 08:24:54 2026) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Since commit 7e01511443c3 ("dmaengine: xilinx_dma: Set dma_device directions") all channel directions are aggregated into dma_device.directions so that dma_get_slave_caps() works for IIO DMAEngine buffers. However, this caused a regression in ASoC audio on ZynqMP platforms, that causes cyclic playback to fail after the first buffer period, because ASoC dmaengine PCM expects fixed per-channel direction reporting from dma_get_slave_caps(). Implement optional device_caps() callback and override caps->directions with the channel's fixed direction. This keeps device-wide direction reporting for IIO intact while restoring correct per-channel semantics for ASoC. Other dma_slave_caps fields are left unchanged from their respective values initialized from dma_get_slave_caps(). In case there should ever be the need to override other fields, these can be added later. Fixes: 7e01511443c3 ("dmaengine: xilinx_dma: Set dma_device directions") Cc: stable@vger.kernel.org Reported-by: Rahul Navale Closes: https://lore.kernel.org/dmaengine/20260211140051.8177-1-rahulnavale= 04@gmail.com/T/#u Closes: https://lore.kernel.org/dmaengine/CY1PR12MB96978AEBD6072FC469DFEAF1= B762A@CY1PR12MB9697.namprd12.prod.outlook.com/T/#u Signed-off-by: Folker Schwesinger --- Posting this as RFC because I can't verify this actually fixes the regression as I don't have a ZynqMP. So Rahul, could you test if this fixes the issue and report back? BR F. --- drivers/dma/xilinx/xilinx_dma.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dm= a.c index 64b3fba4e44f..bdd16173d762 100644 --- a/drivers/dma/xilinx/xilinx_dma.c +++ b/drivers/dma/xilinx/xilinx_dma.c @@ -1711,6 +1711,19 @@ static void xilinx_dma_issue_pending(struct dma_chan= *dchan) spin_unlock_irqrestore(&chan->lock, flags); } =20 +/** + * xilinx_dma_device_caps - Write channel-specific DMA slave capabilities + * @dchan: DMA channel + * @caps: DMA slave capabilities of DMA channel + */ +static void xilinx_dma_device_caps(struct dma_chan *dchan, + struct dma_slave_caps *caps) +{ + struct xilinx_dma_chan *chan =3D to_xilinx_chan(dchan); + + caps->directions =3D chan->direction; +} + /** * xilinx_dma_device_config - Configure the DMA channel * @dchan: DMA channel @@ -3292,6 +3305,7 @@ static int xilinx_dma_probe(struct platform_device *p= dev) xdev->common.device_tx_status =3D xilinx_dma_tx_status; xdev->common.device_issue_pending =3D xilinx_dma_issue_pending; xdev->common.device_config =3D xilinx_dma_device_config; + xdev->common.device_caps =3D xilinx_dma_device_caps; if (xdev->dma_config->dmatype =3D=3D XDMA_TYPE_AXIDMA) { dma_cap_set(DMA_CYCLIC, xdev->common.cap_mask); xdev->common.device_prep_peripheral_dma_vec =3D xilinx_dma_prep_peripher= al_dma_vec; base-commit: ab736ed52e3409b58a4888715e4425b6e8ac444f --=20 2.53.0