2021-10-11 16:29:04

by Guido Günther

[permalink] [raw]
Subject: [PATCH v3 0/5] mxsfb/nwl/panels: media bus format fixes

commit b776b0f00f24 ("drm: mxsfb: Use bus_format from the nearest bridge if
present") added bus format probing to mxsfb this exposed several issues in the
display stack as used on the Librem 5:

The nwl bridge and the panels didn't bother to set any media bus formats and in
that case mxsfb would not pick a reasonable default. This series aims to fix
this.

This series includes the patch from
https://lore.kernel.org/dri-devel/YVLYh%2FSgBritG%[email protected]/
with a `dev_warn` added.

The patches are against 5.15-rc3. I've marked a single patch with a 'fixes'
which is enough to unbreak the display stack in 5.15.

All patches of this series can be applied independently.

Changes from v1:
- Review comment by Marek Vasut
https://lore.kernel.org/dri-devel/[email protected]/
Improve warning message
- Move mxsfb patches to the end of the queue and the actual nwl fix to the
front.

Changes from v2:
- Review comments by Lucas Stach
https://lore.kernel.org/dri-devel/[email protected]/T/#m961c22bf2a437a16b29214913d6f0d523fbe88e2
Drop fixes tag from mxsfb driver and tweak commit message
- Add Reviewed-by from Lucas
https://lore.kernel.org/dri-devel/[email protected]/T/#m9f3337a673ae1adbb1f0152a48270b0e1104b0c1
https://lore.kernel.org/dri-devel/[email protected]/T/#m5706d5b93cb6879b6bb4a1810b88800fe4180f74
https://lore.kernel.org/dri-devel/[email protected]/T/#m961c22bf2a437a16b29214913d6f0d523fbe88e2
- Add Reviewd-by from Rober Foss
https://lore.kernel.org/dri-devel/CAG3jFyteqcPNZqrFsggCrnpDfsGGQvibfHBezW+1Hcf3-z91QQ@mail.gmail.com/



Guido Günther (5):
drm/bridge: nwl-dsi: Add atomic_get_input_bus_fmts
drm/panel: mantix: Add media bus format
drm/panel: st7703: Add media bus format
drm: mxsfb: Print failed bus format in hex
drm: mxsfb: Set fallback bus format when the bridge doesn't provide
one

drivers/gpu/drm/bridge/nwl-dsi.c | 35 +++++++++++++++++++
drivers/gpu/drm/mxsfb/mxsfb_kms.c | 8 ++++-
.../gpu/drm/panel/panel-mantix-mlaf057we51.c | 9 +++++
drivers/gpu/drm/panel/panel-sitronix-st7703.c | 8 +++++
4 files changed, 59 insertions(+), 1 deletion(-)

--
2.33.0


2021-10-11 16:29:40

by Guido Günther

[permalink] [raw]
Subject: [PATCH v3 1/5] drm/bridge: nwl-dsi: Add atomic_get_input_bus_fmts

Components further up in the chain might ask us for supported formats.

Without this MEDIA_BUS_FMT_FIXED is assumed which then breaks display
output with mxsfb since it can't determine a proper bus format.

We handle the bus formats that correspond to the DSI formats the bridge
can potentially output (see chapter 13.6 of the i.MX 8MQ reference
manual) - which matches what xsfb can input.

Fixes: b776b0f00f24 ("drm: mxsfb: Use bus_format from the nearest bridge if present")

Signed-off-by: Guido Günther <[email protected]>
Reviewed-by: Lucas Stach <[email protected]>
---
drivers/gpu/drm/bridge/nwl-dsi.c | 35 ++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)

diff --git a/drivers/gpu/drm/bridge/nwl-dsi.c b/drivers/gpu/drm/bridge/nwl-dsi.c
index a251cc1f088f..27c80d36846b 100644
--- a/drivers/gpu/drm/bridge/nwl-dsi.c
+++ b/drivers/gpu/drm/bridge/nwl-dsi.c
@@ -1234,6 +1234,40 @@ static void nwl_dsi_bridge_detach(struct drm_bridge *bridge)
drm_of_panel_bridge_remove(dsi->dev->of_node, 1, 0);
}

+static u32 *nwl_bridge_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, input_fmt;
+
+ *num_input_fmts = 0;
+
+ switch (output_fmt) {
+ /* If MEDIA_BUS_FMT_FIXED is tested, return default bus format */
+ case MEDIA_BUS_FMT_FIXED:
+ input_fmt = MEDIA_BUS_FMT_RGB888_1X24;
+ break;
+ case MEDIA_BUS_FMT_RGB888_1X24:
+ case MEDIA_BUS_FMT_RGB666_1X18:
+ case MEDIA_BUS_FMT_RGB565_1X16:
+ input_fmt = output_fmt;
+ break;
+ default:
+ return NULL;
+ }
+
+ input_fmts = kcalloc(1, sizeof(*input_fmts), GFP_KERNEL);
+ if (!input_fmts)
+ return NULL;
+ input_fmts[0] = input_fmt;
+ *num_input_fmts = 1;
+
+ return input_fmts;
+}
+
static const struct drm_bridge_funcs nwl_dsi_bridge_funcs = {
.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
@@ -1241,6 +1275,7 @@ static const struct drm_bridge_funcs nwl_dsi_bridge_funcs = {
.atomic_check = nwl_dsi_bridge_atomic_check,
.atomic_enable = nwl_dsi_bridge_atomic_enable,
.atomic_disable = nwl_dsi_bridge_atomic_disable,
+ .atomic_get_input_bus_fmts = nwl_bridge_atomic_get_input_bus_fmts,
.mode_set = nwl_dsi_bridge_mode_set,
.mode_valid = nwl_dsi_bridge_mode_valid,
.attach = nwl_dsi_bridge_attach,
--
2.33.0

2021-10-11 16:30:27

by Guido Günther

[permalink] [raw]
Subject: [PATCH v3 4/5] drm: mxsfb: Print failed bus format in hex

media-bus-formats.h has them in hexadecimal as well so matching with
that file saves one conversion when debugging.

Signed-off-by: Guido Günther <[email protected]>
Reviewed-by: Lucas Stach <[email protected]>
Reviewed-by: Robert Foss <[email protected]>
---
drivers/gpu/drm/mxsfb/mxsfb_kms.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
index af6c620adf6e..d6abd2077114 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
+++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
@@ -89,7 +89,7 @@ static void mxsfb_set_formats(struct mxsfb_drm_private *mxsfb,
ctrl |= CTRL_BUS_WIDTH_24;
break;
default:
- dev_err(drm->dev, "Unknown media bus format %d\n", bus_format);
+ dev_err(drm->dev, "Unknown media bus format 0x%x\n", bus_format);
break;
}

--
2.33.0

2021-10-11 20:57:29

by Laurent Pinchart

[permalink] [raw]
Subject: Re: [PATCH v3 4/5] drm: mxsfb: Print failed bus format in hex

Hi Guido,

Thank you for the patch.

On Mon, Oct 11, 2021 at 03:41:26PM +0200, Guido Günther wrote:
> media-bus-formats.h has them in hexadecimal as well so matching with
> that file saves one conversion when debugging.
>
> Signed-off-by: Guido Günther <[email protected]>
> Reviewed-by: Lucas Stach <[email protected]>
> Reviewed-by: Robert Foss <[email protected]>
> ---
> drivers/gpu/drm/mxsfb/mxsfb_kms.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> index af6c620adf6e..d6abd2077114 100644
> --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> @@ -89,7 +89,7 @@ static void mxsfb_set_formats(struct mxsfb_drm_private *mxsfb,
> ctrl |= CTRL_BUS_WIDTH_24;
> break;
> default:
> - dev_err(drm->dev, "Unknown media bus format %d\n", bus_format);
> + dev_err(drm->dev, "Unknown media bus format 0x%x\n", bus_format);

I may have gone for 0x%04x as current media bus formats all hold in 16
bits, but it's not big deal.

Reviewed-by: Laurent Pinchart <[email protected]>

> break;
> }
>

--
Regards,

Laurent Pinchart

2021-10-12 07:49:00

by Stefan Agner

[permalink] [raw]
Subject: Re: [PATCH v3 4/5] drm: mxsfb: Print failed bus format in hex

On 2021-10-11 15:41, Guido Günther wrote:
> media-bus-formats.h has them in hexadecimal as well so matching with
> that file saves one conversion when debugging.
>
> Signed-off-by: Guido Günther <[email protected]>
> Reviewed-by: Lucas Stach <[email protected]>
> Reviewed-by: Robert Foss <[email protected]>

Acked-by: Stefan Agner <[email protected]>

> ---
> drivers/gpu/drm/mxsfb/mxsfb_kms.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> index af6c620adf6e..d6abd2077114 100644
> --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> @@ -89,7 +89,7 @@ static void mxsfb_set_formats(struct mxsfb_drm_private *mxsfb,
> ctrl |= CTRL_BUS_WIDTH_24;
> break;
> default:
> - dev_err(drm->dev, "Unknown media bus format %d\n", bus_format);
> + dev_err(drm->dev, "Unknown media bus format 0x%x\n", bus_format);
> break;
> }

2021-10-12 10:22:51

by Guido Günther

[permalink] [raw]
Subject: Re: [PATCH v3 0/5] mxsfb/nwl/panels: media bus format fixes

Hi Sam,
On Mon, Oct 11, 2021 at 06:56:00PM +0200, Sam Ravnborg wrote:
> Hi Guido,
>
> On Mon, Oct 11, 2021 at 03:41:22PM +0200, Guido G?nther wrote:
> > commit b776b0f00f24 ("drm: mxsfb: Use bus_format from the nearest bridge if
> > present") added bus format probing to mxsfb this exposed several issues in the
> > display stack as used on the Librem 5:
> >
> > The nwl bridge and the panels didn't bother to set any media bus formats and in
> > that case mxsfb would not pick a reasonable default. This series aims to fix
> > this.
> >
> > This series includes the patch from
> > https://lore.kernel.org/dri-devel/YVLYh%2FSgBritG%[email protected]/
> > with a `dev_warn` added.
> >
> > The patches are against 5.15-rc3. I've marked a single patch with a 'fixes'
> > which is enough to unbreak the display stack in 5.15.
> >
> > All patches of this series can be applied independently.
> >
> > Changes from v1:
> > - Review comment by Marek Vasut
> > https://lore.kernel.org/dri-devel/[email protected]/
> > Improve warning message
> > - Move mxsfb patches to the end of the queue and the actual nwl fix to the
> > front.
> >
> > Changes from v2:
> > - Review comments by Lucas Stach
> > https://lore.kernel.org/dri-devel/[email protected]/T/#m961c22bf2a437a16b29214913d6f0d523fbe88e2
> > Drop fixes tag from mxsfb driver and tweak commit message
> > - Add Reviewed-by from Lucas
> > https://lore.kernel.org/dri-devel/[email protected]/T/#m9f3337a673ae1adbb1f0152a48270b0e1104b0c1
> > https://lore.kernel.org/dri-devel/[email protected]/T/#m5706d5b93cb6879b6bb4a1810b88800fe4180f74
> > https://lore.kernel.org/dri-devel/[email protected]/T/#m961c22bf2a437a16b29214913d6f0d523fbe88e2
> > - Add Reviewd-by from Rober Foss
> > https://lore.kernel.org/dri-devel/CAG3jFyteqcPNZqrFsggCrnpDfsGGQvibfHBezW+1Hcf3-z91QQ@mail.gmail.com/
> >
> >
> >
> > Guido G?nther (5):
> > drm/bridge: nwl-dsi: Add atomic_get_input_bus_fmts
> > drm/panel: mantix: Add media bus format
> > drm/panel: st7703: Add media bus format
> > drm: mxsfb: Print failed bus format in hex
> > drm: mxsfb: Set fallback bus format when the bridge doesn't provide
> > one
>
> Full series are:
> Reviewed-by: Sam Ravnborg <[email protected]>

Pushed the whole series to drm-misc-next.
Thanks,
-- Guido

>
> Sam
>