All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrzej Hajda <a.hajda@samsung.com>
To: Maxime Ripard <maxime@cerno.tech>
Cc: Sam Ravnborg <sam@ravnborg.org>,
	Daniel Vetter <daniel.vetter@intel.com>,
	David Airlie <airlied@linux.ie>, Jonas Karlman <jonas@kwiboo.se>,
	Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
	Thierry Reding <thierry.reding@gmail.com>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	Neil Armstrong <narmstrong@baylibre.com>,
	Robert Foss <robert.foss@linaro.org>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Sean Paul <sean@poorly.run>,
	freedreno@lists.freedesktop.org,
	Kyungmin Park <kyungmin.park@samsung.com>,
	linux-kernel@vger.kernel.org,
	Xinliang Liu <xinliang.liu@linaro.org>,
	Seung-Woo Kim <sw0312.kim@samsung.com>,
	Tian Tao <tiantao6@hisilicon.com>,
	Inki Dae <inki.dae@samsung.com>,
	linux-samsung-soc@vger.kernel.org, linux-arm-msm@vger.kernel.org,
	Rob Clark <robdclark@gmail.com>,
	dri-devel@lists.freedesktop.org,
	John Stultz <john.stultz@linaro.org>,
	Chen Feng <puck.chen@hisilicon.com>,
	Xinwei Kong <kong.kongxinwei@hisilicon.com>,
	Joonyoung Shim <jy0922.shim@samsung.com>
Subject: Re: [PATCH v4 02/24] drm/bridge: Document the probe issue with MIPI-DSI bridges
Date: Tue, 14 Sep 2021 21:00:28 +0200	[thread overview]
Message-ID: <e5ec9763-37fe-6cd8-6eca-52792afbdb94@samsung.com> (raw)
In-Reply-To: <20210914143541.433ucx2kvz36tw42@gilmour>


W dniu 14.09.2021 o 16:35, Maxime Ripard pisze:
> Hi,
>
> On Mon, Sep 13, 2021 at 08:29:37AM +0200, Andrzej Hajda wrote:
>> W dniu 10.09.2021 o 12:11, Maxime Ripard pisze:
>>> Interactions between bridges, panels, MIPI-DSI host and the component
>>> framework are not trivial and can lead to probing issues when
>>> implementing a display driver. Let's document the various cases we need
>>> too consider, and the solution to support all the cases.
>>>
>>> Signed-off-by: Maxime Ripard <maxime@cerno.tech>
>>> ---
>>>    Documentation/gpu/drm-kms-helpers.rst |  6 +++
>>>    drivers/gpu/drm/drm_bridge.c          | 57 +++++++++++++++++++++++++++
>>>    2 files changed, 63 insertions(+)
>>>
>>> diff --git a/Documentation/gpu/drm-kms-helpers.rst b/Documentation/gpu/drm-kms-helpers.rst
>>> index 10f8df7aecc0..ec2f65b31930 100644
>>> --- a/Documentation/gpu/drm-kms-helpers.rst
>>> +++ b/Documentation/gpu/drm-kms-helpers.rst
>>> @@ -157,6 +157,12 @@ Display Driver Integration
>>>    .. kernel-doc:: drivers/gpu/drm/drm_bridge.c
>>>       :doc: display driver integration
>>>    
>>> +Special Care with MIPI-DSI bridges
>>> +----------------------------------
>>> +
>>> +.. kernel-doc:: drivers/gpu/drm/drm_bridge.c
>>> +   :doc: special care dsi
>>> +
>>>    Bridge Operations
>>>    -----------------
>>>    
>>> diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
>>> index baff74ea4a33..7cc2d2f94ae3 100644
>>> --- a/drivers/gpu/drm/drm_bridge.c
>>> +++ b/drivers/gpu/drm/drm_bridge.c
>>> @@ -96,6 +96,63 @@
>>>     * documentation of bridge operations for more details).
>>>     */
>>>    
>>> +/**
>>> + * DOC: special care dsi
>>> + *
>>> + * The interaction between the bridges and other frameworks involved in
>>> + * the probing of the upstream driver and the bridge driver can be
>>> + * challenging. Indeed, there's multiple cases that needs to be
>>> + * considered:
>>> + *
>>> + * - The upstream driver doesn't use the component framework and isn't a
>>> + *   MIPI-DSI host. In this case, the bridge driver will probe at some
>>> + *   point and the upstream driver should try to probe again by returning
>>> + *   EPROBE_DEFER as long as the bridge driver hasn't probed.
>>> + *
>>> + * - The upstream driver doesn't use the component framework, but is a
>>> + *   MIPI-DSI host. The bridge device uses the MIPI-DCS commands to be
>>> + *   controlled. In this case, the bridge device is a child of the
>>> + *   display device and when it will probe it's assured that the display
>>> + *   device (and MIPI-DSI host) is present. The upstream driver will be
>>> + *   assured that the bridge driver is connected between the
>>> + *   &mipi_dsi_host_ops.attach and &mipi_dsi_host_ops.detach operations.
>>> + *   Therefore, it must run mipi_dsi_host_register() in its probe
>>> + *   function, and then run drm_bridge_attach() in its
>>> + *   &mipi_dsi_host_ops.attach hook.
>>> + *
>>> + * - The upstream driver uses the component framework and is a MIPI-DSI
>>> + *   host. The bridge device uses the MIPI-DCS commands to be
>>> + *   controlled. This is the same situation than above, and can run
>>> + *   mipi_dsi_host_register() in either its probe or bind hooks.
>>> + *
>>> + * - The upstream driver uses the component framework and is a MIPI-DSI
>>> + *   host. The bridge device uses a separate bus (such as I2C) to be
>>> + *   controlled. In this case, there's no correlation between the probe
>>> + *   of the bridge and upstream drivers, so care must be taken to avoid
>>> + *   an endless EPROBE_DEFER loop, with each driver waiting for the
>>> + *   other to probe.
>>> + *
>>> + * The ideal pattern to cover the last item (and all the others in the
>>> + * MIPI-DSI host driver case) is to split the operations like this:
>>> + *
>>> + * - The MIPI-DSI host driver must run mipi_dsi_host_register() in its
>>> + *   probe hook. It will make sure that the MIPI-DSI host sticks around,
>>> + *   and that the driver's bind can be called.
>>> + *
>>> + * - In its probe hook, the bridge driver must try to find its MIPI-DSI
>>> + *   host, register as a MIPI-DSI device and attach the MIPI-DSI device
>>> + *   to its host. The bridge driver is now functional.
>>> + *
>>> + * - In its &struct mipi_dsi_host_ops.attach hook, the MIPI-DSI host can
>>> + *   now add its component. Its bind hook will now be called and since
>>> + *   the bridge driver is attached and registered, we can now look for
>>> + *   and attach it.
>>> + *
>>> + * At this point, we're now certain that both the upstream driver and
>>> + * the bridge driver are functional and we can't have a deadlock-like
>>> + * situation when probing.
>>> + */
>>> +
>>>    static DEFINE_MUTEX(bridge_lock);
>>>    static LIST_HEAD(bridge_list);
>>
>> Nice work with documenting this initialization dance. It clearly shows
>> that bridge API lacks better mechanism - usage of mipi dsi callbacks to
>> get notifications about bridge appearance is ugly.
> Yeah, there's so many moving parts it's definitely not great.
>
>> It remains me my resource tracking patches which I have posted long
>> time ago [1] - they would solve the issue in much more elegant way,
>> described here [2]. Apparently I was not stubborn enough in promoting
>> this solution.
> Wow, that sounds like a massive change indeed :/
>
>> Anyway:
>>
>> Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>
> I assume you'll want me to hold off that patch before someone reviews
> the rest?

The last exynos patch should be dropped, kirin patch should be 
tested/reviewed/acked by kirin maintaner. I am not sure about bridge 
patches, which ones have been tested by you, and which one have other users.

If yes it would be good to test them as well - changes in initialization 
flow can beat sometimes :)

I think patches 1-4 can be merged earlier, if you like, as they are on 
the list for long time.


Regards

Andrzej


>
> Thanks!
> Maxime

  reply	other threads:[~2021-09-14 19:00 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-10 10:11 [PATCH v4 00/24] drm/bridge: Make panel and bridge probe order consistent Maxime Ripard
2021-09-10 10:11 ` [PATCH v4 01/24] drm/bridge: Add documentation sections Maxime Ripard
2021-09-24 17:52   ` (subset) " Maxime Ripard
2021-09-10 10:11 ` [PATCH v4 02/24] drm/bridge: Document the probe issue with MIPI-DSI bridges Maxime Ripard
2021-09-13  6:29   ` Andrzej Hajda
2021-09-14 14:35     ` Maxime Ripard
2021-09-14 14:35       ` Maxime Ripard
2021-09-14 19:00       ` Andrzej Hajda [this message]
2021-09-22  8:57         ` Maxime Ripard
2021-09-22  8:57           ` Maxime Ripard
2021-09-24 17:52   ` (subset) " Maxime Ripard
2021-09-10 10:11 ` [PATCH v4 03/24] drm/mipi-dsi: Create devm device registration Maxime Ripard
2021-09-24 17:52   ` (subset) " Maxime Ripard
2021-09-10 10:11 ` [PATCH v4 04/24] drm/mipi-dsi: Create devm device attachment Maxime Ripard
2021-09-24 17:52   ` (subset) " Maxime Ripard
2021-09-10 10:11 ` [PATCH v4 05/24] drm/bridge: adv7533: Switch to devm MIPI-DSI helpers Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 06/24] drm/bridge: adv7511: Register and attach our DSI device at probe Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 07/24] drm/bridge: anx7625: Switch to devm MIPI-DSI helpers Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 08/24] drm/bridge: anx7625: Register and attach our DSI device at probe Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 09/24] drm/bridge: lt8912b: Switch to devm MIPI-DSI helpers Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 10/24] drm/bridge: lt8912b: Register and attach our DSI device at probe Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 11/24] drm/bridge: lt9611: Switch to devm MIPI-DSI helpers Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 12/24] drm/bridge: lt9611: Register and attach our DSI device at probe Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 13/24] drm/bridge: lt9611uxc: Switch to devm MIPI-DSI helpers Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 14/24] drm/bridge: lt9611uxc: Register and attach our DSI device at probe Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 15/24] drm/bridge: ps8640: Switch to devm MIPI-DSI helpers Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 16/24] drm/bridge: ps8640: Register and attach our DSI device at probe Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 17/24] drm/bridge: sn65dsi83: Switch to devm MIPI-DSI helpers Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 18/24] drm/bridge: sn65dsi83: Register and attach our DSI device at probe Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 19/24] drm/bridge: sn65dsi86: Switch to devm MIPI-DSI helpers Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 20/24] drm/bridge: sn65dsi86: Register and attach our DSI device at probe Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 21/24] drm/bridge: tc358775: Switch to devm MIPI-DSI helpers Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 22/24] drm/bridge: tc358775: Register and attach our DSI device at probe Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 23/24] drm/kirin: dsi: Adjust probe order Maxime Ripard
2021-09-10 10:12 ` [PATCH v4 24/24] drm/exynos: " Maxime Ripard
2021-09-13 10:30   ` Andrzej Hajda
2021-09-17 12:35     ` Marek Szyprowski
2021-09-22  8:53       ` Maxime Ripard
2021-09-22  8:53         ` Maxime Ripard
2021-09-23  8:14         ` Marek Szyprowski
2021-09-29 21:27 ` [PATCH v4 00/24] drm/bridge: Make panel and bridge probe order consistent John Stultz
2021-09-29 21:27   ` John Stultz
2021-09-29 21:32   ` John Stultz
2021-09-29 21:32     ` John Stultz
2021-09-29 21:51     ` John Stultz
2021-09-29 21:51       ` John Stultz
2021-09-29 23:25       ` Rob Clark
2021-09-29 23:25         ` Rob Clark
2021-09-29 23:25         ` John Stultz
2021-09-29 23:25           ` John Stultz
2021-09-30  2:30         ` John Stultz
2021-09-30  2:30           ` John Stultz
2021-09-30 19:49         ` Amit Pundir
2021-09-30 19:49           ` Amit Pundir
2021-09-30 20:20           ` Caleb Connolly
2021-09-30 20:20             ` Caleb Connolly
2021-10-13 14:16             ` Maxime Ripard
2021-10-14  0:16               ` [Freedreno] " Rob Clark
2021-10-18 12:34                 ` Maxime Ripard
2021-10-18 15:55                   ` Rob Clark
2021-09-29 23:29       ` John Stultz
2021-09-29 23:29         ` John Stultz
2021-10-13 13:45         ` Maxime Ripard
2021-09-29 21:56 ` Laurent Pinchart
2021-10-03 13:25   ` Laurent Pinchart
2021-10-16 10:03 ` Sam Ravnborg
2021-10-16 18:38 ` Sam Ravnborg

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=e5ec9763-37fe-6cd8-6eca-52792afbdb94@samsung.com \
    --to=a.hajda@samsung.com \
    --cc=Laurent.pinchart@ideasonboard.com \
    --cc=airlied@linux.ie \
    --cc=daniel.vetter@intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=freedreno@lists.freedesktop.org \
    --cc=inki.dae@samsung.com \
    --cc=jernej.skrabec@gmail.com \
    --cc=john.stultz@linaro.org \
    --cc=jonas@kwiboo.se \
    --cc=jy0922.shim@samsung.com \
    --cc=kong.kongxinwei@hisilicon.com \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=maxime@cerno.tech \
    --cc=narmstrong@baylibre.com \
    --cc=puck.chen@hisilicon.com \
    --cc=robdclark@gmail.com \
    --cc=robert.foss@linaro.org \
    --cc=sam@ravnborg.org \
    --cc=sean@poorly.run \
    --cc=sw0312.kim@samsung.com \
    --cc=thierry.reding@gmail.com \
    --cc=tiantao6@hisilicon.com \
    --cc=tzimmermann@suse.de \
    --cc=xinliang.liu@linaro.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.