[PATCH RFC 00/19] drm: Add support for bus-format negotiation
Neil Armstrong
narmstrong at baylibre.com
Fri Aug 9 06:58:25 UTC 2019
Hi Boris,
On 08/08/2019 17:11, Boris Brezillon wrote:
> 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.
It was one of the big subject of the dw-hdmi support of 10/12/16bit and
YUV420 output, and the bridge states was plannes, and I'm happy you did it !
I'll ASAP to try implementing the dw-hdmi YUV420 and YUV444 output support with
this patchset, but overall with my limited knowledge, it looks globally sane !
Neil
>
> 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(-)
>
More information about the dri-devel
mailing list