08 Sep, 2020

1 commit


14 Aug, 2020

1 commit


30 May, 2020

3 commits


29 May, 2020

15 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