29 May, 2020
3 commits
-
GPIO4/3 needs to be given access for DomU for otg usb.
MIPI GPIO needs to be passthrough DOmU
LSIO_GPIO1 interrupts gives to DomU, dom0 not need the interrupt
currently.Reviewed-by: zhang sanshan
Signed-off-by: Peng Fan -
Add psci node for inmate dts, otherwise secondary cpus could
not be booted up.Reviewed-by: Alice Guo
Signed-off-by: Peng Fan -
If user change mode from 2592x1944@8 to 1080P@30, ov5640 driver
will report error which can't support 1080P@8. It means driver
can't update frame rate immediately. So remove mode info checking
during find mode. Driver will check the info before start streaming
that resolution and frame rate have updated.Signed-off-by: Guoniu.zhou
(cherry picked from commit 6dd746e4d51692921babf4eaa1c275d619699aa9)
28 May, 2020
2 commits
-
HDMI modules will be reset when device enter suspend,
and registers status will lost.
Add resume function to recovery HDMI INT/I2C/HPD registers status.Signed-off-by: Sandor Yu
-
CEC interrupt status/mask and logical address registers
will be reset when device enter suspend.
It will cause cec failed to work after device resume.
Add cec suspend/resume functions, save these registers status
when suspend and restore them when resume.Signed-off-by: Sandor Yu
27 May, 2020
10 commits
-
Add "fsl,spi-only-use-cs1-sel" to fit i.MX8DXL-EVK.
Spi common code does not support use of CS signals discontinuously.
It only uses CS1 without using CS0. So, add this property to re-config
chipselect value.Signed-off-by: Clark Wang
Reviewed-by: Fugang Duan -
Add property fsl,spi-only-use-cs1-sel to mark this board only uses
CS1 without CS0.Signed-off-by: Clark Wang
Reviewed-by: Fugang Duan -
SPI common code does not support using CS discontinuously for now.
However, i.MX8DXL-EVK only uses CS1 without CS0. Therefore, add a flag
is_only_cs1 to set the correct TCR[PCS].Signed-off-by: Clark Wang
Reviewed-by: Fugang Duan -
instantiate snd_soc_dai_driver for independent symmetric control.
Signed-off-by: Shengjiu Wang
Reviewed-by: Viorel Suman -
Some tja1100 cards phy address is 0x2, some cards is 0x5.
tja1101 cards phy address is 0x2.To make thing simple, and to support tja1100 and tja1101
cards by one dts file, we define the tja110x card phy
address to 0x2 in default bsp.Reviewed-by: Richard Zhu
Signed-off-by: Fugang Duan -
Add below features support for both TJA1100 and TJA1101 cards:
- Add MII and RMII mode support.
- Add refclk in/out support for RMII.Reviewed-by: Richard Zhu
Signed-off-by: Fugang Duan -
Add tja1100/tja1101 card support for enet2 port.
Reviewed-by: Richard Zhu
Signed-off-by: Fugang Duan -
When imx8dxl enet1 is fused as below, enet1 doesn't support
RGMII mode, so add tja1100 RMII phy support.ENET1 otp fuse: word 0xa, bit1
Reviewed-by: Richard Zhu
Signed-off-by: Fugang Duan -
The crtc_states could be got concurrently if multiple atomic checks
happen simultaneously, so ERR_PTR(-EDEADLK) could be returned from
drm_atomic_get_crtc_state(). In such normal cases, we just rollback
all added drm objects and userspace could try the same atomic check
or commit again, so it's unnecessary to warn.Signed-off-by: Liu Ying
Reviewed-by: Sandor Yu
(cherry picked from commit e72359e9308b1bbb30f604ed6118c9216f9c43fd) -
passthrough vpu/esai/pcie/edma and etc to domu, to let domu
could use more functions which is a must for android auto in
domu.Reviewed-by: zhang sanshan
Signed-off-by: Peng Fan
(cherry picked from commit 4574beb1078cbf253f63719abe74b703fc5faadc)
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) -
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)
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)
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 -
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) -
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
-
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: noneSigned-off-by: Shengjiu Wang
Reviewed-by: Viorel Suman -
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:a840cd00This 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)
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 -
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 -
initilize the m2m->complete in open() to avoid the NULL pointer in suspend
because the suspend can be called before initilizing m2m->complete in convertSigned-off-by: Shengjiu Wang
Reviewed-by: Daniel Baluta -
Add copyright
Signed-off-by: Shengjiu Wang
Reviewed-by: Daniel Baluta -
Add copyright
Signed-off-by: Shengjiu Wang
Reviewed-by: Daniel Baluta
20 May, 2020
6 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) -
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) -
Fix SAI3 pads for ak5552 ADC support; add multi
clock entries to support all sample rates
Use fsl,imx-audio-ak5552 for asoc machine driverSigned-off-by: Adrian Alonso
(cherry picked from commit fb4856a872e3372d2b553a3a1f99442e0b85197b) -
Fix SAI3 pads for ak5552 dac support, add multi
clock entries to support all sample rates
Use fsl,imx-audio-ak5552 and disable ak4458_3 to
follow default configSigned-off-by: Adrian Alonso
(cherry picked from commit 2c6742bbe583a4f33aca89ce77dff3328935f9da) -
Add fsl,imx-audio-ak5552 to imx-ak5558 machine ASoC
driver, limit actual number of channels for ak5552
ADC supportSigned-off-by: Adrian Alonso
(cherry picked from commit 8fb5fb0a6610470113105b11935d394e5a2a23da) -
Correct fec phy reg id, allow to use nfsroot
Fixes: mdio_bus 30be0000.ethernet-1: MDIO device at
address 1 is missing.Signed-off-by: Adrian Alonso
(cherry picked from commit 0622c744ed313460f86a3185e10e6650940e3cea)
19 May, 2020
3 commits
-
The spdif capture need the power supply be enabled on audio board,
otherwise the input signal can't be transferred to chip.Signed-off-by: Shengjiu Wang
Reviewed-by: Daniel Baluta
(cherry picked from commit c012f4ddbcc825e5f4195a832aaa56abcbb4b126) -
The LCDIF3 is included in the HDMIMIX block, so it is
necessary to enable hdmimix power domain for LCDIF3 to
avoid any potential hang issue.Signed-off-by: Fancy Fang
Reviewed-by: Sandor Yu
(cherry picked from commit 04ff1b1c585a29a08fae5dd2c0a28c1e669fce0b) -
During the unbind() procedure, drm_encoder_cleanup() will
detach the downstream DSI bridge if exists. And the DSI
bridge's detach() will detach itself from the DSI host.
So DSI host should be unregistered later than DSI device
detach. Otherwise, below kernel panic happens:[ 2.437740] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000007
[ 2.446534] Mem abort info:
[ 2.449327] ESR = 0x96000004
[ 2.452401] EC = 0x25: DABT (current EL), IL = 32 bits
[ 2.457717] SET = 0, FnV = 0
[ 2.460777] EA = 0, S1PTW = 0
[ 2.463921] Data abort info:
[ 2.466808] ISV = 0, ISS = 0x00000004
[ 2.470649] CM = 0, WnR = 0
[ 2.473617] [0000000000000007] user address but active_mm is swapper
[ 2.479978] Internal error: Oops: 96000004 [#1] PREEMPT SMP
[ 2.485550] Modules linked in:
[ 2.488609] CPU: 0 PID: 188 Comm: kworker/0:2 Not tainted 5.4.24-04902-g14319eb2bae3 #1683
[ 2.496871] Hardware name: NXP i.MX8MPlus EVK board (DT)
[ 2.502188] Workqueue: events deferred_probe_work_func
[ 2.507328] pstate: 80000005 (Nzcv daif -PAN -UAO)
[ 2.512121] pc : mipi_dsi_detach+0x10/0x38
[ 2.516219] lr : adv7533_detach_dsi+0x18/0x30
[ 2.520574] sp : ffff80001242b6e0
[ 2.523885] x29: ffff80001242b6e0 x28: ffff8000119d6000
[ 2.529196] x27: 0000000000000000 x26: 00000000fffffdfb
[ 2.534507] x25: 0000000000000001 x24: ffff8000115159f0
[ 2.539819] x23: ffff000176652120 x22: ffff800011b94000
[ 2.545132] x21: ffff000177882000 x20: ffff0001778766e8
[ 2.550444] x19: ffff000177876880 x18: 0000000000000000
[ 2.555756] x17: ffff800011e0d000 x16: 0000000000000000
[ 2.561068] x15: 0000000000000004 x14: ffffffffffffffff
[ 2.566381] x13: 0000000000000000 x12: ffff0001745765c8
[ 2.571694] x11: ffff000174576480 x10: 0000000000000040
[ 2.577006] x9 : ffff000176020e98 x8 : ffff000176020e90
[ 2.582318] x7 : 0000000000000001 x6 : 0000000000000001
[ 2.587630] x5 : 0000000000000000 x4 : 0000000000000000
[ 2.592943] x3 : ffff800011a398b0 x2 : ffffffffffffffff
[ 2.598255] x1 : ffff0001778d5c00 x0 : ffff0001778d6400
[ 2.603569] Call trace:
[ 2.606018] mipi_dsi_detach+0x10/0x38
[ 2.609769] adv7511_bridge_detach+0x6c/0x80
[ 2.614041] drm_bridge_detach+0x2c/0x50
[ 2.617964] drm_encoder_cleanup+0x2c/0xa0
[ 2.622063] imx_sec_dsim_unbind+0x50/0x68
[ 2.626159] component_unbind.isra.0+0x2c/0x50
[ 2.630601] component_bind_all+0x1e0/0x228
[ 2.634784] imx_drm_bind+0xb8/0x150
[ 2.638357] try_to_bring_up_master+0x164/0x1c0
[ 2.642887] __component_add+0xa0/0x168
[ 2.646721] component_add+0x10/0x18
[ 2.650297] lcdifv3_crtc_probe+0x4c/0x78
[ 2.654309] platform_drv_probe+0x50/0xa0
[ 2.658317] really_probe+0xd4/0x318
[ 2.661891] driver_probe_device+0x54/0xe8
[ 2.665991] __device_attach_driver+0x80/0xb8
[ 2.670348] bus_for_each_drv+0x74/0xc0
[ 2.674183] __device_attach+0xdc/0x138
[ 2.678020] device_initial_probe+0x10/0x18
[ 2.682204] bus_probe_device+0x90/0x98
[ 2.686042] device_add+0x378/0x648
[ 2.689531] platform_device_add+0xfc/0x228
[ 2.693718] imx_lcdifv3_probe+0x2b0/0x388
[ 2.697814] platform_drv_probe+0x50/0xa0
[ 2.701825] really_probe+0xd4/0x318
[ 2.705403] driver_probe_device+0x54/0xe8
[ 2.709502] __device_attach_driver+0x80/0xb8
[ 2.713859] bus_for_each_drv+0x74/0xc0
[ 2.717696] __device_attach+0xdc/0x138
[ 2.721535] device_initial_probe+0x10/0x18
[ 2.725721] bus_probe_device+0x90/0x98
[ 2.729555] deferred_probe_work_func+0x64/0x98
[ 2.734089] process_one_work+0x198/0x320
[ 2.738100] worker_thread+0x1f0/0x420
[ 2.741850] kthread+0xf0/0x120
[ 2.744993] ret_from_fork+0x10/0x18
[ 2.748573] Code: aa0003e1 f9400000 f9400402 b4000102 (f9400442)
[ 2.754667] ---[ end trace 756e3cdcc6c5557e ]---Signed-off-by: Fancy Fang
(cherry picked from commit ac040846d4c80c03e7ccb96a3b8553f84b743d39)
18 May, 2020
3 commits
-
Add ddr bandwidth usage metric support for i.MX8DXL.
Metric:
imx8dxl_lpddr4.bandwidth_usage
imx8dxl_ddr3l.bandwidth_usageExample:
root@imx8dxlevk:~# ./perf stat -a -I 1000 -M imx8dxl_lpddr4.bandwidth_usage dd if=/dev/zero of=/dev/null bs=100M count=1000000
1.000242625 1444320 imx8_ddr0/axid-read,axi_mask=0xffff,axi_id=0x0000,axi_channel=0x0/ # 15.1 % imx8dxl_lpddr4.bandwidth_usage
1.000242625 88964544 imx8_ddr0/axid-write,axi_mask=0xffff,axi_id=0x0000,axi_channel=0x0/
1.000242625 1000242625 ns duration_time
2.001170500 297392 imx8_ddr0/axid-read,axi_mask=0xffff,axi_id=0x0000,axi_channel=0x0/ # 16.0 % imx8dxl_lpddr4.bandwidth_usage
2.001170500 95684315 imx8_ddr0/axid-write,axi_mask=0xffff,axi_id=0x0000,axi_channel=0x0/
2.001170500 1000927875 ns duration_time
3.001840125 320798 imx8_ddr0/axid-read,axi_mask=0xffff,axi_id=0x0000,axi_channel=0x0/ # 16.0 % imx8dxl_lpddr4.bandwidth_usage
3.001840125 95655155 imx8_ddr0/axid-write,axi_mask=0xffff,axi_id=0x0000,axi_channel=0x0/
3.001840125 1000669625 ns duration_timeReviewed-by: Fugang Duan
Signed-off-by: Joakim Zhang -
Add ddr bandwidth usage metric support for i.MX8MP.
Metric:
imx8mp-lpddr4-bandwidth-usageExample:
root@imx8mpevk:~# ./perf stat -a -I 1000 -M imx8mp-lpddr4-bandwidth-usage dd if=/dev/zero of=/dev/null bs=100M count=1000000
1.000770875 18081664 imx8_ddr0/axid-read,axi_mask=0xffff,axi_id=0x0000/ # 37.0 % imx8mp-lpddr4-bandwidth-usage
1.000770875 5895351484 imx8_ddr0/axid-write,axi_mask=0xffff,axi_id=0x0000/
1.000770875 1000770875 ns duration_time
2.001780250 11137456 imx8_ddr0/axid-read,axi_mask=0xffff,axi_id=0x0000/ # 39.0 % imx8mp-lpddr4-bandwidth-usage
2.001780250 6232776052 imx8_ddr0/axid-write,axi_mask=0xffff,axi_id=0x0000/
2.001780250 1001009375 ns duration_time
3.002748125 10643520 imx8_ddr0/axid-read,axi_mask=0xffff,axi_id=0x0000/ # 39.0 % imx8mp-lpddr4-bandwidth-usage
3.002748125 6229700768 imx8_ddr0/axid-write,axi_mask=0xffff,axi_id=0x0000/
3.002748125 1000967875 ns duration_timeReviewed-by: Fugang Duan
Signed-off-by: Joakim Zhang -
In interval mode, if metric expression contains duration_time event,
command with -I 5000 config can trigger this cast issue.Reviewed-by: Fugang Duan
Signed-off-by: Joakim Zhang