1
0
Fork 0

MLK-25101: drm: imx: dw_hdmi: Keep hdmi phy in poweron status

The pixel clock of display controller lcdifv3 source from hdmi phy.
When hdmi cable plugout irq trigger,
hdmi phy will be poweroff immediately in hdmi controller driver.
But DRM and user app may still working until they received plugout event.
For such case, the kernel will dump.

[   89.707045] ------------[ cut here ]------------
[   89.711705] [CRTC:39:crtc-2] vblank wait timed out
[   89.716563] WARNING: CPU: 2 PID: 7 at drivers/gpu/drm/drm_atomic_helper.c:1467 drm_atomic_helper_wait_for_vblanks.part.0+0x274/0x290
[   89.728472] Modules linked in:
[   89.731533] CPU: 2 PID: 7 Comm: kworker/u8:0 Not tainted 5.4.70-00041-g631cb8d6e2b2-dirty #23
[   89.740055] Hardware name: NXP i.MX8MPlus EVK board (DT)
[Playing (No Repeated)][Vol=1.0][   89.745372] Workqueue: events_unbound commit_work
[00:00:04/00:02:18][   89.752939] pstate: 40000005 (nZcv daif -PAN -UAO)
[   89.759376] pc : drm_atomic_helper_wait_for_vblanks.part.0+0x274/0x290
[   89.765905] lr : drm_atomic_helper_wait_for_vblanks.part.0+0x274/0x290
[   89.772431] sp : ffff800011c43ca0
[   89.775744] x29: ffff800011c43ca0 x28: 0000000000000000
[   89.781054] x27: 000000000000055f x26: 0000000000000070
[   89.786363] x25: ffff00017786b800 x24: 0000000000000001
[   89.791674] x23: 0000000000000038 x22: 0000000000000004
[   89.796983] x21: ffff00016a375400 x20: ffff00017786b088
[   89.802293] x19: 0000000000000002 x18: 0000000000000010
[   89.807604] x17: 0000000000000000 x16: 0000000000000000
[   89.812913] x15: ffff0001760c5870 x14: ffffffffffffffff
[   89.818225] x13: ffff800091c439f7 x12: ffff800011c439ff
[   89.823537] x11: ffff800011a11000 x10: ffff800011b36328
[   89.828847] x9 : 0000000000000000 x8 : ffff800011b37000
[   89.834158] x7 : ffff80001069fc68 x6 : 0000000000000341
[   89.839469] x5 : 0000000000000000 x4 : ffff00017f3a0188
[   89.844778] x3 : ffff00017f3a6f20 x2 : ffff00017f3a0188
[   89.850088] x1 : 4d8823010d259700 x0 : 0000000000000000
[   89.855404] Call trace:
[   89.857854]  drm_atomic_helper_wait_for_vblanks.part.0+0x274/0x290
[   89.864033]  drm_atomic_helper_wait_for_vblanks+0x14/0x20
[   89.869433]  lcdifv3_drm_atomic_commit_tail+0x64/0x7c
[   89.874484]  commit_tail+0x9c/0x138
[   89.877970]  commit_work+0x10/0x18
[   89.881372]  process_one_work+0x198/0x320
[   89.885382]  worker_thread+0x48/0x420
[   89.889042]  kthread+0x138/0x158
[   89.892272]  ret_from_fork+0x10/0x1c
[   89.895847] ---[ end trace ed53d661901a6437 ]---

Keep hdmi phy in poweron status when cable plugout to workaround the issue.
HDMI phy power off function will be move to lcdifv3 or hdmi phy driver
later.

Signed-off-by: Sandor Yu <Sandor.yu@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
zero-colors
Sandor Yu 2020-12-03 21:27:37 +08:00
parent 33db0bad19
commit 8fb049834b
1 changed files with 5 additions and 3 deletions

View File

@ -308,9 +308,11 @@ static void imx8mp_hdmi_phy_disable(struct dw_hdmi *dw_hdmi, void *data)
regmap_read(hdmi->regmap, 0x200, &val);
/* Disable CEC */
val &= ~0x2;
/* Power down HDMI PHY */
val |= 0x8;
regmap_write(hdmi->regmap, 0x200, val);
/* Power down HDMI PHY
* TODO move PHY power off to hdmi phy driver
* val |= 0x8;
* regmap_write(hdmi->regmap, 0x200, val);
*/
}
static int imx8mp_hdmimix_setup(struct imx_hdmi *hdmi)