From: Marek Szyprowski <m.szyprowski@samsung.com>
To: Jagan Teki <jagan@amarulasolutions.com>,
Frieder Schrempf <frieder.schrempf@kontron.de>,
Marek Vasut <marex@denx.de>
Cc: dri-devel@lists.freedesktop.org,
linux-samsung-soc@vger.kernel.org,
Joonyoung Shim <jy0922.shim@samsung.com>,
Tommaso Merciai <tommaso.merciai@amarulasolutions.com>,
linux-amarula <linux-amarula@amarulasolutions.com>,
Seung-Woo Kim <sw0312.kim@samsung.com>,
Neil Armstrong <narmstrong@linaro.org>,
Robert Foss <robert.foss@linaro.org>,
Kyungmin Park <kyungmin.park@samsung.com>,
Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
Andrzej Hajda <andrzej.hajda@intel.com>,
NXP Linux Team <linux-imx@nxp.com>,
Fancy Fang <chen.fang@nxp.com>,
Michael Nazzareno Trimarchi <michael@amarulasolutions.com>,
Adam Ford <aford173@gmail.com>,
linux-arm-kernel@lists.infradead.org,
Matteo Lisi <matteo.lisi@engicam.com>
Subject: Re: [PATCH v8 09/14] drm: bridge: samsung-dsim: Add atomic_get_input_bus_fmts
Date: Tue, 15 Nov 2022 22:38:03 +0100 [thread overview]
Message-ID: <cbae1c2d-d4e0-1cc2-e4dd-f01ff8e150a3@samsung.com> (raw)
In-Reply-To: <CAMty3ZB-uxzTP0umnkhhdw1nBRYab_K+EdYheGmS_SO+v8dcBg@mail.gmail.com>
Hi Jagan,
On 15.11.2022 10:20, Jagan Teki wrote:
> On Tue, Nov 15, 2022 at 2:18 PM Frieder Schrempf
> <frieder.schrempf@kontron.de> wrote:
>> On 15.11.22 09:09, Marek Szyprowski wrote:
>>> On 14.11.2022 18:07, Jagan Teki wrote:
>>>> On Mon, Nov 14, 2022 at 8:10 PM Marek Szyprowski
>>>> <m.szyprowski@samsung.com> wrote:
>>>>> On 14.11.2022 11:57, Marek Szyprowski wrote:
>>>>>> On 10.11.2022 19:38, Jagan Teki wrote:
>>>>>>> Finding the right input bus format throughout the pipeline is hard
>>>>>>> so add atomic_get_input_bus_fmts callback and initialize with the
>>>>>>> proper input format from list of supported output formats.
>>>>>>>
>>>>>>> This format can be used in pipeline for negotiating bus format between
>>>>>>> the DSI-end of this bridge and the other component closer to pipeline
>>>>>>> components.
>>>>>>>
>>>>>>> List of Pixel formats are taken from,
>>>>>>> AN13573 i.MX 8/RT MIPI DSI/CSI-2, Rev. 0, 21 March 2022
>>>>>>> 3.7.4 Pixel formats
>>>>>>> Table 14. DSI pixel packing formats
>>>>>>>
>>>>>>> v8:
>>>>>>> * added pixel formats supported by NXP AN13573 i.MX 8/RT MIPI DSI/CSI-2
>>>>>>>
>>>>>>> v7, v6, v5, v4:
>>>>>>> * none
>>>>>>>
>>>>>>> v3:
>>>>>>> * include media-bus-format.h
>>>>>>>
>>>>>>> v2:
>>>>>>> * none
>>>>>>>
>>>>>>> v1:
>>>>>>> * new patch
>>>>>>>
>>>>>>> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
>>>>>>> ---
>>>>>>> drivers/gpu/drm/bridge/samsung-dsim.c | 53 +++++++++++++++++++++++++++
>>>>>>> 1 file changed, 53 insertions(+)
>>>>>>>
>>>>>>> diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c
>>>>>>> b/drivers/gpu/drm/bridge/samsung-dsim.c
>>>>>>> index 0fe153b29e4f..33e5ae9c865f 100644
>>>>>>> --- a/drivers/gpu/drm/bridge/samsung-dsim.c
>>>>>>> +++ b/drivers/gpu/drm/bridge/samsung-dsim.c
>>>>>>> @@ -15,6 +15,7 @@
>>>>>>> #include <linux/clk.h>
>>>>>>> #include <linux/delay.h>
>>>>>>> #include <linux/irq.h>
>>>>>>> +#include <linux/media-bus-format.h>
>>>>>>> #include <linux/of_device.h>
>>>>>>> #include <linux/phy/phy.h>
>>>>>>> @@ -1321,6 +1322,57 @@ static void
>>>>>>> samsung_dsim_atomic_post_disable(struct drm_bridge *bridge,
>>>>>>> pm_runtime_put_sync(dsi->dev);
>>>>>>> }
>>>>>>> +/*
>>>>>>> + * This pixel output formats list referenced from,
>>>>>>> + * AN13573 i.MX 8/RT MIPI DSI/CSI-2, Rev. 0, 21 March 2022
>>>>>>> + * 3.7.4 Pixel formats
>>>>>>> + * Table 14. DSI pixel packing formats
>>>>>>> + */
>>>>>>> +static const u32 samsung_dsim_pixel_output_fmts[] = {
>>>>>>> + MEDIA_BUS_FMT_UYVY8_1X16,
>>>>>>> + MEDIA_BUS_FMT_RGB101010_1X30,
>>>>>>> + MEDIA_BUS_FMT_RGB121212_1X36,
>>>>>>> + MEDIA_BUS_FMT_RGB565_1X16,
>>>>>>> + MEDIA_BUS_FMT_RGB666_1X18,
>>>>>>> + MEDIA_BUS_FMT_RGB888_1X24,
>>>>>>> +};
>>>>>>> +
>>>>>>> +static bool samsung_dsim_pixel_output_fmt_supported(u32 fmt)
>>>>>>> +{
>>>>>>> + int i;
>>>>>>> +
>>>>>>> + for (i = 0; i < ARRAY_SIZE(samsung_dsim_pixel_output_fmts); i++) {
>>>>>>> + if (samsung_dsim_pixel_output_fmts[i] == fmt)
>>>>>>> + return true;
>>>>>>> + }
>>>>>>> +
>>>>>>> + return false;
>>>>>>> +}
>>>>>>> +
>>>>>>> +static u32 *
>>>>>>> +samsung_dsim_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
>>>>>>> + struct drm_bridge_state *bridge_state,
>>>>>>> + struct drm_crtc_state *crtc_state,
>>>>>>> + struct drm_connector_state *conn_state,
>>>>>>> + u32 output_fmt,
>>>>>>> + unsigned int *num_input_fmts)
>>>>>>> +{
>>>>>>> + u32 *input_fmts;
>>>>>>> +
>>>>>>> + if (!samsung_dsim_pixel_output_fmt_supported(output_fmt))
>>>>>>> + return NULL;
>>>>>> Please add support for MEDIA_BUS_FMT_FIXED and maybe default to
>>>>>> MEDIA_BUS_FMT_RGB888_1X24 if requested format is not matched.
>>>>>>
>>>>>> Otherwise the above check breaks all current clients of the Samsung
>>>>>> DSIM/Exynos DSI. I didn't dig into the bus matching code yet, but all
>>>>>> DSI panels requests such format on my test systems...
>>>>> I've checked a bit more the bus format related code and it looks that
>>>>> there are more issues. The DSI panels don't use the MEDIA_BUS_FMT_*
>>>>> formats thus the bridge negotiation code selects MEDIA_BUS_FMT_FIXED for
>>>>> them. On Arndale board with Toshiba tc358764 bridge the
>>>>> MEDIA_BUS_FMT_RGB888_1X7X4_SPWG output_fmt is requested in
>>>>> samsung_dsim_atomic_get_input_bus_fmts() (forwarded from the LVDS panel,
>>>> dsim => tc358764 => panel-simple
>>>>
>>>> If I understand the bridge format negotiation correctly - If
>>>> atomic_get_input_bus_fmts is not implemented in tc358764 then
>>>> MEDIA_BUS_FMT_FIXED will be the output_fmt for dsim so we can assign
>>>> MEDIA_BUS_FMT_RGB888_1X24 for FIXED formats.
>>>>
>>>> from include/drm/drm_bridge.h:
>>>>
>>>> * This method is called on all elements of the bridge chain as part of
>>>> * the bus format negotiation process that happens in
>>>> * drm_atomic_bridge_chain_select_bus_fmts().
>>>> * This method is optional. When not implemented, the core will bypass
>>>> * bus format negotiation on this element of the bridge without
>>>> * failing, and the previous element in the chain will be passed
>>>> * MEDIA_BUS_FMT_FIXED as its output bus format.
>>>>
>>>> As I can see tc358764 is not implemented either
>>>> atomic_get_input_bus_fmts or atomic API, so I think dsim gets the
>>>> MEDIA_BUS_FMT_FIXED bridge pipeline. I have tested sn65dsi without
>>>> atomic_get_input_bus_fmts I can see the dsim is getting
>>>> MEDIA_BUS_FMT_FIXED.
>>>>
>>>> Can you check the same from your side?
>>> Here in case of Arndale 5250 with the following pipeline:
>>>
>>> dsim => tc358764 => panel-simple (boe,hv070wsa-100 panel)
>>>
>>> the DRM core requests MEDIA_BUS_FMT_RGB888_1X7X4_SPWG format, taken from the boe_hv070wsa panel (see from drivers/gpu/drm/panel/panel-simple.c). Please note that in case of Exynos, the reversed bridge chain order is used for dsim, so this is another nasty consequence of that hack. :/
>>>
>>> Maybe if no compatible bus format is found, the driver should force
>>> MEDIA_BUS_FMT_RGB888_1X24 until a proper format negotiation is
>>> implemented and hacks removed?
>> For this specific case, wouldn't it be better to just fix the format
>> negotiation for tc358764 using atomic_get_input_bus_fmts()? It should
>> probably do the same as sn65dsi83 and request MEDIA_BUS_FMT_RGB888_1X24
>> from the DSI.
>>
>> Forwarding the LVDS-specific format to the input is obviously the wrong
>> thing for the tc358764 driver to do.
>>
>> But I agree, if there are other problematic pipelines with other
>> bridge/display drivers that don't pass a correct format, we should
>> accept them for now and fall back to a sane default
>> (MEDIA_BUS_FMT_RGB888_1X24) and fix the other drivers afterwards.
>>
>> Let's not delay this series any further and better work on how to get it
>> merged before we miss another merge window.
> Agreed this point, here is the updated diff (on top of this patch) for
> falling back to the default format for those.
>
> +++ b/drivers/gpu/drm/bridge/samsung-dsim.c
> @@ -1387,6 +1387,8 @@ static const u32 samsung_dsim_pixel_output_fmts[] = {
> MEDIA_BUS_FMT_RGB565_1X16,
> MEDIA_BUS_FMT_RGB666_1X18,
> MEDIA_BUS_FMT_RGB888_1X24,
> +
> + MEDIA_BUS_FMT_FIXED,
> };
>
> static bool samsung_dsim_pixel_output_fmt_supported(u32 fmt)
> @@ -1412,7 +1414,13 @@ samsung_dsim_atomic_get_input_bus_fmts(struct
> drm_bridge *bridge,
> u32 *input_fmts;
>
> if (!samsung_dsim_pixel_output_fmt_supported(output_fmt))
> - return NULL;
> + /*
> + * Some bridge/display drivers are still not able to pass
> + * the correct format, so handle those pipelines by falling
> + * back to the default format till the supported format list
> + * gets finalized.
> + */
> + output_fmt = MEDIA_BUS_FMT_RGB888_1X24;
>
> *num_input_fmts = 1;
>
> @@ -1420,7 +1428,14 @@ samsung_dsim_atomic_get_input_bus_fmts(struct
> drm_bridge *bridge,
> if (!input_fmts)
> return NULL;
>
> - input_fmts[0] = output_fmt;
> + switch (output_fmt) {
> + case MEDIA_BUS_FMT_FIXED:
> + input_fmts[0] = MEDIA_BUS_FMT_RGB888_1X24;
> + break;
> + default:
> + input_fmts[0] = output_fmt;
> + break;
> + }
>
> return input_fmts;
>
> If all is okay, I will send v9 which would probably test it for the
> final version to merge.
This works for me (I've manually applied the above changes, due to
malformed diff).
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
next prev parent reply other threads:[~2022-11-15 21:38 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-10 18:38 [PATCH v8 00/14] drm: bridge: Add Samsung MIPI DSIM bridge Jagan Teki
2022-11-10 18:38 ` [PATCH v8 01/14] drm: exynos: dsi: Fix MIPI_DSI*_NO_* mode flags Jagan Teki
2022-11-11 0:49 ` Nicolas Boichat
2022-11-11 8:49 ` Jagan Teki
2022-11-11 12:12 ` Nicolas Boichat
2022-11-11 12:45 ` Jagan Teki
2022-11-13 0:29 ` Marek Vasut
2022-11-14 1:11 ` Nicolas Boichat
2022-11-14 3:16 ` Marek Vasut
2022-12-05 11:55 ` Frieder Schrempf
2022-11-10 18:38 ` [PATCH v8 02/14] drm: exynos: dsi: Properly name HSA/HBP/HFP/HSE bits Jagan Teki
2022-11-13 0:25 ` Marek Vasut
2022-11-14 8:27 ` Jagan Teki
2022-12-05 11:59 ` Frieder Schrempf
2022-12-05 12:06 ` Jagan Teki
2022-11-10 18:38 ` [PATCH v8 03/14] drm: bridge: Generalize Exynos-DSI driver into a Samsung DSIM bridge Jagan Teki
2022-11-17 5:01 ` Marek Vasut
2022-11-18 6:40 ` Jagan Teki
2022-11-10 18:38 ` [PATCH v8 04/14] drm: bridge: samsung-dsim: Lookup OF-graph or Child node devices Jagan Teki
2022-11-10 18:38 ` [PATCH v8 05/14] drm: bridge: samsung-dsim: Mark PHY as optional Jagan Teki
2022-11-10 18:38 ` [PATCH v8 06/14] drm: bridge: samsung-dsim: Handle proper DSI host initialization Jagan Teki
2022-11-17 4:58 ` Marek Vasut
2022-11-17 13:04 ` Marek Szyprowski
2022-11-19 13:36 ` Marek Vasut
2022-11-23 20:09 ` Jagan Teki
2022-11-25 22:14 ` Marek Vasut
2022-11-28 14:43 ` Jagan Teki
2022-12-02 10:52 ` Marek Szyprowski
2022-12-02 12:21 ` Marek Vasut
2022-12-02 14:55 ` Dave Stevenson
2022-12-05 7:30 ` Frieder Schrempf
2022-12-05 15:20 ` Dave Stevenson
2022-12-05 15:37 ` Frieder Schrempf
2022-12-06 9:02 ` Frieder Schrempf
2022-12-08 11:32 ` Jagan Teki
2022-12-08 12:21 ` Marek Szyprowski
2022-11-10 18:38 ` [PATCH v8 07/14] drm: bridge: samsung-dsim: Add atomic_check Jagan Teki
2022-11-10 18:38 ` [PATCH v8 08/14] drm: bridge: samsung-dsim: Add platform PLL_P (PMS_P) offset Jagan Teki
2022-11-10 18:38 ` [PATCH v8 09/14] drm: bridge: samsung-dsim: Add atomic_get_input_bus_fmts Jagan Teki
2022-11-13 0:21 ` Marek Vasut
2022-11-14 7:49 ` Jagan Teki
2022-11-15 12:00 ` Marek Vasut
2022-11-16 8:07 ` Marek Szyprowski
2022-11-16 10:49 ` Marek Vasut
2022-11-16 11:07 ` Marek Szyprowski
2022-11-16 11:30 ` Jagan Teki
2022-11-14 10:57 ` Marek Szyprowski
2022-11-14 14:40 ` Marek Szyprowski
2022-11-14 17:07 ` Jagan Teki
2022-11-15 8:09 ` Marek Szyprowski
2022-11-15 8:48 ` Frieder Schrempf
2022-11-15 9:20 ` Jagan Teki
2022-11-15 21:38 ` Marek Szyprowski [this message]
2022-11-10 18:38 ` [PATCH v8 10/14] drm: bridge: samsung-dsim: Add input_bus_flags Jagan Teki
2022-11-10 18:38 ` [PATCH v8 11/14] dt-bindings: display: exynos: dsim: Add NXP i.MX8M Mini/Nano support Jagan Teki
2022-11-10 18:38 ` [PATCH v8 12/14] drm: bridge: samsung-dsim: Add " Jagan Teki
2022-11-10 18:38 ` [PATCH v8 13/14] dt-bindings: display: exynos: dsim: Add NXP i.MX8M Plus support Jagan Teki
2022-11-10 18:38 ` [PATCH v8 14/14] drm: bridge: samsung-dsim: Add " Jagan Teki
2022-11-14 8:41 ` [PATCH v8 00/14] drm: bridge: Add Samsung MIPI DSIM bridge Frieder Schrempf
2022-11-14 8:47 ` Jagan Teki
2022-12-05 13:22 ` Frieder Schrempf
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=cbae1c2d-d4e0-1cc2-e4dd-f01ff8e150a3@samsung.com \
--to=m.szyprowski@samsung.com \
--cc=Laurent.pinchart@ideasonboard.com \
--cc=aford173@gmail.com \
--cc=andrzej.hajda@intel.com \
--cc=chen.fang@nxp.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=frieder.schrempf@kontron.de \
--cc=jagan@amarulasolutions.com \
--cc=jy0922.shim@samsung.com \
--cc=kyungmin.park@samsung.com \
--cc=linux-amarula@amarulasolutions.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-imx@nxp.com \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=marex@denx.de \
--cc=matteo.lisi@engicam.com \
--cc=michael@amarulasolutions.com \
--cc=narmstrong@linaro.org \
--cc=robert.foss@linaro.org \
--cc=sw0312.kim@samsung.com \
--cc=tommaso.merciai@amarulasolutions.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