Hello, This patch series aims at adding support for runtime bus-format negotiation between all elements of the 'encoder -> bridges -> connector/display' section of the pipeline. In order to support that, we need drm bridges to fully take part in the atomic state validation process, which requires addition of a drm_bridge_state + a new drm_bridge_funcs.atomic_check() hook (patches 10 - 12). Once those basic building blocks are in place, we can add new helpers to facilitate bus-format negotiation between element of the encoder chain (patches 13 - 14). Patches 1 to 9 are preparatory patches for patches 10 - 14. Patch 1 is needed to allow inclusion of drm_atomic.h from drm_bridge.h, which we need to make drm_bridge/drm_bridge_state inherit from drm_private_obj/drm_private_obj_state. Patches 2 to 9 are about transitioning the bridge chain to a double-linked list, which is needed to allow bridge elements to negotiate with the next and prev element in the pipeline. Most of those patches can be applied independently of the rest of the series, especially patches 2 - 7 which I think fix some misuses of the drm_bridge API. To finish, patches 15 - 17 demonstrate how bus-format negotiation can be done, and patches 18 - 19 were needed for the use case I used to test whole solution. As you've noticed, this is an RFC, so any kind of feedback is welcome (apart from checkpatch reports :P). Thanks, Boris Boris Brezillon (19): drm: Stop including drm_bridge.h from drm_crtc.h drm: Support custom encoder/bridge enable/disable sequences officially drm/vc4: Get rid of the dsi->bridge field drm/exynos: Get rid of exynos_dsi->out_bridge drm/exynos: Don't reset bridge->next drm/bridge: Create drm_bridge_chain_xx() wrappers drm/msm: Use drm_attach_bridge() to attach a bridge to an encoder drm/bridge: Introduce drm_bridge_chain_get_{first,last,next}_bridge() drm/bridge: Make the bridge chain a double-linked list drm/bridge: Add a drm_bridge_state object drm/bridge: Patch atomic hooks to take a drm_bridge_state drm/bridge: Add an ->atomic_check() hook drm/bridge: Add the drm_bridge_chain_get_prev_bridge() helper drm/bridge: Add the necessary bits to support bus format negotiation drm/imx: pd: Use bus format/flags provided by the bridge when available drm/bridge: lvds-encoder: Add a way to support custom ->atomic_check() implem drm/bridge: lvds-encoder: Implement bus format negotiation for sn75lvds83 drm/panel: simple: Add support for Toshiba LTA089AC29000 panel ARM: dts: imx: imx51-zii-rdu1: Fix the display pipeline definition .../display/panel/toshiba,lt089ac29000.txt | 5 +- arch/arm/boot/dts/imx51-zii-rdu1.dts | 24 +- drivers/gpu/drm/arc/arcpgu_hdmi.c | 1 + drivers/gpu/drm/bridge/analogix-anx78xx.c | 1 + .../drm/bridge/analogix/analogix_dp_core.c | 13 +- drivers/gpu/drm/bridge/dumb-vga-dac.c | 1 + drivers/gpu/drm/bridge/lvds-encoder.c | 75 ++ .../bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 1 + drivers/gpu/drm/bridge/nxp-ptn3460.c | 1 + drivers/gpu/drm/bridge/panel.c | 1 + drivers/gpu/drm/bridge/parade-ps8622.c | 1 + drivers/gpu/drm/bridge/sii902x.c | 1 + drivers/gpu/drm/bridge/sii9234.c | 1 + drivers/gpu/drm/bridge/sil-sii8620.c | 1 + drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 1 + drivers/gpu/drm/bridge/tc358764.c | 1 + drivers/gpu/drm/bridge/tc358767.c | 1 + drivers/gpu/drm/bridge/ti-sn65dsi86.c | 1 + drivers/gpu/drm/bridge/ti-tfp410.c | 1 + drivers/gpu/drm/drm_atomic.c | 40 + drivers/gpu/drm/drm_atomic_helper.c | 46 +- drivers/gpu/drm/drm_bridge.c | 794 ++++++++++++++---- drivers/gpu/drm/drm_crtc_helper.c | 46 +- drivers/gpu/drm/drm_encoder.c | 16 +- drivers/gpu/drm/drm_probe_helper.c | 3 +- drivers/gpu/drm/drm_simple_kms_helper.c | 1 + drivers/gpu/drm/exynos/exynos_dp.c | 2 +- drivers/gpu/drm/exynos/exynos_drm_dsi.c | 18 +- drivers/gpu/drm/exynos/exynos_drm_mic.c | 1 + drivers/gpu/drm/exynos/exynos_hdmi.c | 1 + drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c | 1 + drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c | 1 + drivers/gpu/drm/i2c/tda998x_drv.c | 1 + drivers/gpu/drm/imx/imx-ldb.c | 1 + drivers/gpu/drm/imx/parallel-display.c | 29 +- drivers/gpu/drm/ingenic/ingenic-drm.c | 1 + drivers/gpu/drm/mediatek/mtk_dpi.c | 1 + drivers/gpu/drm/mediatek/mtk_dsi.c | 1 + drivers/gpu/drm/mediatek/mtk_hdmi.c | 7 +- drivers/gpu/drm/msm/dsi/dsi.h | 1 + drivers/gpu/drm/msm/edp/edp.c | 4 +- drivers/gpu/drm/msm/edp/edp.h | 1 + drivers/gpu/drm/msm/edp/edp_bridge.c | 2 +- drivers/gpu/drm/msm/hdmi/hdmi.c | 4 +- drivers/gpu/drm/msm/hdmi/hdmi.h | 2 + drivers/gpu/drm/omapdrm/dss/output.c | 1 + drivers/gpu/drm/omapdrm/omap_drv.c | 8 +- drivers/gpu/drm/omapdrm/omap_encoder.c | 4 +- drivers/gpu/drm/panel/panel-simple.c | 36 + drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 10 +- drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 1 + drivers/gpu/drm/rockchip/rockchip_lvds.c | 1 + drivers/gpu/drm/rockchip/rockchip_rgb.c | 1 + drivers/gpu/drm/sti/sti_dvo.c | 1 + drivers/gpu/drm/sti/sti_hda.c | 1 + drivers/gpu/drm/sti/sti_hdmi.c | 1 + drivers/gpu/drm/sun4i/sun4i_lvds.c | 1 + drivers/gpu/drm/sun4i/sun4i_rgb.c | 1 + drivers/gpu/drm/sun4i/sun4i_tcon.c | 1 + drivers/gpu/drm/tilcdc/tilcdc_external.c | 1 + drivers/gpu/drm/vc4/vc4_dsi.c | 38 +- include/drm/drm_atomic.h | 3 + include/drm/drm_bridge.h | 252 +++++- include/drm/drm_crtc.h | 1 - include/drm/drm_encoder.h | 19 +- 65 files changed, 1242 insertions(+), 297 deletions(-) -- 2.21.0 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel