mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
drm/rockchip: dw_hdmi: Fix crash when hdmi is disabled in kernel logo
crash log: [ 11.867212][ T80] Unable to handle kernel read from unreadable memory at virtual address 0000000000000090 [ 11.868072][ T80] Mem abort info: [ 11.868390][ T80] ESR = 0x0000000096000005 [ 11.868795][ T80] EC = 0x25: DABT (current EL), IL = 32 bits [ 11.869326][ T80] SET = 0, FnV = 0 [ 11.869667][ T80] EA = 0, S1PTW = 0 [ 11.870008][ T80] FSC = 0x05: level 1 translation fault [ 11.870504][ T80] Data abort info: [ 11.870822][ T80] ISV = 0, ISS = 0x00000005 [ 11.871228][ T80] CM = 0, WnR = 0 [ 11.871558][ T80] [0000000000000090] user address but active_mm is swapper [ 11.872178][ T80] Internal error: Oops: 0000000096000005 [#1] PREEMPT SMP [ 11.872798][ T80] Modules linked in: [ 11.873142][ T80] CPU: 4 PID: 80 Comm: kworker/u16:2 Not tainted 6.1.118 #70 [ 11.873787][ T80] Hardware name: Rockchip RK3576 EVB1 V10 Board (DT) [ 11.874362][ T80] Workqueue: events_unbound deferred_probe_work_func [ 11.874947][ T80] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 11.875625][ T80] pc : rockchip_drm_crtc_output_pre_disable+0xc/0x44 [ 11.876205][ T80] lr : dw_hdmi_rockchip_crtc_pre_disable+0x34/0x54 [ 11.876772][ T80] sp : ffffffc00ab7b5f0 [ 11.877134][ T80] x29: ffffffc00ab7b5f0 x28: ffffffc009633ea8 x27: ffffff80c6014240 [ 11.877838][ T80] x26: 0000000000000038 x25: 0000000000000001 x24: 0000000000000028 [ 11.878531][ T80] x23: 0000000000000000 x22: ffffff80c6014240 x21: ffffff80c1b157b8 [ 11.879222][ T80] x20: ffffff80c2b7e840 x19: ffffff80c1b15040 x18: ffffffc00ab650f0 [ 11.879915][ T80] x17: 0000000000000068 x16: 00000000000000c4 x15: ffffffc009502784 [ 11.880607][ T80] x14: 0000000000003738 x13: ffffffc00ab7b272 x12: 0000000000000000 [ 11.881300][ T80] x11: 0000000000000001 x10: 0000000000000001 x9 : ffffff80c2b7e868 [ 11.882002][ T80] x8 : 0000000000000800 x7 : 3d45505954564544 x6 : 000000004e514553 [ 11.882694][ T80] x5 : 0000000000000000 x4 : 0000000000000000 x3 : ffffffc00a32e3c0 [ 11.883396][ T80] x2 : 0000000000000000 x1 : 0000000000000800 x0 : 0000000000000000 [ 11.884088][ T80] Call trace: [ 11.884373][ T80] rockchip_drm_crtc_output_pre_disable+0xc/0x44 [ 11.884928][ T80] dw_hdmi_rockchip_crtc_pre_disable+0x34/0x54 [ 11.885461][ T80] dw_hdmi_qp_bridge_atomic_disable+0xc8/0x1d4 [ 11.885994][ T80] drm_atomic_bridge_chain_disable+0x6c/0xb4 [ 11.886518][ T80] drm_atomic_helper_commit_modeset_disables+0x174/0x57c [ 11.887129][ T80] rockchip_drm_atomic_helper_commit_tail_rpm+0x4c/0x304 [ 11.887741][ T80] commit_tail+0xa4/0x154 [ 11.888117][ T80] drm_atomic_helper_commit+0x1c4/0x1e4 [ 11.888604][ T80] drm_atomic_commit+0xa4/0xd0 [ 11.889016][ T80] rockchip_drm_show_logo+0x1a48/0x1d64 [ 11.889505][ T80] rockchip_drm_bind+0x1d8/0x298 [ 11.889937][ T80] try_to_bring_up_aggregate_device+0x168/0x1b4 [ 11.890481][ T80] __component_add+0xd0/0x17c [ 11.890891][ T80] component_add+0x14/0x20 [ 11.891279][ T80] dw_mipi_dsi2_host_attach+0x158/0x1d4 [ 11.891768][ T80] mipi_dsi_attach+0x28/0x3c [ 11.892171][ T80] panel_simple_dsi_probe+0x1a8/0x22c [ 11.892638][ T80] mipi_dsi_drv_probe+0x20/0x2c [ 11.893059][ T80] really_probe+0x174/0x350 [ 11.893447][ T80] __driver_probe_device+0xa0/0x128 [ 11.893901][ T80] driver_probe_device+0x44/0x210 [ 11.894333][ T80] __device_attach_driver+0x12c/0x154 [ 11.894798][ T80] bus_for_each_drv+0x84/0xd0 [ 11.895211][ T80] __device_attach+0xf0/0x170 [ 11.895621][ T80] device_initial_probe+0x14/0x20 [ 11.896063][ T80] bus_probe_device+0x34/0x98 [ 11.896475][ T80] deferred_probe_work_func+0x7c/0xd8 [ 11.896940][ T80] process_one_work+0x1a8/0x3b8 [ 11.897365][ T80] worker_thread+0x300/0x430 [ 11.897766][ T80] kthread+0xec/0x1b8 [ 11.898110][ T80] ret_from_fork+0x10/0x20 Change-Id: Ie336d9b7a06970284589f79a955173a44ab41636 Signed-off-by: Algea Cao <algea.cao@rock-chips.com>
This commit is contained in:
@@ -3248,6 +3248,9 @@ static void dw_hdmi_rockchip_crtc_post_enable(void *data, struct drm_crtc *crtc)
|
||||
struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data;
|
||||
int output_if;
|
||||
|
||||
if (!crtc)
|
||||
return;
|
||||
|
||||
switch (hdmi->id) {
|
||||
case 0:
|
||||
output_if = VOP_OUTPUT_IF_HDMI0;
|
||||
@@ -3268,6 +3271,9 @@ static void dw_hdmi_rockchip_crtc_pre_disable(void *data, struct drm_crtc *crtc)
|
||||
struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data;
|
||||
int output_if;
|
||||
|
||||
if (!crtc)
|
||||
return;
|
||||
|
||||
switch (hdmi->id) {
|
||||
case 0:
|
||||
output_if = VOP_OUTPUT_IF_HDMI0;
|
||||
|
||||
Reference in New Issue
Block a user