From: Rahul Navale <rahulnavale04@gmail.com>
To: Folker Schwesinger <dev@folker-schwesinger.de>
Cc: Rahul Navale <rahul.navale@ifm.com>,
dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, vkoul@kernel.org,
Frank.Li@kernel.org, michal.simek@amd.com, suraj.gupta2@amd.com,
thomas.gessler@brueckmann-gmbh.de, radhey.shyam.pandey@amd.com,
tomi.valkeinen@ideasonboard.com, rahulnavale04@gmail.com,
marex@nabladev.com, marex@denx.de
Subject: Re: [RFC PATCH] dmaengine: xilinx_dma: Fix per-channel direction reporting via device_caps
Date: Wed, 4 Mar 2026 14:05:41 +0530 [thread overview]
Message-ID: <20260304083544.4678-1-rahulnavale04@gmail.com> (raw)
In-Reply-To: <DGHGTCJRRZCW.9TGXQW44V6RR@folker-schwesinger.de>
From: Rahul Navale <rahul.navale@ifm.com>
Hi Folker,
Thanks — I followed your suggested debugging steps.
>For the next debugging step I suggest that we focus on (2) but also on
>getting some insight into the callers. Could you please reapply
>7e01511443c3, keep the RFC patch in place and additionally apply the
>below patch?
>This will exercise your bad case, print the differences for caps, and
>also print the call stacks for all calls to dma_get_slave_caps().
I have applied 7e01511443c3, kept RFC patch(xilinx_dma_device_caps + printk)
and dmaengine.c debug patch applied (dma_slave_caps_printk() + dump_stack())
Observation: Issue still persists. cyclic playback fails after the first buffer period.
logs:
root@pdm3:~# dmesg | grep xilinx_dma_device_caps
[ 0.302398] xilinx_dma_device_caps: caps->directions = 0x00000001
[ 0.302401] xilinx_dma_device_caps: caps->directions = 0x00000001
[ 0.303124] xilinx_dma_device_caps: caps->directions = 0x00000002
[ 0.303128] xilinx_dma_device_caps: caps->directions = 0x00000002
[ 7.762354] xilinx_dma_device_caps: caps->directions = 0x00000001
[ 7.762358] xilinx_dma_device_caps: caps->directions = 0x00000001
root@pdm3:~# aplay closetoyou.wav
Playing WAVE 'closetoyou.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
^CAborted by signal Interrupt...
aplay: pcm_write:2178: write error: Interrupted system call
root@pdm3:~# ^C
root@pdm3:~# ^C
root@pdm3:~# dmesg | grep xilinx_dma_device_caps
[ 0.302398] xilinx_dma_device_caps: caps->directions = 0x00000001
[ 0.302401] xilinx_dma_device_caps: caps->directions = 0x00000001
[ 0.303124] xilinx_dma_device_caps: caps->directions = 0x00000002
[ 0.303128] xilinx_dma_device_caps: caps->directions = 0x00000002
[ 7.762354] xilinx_dma_device_caps: caps->directions = 0x00000001
[ 7.762358] xilinx_dma_device_caps: caps->directions = 0x00000001
[ 44.792624] xilinx_dma_device_caps: caps->directions = 0x00000001
[ 44.792628] xilinx_dma_device_caps: caps->directions = 0x00000001
<4>[ 0.302360] dma_slave_caps:
<4>[ 0.302364] src_addr_widths = 0x00000000
<4>[ 0.302368] dst_addr_widths = 0x00000000
<4>[ 0.302371] directions = 0x00000000
<4>[ 0.302374] min_burst = 0x00000000
<4>[ 0.302377] max_burst = 0x00000000
<4>[ 0.302380] max_sg_burst = 0x00000000
<4>[ 0.302383] cmd_pause = 0x00
<4>[ 0.302386] cmd_resume = 0x00
<4>[ 0.302388] cmd_terminate = 0x00
<4>[ 0.302391] residue_granularity= 0x00000000
<4>[ 0.302394] descriptor_reuse = 0x00
<4>[ 0.302398] xilinx_dma_device_caps: caps->directions = 0x00000001
<4>[ 0.302401] xilinx_dma_device_caps: caps->directions = 0x00000001
<4>[ 0.302404] dma_slave_caps:
<4>[ 0.302406] src_addr_widths = 0x00000000
<4>[ 0.302409] dst_addr_widths = 0x00000000
<4>[ 0.302412] directions = 0x00000001
<4>[ 0.302415] min_burst = 0x00000000
<4>[ 0.302418] max_burst = 0x00000000
<4>[ 0.302421] max_sg_burst = 0x00000000
<4>[ 0.302423] cmd_pause = 0x00
<4>[ 0.302426] cmd_resume = 0x00
<4>[ 0.302429] cmd_terminate = 0x01
<4>[ 0.302431] residue_granularity= 0x00000001
<4>[ 0.302434] descriptor_reuse = 0x00
<4>[ 0.302437] <stack>
<4>[ 0.302442] CPU: 3 UID: 0 PID: 40 Comm: kworker/u20:0 Not tainted 6.12.74-stable-standard-00032-g4c3d957ee56f #1
<4>[ 0.302453] Hardware name: pdm3_10_001-2 (DT)
<4>[ 0.302459] Workqueue: events_unbound deferred_probe_work_func
<4>[ 0.302479] Call trace:
<4>[ 0.302482] dump_backtrace+0xd0/0x108
<4>[ 0.302498] show_stack+0x14/0x1c
<4>[ 0.302510] dump_stack_lvl+0x5c/0x78
<4>[ 0.302521] dump_stack+0x14/0x1c
<4>[ 0.302530] dma_get_slave_caps+0xf8/0x114
<4>[ 0.302544] dmaengine_pcm_new+0x190/0x29c
<4>[ 0.302557] snd_soc_pcm_component_new+0x50/0x88
<4>[ 0.302566] soc_new_pcm+0x520/0x618
<4>[ 0.302575] snd_soc_bind_card+0x6cc/0xa48
<4>[ 0.302585] snd_soc_register_card+0xec/0x100
<4>[ 0.302593] devm_snd_soc_register_card+0x48/0x88
<4>[ 0.302603] simple_probe+0x370/0x380
<4>[ 0.302611] platform_probe+0x64/0xb0
<4>[ 0.302623] really_probe+0x18c/0x32c
<4>[ 0.302633] __driver_probe_device+0x120/0x138
<4>[ 0.302643] driver_probe_device+0x38/0xf0
<4>[ 0.302653] __device_attach_driver+0x100/0x114
<4>[ 0.302664] bus_for_each_drv+0xac/0xd4
<4>[ 0.302673] __device_attach+0xe4/0x164
<4>[ 0.302683] device_initial_probe+0x10/0x18
<4>[ 0.302693] bus_probe_device+0x38/0x9c
<4>[ 0.302702] deferred_probe_work_func+0xc8/0xdc
<4>[ 0.302712] process_scheduled_works+0x18c/0x23c
<4>[ 0.302725] worker_thread+0x140/0x1c0
<4>[ 0.302736] kthread+0xd8/0xe8
<4>[ 0.302747] ret_from_fork+0x10/0x20
<4>[ 0.302756] </stack>
<4>[ 0.303089] dma_slave_caps:
<4>[ 0.303092] src_addr_widths = 0x00000000
<4>[ 0.303096] dst_addr_widths = 0x00000000
<4>[ 0.303099] directions = 0x00000000
<4>[ 0.303102] min_burst = 0x00000000
<4>[ 0.303105] max_burst = 0x00000000
<4>[ 0.303107] max_sg_burst = 0x00000000
<4>[ 0.303110] cmd_pause = 0x00
<4>[ 0.303113] cmd_resume = 0x00
<4>[ 0.303116] cmd_terminate = 0x00
<4>[ 0.303119] residue_granularity= 0x00000000
<4>[ 0.303121] descriptor_reuse = 0x00
<4>[ 0.303124] xilinx_dma_device_caps: caps->directions = 0x00000002
<4>[ 0.303128] xilinx_dma_device_caps: caps->directions = 0x00000002
<4>[ 0.303131] dma_slave_caps:
<4>[ 0.303133] src_addr_widths = 0x00000000
<4>[ 0.303135] dst_addr_widths = 0x00000000
<4>[ 0.303138] directions = 0x00000002
<4>[ 0.303141] min_burst = 0x00000000
<4>[ 0.303144] max_burst = 0x00000000
<4>[ 0.303147] max_sg_burst = 0x00000000
<4>[ 0.303149] cmd_pause = 0x00
<4>[ 0.303152] cmd_resume = 0x00
<4>[ 0.303155] cmd_terminate = 0x01
<4>[ 0.303158] residue_granularity= 0x00000001
<4>[ 0.303161] descriptor_reuse = 0x00
<4>[ 0.303163] <stack>
<4>[ 0.303176] Hardware name: pdm3_10_001-2 (DT)
.....
.....
.....
<6>[ 7.102399] macb ff0c0000.ethernet eth1: Link is Up - 100Mbps/Full - flow control tx
<3>[ 7.458535] lima fd4b0000.gpu: resume clk fail -13
<6>[ 7.683306] input: PDM3 virtual keyboard as /devices/virtual/input/input3
<4>[ 7.762300] dma_slave_caps:
<4>[ 7.762316] src_addr_widths = 0x00000000
<4>[ 7.762322] dst_addr_widths = 0x00000000
<4>[ 7.762325] directions = 0x00000000
<4>[ 7.762328] min_burst = 0x00000000
<4>[ 7.762331] max_burst = 0x00000000
<4>[ 7.762334] max_sg_burst = 0x00000000
<4>[ 7.762337] cmd_pause = 0x00
<4>[ 7.762341] cmd_resume = 0x00
<4>[ 7.762344] cmd_terminate = 0x00
<4>[ 7.762347] residue_granularity= 0x00000000
<4>[ 7.762350] descriptor_reuse = 0x00
<4>[ 7.762354] xilinx_dma_device_caps: caps->directions = 0x00000001
<4>[ 7.762358] xilinx_dma_device_caps: caps->directions = 0x00000001
<4>[ 7.762361] dma_slave_caps:
<4>[ 7.762364] src_addr_widths = 0x00000000
<4>[ 7.762366] dst_addr_widths = 0x00000000
<4>[ 7.762370] directions = 0x00000001
<4>[ 7.762373] min_burst = 0x00000000
<4>[ 7.762376] max_burst = 0x00000000
<4>[ 7.762379] max_sg_burst = 0x00000000
<4>[ 7.762382] cmd_pause = 0x00
<4>[ 7.762385] cmd_resume = 0x00
<4>[ 7.762387] cmd_terminate = 0x01
<4>[ 7.762390] residue_granularity= 0x00000001
<4>[ 7.762394] descriptor_reuse = 0x00
<4>[ 7.762397] <stack>
<4>[ 7.762416] Hardware name: pdm3_10_001-2 (DT)
<4>[ 7.762422] Call trace:
<4>[ 7.762425] dump_backtrace+0xd0/0x108
<4>[ 7.762447] show_stack+0x14/0x1c
<4>[ 7.762459] dump_stack_lvl+0x5c/0x78
<4>[ 7.762471] dump_stack+0x14/0x1c
<4>[ 7.762480] dma_get_slave_caps+0xf8/0x114
<4>[ 7.762495] snd_dmaengine_pcm_refine_runtime_hwparams+0x60/0x15c
<4>[ 7.762510] dmaengine_pcm_open+0x180/0x1a8
<4>[ 7.762524] snd_soc_component_open+0x50/0x5c
<4>[ 7.762532] __soc_pcm_open+0x84/0x3a4
<4>[ 7.762542] soc_pcm_open+0x28/0x44
<4>[ 7.762550] snd_pcm_open_substream+0x4ec/0x750
<4>[ 7.762560] snd_pcm_open+0xb8/0x1ec
<4>[ 7.762568] snd_pcm_playback_open+0x48/0x70
<4>[ 7.762576] snd_open+0x150/0x15c
<4>[ 7.762587] chrdev_open+0x170/0x198
<4>[ 7.762601] do_dentry_open+0x2f8/0x3a4
<4>[ 7.762613] vfs_open+0x24/0x44
<4>[ 7.762621] path_openat+0x8cc/0xa04
<4>[ 7.762629] do_filp_open+0x60/0xd0
<4>[ 7.762636] do_sys_openat2+0xa0/0xec
<4>[ 7.762644] do_sys_open+0x44/0x6c
<4>[ 7.762652] __arm64_sys_openat+0x1c/0x24
<4>[ 7.762659] invoke_syscall+0x68/0xf0
<4>[ 7.762671] el0_svc_common.constprop.0+0xb0/0xcc
<4>[ 7.762682] do_el0_svc+0x18/0x20
<4>[ 7.762693] el0_svc+0x18/0x44
<4>[ 7.762705] el0t_64_sync_handler+0x80/0x124
<4>[ 7.762717] el0t_64_sync+0x14c/0x150
<4>[ 7.762726] </stack>
.....
.....
.....
<5>[ 40.293549] audit: type=1327 audit(1772610878.644:23): proctitle=737368643A20726F6F74205B707269765D
<4>[ 44.792575] dma_slave_caps:
<4>[ 44.792589] src_addr_widths = 0x00000000
<4>[ 44.792593] dst_addr_widths = 0x00000000
<4>[ 44.792596] directions = 0x00000000
<4>[ 44.792599] min_burst = 0x00000000
<4>[ 44.792602] max_burst = 0x00000000
<4>[ 44.792606] max_sg_burst = 0x00000000
<4>[ 44.792609] cmd_pause = 0x00
<4>[ 44.792612] cmd_resume = 0x00
<4>[ 44.792614] cmd_terminate = 0x00
<4>[ 44.792618] residue_granularity= 0x00000000
<4>[ 44.792621] descriptor_reuse = 0x00
<4>[ 44.792624] xilinx_dma_device_caps: caps->directions = 0x00000001
<4>[ 44.792628] xilinx_dma_device_caps: caps->directions = 0x00000001
<4>[ 44.792631] dma_slave_caps:
<4>[ 44.792633] src_addr_widths = 0x00000000
<4>[ 44.792636] dst_addr_widths = 0x00000000
<4>[ 44.792639] directions = 0x00000001
<4>[ 44.792642] min_burst = 0x00000000
<4>[ 44.792645] max_burst = 0x00000000
<4>[ 44.792648] max_sg_burst = 0x00000000
<4>[ 44.792651] cmd_pause = 0x00
<4>[ 44.792654] cmd_resume = 0x00
<4>[ 44.792656] cmd_terminate = 0x01
<4>[ 44.792659] residue_granularity= 0x00000001
<4>[ 44.792662] descriptor_reuse = 0x00
<4>[ 44.792665] <stack>
<4>[ 44.792671] CPU: 3 UID: 0 PID: 1225 Comm: aplay Not tainted 6.12.74-stable..
<4>[ 44.792684] Hardware name: pdm3_10_001-2 (DT)
<4>[ 44.792689] Call trace:
<4>[ 44.792692] dump_backtrace+0xd0/0x108
<4>[ 44.792713] show_stack+0x14/0x1c
<4>[ 44.792725] dump_stack_lvl+0x5c/0x78
<4>[ 44.792737] dump_stack+0x14/0x1c
<4>[ 44.792746] dma_get_slave_caps+0xf8/0x114
<4>[ 44.792761] snd_dmaengine_pcm_refine_runtime_hwparams+0x60/0x15c
<4>[ 44.792775] dmaengine_pcm_open+0x180/0x1a8
<4>[ 44.792788] snd_soc_component_open+0x50/0x5c
<4>[ 44.792796] __soc_pcm_open+0x84/0x3a4
<4>[ 44.792805] soc_pcm_open+0x28/0x44
<4>[ 44.792813] snd_pcm_open_substream+0x4ec/0x750
<4>[ 44.792822] snd_pcm_open+0xb8/0x1ec
<4>[ 44.792830] snd_pcm_playback_open+0x48/0x70
<4>[ 44.792838] snd_open+0x150/0x15c
<4>[ 44.792849] chrdev_open+0x170/0x198
<4>[ 44.792863] do_dentry_open+0x2f8/0x3a4
<4>[ 44.792875] vfs_open+0x24/0x44
<4>[ 44.792882] path_openat+0x8cc/0xa04
<4>[ 44.792890] do_filp_open+0x60/0xd0
<4>[ 44.792897] do_sys_openat2+0xa0/0xec
<4>[ 44.792905] do_sys_open+0x44/0x6c
<4>[ 44.792912] __arm64_sys_openat+0x1c/0x24
<4>[ 44.792920] invoke_syscall+0x68/0xf0
<4>[ 44.792931] el0_svc_common.constprop.0+0xb0/0xcc
<4>[ 44.792942] do_el0_svc+0x18/0x20
<4>[ 44.792953] el0_svc+0x18/0x44
<4>[ 44.792964] el0t_64_sync_handler+0x80/0x124
<4>[ 44.792977] el0t_64_sync+0x14c/0x150
<4>[ 44.792985] </stack>
>To quickly test theory (2), you could then comment out the caps->
>assignments in dma_get_slave_caps() and check if this fixes your issue
>or not.
I have applied 7e01511443c3, kept RFC patch(xilinx_dma_device_caps + printk)
and dmaengine.c debug patch applied (dma_slave_caps_printk() + dump_stack())
and comment out the caps->assignments in dma_get_slave_caps()
Observation:Audio works normally.
logs:
root@pdm3:~# dmesg | grep xilinx_dma_device_caps
[ 0.301728] xilinx_dma_device_caps: caps->directions = 0x00000000
[ 0.301731] xilinx_dma_device_caps: caps->directions = 0x00000001
[ 0.302421] xilinx_dma_device_caps: caps->directions = 0x00000000
[ 0.302424] xilinx_dma_device_caps: caps->directions = 0x00000002
[ 5.882992] xilinx_dma_device_caps: caps->directions = 0x00000000
[ 5.882996] xilinx_dma_device_caps: caps->directions = 0x00000001
root@pdm3:~#
root@pdm3:~# aplay closetoyou.wav
Playing WAVE 'closetoyou.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
root@pdm3:~# aplay closetoyou.wav
Playing WAVE 'closetoyou.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
root@pdm3:~# aplay closetoyou.wav
Playing WAVE 'closetoyou.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
^X^X^CAborted by signal Interrupt...
root@pdm3:~# dmesg | grep xilinx_dma_device_caps
[ 0.301728] xilinx_dma_device_caps: caps->directions = 0x00000000
[ 0.301731] xilinx_dma_device_caps: caps->directions = 0x00000001
[ 0.302421] xilinx_dma_device_caps: caps->directions = 0x00000000
[ 0.302424] xilinx_dma_device_caps: caps->directions = 0x00000002
[ 5.882992] xilinx_dma_device_caps: caps->directions = 0x00000000
[ 5.882996] xilinx_dma_device_caps: caps->directions = 0x00000001
[ 324.413686] xilinx_dma_device_caps: caps->directions = 0x00000000
[ 324.413689] xilinx_dma_device_caps: caps->directions = 0x00000001
[ 348.022906] xilinx_dma_device_caps: caps->directions = 0x00000000
[ 348.022910] xilinx_dma_device_caps: caps->directions = 0x00000001
[ 402.654943] xilinx_dma_device_caps: caps->directions = 0x00000000
[ 402.654946] xilinx_dma_device_caps: caps->directions = 0x00000001
[ 423.598936] xilinx_dma_device_caps: caps->directions = 0x00000000
[ 423.598940] xilinx_dma_device_caps: caps->directions = 0x00000001
next prev parent reply other threads:[~2026-03-04 8:36 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-17 18:49 [RFC PATCH] dmaengine: xilinx_dma: Fix per-channel direction reporting via device_caps Folker Schwesinger
2026-02-20 9:14 ` Rahul Navale
2026-02-20 9:30 ` Pandey, Radhey Shyam
2026-02-20 13:28 ` Rahul Navale
2026-02-20 19:09 ` Folker Schwesinger
2026-02-24 9:30 ` Rahul Navale
2026-02-24 15:10 ` Folker Schwesinger
2026-02-26 7:35 ` Rahul Navale
2026-02-26 20:06 ` Folker Schwesinger
2026-02-26 8:02 ` Rahul Navale
2026-03-02 7:24 ` Rahul Navale
2026-03-03 20:09 ` Folker Schwesinger
2026-03-03 20:19 ` Folker Schwesinger
2026-03-04 8:35 ` Rahul Navale [this message]
2026-03-04 14:49 ` Folker Schwesinger
2026-03-05 7:23 ` Rahul Navale
2026-03-05 8:22 ` Folker Schwesinger
2026-03-05 8:29 ` Rahul Navale
2026-03-05 8:32 ` Folker Schwesinger
2026-03-05 11:27 ` Rahul Navale
2026-03-06 10:38 ` Folker Schwesinger
2026-03-09 7:28 ` Rahul Navale
2026-03-14 8:35 ` Folker Schwesinger
2026-03-16 22:35 ` Marek Vasut
2026-03-14 8:45 ` Folker Schwesinger
2026-03-17 10:49 ` Rahul Navale
2026-03-17 17:20 ` Marek Vasut
2026-03-18 12:35 ` Rahul Navale
2026-03-27 14:51 ` Marek Vasut
2026-03-25 14:22 ` Rahul Navale
2026-03-27 11:43 ` Michal Simek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260304083544.4678-1-rahulnavale04@gmail.com \
--to=rahulnavale04@gmail.com \
--cc=Frank.Li@kernel.org \
--cc=dev@folker-schwesinger.de \
--cc=dmaengine@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marex@denx.de \
--cc=marex@nabladev.com \
--cc=michal.simek@amd.com \
--cc=radhey.shyam.pandey@amd.com \
--cc=rahul.navale@ifm.com \
--cc=suraj.gupta2@amd.com \
--cc=thomas.gessler@brueckmann-gmbh.de \
--cc=tomi.valkeinen@ideasonboard.com \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox