linux-stable/drivers/gpu/drm/vc4
Boris Brezillon 033bfe7538 drm/vc4: dsi: Fix bridge chain handling
Commit 05193dc381 ("drm/bridge: Make the bridge chain a double-linked
list") patched the bridge chain logic to use a double-linked list instead
of a single-linked list. This change induced changes to the VC4 driver
which was manually resetting the encoder->bridge element to NULL to
control the enable/disable sequence of the bridge chain. During this
conversion, 2 bugs were introduced:

1/ list_splice() was used to move chain elements to our own internal
   chain, but list_splice() does not reset the source list to an empty
   state, leading to unexpected bridge hook calls when
   drm_bridge_chain_xxx() helpers were called by the core. Replacing
   those list_splice() calls by list_splice_init() ones fixes this
   problem.

2/ drm_bridge_chain_xxx() helpers operate on the
   bridge->encoder->bridge_chain list, which is now empty. When the
   helper uses list_for_each_entry_reverse() we end up with no operation
   done which is not what we want. But that's even worse when the helper
   uses list_for_each_entry_from(), because in that case we end up in
   an infinite loop searching for the list head element which is no
   longer encoder->bridge_chain but vc4_dsi->bridge_chain. To address
   that problem we stop using the bridge chain helpers and call the
   hooks directly.

Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Eric Anholt <eric@anholt.net>
Fixes: 05193dc381 ("drm/bridge: Make the bridge chain a double-linked list")
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>
Acked-by: Eric Anholt <eric@anholt.net>
Link: https://patchwork.freedesktop.org/patch/msgid/20191227144124.210294-2-boris.brezillon@collabora.com
2020-01-08 09:09:48 +01:00
..
Kconfig drm/vc4: Fix Kconfig indentation 2019-11-25 10:04:41 +01:00
Makefile
vc4_bo.c Linus 5.3-rc1 2019-07-22 21:24:10 +02:00
vc4_crtc.c drm/mm: Use helpers for drm_mm_node booleans 2019-10-04 13:42:33 +01:00
vc4_debugfs.c Linus 5.3-rc1 2019-07-22 21:24:10 +02:00
vc4_dpi.c drm/bridge: panel: Infer connector type from panel by default 2019-09-08 19:04:23 +02:00
vc4_drv.c drm main pull for 5.4-rc1 2019-09-19 16:24:24 -07:00
vc4_drv.h Linus 5.3-rc1 2019-07-22 21:24:10 +02:00
vc4_dsi.c drm/vc4: dsi: Fix bridge chain handling 2020-01-08 09:09:48 +01:00
vc4_fence.c
vc4_gem.c drm/vc4: Use dma_resv locking wrappers 2019-12-17 17:26:08 +01:00
vc4_hdmi.c drm/vc4: Provide ddc symlink in connector sysfs directory 2020-01-07 20:25:43 +01:00
vc4_hvs.c drm/mm: Use helpers for drm_mm_node booleans 2019-10-04 13:42:33 +01:00
vc4_irq.c
vc4_kms.c Linus 5.3-rc1 2019-07-22 21:24:10 +02:00
vc4_packet.h
vc4_perfmon.c
vc4_plane.c drm/mm: Use helpers for drm_mm_node booleans 2019-10-04 13:42:33 +01:00
vc4_qpu_defines.h
vc4_regs.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
vc4_render_cl.c
vc4_trace.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
vc4_trace_points.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
vc4_txp.c Merge drm/drm-fixes into drm-misc-fixes 2019-10-03 09:59:29 +02:00
vc4_v3d.c Linus 5.3-rc1 2019-07-22 21:24:10 +02:00
vc4_validate.c
vc4_validate_shaders.c
vc4_vec.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00