|Summary:||[Asus T100 regression] Call trace with snd_soc_sst_mfld_ platform when system suspend to freeze|
|Component:||Sound(ALSA)||Assignee:||Jaroslav Kysela (perex)|
|Severity:||high||CC:||coolx67, darlor, jwrdegoede, lvlrdka22, pierre-louis.bossart, the.dr.hax, wendy.wang, yex.tian|
snd_soc_sst_mfld_ platform related call trace
Fix suspend regression on Asus T100TA
Fix sound regression on Asus T100TA
asoc: intel: flip Preferred byt driver from sst-ipc-acpi to soc-intel-sst-acpi (DO NOT UPSTREAM)
Description wendy.wang 2016-01-29 15:06:04 UTC
Comment 1 wendy.wang 2016-01-29 15:07:37 UTC
Created attachment 202281 [details] kernel configure
Comment 2 wendy.wang 2016-02-01 06:56:37 UTC
Created attachment 202591 [details] config-mainline-byt-disable-brcmcfac-disable-ALSA.txt
Comment 3 wendy.wang 2016-02-01 07:00:56 UTC
Disable "ALSA for SoC audio support " module when doing "make menuconfig", then re-compile mainline 4.5-rc1 kernel, can do suspend to freeze successfully via "echo freeze > /sys/power/state" Pls refer to attached config-mainline-byt-disable-brcmcfac-disable-ALSA.txt which has disabled "ALSA for SoC audio support" in kernel configure.
Comment 4 tianye 2016-02-03 08:48:12 UTC
This issue still exists mainline kernel 4.5.0-rc2. tag: v4.5-rc2.
Comment 5 tianye 2016-02-24 03:29:59 UTC
This issue still exists mainline kernel 4.5.0-rc5. tag: v4.5-rc5.
Comment 6 Dmity Karikh 2016-08-15 19:45:56 UTC
This issue still exists mainline kernel 4.7.0. tag: v4.7. I have found some commits related to this bug: 1) First bad commit: dc901a3541717ca4963dd017eacf50a4c954609c (reverted in 902c136fe4f72dfc2a616ad755c72f1ee407f79a) 2) Second bad commit: 902c136fe4f72dfc2a616ad755c72f1ee407f79a This problem can be solved by reverting the second broken commit (tested on 4.5, 4.6.6 and 4.7 kernels).
Comment 7 Dmity Karikh 2016-08-15 19:47:12 UTC
Created attachment 228921 [details] Fix suspend regression on Asus T100TA
Comment 8 Dmity Karikh 2016-08-16 09:57:35 UTC
Update: the first bad commit actually fixes the broken sound, so we still need to choose between suspend and sound.
Comment 9 Dmity Karikh 2016-08-16 21:28:29 UTC
Created attachment 229181 [details] Fix sound regression on Asus T100TA Found the commit which introduced a sound problem: a92ea59b74e231cc0a969afa8d71fa314d5860f2. It can be reverted to make the sound to work after the previous patch. Hope this will help to fix this regression.
Comment 10 Pierre Bossart 2016-11-29 18:33:30 UTC
does this problem still occur with newer kernels?
Comment 11 Hans de Goede 2017-03-18 13:22:49 UTC
Hi, (In reply to Pierre Bossart from comment #10) > does this problem still occur with newer kernels? I bought a 2nd hand t100ta last week to help improve linux support for baytrail devices and yes this still happens. With the right ucm files in place (from https://github.com/plbossart/UCM/tree/master/bytcr-rt5640) if sound has been playing less then 5 seconds before suspend (after 5 seconds pulse-audio closes the device) I get: Mar 18 14:07:45 localhost.localdomain kernel: PM: Suspending system (freeze) Mar 18 14:07:45 localhost.localdomain kernel: Suspending console(s) Mar 18 14:07:45 localhost.localdomain kernel: intel_sst_acpi 80860F28:00: stream 1 is running, can't suspend, abort Mar 18 14:07:45 localhost.localdomain kernel: dpm_run_callback(): acpi_subsys_suspend+0x0/0x1f returns -16 Mar 18 14:07:45 localhost.localdomain kernel: PM: Device 80860F28:00 failed to suspend: error -16 Mar 18 14:07:45 localhost.localdomain kernel: PM: Some devices failed to suspend, or early wake event detected ... Mar 18 14:07:45 localhost.localdomain kernel: PM: Finishing wakeup. Mar 18 14:07:45 localhost.localdomain kernel: Restarting tasks ... done. And the system never suspends if I stop all audio and wait for 5 seconds then suspend works fine. I've tried fixing this in various ways; Remove the .ignore_suspend flag from the dais in bytcr_rt5640.c to match the dai in byt-rt5640.c which does not have this flag. As well as looping over the pcms and calling snd_pcm_suspend_all() on them from prepare in sst-mfld-platform-pcm.c like is done in sound/soc/intel/haswell/sst-haswell-pcm.c. Both methods work to some degree, both with the same end result. If I stop all audio, but do not wait for pulseaudio to close the device then suspend/resume works, but I get the following in dmesg during resume: [ 114.032504] Restarting tasks ... done. [ 114.072015] intel_sst_acpi 80860F28:00: FW sent error response 0x40010 [ 114.072135] Baytrail Audio Port: ASoC: trigger FE failed -22 [ 114.072643] intel_sst_acpi 80860F28:00: FW sent error response 0x40010 [ 114.072753] Baytrail Audio Port: ASoC: trigger FE failed -22 [ 116.633853] intel_sst_acpi 80860F28:00: FW sent error response 0x4000e [ 116.634164] intel_sst_acpi 80860F28:00: free stream returned err -1 If I suspend while audio is playing suspend/resume still works, but on top of the above errors during I resume I get this during suspend: [ 92.414023] Suspending console(s) (use no_console_suspend to debug) [ 92.414552] ------------[ cut here ]------------ [ 92.414566] WARNING: CPU: 1 PID: 2469 at kernel/softirq.c:161 __local_bh_enable_ip+0x6b/0x80 [ 92.414567] Modules linked in: bnep(E) fuse(E) xt_CHECKSUM(E) iptable_mangle(E) ipt_MASQUERADE(E) nf_nat_masquerade_ipv4(E) iptable_nat(E) nf_nat_ipv4(E) nf_nat(E) nf_conntrack_ipv4(E) nf_defrag_ipv4(E) xt_conntrack(E) nf_conntrack(E) libcrc32c(E) tun(E) bridge(E) stp(E) llc(E) ebtable_filter(E) ebtables(E) ip6table_filter(E) ip6_tables(E) g_serial(E) libcomposite(E) udc_core(E) vfat(E) fat(E) snd_soc_sst_bytcr_rt5640(OE) iTCO_wdt(E) iTCO_vendor_support(E) gpio_keys(E) asus_nb_wmi(E) asus_wmi(E) intel_rapl(E) sparse_keymap(E) intel_soc_dts_thermal(E) intel_powerclamp(E) coretemp(E) kvm_intel(E) kvm(E) irqbypass(E) intel_cstate(E) brcmfmac(E) brcmutil(E) cfg80211(E) snd_soc_rt5670(E) joydev(E) snd_soc_rt5645(E) snd_soc_rt5640(E) snd_soc_rl6231(E) snd_intel_sst_acpi(OE) snd_intel_sst_core(OE) snd_soc_sst_atom_hifi2_platform(OE) [ 92.414640] snd_soc_sst_match(E) mei_txe(E) snd_soc_core(E) mei(E) lpc_ich(E) hci_uart(E) snd_compress(E) btbcm(E) snd_pcm_dmaengine(E) btqca(E) ac97_bus(E) phy_intel_cht_usb(E) extcon_core(E) btintel(E) snd_seq(E) snd_seq_device(E) snd_pcm(E) bluetooth(E) snd_timer(E) tpm_crb(E) soc_button_array(E) int3400_thermal(E) processor_thermal_device(E) int3403_thermal(E) intel_soc_dts_iosf(E) int3402_thermal(E) snd(E) dw_dmac(E) int3406_thermal(E) rfkill(E) dptf_power(E) acpi_thermal_rel(E) int340x_thermal_zone(E) asus_wireless(E) acpi_pad(E) soundcore(E) spi_pxa2xx_platform(E) tpm_tis(E) pwm_lpss_platform(E) pwm_lpss(E) tpm_tis_core(E) tpm(E) binfmt_misc(E) dm_crypt(E) mmc_block(E) hid_multitouch(E) i915(E) crct10dif_pclmul(E) crc32_pclmul(E) crc32c_intel(E) ghash_clmulni_intel(E) i2c_algo_bit(E) drm_kms_helper(E) [ 92.414708] drm(E) wmi(E) video(E) i2c_hid(E) sdhci_acpi(E) sdhci(E) mmc_core(E) fjes(E) uas(E) usb_storage(E) sunrpc(E) scsi_transport_iscsi(E) i2c_dev(E) [ 92.414731] CPU: 1 PID: 2469 Comm: systemd-sleep Tainted: G W OE 4.11.0-rc2+ #21 [ 92.414733] Hardware name: ASUSTeK COMPUTER INC. T100TA/T100TA, BIOS T100TA.304 03/14/2014 [ 92.414735] Call Trace: [ 92.414747] dump_stack+0x63/0x86 [ 92.414752] __warn+0xcb/0xf0 [ 92.414756] warn_slowpath_null+0x1d/0x20 [ 92.414760] __local_bh_enable_ip+0x6b/0x80 [ 92.414764] _raw_spin_unlock_bh+0x1a/0x20 [ 92.414773] sst_create_block+0x91/0xe0 [snd_intel_sst_core] [ 92.414779] sst_create_block_and_ipc_msg+0x56/0x80 [snd_intel_sst_core] [ 92.414784] sst_prepare_and_post_msg+0x1bd/0x3d0 [snd_intel_sst_core] [ 92.414791] sst_pause_stream+0xcf/0x160 [snd_intel_sst_core] [ 92.414796] sst_alloc_stream_mrfld+0xa8a/0xe90 [snd_intel_sst_core] [ 92.414802] sst_register_dsp+0x20c/0x810 [snd_soc_sst_atom_hifi2_platform] [ 92.414811] snd_soc_set_runtime_hwparams+0x11e/0x520 [snd_soc_core] [ 92.414816] ? sst_register_dsp+0x330/0x810 [snd_soc_sst_atom_hifi2_platform] [ 92.414824] dpcm_be_dai_trigger+0x440/0xd20 [snd_soc_core] [ 92.414828] ? up+0x32/0x50 [ 92.414837] dpcm_be_dai_trigger+0x5a8/0xd20 [snd_soc_core] [ 92.414845] snd_pcm_lib_mmap_iomem+0x201/0x240 [snd_pcm] [ 92.414850] snd_pcm_lib_mmap_iomem+0xaf/0x240 [snd_pcm] [ 92.414856] snd_pcm_mmap_data+0x5d2/0x5e0 [snd_pcm] [ 92.414861] ? snd_pcm_stream_lock+0x31/0x50 [snd_pcm] [ 92.414867] snd_pcm_suspend+0x32/0x50 [snd_pcm] [ 92.414873] snd_pcm_suspend_all+0x38/0x1a0 [snd_pcm] [ 92.414880] snd_soc_suspend+0x156/0x750 [snd_soc_core] [ 92.414885] ? sst_register_dsp+0x330/0x810 [snd_soc_sst_atom_hifi2_platform] [ 92.414890] sst_register_dsp+0x357/0x810 [snd_soc_sst_atom_hifi2_platform] [ 92.414896] dpm_prepare+0x207/0x400 [ 92.414901] dpm_suspend_start+0x11/0x60 [ 92.414906] suspend_devices_and_enter+0xd9/0x6f0 [ 92.414911] pm_suspend+0x325/0x390 [ 92.414915] state_store+0x82/0xf0 [ 92.414919] kobj_attr_store+0xf/0x20 [ 92.414925] sysfs_kf_write+0x37/0x40 [ 92.414929] kernfs_fop_write+0x120/0x1b0 [ 92.414934] __vfs_write+0x37/0x160 [ 92.414939] ? selinux_file_permission+0xd7/0x110 [ 92.414944] ? security_file_permission+0x3b/0xc0 [ 92.414948] vfs_write+0xb5/0x1a0 [ 92.414952] SyS_write+0x55/0xc0 [ 92.414956] entry_SYSCALL_64_fastpath+0x1a/0xa9 [ 92.414960] RIP: 0033:0x7ff2a3da1c30 [ 92.414962] RSP: 002b:00007ffd97a042c8 EFLAGS: 00000246 ORIG_RAX: 0000000000000001 [ 92.414966] RAX: ffffffffffffffda RBX: 00007ff2a406ab38 RCX: 00007ff2a3da1c30 [ 92.414968] RDX: 0000000000000004 RSI: 00005611031893b0 RDI: 0000000000000004 [ 92.414970] RBP: 00007ff2a406aae0 R08: 0000561103189260 R09: 00007ff2a48b1180 [ 92.414972] R10: 00005611031893b0 R11: 0000000000000246 R12: 00007ff2a406ab38 [ 92.414975] R13: 0000000000001010 R14: 00007ff2a406ab38 R15: 000000000000270f [ 92.414979] ---[ end trace e4f935fa8a9c9a39 ]--- Regards, Hans
Comment 12 Hans de Goede 2017-03-18 17:03:15 UTC
Created attachment 255339 [details] asoc: intel: flip Preferred byt driver from sst-ipc-acpi to soc-intel-sst-acpi (DO NOT UPSTREAM) Ok, some more data (sorta kinda), as reported by other users flipping the preferred driver for byt audio back from sst-ipc-acpi to soc-intel-sst-acpi fixes the suspend resume issue, including while playing audio. 2 things stood out: 1) In dmesg: [ 423.136241] PM: Suspending system (freeze) [ 423.136246] Suspending console(s) (use no_console_suspend to debug) [ 423.297834] PM: suspend of devices complete after 160.734 msecs [ 423.297843] PM: suspend devices took 0.162 seconds [ 423.298048] baytrail-pcm-audio baytrail-pcm-audio: dropped IPC msg RX=0, TX=2 [ 423.337584] PM: late suspend of devices complete after 39.712 msecs [ 423.353896] PM: noirq suspend of devices complete after 16.274 msecs [ 423.353910] PM: suspend-to-idle [ 431.769403] Suspended for 7.704 seconds [ 431.769918] PM: resume from suspend-to-idle [ 431.805404] PM: noirq resume of devices complete after 35.233 msecs [ 432.077990] PM: early resume of devices complete after 272.208 msecs [ 432.161607] PM: resume of devices complete after 83.582 msecs [ 432.162787] PM: resume devices took 0.085 seconds [ 432.162993] PM: Finishing wakeup. [ 432.162997] Restarting tasks ... done. [ 434.504898] baytrail-pcm-audio baytrail-pcm-audio: ipc: --message timeout-- ipcx 0x126 isr 0xf0020 ipcd 0x297 imrx 0x0 [ 434.504909] baytrail-pcm-audio baytrail-pcm-audio: ipc: free stream 1 failed 2) Before suspend resume left/right are swapped with the soc-intel-sst-acpi driver, after suspend/resume things are fine. One other thing I noticed is that the 2 drivers support a different set of codecs, so maybe we need to allow building both and make the probe-function return -ENODEV in case of an unsupported codec ? Then the device-core should try the next compatible driver, that way we allow for all supported codecs to work with a single kernel build. I can whip up a patch for this if it seems like a good idea. We could then also swap the default to soc-intel-sst-acpi only for the rt5640 codec. I wonder if this problem might be codec specific ?
Comment 13 Pierre Bossart 2017-03-20 01:37:04 UTC
There is a known fix upstream for suspend issues, see "ASoC: Intel: boards: remove .pm_ops in all Atom/DPCM machine drivers" I believe it's queued for 4.11 That said I have no idea what suspend should do when you're playing audio. There is no way you're going to restart from the same position on resume I can guarantee you that. I am also aware of other suspend/resume issues with Baytrail, can't recall if it's eMMC or something else.
Comment 14 Hans de Goede 2017-03-20 11:36:49 UTC
Hi, (In reply to Pierre Bossart from comment #13) > There is a known fix upstream for suspend issues, see > "ASoC: Intel: boards: remove .pm_ops in all Atom/DPCM machine drivers" > I believe it's queued for 4.11 I've done my testing with 4.11-rc2 which already has that patch, so that does not help. Regards, Hans
Comment 15 Hans de Goede 2017-05-24 16:05:38 UTC
Good news, I can no longer reproduce this with 4.12-rc2 (+ the i2c fixes from Linus' current master), so I believe that this can be closed now.
Comment 16 roman 2018-03-05 13:03:00 UTC
Can't reproduce it with 4.15.7 either. I think it can be closed now.