linux/sound/soc
Maxim Kochetkov 011a8719d6
ASoC: dwc: move DMA init to snd_soc_dai_driver probe()
When using DMA mode we are facing with Oops:
[  396.458157] Unable to handle kernel access to user memory without uaccess routines at virtual address 000000000000000c
[  396.469374] Oops [#1]
[  396.471839] Modules linked in:
[  396.475144] CPU: 0 PID: 114 Comm: arecord Not tainted 6.0.0-00164-g9a8eccdaf2be-dirty #68
[  396.483619] Hardware name: YMP ELCT FPGA (DT)
[  396.488156] epc : dmaengine_pcm_open+0x1d2/0x342
[  396.493227]  ra : dmaengine_pcm_open+0x1d2/0x342
[  396.498140] epc : ffffffff807fe346 ra : ffffffff807fe346 sp : ffffffc804e138f0
[  396.505602]  gp : ffffffff817bf730 tp : ffffffd8042c8ac0 t0 : 6500000000000000
[  396.513045]  t1 : 0000000000000064 t2 : 656e69676e65616d s0 : ffffffc804e13990
[  396.520477]  s1 : ffffffd801b86a18 a0 : 0000000000000026 a1 : ffffffff816920f8
[  396.527897]  a2 : 0000000000000010 a3 : fffffffffffffffe a4 : 0000000000000000
[  396.535319]  a5 : 0000000000000000 a6 : ffffffd801b87040 a7 : 0000000000000038
[  396.542740]  s2 : ffffffd801b94a00 s3 : 0000000000000000 s4 : ffffffd80427f5e8
[  396.550153]  s5 : ffffffd80427f5e8 s6 : ffffffd801b44410 s7 : fffffffffffffff5
[  396.557569]  s8 : 0000000000000800 s9 : 0000000000000001 s10: ffffffff8066d254
[  396.564978]  s11: ffffffd8059cf768 t3 : ffffffff817d5577 t4 : ffffffff817d5577
[  396.572391]  t5 : ffffffff817d5578 t6 : ffffffc804e136e8
[  396.577876] status: 0000000200000120 badaddr: 000000000000000c cause: 000000000000000d
[  396.586007] [<ffffffff806839f4>] snd_soc_component_open+0x1a/0x68
[  396.592439] [<ffffffff807fdd62>] __soc_pcm_open+0xf0/0x502
[  396.598217] [<ffffffff80685d86>] soc_pcm_open+0x2e/0x4e
[  396.603741] [<ffffffff8066cea4>] snd_pcm_open_substream+0x442/0x68e
[  396.610313] [<ffffffff8066d1ea>] snd_pcm_open+0xfa/0x212
[  396.615868] [<ffffffff8066d39c>] snd_pcm_capture_open+0x3a/0x60
[  396.622048] [<ffffffff8065b35a>] snd_open+0xa8/0x17a
[  396.627421] [<ffffffff801ae036>] chrdev_open+0xa0/0x218
[  396.632893] [<ffffffff801a5a28>] do_dentry_open+0x17c/0x2a6
[  396.638713] [<ffffffff801a6d9a>] vfs_open+0x1e/0x26
[  396.643850] [<ffffffff801b8544>] path_openat+0x96e/0xc96
[  396.649518] [<ffffffff801b9390>] do_filp_open+0x7c/0xf6
[  396.655034] [<ffffffff801a6ff2>] do_sys_openat2+0x8a/0x11e
[  396.660765] [<ffffffff801a735a>] sys_openat+0x50/0x7c
[  396.666068] [<ffffffff80003aca>] ret_from_syscall+0x0/0x2
[  396.674964] ---[ end trace 0000000000000000 ]---

It happens because of play_dma_data/capture_dma_data pointers are NULL.
Current implementation assigns these pointers at snd_soc_dai_driver
startup() callback and reset them back to NULL at shutdown(). But
soc_pcm_open() sequence uses DMA pointers in dmaengine_pcm_open()
before snd_soc_dai_driver startup().
Most generic DMA capable I2S drivers use snd_soc_dai_driver probe()
callback to init DMA pointers only once at probe. So move DMA init
to dw_i2s_dai_probe and drop shutdown() and startup() callbacks.

Signed-off-by: Maxim Kochetkov <fido_max@inbox.ru>
Link: https://lore.kernel.org/r/20230512110343.66664-1-fido_max@inbox.ru
Signed-off-by: Mark Brown <broonie@kernel.org>
2023-05-23 21:39:30 +01:00
..
adi ASoC: adi: axi-spdif: Convert to platform remove callback returning void 2023-03-20 13:07:10 +00:00
amd ASoC: amd: yc: Add DMI entry to support System76 Pangolin 12 2023-05-08 09:07:42 +09:00
apple ASoC: apple: mca: Convert to platform remove callback returning void 2023-03-20 13:07:18 +00:00
atmel ASoC: atmel: remove unnecessary dai_link->platform 2023-03-24 12:15:18 +00:00
au1x ASoC: au1x: psc-i2s: Convert to platform remove callback returning void 2023-03-20 13:07:31 +00:00
bcm ASoC: bcm: cygnus-ssp: Convert to platform remove callback returning void 2023-03-20 13:07:33 +00:00
cirrus ASoC: ep93xx: Add OF support 2023-04-12 12:54:23 +01:00
codecs ASoC: cs35l41: Fix default regmap values for some registers 2023-05-23 19:10:45 +01:00
dwc ASoC: dwc: move DMA init to snd_soc_dai_driver probe() 2023-05-23 21:39:30 +01:00
fsl ASoC: fsl_micfil: Fix error handler with pm_runtime_enable 2023-05-08 22:35:10 +09:00
generic ASoC: audio-graph-card2: switch to use c2c_params instead of params 2023-04-05 12:16:37 +01:00
hisilicon
img ASoC: img: pistachio-internal-dac: Convert to platform remove callback returning void 2023-03-20 13:08:22 +00:00
intel ASoC: Intel: avs: Add missing checks on FE startup 2023-05-22 11:18:26 +01:00
jz4740 ASoC: jz4740-i2s: Make I2S divider calculations more robust 2023-05-11 10:17:58 +09:00
kirkwood ASoC: kirkwood: kirkwood-i2s: Convert to platform remove callback returning void 2023-03-20 13:08:35 +00:00
mediatek ASoC: mediatek: mt8186: Fix use-after-free in driver remove path 2023-05-15 10:21:13 +09:00
meson ASoC: meson: switch to use c2c_params instead of params 2023-04-05 12:16:37 +01:00
mxs ASoC: mxs: mxs-sgtl5000: Convert to platform remove callback returning void 2023-03-20 13:08:44 +00:00
pxa ASoC: pxa: pxa2xx-ac97: Convert to platform remove callback returning void 2023-03-20 13:08:46 +00:00
qcom ASoC: qcom: sdw: do not restart soundwire ports for every prepare 2023-04-06 14:45:12 +01:00
rockchip ALSA/ASoC: Convert to platform remove callback 2023-03-21 16:29:48 +00:00
samsung ASoC: samsung: switch to use c2c_params instead of params 2023-04-05 12:16:38 +01:00
sh ASoC: sh: siu_dai: Convert to platform remove callback returning void 2023-03-20 13:09:01 +00:00
sof ASoC: SOF: Intel: hda-mlink: fixes and extensions 2023-05-16 00:13:09 +09:00
spear ASoC: spear: use helper function 2023-01-31 11:04:59 +00:00
sprd ASoC: sprd: sprd-mcdt: Convert to platform remove callback returning void 2023-03-20 13:09:02 +00:00
sti
stm ASoC: stm: stm32_spdifrx: Convert to platform remove callback returning void 2023-03-20 13:09:05 +00:00
sunxi ASoC: sunxi: sun8i-codec: Convert to platform remove callback returning void 2023-03-20 13:09:10 +00:00
tegra ASoC: tegra20_ac97: Add missing unwind goto in tegra20_ac97_platform_probe() 2023-04-04 12:46:42 +01:00
ti ASoC: ti: remove unnecessary dai_link->platform 2023-03-24 12:15:19 +00:00
uniphier ASoC: uniphier: evea: Convert to platform remove callback returning void 2023-03-20 13:09:31 +00:00
ux500 ASoC: ux500: ux500_msp_dai: Convert to platform remove callback returning void 2023-03-20 13:09:32 +00:00
xilinx ASoC: xilinx: xlnx_spdif: Convert to platform remove callback returning void 2023-03-20 13:09:34 +00:00
xtensa ASoC: xtensa: xtfpga-i2s: Convert to platform remove callback returning void 2023-03-20 13:09:35 +00:00
Kconfig
Makefile
soc-ac97.c ASoC: soc-ac97: Return correct error codes 2023-02-15 16:09:07 +00:00
soc-acpi.c
soc-card.c
soc-component.c ASoC: expand snd_soc_dpcm_mutex_lock/unlock() 2023-04-17 12:57:25 +01:00
soc-compress.c ASoC: add snd_soc_card_mutex_lock/unlock() 2023-04-17 12:57:26 +01:00
soc-core.c ASoC: add snd_soc_card_mutex_lock/unlock() 2023-04-17 12:57:26 +01:00
soc-dai.c ASoC: soc-dai.c: add missing flag check at snd_soc_pcm_dai_probe() 2023-03-14 13:58:56 +00:00
soc-dapm.c ASoC: expand snd_soc_dapm_mutex_lock/unlock() 2023-04-17 12:57:24 +01:00
soc-devres.c
soc-generic-dmaengine-pcm.c ASoC: soc.h: remove num_cpus/codecs 2022-09-20 12:19:30 +01:00
soc-jack.c ASoC: jack: allow multiple interrupt per gpio 2023-03-05 23:38:38 +00:00
soc-link.c
soc-ops.c ASoC: ops: Correct bounds check for second channel on SX controls 2022-11-25 16:29:33 +00:00
soc-pcm.c ASoC: soc-pcm: test if a BE can be prepared 2023-05-19 02:31:14 +09:00
soc-topology-test.c
soc-topology.c ASoC: soc-topology.c: dai_link->platform again 2023-03-29 17:43:23 +01:00
soc-utils-test.c
soc-utils.c ASoC: soc-utils: Remove __exit for snd_soc_util_exit() 2022-11-07 13:37:04 +00:00