29 May, 2020

13 commits


28 May, 2020

2 commits


27 May, 2020

10 commits


26 May, 2020

2 commits

  • There are two more DONE0_CONFIG/DONE1_CONFIG registers on i.mx8m family.
    Add them to save/restore register list during systerm level suspend/
    resume to restore them after resume back, otherwise, PDM case maybe failed
    in suspend/resume case.

    Signed-off-by: Robin Gong
    Reviewed-by: Shengjiu Wang
    (cherry picked from commit 2c213d8ac495065f5ec4182335c151d32d0eb482)

    Robin Gong
     
  • Enable wdog for rpmsg dts to make wdog function could work properly.

    Reviewed-by: Robin Gong
    Signed-off-by: Peng Fan
    (cherry picked from commit 0268df6bb34b066e2b31f340c8922cb68ade72e7)

    Peng Fan
     

25 May, 2020

1 commit

  • The original patch updates REG_MICFIL_STAT in fsl_micfil_reset
    method, but not in configure_hwvad_interrupts, fix this.

    Fixes: e12b0060cdac ("MLK-22598: ASoC: fsl_micfil: Reset channel output
    data Flag")
    Signed-off-by: Viorel Suman
    (cherry picked from commit eb01ee51095e0b11b3f58b52549eec09a14ebca1)

    Viorel Suman
     

22 May, 2020

5 commits

  • During probe SOF driver loads the topology, which will send messages
    to DSP to create the Audio components.

    SOF DAI component at creation time calls probe() and touches DAI
    registers thus we need to make sure DAI clocks are turned on during
    probe.

    Using pm_runtime_get_sync() we force resume to be called which will
    enable all necessary clocks.

    Later we call the pm_runtime_put_sync() and mark the device as
    autosuspend. This will cause suspend to be called which will disable
    all clocks to save power.

    Later, when userspace uses the sound card (via aplay/arecord) or any
    alsa-lib calls the normal runtime resume/suspend flow will happen.

    Signed-off-by: Daniel Baluta
    Reviewed-by: Shengjiu Wang

    Daniel Baluta
     
  • When M4 boots from flexspi, linux should not use that, otherwise
    M4 will hang.

    Reviewed-by: Richard Zhu
    Signed-off-by: Peng Fan
    (cherry picked from commit 1f49d90ebaf77492bcb2e9f8a8e5a8d4d7aee58a)

    Peng Fan
     
  • Apparently, in order to enable the MIPI block, the reset signals must
    be in asserted mode, in order to proper de-assert and initialize the
    MIPI block. So, before the enable process, assert all the MIPI resets.

    Signed-off-by: Robert Chiras

    Robert Chiras
     
  • The reason is that we access the register when power is disabled

    reproduce command:
    echo 8 > /sys/devices/platform/soc@0/30c00000.bus/30c00000.spba-bus/30ca0000.micfil/hwvad/enable

    [ 332.838518] SError Interrupt on CPU2, code 0xbf000002 -- SError
    [ 332.838521] CPU: 2 PID: 1383 Comm: sh Tainted: G O 5.4.24-2.1.0+g2ad925d15481 #1
    [ 332.838523] Hardware name: NXP i.MX8MPlus EVK board (DT)
    [ 332.838525] pstate: 20000085 (nzCv daIf -PAN -UAO)
    [ 332.838526] pc : regcache_sync_block+0x7c/0x258
    [ 332.838528] lr : regcache_sync_block+0xf0/0x258
    [ 332.838531] sp : ffff800012bf3be0
    [ 332.838532] x29: ffff800012bf3be0 x28: 0000000000000000
    [ 332.838535] x27: 0000000000000000 x26: 0000000000000001
    [ 332.838541] x25: ffff00017753ed00 x24: 0000000000000000
    [ 332.838546] x23: ffff00017706d400 x22: 000000000000002b
    [ 332.838550] x21: ffff00017753f100 x20: ffff000177538c00
    [ 332.838554] x19: 0000000000000001 x18: 0000000000000000
    [ 332.838559] x17: 0000000000000000 x16: 0000000000000000
    [ 332.838564] x15: 0000000000000000 x14: 0000000000000000
    [ 332.838567] x13: 0000000000000000 x12: 0000000000000000
    [ 332.838572] x11: ffff800012bf3d50 x10: ffff000173c0e900
    [ 332.838577] x9 : ffff00017706d870 x8 : 0000000000000000
    [ 332.838582] x7 : 00000000000000a8 x6 : 0000000000000000
    [ 332.838587] x5 : 0000000000000000 x4 : ffff800010769d88
    [ 332.838592] x3 : ffff80001076d278 x2 : 0000000008000000
    [ 332.838597] x1 : ffff800023c10000 x0 : 0000000000000000
    [ 332.838603] Kernel panic - not syncing: Asynchronous SError Interrupt
    [ 332.838605] CPU: 2 PID: 1383 Comm: sh Tainted: G O 5.4.24-2.1.0+g2ad925d15481 #1
    [ 332.838606] Hardware name: NXP i.MX8MPlus EVK board (DT)
    [ 332.838608] Call trace:
    [ 332.838609] dump_backtrace+0x0/0x140
    [ 332.838612] show_stack+0x14/0x20
    [ 332.838613] dump_stack+0xb4/0xf8
    [ 332.838617] panic+0x158/0x324
    [ 332.838618] nmi_panic+0x84/0x88
    [ 332.838621] arm64_serror_panic+0x74/0x80
    [ 332.838622] do_serror+0x80/0x138
    [ 332.838623] el1_error+0x84/0xf8
    [ 332.838627] regcache_sync_block+0x7c/0x258
    [ 332.838628] regcache_rbtree_sync+0x60/0xb0
    [ 332.838629] regcache_sync+0xac/0x140
    [ 332.838633] disable_hwvad+0x3c/0x1f0
    [ 332.838634] micfil_hwvad_handler+0x78/0x170
    [ 332.838635] kobj_attr_store+0x14/0x28
    [ 332.838637] sysfs_kf_write+0x40/0x50
    [ 332.838640] kernfs_fop_write+0xf8/0x210
    [ 332.838641] __vfs_write+0x18/0x40
    [ 332.838642] vfs_write+0xdc/0x1c8
    [ 332.838646] ksys_write+0x68/0xf0
    [ 332.838647] __arm64_sys_write+0x18/0x20
    [ 332.838648] el0_svc_common.constprop.0+0x68/0x160
    [ 332.838651] el0_svc_handler+0x20/0x80
    [ 332.838653] el0_svc+0x8/0xc
    [ 332.838972] SMP: stopping secondary CPUs
    [ 332.838974] Kernel Offset: disabled
    [ 332.838975] CPU features: 0x0002,2000200c
    [ 332.838976] Memory Limit: none

    Signed-off-by: Shengjiu Wang
    Reviewed-by: Viorel Suman

    Shengjiu Wang
     
  • In VDOA_MODE, _get_vdoa_ipu_res() would lock ipu_ch_tbl.lock mutex first,
    then lock vdoa_lock mutex and finally unlock ipu_ch_tbl.lock mutex.
    The vdoa_lock mutex is unlocked until put_vdoa_ipu_res(). Since the two
    mutexes are not unlocked in a reversed order as they are locked, AB-BA
    deadlock issue may happen as the below warning shows, which can be detected
    with the debug option CONFIG_PROVE_LOCKING enabled.

    [ 52.398770] ======================================================
    [ 52.404957] WARNING: possible circular locking dependency detected
    [ 52.411145] 5.4.24 #1477 Not tainted
    [ 52.414728] ------------------------------------------------------
    [ 52.420915] ipu1_task/92 is trying to acquire lock:
    [ 52.425800] 81f02274 (&ipu_ch_tbl.lock){+.+.}, at: get_res_do_task+0x144/0x77c
    [ 52.433050]
    [ 52.433050] but task is already holding lock:
    [ 52.438888] 8183189c (vdoa_lock){+.+.}, at: vdoa_get_handle+0x64/0x158
    [ 52.445434]
    [ 52.445434] which lock already depends on the new lock.
    [ 52.445434]
    [ 52.453615]
    [ 52.453615] the existing dependency chain (in reverse order) is:
    [ 52.461101]
    [ 52.461101] -> #1 (vdoa_lock){+.+.}:
    [ 52.466175] __mutex_lock+0xb8/0xaa8
    [ 52.470283] mutex_lock_nested+0x2c/0x34
    [ 52.474735] vdoa_get_handle+0x64/0x158
    [ 52.479100] _get_vdoa_ipu_res+0x2b4/0x338
    [ 52.483726] get_res_do_task+0x34/0x77c
    [ 52.488092] ipu_task_thread+0x148/0xeb0
    [ 52.492551] kthread+0x168/0x170
    [ 52.496310] ret_from_fork+0x14/0x20
    [ 52.500414] 0x0
    [ 52.502779]
    [ 52.502779] -> #0 (&ipu_ch_tbl.lock){+.+.}:
    [ 52.508457] __lock_acquire+0x15d0/0x2588
    [ 52.512995] lock_acquire+0xdc/0x280
    [ 52.517103] __mutex_lock+0xb8/0xaa8
    [ 52.521210] mutex_lock_nested+0x2c/0x34
    [ 52.525662] get_res_do_task+0x144/0x77c
    [ 52.530113] ipu_task_thread+0x148/0xeb0
    [ 52.534566] kthread+0x168/0x170
    [ 52.538322] ret_from_fork+0x14/0x20
    [ 52.542425] 0x0
    [ 52.544790]
    [ 52.544790] other info that might help us debug this:
    [ 52.544790]
    [ 52.552797] Possible unsafe locking scenario:
    [ 52.552797]
    [ 52.558721] CPU0 CPU1
    [ 52.563256] ---- ----
    [ 52.567790] lock(vdoa_lock);
    [ 52.570853] lock(&ipu_ch_tbl.lock);
    [ 52.577040] lock(vdoa_lock);
    [ 52.582619] lock(&ipu_ch_tbl.lock);
    [ 52.586289]
    [ 52.586289] *** DEADLOCK ***
    [ 52.586289]
    [ 52.592215] 1 lock held by ipu1_task/92:
    [ 52.596142] #0: 8183189c (vdoa_lock){+.+.}, at: vdoa_get_handle+0x64/0x158
    [ 52.603123]
    [ 52.603123] stack backtrace:
    [ 52.607493] CPU: 0 PID: 92 Comm: ipu1_task Not tainted 5.4.24 #1477
    [ 52.613765] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
    [ 52.620298] Backtrace:
    [ 52.622764] [] (dump_backtrace) from [] (show_stack+0x20/0x24)
    [ 52.630345] r7:818641a8 r6:00000000 r5:600f0193 r4:818641a8
    [ 52.636026] [] (show_stack) from [] (dump_stack+0xbc/0xe8)
    [ 52.643261] [] (dump_stack) from [] (print_circular_bug+0x1c4/0x214)
    [ 52.651361] r10:a8330000 r9:ffffffff r8:a8330000 r7:a8330550 r6:81d13b1c r5:81d13ac0
    [ 52.659197] r4:81d13ac0 r3:46e9f8d1
    [ 52.662783] [] (print_circular_bug) from [] (check_noncircular+0x204/0x21c)
    [ 52.671492] r9:00000001 r8:81708f50 r7:00000000 r6:a8423a98 r5:a8330530 r4:a8330550
    [ 52.679245] [] (check_noncircular) from [] (__lock_acquire+0x15d0/0x2588)
    [ 52.687778] r8:81708f50 r7:81d13ac0 r6:00000001 r5:81e93d7c r4:a8330530
    [ 52.694491] [] (__lock_acquire) from [] (lock_acquire+0xdc/0x280)
    [ 52.702334] r10:00000000 r9:00000000 r8:00000000 r7:81f02274 r6:600f0113 r5:81708724
    [ 52.710169] r4:00000000
    [ 52.712717] [] (lock_acquire) from [] (__mutex_lock+0xb8/0xaa8)
    [ 52.720384] r10:81e93d7c r9:0000f6d0 r8:81f022e8 r7:00008f50 r6:00000000 r5:ffffe000
    [ 52.728219] r4:81f02240
    [ 52.730765] [] (__mutex_lock) from [] (mutex_lock_nested+0x2c/0x34)
    [ 52.738778] r10:00000000 r9:a8423ccc r8:81f022e8 r7:000002d0 r6:8188b6f8 r5:81f02234
    [ 52.746613] r4:a4540400
    [ 52.749162] [] (mutex_lock_nested) from [] (get_res_do_task+0x144/0x77c)
    [ 52.757612] [] (get_res_do_task) from [] (ipu_task_thread+0x148/0xeb0)
    [ 52.765886] r10:a8139bd0 r9:a8423ccc r8:81f022e8 r7:a4540400 r6:81831604 r5:a454053c
    [ 52.773721] r4:600f0013
    [ 52.776269] [] (ipu_task_thread) from [] (kthread+0x168/0x170)
    [ 52.783849] r10:a8139bd0 r9:80b8d558 r8:81f022e8 r7:a8422000 r6:00000000 r5:a840cd00
    [ 52.791684] r4:a83cc080
    [ 52.794231] [] (kthread) from [] (ret_from_fork+0x14/0x20)
    [ 52.801460] Exception stack(0xa8423fb0 to 0xa8423ff8)
    [ 52.806521] 3fa0: 00000000 00000000 00000000 00000000
    [ 52.814711] 3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    [ 52.822898] 3fe0: 00000000 00000000 00000000 00000000 00000013 00000000
    [ 52.829521] r10:00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:80168360
    [ 52.837356] r4:a840cd00

    This patch corrects the locking/unlocking sequence for the two mutexes
    to fix the deadlock issue.

    Reviewed-by: Sandor Yu
    Signed-off-by: Liu Ying
    (cherry picked from commit c18ff376db6529818037a66b2cafaa3f512577d8)

    Liu Ying
     

21 May, 2020

5 commits

  • in_filled_len need to be reset on suspend, for suspend, every state
    will go back to initilization state.

    Fixes: 3e87108614d1 ("MLK-24044: ASoC: fsl_easrc_m2m: Fix output length not accurate")
    Signed-off-by: Shengjiu Wang
    Reviewed-by: Daniel Baluta

    Shengjiu Wang
     
  • initilize the m2m->complete in open() to avoid the NULL pointer in suspend
    because the suspend can be called before initilizing m2m->complete in convert

    [ 591.006691] Filesystems sync: 0.084 seconds
    [ 591.012292] Freezing user space processes ... (elapsed 0.001 seconds) done.
    [ 591.020768] OOM killer disabled.
    [ 591.024016] Freezing remaining freezable tasks ... (elapsed 0.105 seconds) done.
    [ 591.809374] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
    [ 591.818160] Mem abort info:
    [ 591.820949] ESR = 0x96000004
    [ 591.824000] EC = 0x25: DABT (current EL), IL = 32 bits
    [ 591.829307] SET = 0, FnV = 0
    [ 591.832356] EA = 0, S1PTW = 0
    [ 591.835493] Data abort info:
    [ 591.838369] ISV = 0, ISS = 0x00000004
    [ 591.842200] CM = 0, WnR = 0
    [ 591.845165] user pgtable: 4k pages, 48-bit VAs, pgdp=00000001b033e000
    [ 591.851600] [0000000000000000] pgd=0000000000000000
    [ 591.856476] Internal error: Oops: 96000004 [#1] PREEMPT SMP
    [ 591.862043] Modules linked in:
    [ 591.865097] CPU: 2 PID: 867 Comm: rtcwakeup.out Not tainted 5.4.24-04892-g8b7eb66 #911
    [ 591.873009] Hardware name: NXP i.MX8MPlus EVK board (DT)
    [ 591.878317] pstate: a0000085 (NzCv daIf -PAN -UAO)
    [ 591.883110] pc : __wake_up_common+0x58/0x170
    [ 591.887377] lr : __wake_up_locked+0x18/0x20
    [ 591.891555] sp : ffff8000120b3a00
    [ 591.894866] x29: ffff8000120b3a00 x28: ffff800011b84000
    [ 591.900174] x27: 0000000000000000 x26: 0000000000000000
    [ 591.905482] x25: 0000000000000003 x24: 0000000000000000
    [ 591.910791] x23: 0000000000000001 x22: 0000000000000000
    [ 591.916099] x21: ffff000171369420 x20: ffff000171369418
    [ 591.921407] x19: ffff000171369410 x18: 0000000000000000
    [ 591.926715] x17: 0000000000000000 x16: 0000000000000000
    [ 591.932023] x15: 0000000000000000 x14: ffff0001760daa00
    [ 591.937331] x13: ffff80016dbdc000 x12: 0000000034d4d91d
    [ 591.942639] x11: 0000000000000000 x10: 00000000000009c0
    [ 591.947948] x9 : ffff000171a30470 x8 : 00000000ffffffff
    [ 591.953256] x7 : ffff8000120b3a38 x6 : ffffffffffffffe8
    [ 591.958564] x5 : 0000000000000000 x4 : 0000000000000000
    [ 591.963871] x3 : 0000000000000000 x2 : 0000000000000001
    [ 591.969179] x1 : 0000000000000003 x0 : 0000000000000000
    [ 591.974487] Call trace:
    [ 591.976931] __wake_up_common+0x58/0x170
    [ 591.980851] __wake_up_locked+0x18/0x20
    [ 591.984683] complete+0x48/0x68
    [ 591.987823] fsl_easrc_suspend+0x84/0x100
    [ 591.991831] dpm_run_callback.isra.0+0x38/0xd8
    [ 591.996271] __device_suspend+0xfc/0x3c8
    [ 592.000191] dpm_suspend+0xf0/0x1e8
    [ 592.003676] dpm_suspend_start+0x98/0xa0
    [ 592.007596] suspend_devices_and_enter+0xec/0x5b8
    [ 592.012297] pm_suspend+0x2f8/0x340
    [ 592.015781] state_store+0x88/0x108
    [ 592.019267] kobj_attr_store+0x14/0x28
    [ 592.023015] sysfs_kf_write+0x40/0x50
    [ 592.026674] kernfs_fop_write+0xf8/0x210
    [ 592.030594] __vfs_write+0x18/0x40
    [ 592.033992] vfs_write+0xdc/0x1c8
    [ 592.037303] ksys_write+0x68/0xf0
    [ 592.040615] __arm64_sys_write+0x18/0x20
    [ 592.044536] el0_svc_common.constprop.0+0x68/0x160
    [ 592.049324] el0_svc_handler+0x20/0x80
    [ 592.053070] el0_svc+0x8/0xc
    [ 592.055950] Code: 54000700 a90153f3 2a0203f7 52800018 (f9400cd3)
    [ 592.062040] ---[ end trace a36c1a42637c268e ]---

    Signed-off-by: Shengjiu Wang
    Reviewed-by: Daniel Baluta

    Shengjiu Wang
     
  • initilize the m2m->complete in open() to avoid the NULL pointer in suspend
    because the suspend can be called before initilizing m2m->complete in convert

    Signed-off-by: Shengjiu Wang
    Reviewed-by: Daniel Baluta

    Shengjiu Wang
     
  • Add copyright

    Signed-off-by: Shengjiu Wang
    Reviewed-by: Daniel Baluta

    Shengjiu Wang
     
  • Add copyright

    Signed-off-by: Shengjiu Wang
    Reviewed-by: Daniel Baluta

    Shengjiu Wang
     

20 May, 2020

2 commits

  • According to Mixel MIPI CSI PHY spec, the minimum value for RXHS_SETTLE
    is 85ns + 6*UI and the maximum value for RXHS_SETTLE is 145ns + 10*UI,
    so get average value of maximum and minimum as RXHS_SETTLE typical value.

    Signed-off-by: Guoniu.zhou
    Reviewed-by: Sandor Yu
    (cherry picked from commit af684872dceece899b439b6167343b1e7655a251)

    Guoniu.zhou
     
  • The legacy terminate_worker may terminate the next transfer if it comes
    before all jobs done in terminated_worker, or refuse to setup next transfer
    since sdmac->desc may not be NULL in sdma_issue_pending(). That case could
    be easily caught in Audio play in case underrun happen at ALSA level which
    means dma channel will be terminated and start again very frequently.
    So move the logic part of 'sdmac->desc' into sdma_disable_channel_async but
    leave the desc free in the work to kill the above case.

    Signed-off-by: Robin Gong
    Reviewed-by: Shengjiu Wang
    (cherry picked from commit acf2a79f1f73b1cf59b2e3dc096ff4340cfe7687)

    Robin Gong