linux/drivers/gpu/drm/exynos
Hyungwon Hwang 0e480f6ffb drm/exynos: dsi: check whether dsi is enabled before sending data
exynos_dsi_host_transfer() can be called through a panel driver while
DSI is turning down. It is possible because the function checks only
whether DSI is initialized or not, and there is a moment which DSI is
set by uninitialized, but DSI is still turning down. To prevent it,
DSI must be set by disabled before starting to be turned down, and
exynos_dsi_host_transfer() must check whether DSI is enabled or not.

Kernel dump:
[ 4721.351448] Unhandled fault: synchronous external abort (0x96000210) at 0xffffff800015e018
[ 4721.351809] Internal error: : 96000210 [#1] PREEMPT SMP
[ 4721.352031] Modules linked in:
[ 4721.352173] CPU: 2 PID: 300 Comm: deviced Tainted: G        W       4.0.4-01017-g7964a87 #1
[ 4721.353989] Hardware name: Samsung DRACO board (DT)
[ 4721.358852] task: ffffffc0a0b70000 ti: ffffffc0a00ec000 task.ti: ffffffc0a00ec000
[ 4721.366327] PC is at exynos_dsi_enable_lane+0x14/0x5c
[ 4721.371353] LR is at exynos_dsi_host_transfer+0x834/0x8d8
[ 4721.376731] pc : [<ffffffc000432bcc>] lr : [<ffffffc000434590>] pstate: 60000145
[ 4721.384107] sp : ffffffc0a00efbe0
[ 4721.387405] x29: ffffffc0a00efbe0 x28: ffffffc0a00ec000
[ 4721.392699] x27: ffffffc000968000 x26: 0000000000000040
[ 4721.397994] x25: ffffffc000f74dc0 x24: ffffffc0a00efec8
[ 4721.403290] x23: ffffffc0a4815400 x22: ffffffc0009f2729
[ 4721.408584] x21: ffffffc0a00efcc8 x20: ffffffc0a4a2a848
[ 4721.413879] x19: ffffffc0a4a2a818 x18: 0000000000000004
[ 4721.419173] x17: 0000007faa5cddf0 x16: ffffffc0001a40a8
[ 4721.424469] x15: 0000000000000009 x14: 000000000000000d
[ 4721.429762] x13: 6e6e6f63206b726f x12: 0000000000000010
[ 4721.435058] x11: 0101010101010101 x10: 0000000000000000
[ 4721.440353] x9 : 000000000000000a x8 : 8386838282818381
[ 4721.445648] x7 : ffffffc0a201efe8 x6 : 0000000000000000
[ 4721.450943] x5 : 00000000fffffffa x4 : ffffffc0a201f170
[ 4721.456237] x3 : ffffff800015e000 x2 : ffffff800015e018
[ 4721.461531] x1 : 000000000000000f x0 : ffffffc0a4a2a818
[ 4721.466826]
[ 4721.468305] Process deviced (pid: 300, stack limit = 0xffffffc0a00ec028)
[ 4721.474989] Stack: (0xffffffc0a00efbe0 to 0xffffffc0a00f0000)
[ 4721.480720] fbe0: a00efca0 ffffffc0 0042c944 ffffffc0 a0f2d680 ffffffc0 00000024 00000000
[ 4721.488895] fc00: a4b6d000 ffffffc0 009f2729 ffffffc0 a4815400 ffffffc0 a00efec8 ffffffc0

Signed-off-by: Hyungwon Hwang <human.hwang@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
2015-06-20 00:32:56 +09:00
..
exynos7_drm_decon.c drm/exynos: fix broken component binding in case of multiple pipelines 2015-06-20 00:32:55 +09:00
exynos_dp_core.c drm/exynos: fix broken component binding in case of multiple pipelines 2015-06-20 00:32:55 +09:00
exynos_dp_core.h drm/exynos: dp: support drm_bridge 2015-01-28 08:47:29 +01:00
exynos_dp_reg.c drm/exynos: Fix checkpatch warning in exynos_dp_reg.c 2014-06-02 02:07:12 +09:00
exynos_dp_reg.h drm/exynos: Move dp driver from video/ to drm/ 2014-03-24 00:36:34 +09:00
exynos_drm_buf.c drm/exynos: fix DMA_ATTR_NO_KERNEL_MAPPING usage 2015-02-07 16:38:41 +09:00
exynos_drm_buf.h drm/exynos: change file license to GPL 2013-01-04 15:54:32 +09:00
exynos_drm_core.c drm/exynos: add component framework support 2014-06-02 02:07:04 +09:00
exynos_drm_crtc.c drm/exynos: split exynos_crtc->dpms in enable() and disable() 2015-06-20 00:32:53 +09:00
exynos_drm_crtc.h drm/exynos: Constify exynos_drm_crtc_ops 2015-05-19 22:50:53 +09:00
exynos_drm_dmabuf.c dma-buf: cleanup dma_buf_export() to make it easily extensible 2015-04-21 14:47:16 +05:30
exynos_drm_dmabuf.h drm/exynos: remove DRM_EXYNOS_DMABUF config 2015-02-07 16:38:40 +09:00
exynos_drm_dpi.c drm/exynos: fix broken component binding in case of multiple pipelines 2015-06-20 00:32:55 +09:00
exynos_drm_drv.c drm/exynos: remove SoC checking code 2015-06-20 00:32:55 +09:00
exynos_drm_drv.h drm/exynos: fix broken component binding in case of multiple pipelines 2015-06-20 00:32:55 +09:00
exynos_drm_dsi.c drm/exynos: dsi: check whether dsi is enabled before sending data 2015-06-20 00:32:56 +09:00
exynos_drm_encoder.c drm/exynos: remove unnecessary calls to disable_plane() 2015-06-20 00:32:53 +09:00
exynos_drm_encoder.h drm/exynos: remove extra declaration of struct exynos_drm_manager 2014-11-24 18:02:50 +09:00
exynos_drm_fb.c drm/exynos: add exynos specific .atomic_commit() 2015-06-20 00:32:51 +09:00
exynos_drm_fb.h drm/exynos: change file license to GPL 2013-01-04 15:54:32 +09:00
exynos_drm_fbdev.c drm/exynos: don't disable unused functions at init 2015-06-20 00:32:49 +09:00
exynos_drm_fbdev.h drm/exynos: change file license to GPL 2013-01-04 15:54:32 +09:00
exynos_drm_fimc.c drm: remove DRM_FORMAT_NV12MT 2015-02-04 10:10:05 +01:00
exynos_drm_fimc.h drm/exynos: change file license to GPL 2013-01-04 15:54:32 +09:00
exynos_drm_fimd.c drm/exynos: fix broken component binding in case of multiple pipelines 2015-06-20 00:32:55 +09:00
exynos_drm_g2d.c drm / exynos / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM 2014-12-04 01:04:55 +01:00
exynos_drm_g2d.h drm/exynos: add G2D driver 2012-05-17 20:14:48 +09:00
exynos_drm_gem.c drm/exynos: use drm generic mmap interface 2014-09-20 01:00:13 +09:00
exynos_drm_gem.h drm/exynos: fix DMA_ATTR_NO_KERNEL_MAPPING usage 2015-02-07 16:38:41 +09:00
exynos_drm_gsc.c drm: remove DRM_FORMAT_NV12MT 2015-02-04 10:10:05 +01:00
exynos_drm_gsc.h drm/exynos: change file license to GPL 2013-01-04 15:54:32 +09:00
exynos_drm_iommu.c arm: dma-mapping: remove order parameter from arm_iommu_create_mapping() 2014-02-28 11:55:18 +01:00
exynos_drm_iommu.h drm/exynos: remove uneeded declaration of struct dma_iommu_mapping 2014-11-24 18:02:50 +09:00
exynos_drm_ipp.c drm/exynos: consolidate driver/device initialization code 2015-06-20 00:32:55 +09:00
exynos_drm_ipp.h drm/exynos/ipp: remove unused field in command node 2014-09-20 00:56:10 +09:00
exynos_drm_plane.c drm/exynos: remove exported functions from exynos_drm_plane 2015-06-20 00:32:49 +09:00
exynos_drm_plane.h drm/exynos: remove exported functions from exynos_drm_plane 2015-06-20 00:32:49 +09:00
exynos_drm_rotator.c drm / exynos / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM 2014-12-04 01:04:55 +01:00
exynos_drm_rotator.h drm/exynos: change file license to GPL 2013-01-04 15:54:32 +09:00
exynos_drm_vidi.c drm/exynos: fix broken component binding in case of multiple pipelines 2015-06-20 00:32:55 +09:00
exynos_drm_vidi.h drm/exynos: change file license to GPL 2013-01-04 15:54:32 +09:00
exynos_hdmi.c drm/exynos: fix broken component binding in case of multiple pipelines 2015-06-20 00:32:55 +09:00
exynos_mixer.c drm/exynos: fix broken component binding in case of multiple pipelines 2015-06-20 00:32:55 +09:00
exynos_mixer.h drm/exynos: Remove exynos_drm_hdmi shim 2014-03-24 00:36:32 +09:00
Kconfig drm/exynos: add a dependency on FB_S3C to DECON driver 2015-06-20 00:32:54 +09:00
Makefile drm/exynos: Add DECON driver 2015-02-11 20:27:08 +09:00
regs-fimc.h drm/exynos: add device tree support for fimc ipp driver 2013-04-29 14:35:32 +09:00
regs-gsc.h drm/exynos: add gsc ipp driver 2012-12-15 02:40:00 +09:00
regs-hdmi.h drm/exynos: add hdmiphy power on/off sequence 2014-06-02 02:07:15 +09:00
regs-mixer.h drm/exynos: fix typos in hdmi and mixer 2015-04-13 11:39:40 +09:00
regs-rotator.h drm/exynos: add rotator ipp driver 2012-12-15 02:39:41 +09:00
regs-vp.h drm/exynos: added hdmi display support 2011-12-29 11:21:42 +09:00