mirror of https://gitee.com/openkylin/linux.git
6a3b45ada9
MIXER on Exynos5 SoCs uses different synchronisation method than Exynos4 to update internal state (shadow registers). Apparently the driver implements it incorrectly. The rule should be as follows: - do not request updating registers until previous request was finished, ie. MXR_CFG_LAYER_UPDATE_COUNT must be 0. - before setting registers synchronisation on VSYNC should be turned off, ie. MXR_STATUS_SYNC_ENABLE should be reset, - after finishing MXR_STATUS_SYNC_ENABLE should be set again. The patch hopefully implements it correctly. Below sample kernel log from page fault caused by the bug: [ 25.670038] exynos-sysmmu 14650000.sysmmu: 14450000.mixer: PAGE FAULT occurred at 0x2247b800 [ 25.677888] ------------[ cut here ]------------ [ 25.682164] kernel BUG at ../drivers/iommu/exynos-iommu.c:450! [ 25.687971] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP ARM [ 25.693778] Modules linked in: [ 25.696816] CPU: 5 PID: 1553 Comm: fb-release_test Not tainted 5.0.0-rc7-01157-g5f86b1566bdd #136 [ 25.705646] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) [ 25.711710] PC is at exynos_sysmmu_irq+0x1c0/0x264 [ 25.716470] LR is at lock_is_held_type+0x44/0x64 v2: added missing MXR_CFG_LAYER_UPDATE bit setting in mixer_enable_sync Reported-by: Marian Mihailescu <mihailescu2m@gmail.com> Signed-off-by: Andrzej Hajda <a.hajda@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com> |
||
---|---|---|
.. | ||
Kconfig | ||
Makefile | ||
exynos7_drm_decon.c | ||
exynos5433_drm_decon.c | ||
exynos_dp.c | ||
exynos_drm_crtc.c | ||
exynos_drm_crtc.h | ||
exynos_drm_dma.c | ||
exynos_drm_dpi.c | ||
exynos_drm_drv.c | ||
exynos_drm_drv.h | ||
exynos_drm_dsi.c | ||
exynos_drm_fb.c | ||
exynos_drm_fb.h | ||
exynos_drm_fbdev.c | ||
exynos_drm_fbdev.h | ||
exynos_drm_fimc.c | ||
exynos_drm_fimd.c | ||
exynos_drm_g2d.c | ||
exynos_drm_g2d.h | ||
exynos_drm_gem.c | ||
exynos_drm_gem.h | ||
exynos_drm_gsc.c | ||
exynos_drm_ipp.c | ||
exynos_drm_ipp.h | ||
exynos_drm_mic.c | ||
exynos_drm_plane.c | ||
exynos_drm_plane.h | ||
exynos_drm_rotator.c | ||
exynos_drm_scaler.c | ||
exynos_drm_vidi.c | ||
exynos_drm_vidi.h | ||
exynos_hdmi.c | ||
exynos_mixer.c | ||
regs-decon7.h | ||
regs-decon5433.h | ||
regs-fimc.h | ||
regs-gsc.h | ||
regs-hdmi.h | ||
regs-mixer.h | ||
regs-rotator.h | ||
regs-scaler.h | ||
regs-vp.h |