Hi Maciej,
On Sun, Dec 20, 2015 at 6:33 PM, Maciej S. Szmigiero mail@maciej.szmigiero.name wrote:
There is no guarantee that on fsl_ssi module load SSI registers will have their power-on-reset values.
In fact, if the driver is reloaded the values in registers will be whatever they were set to previously.
This fixes hard lockup on fsl_ssi module reload, at least in AC'97 mode.
Fixes: 05cf237972fe ("ASoC: fsl_ssi: Add driver suspend and resume to support MEGA Fast")
Signed-off-by: Maciej S. Szmigiero mail@maciej.szmigiero.name
This patch causes the following issue in linux-next:
[ 2.526984] ------------[ cut here ]------------ [ 2.531632] WARNING: CPU: 1 PID: 1 at kernel/locking/lockdep.c:2755 lockdep_trace_alloc+0xf4/0x124() [ 2.540771] DEBUG_LOCKS_WARN_ON(irqs_disabled_flags(flags)) [ 2.546175] Modules linked in: [ 2.549447] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.4.0-rc8-next-20160111 #204 [ 2.557021] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree) [ 2.563553] Backtrace: [ 2.566040] [<c00136d8>] (dump_backtrace) from [<c0013874>] (show_stack+0x18/0x1c) [ 2.573615] r6:00000ac3 r5:00000000 r4:00000000 r3:00000000 [ 2.579362] [<c001385c>] (show_stack) from [<c02de89c>] (dump_stack+0x88/0xa4) [ 2.586607] [<c02de814>] (dump_stack) from [<c002bcac>] (warn_slowpath_common+0x80/0xbc) [ 2.594702] r5:c0071ed0 r4:ef055b90 [ 2.598326] [<c002bc2c>] (warn_slowpath_common) from [<c002bd8c>] (warn_slowpath_fmt+0x38/0x40) [ 2.607028] r8:00000004 r7:00000004 r6:024080c0 r5:024080c0 r4:60000093 [ 2.613829] [<c002bd58>] (warn_slowpath_fmt) from [<c0071ed0>] (lockdep_trace_alloc+0xf4/0x124) [ 2.622532] r3:c09a1634 r2:c099dc0c [ 2.626161] [<c0071ddc>] (lockdep_trace_alloc) from [<c010bc0c>] (kmem_cache_alloc+0x30/0x174) [ 2.634778] r4:ef001f00 r3:c0b02a88 [ 2.638407] [<c010bbdc>] (kmem_cache_alloc) from [<c03edac8>] (regcache_rbtree_write+0x150/0x724) [ 2.647283] r10:00000000 r9:00000010 r8:00000004 r7:00000004 r6:0000002c r5:00000000 [ 2.655203] r4:00000000 [ 2.657767] [<c03ed978>] (regcache_rbtree_write) from [<c03ec7d8>] (regcache_write+0x5c/0x64) [ 2.666295] r10:ef0f1c80 r9:ef0f6500 r8:00000001 r7:ef055cbc r6:00000010 r5:00000000 [ 2.674215] r4:eeaaf000 [ 2.676778] [<c03ec77c>] (regcache_write) from [<c03ea4c0>] (_regmap_read+0xa8/0xc0) [ 2.684526] r6:00000000 [ 2.685780] mmc2: new DDR MMC card at address 0001 [ 2.686495] mmcblk1: mmc2:0001 SEM08G 7.40 GiB [ 2.686792] mmcblk1boot0: mmc2:0001 SEM08G partition 1 2.00 MiB [ 2.687092] mmcblk1boot1: mmc2:0001 SEM08G partition 2 2.00 MiB [ 2.687388] mmcblk1rpmb: mmc2:0001 SEM08G partition 3 128 KiB [ 2.713792] r5:00000010 r4:eeaaf000 r3:00000000 [ 2.718660] [<c03ea418>] (_regmap_read) from [<c03ea51c>] (regmap_read+0x44/0x64) [ 2.726147] r7:00001000 r6:ef055cbc r5:00000010 r4:eeaaf000 [ 2.731890] [<c03ea4d8>] (regmap_read) from [<c05bbcd8>] (_fsl_ssi_set_dai_fmt+0xa4/0x440) [ 2.740159] r6:00001001 r5:eeaaf000 r4:eeaaee10 r3:01400454 [ 2.745897] [<c05bbc34>] (_fsl_ssi_set_dai_fmt) from [<c05bc090>] (fsl_ssi_set_dai_fmt+0x1c/0x20) [ 2.754773] r10:ef0f1c80 r8:ef118800 r7:00001001 r6:00000000 r5:00000001 r4:ef0f1700 [ 2.762706] [<c05bc074>] (fsl_ssi_set_dai_fmt) from [<c059dbe8>] (snd_soc_runtime_set_dai_fmt+0x104/0x154) [ 2.772375] [<c059dae4>] (snd_soc_runtime_set_dai_fmt) from [<c05a289c>] (snd_soc_register_card+0xc14/0xdd0) [ 2.782206] r10:eeaa889c r9:00000002 r8:eeaa8810 r7:ef118800 r6:00000001 r5:00000000 [ 2.790126] r4:ef0f1c80 r3:00000000 [ 2.793750] [<c05a1c88>] (snd_soc_register_card) from [<c05ae1f0>] (devm_snd_soc_register_card+0x38/0x78) [ 2.803321] r10:ef20b420 r9:00000000 r8:eeaa8810 r7:ef1cf410 r6:eeaa889c r5:ef0f6490 [ 2.811240] r4:eeaa889c [ 2.813806] [<c05ae1b8>] (devm_snd_soc_register_card) from [<c05c2668>] (imx_wm8962_probe+0x2fc/0x3a0) [ 2.823116] r7:ef1cf410 r6:eeaa889c r5:c085ad98 r4:ef1cf400 [ 2.828858] [<c05c236c>] (imx_wm8962_probe) from [<c03d3f40>] (platform_drv_probe+0x58/0xb4) [ 2.837300] r10:00000000 r9:000000de r8:c0b645f4 r7:c0b645f4 r6:fffffdfb r5:ef1cf410 [ 2.845220] r4:fffffffe [ 2.847788] [<c03d3ee8>] (platform_drv_probe) from [<c03d26fc>] (driver_probe_device+0x1f8/0x2b4) [ 2.856665] r7:00000000 r6:c1379780 r5:c1379778 r4:ef1cf410 [ 2.862405] [<c03d2504>] (driver_probe_device) from [<c03d2854>] (__driver_attach+0x9c/0xa0) [ 2.870846] r10:00000000 r8:c0ad7b30 r7:00000000 r6:ef1cf444 r5:c0b645f4 r4:ef1cf410 [ 2.878776] [<c03d27b8>] (__driver_attach) from [<c03d0ae8>] (bus_for_each_dev+0x5c/0x90) [ 2.886956] r6:c03d27b8 r5:c0b645f4 r4:00000000 r3:ef1b695c [ 2.892695] [<c03d0a8c>] (bus_for_each_dev) from [<c03d1f14>] (driver_attach+0x20/0x28) [ 2.900703] r6:c0b2f9f0 r5:ef0f1400 r4:c0b645f4 [ 2.905383] [<c03d1ef4>] (driver_attach) from [<c03d1c14>] (bus_add_driver+0xec/0x1fc) [ 2.913313] [<c03d1b28>] (bus_add_driver) from [<c03d30f8>] (driver_register+0x80/0xfc) [ 2.921320] r7:c0ae684c r6:ef0f63c0 r5:c0b06188 r4:c0b645f4 [ 2.927059] [<c03d3078>] (driver_register) from [<c03d3dcc>] (__platform_driver_register+0x38/0x4c) [ 2.936109] r5:c0b06188 r4:c0b06188 [ 2.939733] [<c03d3d94>] (__platform_driver_register) from [<c0ad7b48>] (imx_wm8962_driver_init+0x18/0x20) [ 2.949398] [<c0ad7b30>] (imx_wm8962_driver_init) from [<c00098dc>] (do_one_initcall+0x88/0x1e4) [ 2.958200] [<c0009854>] (do_one_initcall) from [<c0a8ce84>] (kernel_init_freeable+0x11c/0x1f0) [ 2.966902] r10:c0ae6858 r9:000000de r8:00000000 r7:c0ae684c r6:c0b6f540 r5:00000006 [ 2.974822] r4:c0af86ec [ 2.977386] [<c0a8cd68>] (kernel_init_freeable) from [<c07c7448>] (kernel_init+0x10/0xf8) [ 2.985566] r10:00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:c07c7438 [ 2.993486] r4:00000000 [ 2.996050] [<c07c7438>] (kernel_init) from [<c000ff30>] (ret_from_fork+0x14/0x24) [ 3.003624] r4:00000000 r3:00000000 [ 3.007256] ---[ end trace c4f2be75666d4572 ]---