From: Philipp Zabel <p.zabel@pengutronix.de>
To: Boris Brezillon <boris.brezillon@collabora.com>
Cc: Nikita Yushchenko <nikita.yoush@cogentembedded.com>,
Jernej Skrabec <jernej.skrabec@siol.net>,
Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
Neil Armstrong <narmstrong@baylibre.com>,
Andrey Smirnov <andrew.smirnov@gmail.com>,
Jonas Karlman <jonas@kwiboo.se>,
Seung-Woo Kim <sw0312.kim@samsung.com>,
dri-devel@lists.freedesktop.org,
Kyungmin Park <kyungmin.park@samsung.com>,
Thierry Reding <thierry.reding@gmail.com>,
Chris Healy <Chris.Healy@zii.aero>,
kernel@collabora.com, Sam Ravnborg <sam@ravnborg.org>
Subject: Re: [PATCH v2 17/21] drm/imx: pd: Use bus format/flags provided by the bridge when available
Date: Tue, 27 Aug 2019 14:51:20 +0200 [thread overview]
Message-ID: <1566910280.4102.10.camel@pengutronix.de> (raw)
In-Reply-To: <20190827115706.1e172a63@collabora.com>
On Tue, 2019-08-27 at 11:57 +0200, Boris Brezillon wrote:
> On Tue, 27 Aug 2019 11:23:02 +0200
> Philipp Zabel <p.zabel@pengutronix.de> wrote:
> > On Tue, 2019-08-27 at 10:43 +0200, Boris Brezillon wrote:
[...]
> > Absolutely. This was just a cosmetic remark. I'm suggesting to put this
> > branch below the other two, to indicate its relative importance.
>
> Okay, something like that?
>
> *num_output_fmts = 1;
> if (!imxpd->bus_format && di->num_bus_formats) {
> if (output_fmts)
> output_fmts[0] = di->bus_formats[0];
> } else if (!imxpd->bus_format) {
> *num_output_fmts = ARRAY_SIZE(imx_pd_bus_fmts);
> if (output_fmts)
> memcpy(output_fmts, imx_pd_bus_fmts,
> ARRAY_SIZE(imx_pd_bus_fmts));
> } else if (output_fmts) {
> output_fmts[0] = imxpd->bus_format;
> }
Yes, thank you.
[...]
> > That was unexpected, as MEDIA_BUS_FMT_FIXED is documented as:
> >
> > "MEDIA_BUS_FMT_FIXED shall be used by host-client pairs,
> > where the data format is fixed."
> >
> > in include/uapi/linux/media-bus-format.h. I read this as something for a
> > fixed link between two known devices where there is only one possible
> > format. Here we can't possibly know what the other side expects.
>
> Well, it's more or less what happens right now without the bus format
> negotiation: bridge elements consider that the link uses a fixed format
> that's known by both ends in advance.
Ok. And with the legacy DT provided bus format we can even choose a
sensible format.
[...]
> > > I can do that if you like. Note that we are forwarding
> > > the ->output_bus_cfg.fmt value to the IPU DI, not ->input_bus_cfg.fmt.
> > > I just assumed that input format wouldn't be used in the dummy bridge
> > > element (the one embedded in the encoder) since encoders only have an
> > > output end (input port is likely to be a SoC specific link between the
> > > CRTC and the encoder which we probably don't need/want to expose).
> >
> > Then why (would this driver have to) implement get_input_fmts at all?
>
> That's the only way we can check if an output format is supported: bus
> format negotiation is based on a trial and error logic that starts from
> the end of the pipeline (last bridge element) and goes backward until
> it reaches the first bridge (the dummy encoder bridge). A bus format
> setting is validated when all ->get_input_bus_fmts() hooks returned at
> least one possible format (*num_input_formats > 0) for the output format
> being tested by the next element in the chain. And that's why even the
> dummy encoder bridge has to implement this hook unless it only supports
> one output format (the core returns MEDIA_BUS_FMT_FIXED when
> ->get_input_bus_fmts is NULL).
This function (currently) also only returns MEDIA_BUS_FMT_FIXED, so
there is no difference in return value (if queried with a supported
output_fmt).
select_bus_fmt_recursive could just check atomic_get_output_bus_fmts if
that is implemented, but atomic_get_input_bus_fmts isn't.
That point is moot though, if we propagate the output format to the
input format.
> > I'd like this to be consistent. If encoder-bridges don't use the input
> > bus format in general, I'm fine with this.
>
> Propagating output to input doesn't hurt, and if you think that's
> clearer this way I'm perfectly fine adjusting the driver accordingly.
Yes, I'd like that.
> > I was just confused that the bridge takes part in input format
> > negotiation and then carries on using the output format to configure its
> > input.
>
> Maybe I'm wrong, but I thought it was the parallel (AKA DPI) encoder
> output we were configuring here.
> Anyway, I'll choose one semantic and document it.
Semantics :) You are not wrong, the IPU DIs technically output DPI
compatible signals, internally. Those are fed through muxes either into
the HDMI/LVDS/TV encoders, or directly into the IOMUX block, which
drives them onto the DISP pads.
The IPU driver is from a time before bridges and of-graph bindings were
established. We chose to consider the whole IDMAC/DP/DC/DI path as crtc,
and the HDMI / LVDS / IOMUX/DISP blocks as encoder, because the crtc-
encoder assignment mapped well to configuring the muxes between the
components.
Technically we could just as well consider IDMAC/DP/part-of-DC to be the
crtc and part-of-DC/DI to be a DPI encoder to which the HDMI/LVDS/TV
bridges are connected, but today we'd still miss the possibility to
multiplex several encoders into the same bridge.
[...]
> > > As said above, we need a way to support bridge chains where not all
> > > elements support negotiating the bus format, that's what this fallback
> > > is for, but maybe 0 is not an appropriate value to mean 'pick the
> > > default format'.
> >
> > We'd actually have to pick one here. If set, that should be
> > imxpd->bus_format.
>
> What if imxpd->bus_format is 0? Should I return -EINVAL?
I think so. That would certainly be easier to debug than "strange
colours" when hooking up a bridge that is incompatible with whatever
we'd choose.
regards
Philipp
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2019-08-27 12:51 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-26 15:26 [PATCH v2 00/21] drm: Add support for bus-format negotiation Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 01/21] drm: Stop including drm_bridge.h from drm_crtc.h Boris Brezillon
2019-08-28 20:27 ` Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 02/21] drm: Add a dummy bridge object to drm_encoder Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 03/21] drm/vc4: Implement bridge_funcs instead of encoder_helper_funcs Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 04/21] drm/exynos: Fix potential unbalanced calls to pm_runtime_put Boris Brezillon
2019-10-11 13:31 ` Boris Brezillon
2019-10-11 13:54 ` Andrzej Hajda
2019-10-11 14:20 ` Boris Brezillon
2019-10-12 7:15 ` Sam Ravnborg
2019-10-22 9:14 ` Boris Brezillon
2019-10-22 17:23 ` Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 05/21] drm/exynos: Don't reset bridge->next Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 06/21] drm/exynos: Implement bridge_funcs instead of encoder_helper_funcs Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 07/21] drm/bridge: Rename bridge helpers targeting a bridge chain Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 08/21] drm/msm: Use drm_attach_bridge() to attach a bridge to an encoder Boris Brezillon
2019-08-28 15:22 ` Sean Paul
2019-08-28 15:25 ` Boris Brezillon
2019-08-28 15:30 ` Sean Paul
2019-08-28 20:27 ` Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 09/21] drm/bridge: Introduce drm_bridge_chain_get_next_bridge() Boris Brezillon
2019-08-27 7:19 ` Neil Armstrong
2019-08-26 15:26 ` [PATCH v2 10/21] drm/bridge: Make the bridge chain a double-linked list Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 11/21] drm/bridge: Add the drm_for_each_bridge_in_chain() helper Boris Brezillon
2019-08-27 7:26 ` Neil Armstrong
2019-08-26 15:26 ` [PATCH v2 12/21] drm/bridge: Add a drm_bridge_state object Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 13/21] drm/bridge: Patch atomic hooks to take a drm_bridge_state Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 14/21] drm/bridge: Add an ->atomic_check() hook Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 15/21] drm/bridge: Add the drm_bridge_chain_get_prev_bridge() helper Boris Brezillon
2019-08-27 7:26 ` Neil Armstrong
2019-08-26 15:26 ` [PATCH v2 16/21] drm/bridge: Add the necessary bits to support bus format negotiation Boris Brezillon
2019-08-27 8:18 ` Neil Armstrong
2019-08-26 15:26 ` [PATCH v2 17/21] drm/imx: pd: Use bus format/flags provided by the bridge when available Boris Brezillon
2019-08-27 8:15 ` Philipp Zabel
2019-08-27 8:43 ` Boris Brezillon
2019-08-27 9:23 ` Philipp Zabel
2019-08-27 9:57 ` Boris Brezillon
2019-08-27 12:51 ` Philipp Zabel [this message]
2019-08-27 13:20 ` Boris Brezillon
2019-08-27 13:49 ` Philipp Zabel
2019-08-26 15:26 ` [PATCH v2 18/21] drm/bridge: lvds-encoder: Implement basic bus format negotiation Boris Brezillon
2019-08-26 16:15 ` Jernej Škrabec
2019-08-26 18:17 ` Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 19/21] drm/bridge: panel: Propage bus format/flags Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 20/21] drm/panel: simple: Add support for Toshiba LTA089AC29000 panel Boris Brezillon
2019-08-26 15:26 ` [PATCH v2 21/21] ARM: dts: imx: imx51-zii-rdu1: Fix the display pipeline definition Boris Brezillon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1566910280.4102.10.camel@pengutronix.de \
--to=p.zabel@pengutronix.de \
--cc=Chris.Healy@zii.aero \
--cc=Laurent.pinchart@ideasonboard.com \
--cc=andrew.smirnov@gmail.com \
--cc=boris.brezillon@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=jernej.skrabec@siol.net \
--cc=jonas@kwiboo.se \
--cc=kernel@collabora.com \
--cc=kyungmin.park@samsung.com \
--cc=narmstrong@baylibre.com \
--cc=nikita.yoush@cogentembedded.com \
--cc=sam@ravnborg.org \
--cc=sw0312.kim@samsung.com \
--cc=thierry.reding@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox