diff mbox series

drm: mxsfb: Set proper default bus format when using a bridge

Message ID YVLYh/SgBritG/RJ@qwark.sigxcpu.org (mailing list archive)
State New, archived
Headers show
Series drm: mxsfb: Set proper default bus format when using a bridge | expand

Commit Message

Guido Günther Sept. 28, 2021, 8:55 a.m. UTC
If a bridge doesn't do any bus format handling MEDIA_BUS_FMT_FIXED is
returned. Fallback to a reasonable default (MEDIA_BUS_FMT_RGB888_1X24) in
that case.

This unbreaks e.g. using mxsfb with the nwl bridge and mipi panels.

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

Signed-off-by: Guido Günther <agx@sigxcpu.org>
---

I'll look at what needs to be done in nwl separately but this also
unbreaks other bridge seupts that don't to format negotiation yet.

 drivers/gpu/drm/mxsfb/mxsfb_kms.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Marek Vasut Sept. 28, 2021, 9:08 a.m. UTC | #1
On 9/28/21 10:55 AM, Guido Günther wrote:
> If a bridge doesn't do any bus format handling MEDIA_BUS_FMT_FIXED is
> returned. Fallback to a reasonable default (MEDIA_BUS_FMT_RGB888_1X24) in
> that case.
> 
> This unbreaks e.g. using mxsfb with the nwl bridge and mipi panels.
> 
> Fixes: b776b0f00f24 ("drm: mxsfb: Use bus_format from the nearest bridge if present")
> 
> Signed-off-by: Guido Günther <agx@sigxcpu.org>
> ---
> 
> I'll look at what needs to be done in nwl separately but this also
> unbreaks other bridge seupts that don't to format negotiation yet.
> 
>   drivers/gpu/drm/mxsfb/mxsfb_kms.c | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> index af6c620adf6e..4ef94cf686b0 100644
> --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> @@ -369,6 +369,8 @@ static void mxsfb_crtc_atomic_enable(struct drm_crtc *crtc,
>   			drm_atomic_get_new_bridge_state(state,
>   							mxsfb->bridge);
>   		bus_format = bridge_state->input_bus_cfg.format;
> +		if (bus_format == MEDIA_BUS_FMT_FIXED)
> +			bus_format = MEDIA_BUS_FMT_RGB888_1X24;

Shouldn't the NWL bridge return the correct format ?
Guido Günther Sept. 28, 2021, 9:19 a.m. UTC | #2
Hi,
On Tue, Sep 28, 2021 at 11:08:58AM +0200, Marek Vasut wrote:
> On 9/28/21 10:55 AM, Guido Günther wrote:
> > If a bridge doesn't do any bus format handling MEDIA_BUS_FMT_FIXED is
> > returned. Fallback to a reasonable default (MEDIA_BUS_FMT_RGB888_1X24) in
> > that case.
> > 
> > This unbreaks e.g. using mxsfb with the nwl bridge and mipi panels.
> > 
> > Fixes: b776b0f00f24 ("drm: mxsfb: Use bus_format from the nearest bridge if present")
> > 
> > Signed-off-by: Guido Günther <agx@sigxcpu.org>
> > ---
> > 
> > I'll look at what needs to be done in nwl separately but this also
> > unbreaks other bridge seupts that don't to format negotiation yet.
> > 
> >   drivers/gpu/drm/mxsfb/mxsfb_kms.c | 2 ++
> >   1 file changed, 2 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> > index af6c620adf6e..4ef94cf686b0 100644
> > --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> > +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> > @@ -369,6 +369,8 @@ static void mxsfb_crtc_atomic_enable(struct drm_crtc *crtc,
> >   			drm_atomic_get_new_bridge_state(state,
> >   							mxsfb->bridge);
> >   		bus_format = bridge_state->input_bus_cfg.format;
> > +		if (bus_format == MEDIA_BUS_FMT_FIXED)
> > +			bus_format = MEDIA_BUS_FMT_RGB888_1X24;
> 
> Shouldn't the NWL bridge return the correct format ?

Yes it should and I'll send a separate patch for that but we currently
don't do anything meaningful at all if the bridge doesn't do format
negotiation and then fail setup in mxsfb_set_formats().

I think we should at least preserve the status quo (as we do with the
non bridge case in b776b0f00f24 too).

We could have a warning to spot drivers that don't do that yet and hence
the generic code returns MEDIA_BUS_FMT_FIXED.

Cheers,
 -- Guido
Marek Vasut Sept. 28, 2021, 9:22 a.m. UTC | #3
On 9/28/21 11:19 AM, Guido Günther wrote:
> Hi,
> On Tue, Sep 28, 2021 at 11:08:58AM +0200, Marek Vasut wrote:
>> On 9/28/21 10:55 AM, Guido Günther wrote:
>>> If a bridge doesn't do any bus format handling MEDIA_BUS_FMT_FIXED is
>>> returned. Fallback to a reasonable default (MEDIA_BUS_FMT_RGB888_1X24) in
>>> that case.
>>>
>>> This unbreaks e.g. using mxsfb with the nwl bridge and mipi panels.
>>>
>>> Fixes: b776b0f00f24 ("drm: mxsfb: Use bus_format from the nearest bridge if present")
>>>
>>> Signed-off-by: Guido Günther <agx@sigxcpu.org>
>>> ---
>>>
>>> I'll look at what needs to be done in nwl separately but this also
>>> unbreaks other bridge seupts that don't to format negotiation yet.
>>>
>>>    drivers/gpu/drm/mxsfb/mxsfb_kms.c | 2 ++
>>>    1 file changed, 2 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
>>> index af6c620adf6e..4ef94cf686b0 100644
>>> --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
>>> +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
>>> @@ -369,6 +369,8 @@ static void mxsfb_crtc_atomic_enable(struct drm_crtc *crtc,
>>>    			drm_atomic_get_new_bridge_state(state,
>>>    							mxsfb->bridge);
>>>    		bus_format = bridge_state->input_bus_cfg.format;
>>> +		if (bus_format == MEDIA_BUS_FMT_FIXED)
>>> +			bus_format = MEDIA_BUS_FMT_RGB888_1X24;
>>
>> Shouldn't the NWL bridge return the correct format ?
> 
> Yes it should and I'll send a separate patch for that but we currently
> don't do anything meaningful at all if the bridge doesn't do format
> negotiation and then fail setup in mxsfb_set_formats().
> 
> I think we should at least preserve the status quo (as we do with the
> non bridge case in b776b0f00f24 too).
> 
> We could have a warning to spot drivers that don't do that yet and hence
> the generic code returns MEDIA_BUS_FMT_FIXED.

I am not gonna push back against this patch, I think you need feedback 
from the drm people on this. A warning would indeed be nice. Preserving 
the old behavior in stable releases would be good (if there are any 
releases which contain the mxsfb patch this fixes).
Lucas Stach Sept. 28, 2021, 9:27 a.m. UTC | #4
Am Dienstag, dem 28.09.2021 um 11:19 +0200 schrieb Guido Günther:
> Hi,
> On Tue, Sep 28, 2021 at 11:08:58AM +0200, Marek Vasut wrote:
> > On 9/28/21 10:55 AM, Guido Günther wrote:
> > > If a bridge doesn't do any bus format handling MEDIA_BUS_FMT_FIXED is
> > > returned. Fallback to a reasonable default (MEDIA_BUS_FMT_RGB888_1X24) in
> > > that case.
> > > 
> > > This unbreaks e.g. using mxsfb with the nwl bridge and mipi panels.
> > > 
> > > Fixes: b776b0f00f24 ("drm: mxsfb: Use bus_format from the nearest bridge if present")
> > > 
> > > Signed-off-by: Guido Günther <agx@sigxcpu.org>
> > > ---
> > > 
> > > I'll look at what needs to be done in nwl separately but this also
> > > unbreaks other bridge seupts that don't to format negotiation yet.
> > > 
> > >   drivers/gpu/drm/mxsfb/mxsfb_kms.c | 2 ++
> > >   1 file changed, 2 insertions(+)
> > > 
> > > diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> > > index af6c620adf6e..4ef94cf686b0 100644
> > > --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> > > +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> > > @@ -369,6 +369,8 @@ static void mxsfb_crtc_atomic_enable(struct drm_crtc *crtc,
> > >   			drm_atomic_get_new_bridge_state(state,
> > >   							mxsfb->bridge);
> > >   		bus_format = bridge_state->input_bus_cfg.format;
> > > +		if (bus_format == MEDIA_BUS_FMT_FIXED)
> > > +			bus_format = MEDIA_BUS_FMT_RGB888_1X24;
> > 
> > Shouldn't the NWL bridge return the correct format ?
> 
> Yes it should and I'll send a separate patch for that but we currently
> don't do anything meaningful at all if the bridge doesn't do format
> negotiation and then fail setup in mxsfb_set_formats().
> 
> I think we should at least preserve the status quo (as we do with the
> non bridge case in b776b0f00f24 too).
> 
> We could have a warning to spot drivers that don't do that yet and hence
> the generic code returns MEDIA_BUS_FMT_FIXED.
> 
That sounds sensible. Using a default format if we don't know what to
do is going to be a unpleasant surprise for those with a display
pipeline that doesn't work with the default format. So please add a
dev_warn when we are doing this fallback.

Also I would argue that the NWL fix is the patch that should go in the
stable tree. This one should only be a additional safety net, so I
would drop the Fixes tag.

Regards,
Lucas
Marek Vasut Sept. 28, 2021, 10:11 a.m. UTC | #5
On 9/28/21 11:27 AM, Lucas Stach wrote:
> Am Dienstag, dem 28.09.2021 um 11:19 +0200 schrieb Guido Günther:
>> Hi,
>> On Tue, Sep 28, 2021 at 11:08:58AM +0200, Marek Vasut wrote:
>>> On 9/28/21 10:55 AM, Guido Günther wrote:
>>>> If a bridge doesn't do any bus format handling MEDIA_BUS_FMT_FIXED is
>>>> returned. Fallback to a reasonable default (MEDIA_BUS_FMT_RGB888_1X24) in
>>>> that case.
>>>>
>>>> This unbreaks e.g. using mxsfb with the nwl bridge and mipi panels.
>>>>
>>>> Fixes: b776b0f00f24 ("drm: mxsfb: Use bus_format from the nearest bridge if present")
>>>>
>>>> Signed-off-by: Guido Günther <agx@sigxcpu.org>
>>>> ---
>>>>
>>>> I'll look at what needs to be done in nwl separately but this also
>>>> unbreaks other bridge seupts that don't to format negotiation yet.
>>>>
>>>>    drivers/gpu/drm/mxsfb/mxsfb_kms.c | 2 ++
>>>>    1 file changed, 2 insertions(+)
>>>>
>>>> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
>>>> index af6c620adf6e..4ef94cf686b0 100644
>>>> --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
>>>> +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
>>>> @@ -369,6 +369,8 @@ static void mxsfb_crtc_atomic_enable(struct drm_crtc *crtc,
>>>>    			drm_atomic_get_new_bridge_state(state,
>>>>    							mxsfb->bridge);
>>>>    		bus_format = bridge_state->input_bus_cfg.format;
>>>> +		if (bus_format == MEDIA_BUS_FMT_FIXED)
>>>> +			bus_format = MEDIA_BUS_FMT_RGB888_1X24;
>>>
>>> Shouldn't the NWL bridge return the correct format ?
>>
>> Yes it should and I'll send a separate patch for that but we currently
>> don't do anything meaningful at all if the bridge doesn't do format
>> negotiation and then fail setup in mxsfb_set_formats().
>>
>> I think we should at least preserve the status quo (as we do with the
>> non bridge case in b776b0f00f24 too).
>>
>> We could have a warning to spot drivers that don't do that yet and hence
>> the generic code returns MEDIA_BUS_FMT_FIXED.
>>
> That sounds sensible. Using a default format if we don't know what to
> do is going to be a unpleasant surprise for those with a display
> pipeline that doesn't work with the default format. So please add a
> dev_warn when we are doing this fallback.
> 
> Also I would argue that the NWL fix is the patch that should go in the
> stable tree. This one should only be a additional safety net, so I
> would drop the Fixes tag.

Indeed
Guido Günther Sept. 28, 2021, 12:20 p.m. UTC | #6
Hi,
On Tue, Sep 28, 2021 at 11:27:49AM +0200, Lucas Stach wrote:
> Am Dienstag, dem 28.09.2021 um 11:19 +0200 schrieb Guido Günther:
> > Hi,
> > On Tue, Sep 28, 2021 at 11:08:58AM +0200, Marek Vasut wrote:
> > > On 9/28/21 10:55 AM, Guido Günther wrote:
> > > > If a bridge doesn't do any bus format handling MEDIA_BUS_FMT_FIXED is
> > > > returned. Fallback to a reasonable default (MEDIA_BUS_FMT_RGB888_1X24) in
> > > > that case.
> > > > 
> > > > This unbreaks e.g. using mxsfb with the nwl bridge and mipi panels.
> > > > 
> > > > Fixes: b776b0f00f24 ("drm: mxsfb: Use bus_format from the nearest bridge if present")
> > > > 
> > > > Signed-off-by: Guido Günther <agx@sigxcpu.org>
> > > > ---
> > > > 
> > > > I'll look at what needs to be done in nwl separately but this also
> > > > unbreaks other bridge seupts that don't to format negotiation yet.
> > > > 
> > > >   drivers/gpu/drm/mxsfb/mxsfb_kms.c | 2 ++
> > > >   1 file changed, 2 insertions(+)
> > > > 
> > > > diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> > > > index af6c620adf6e..4ef94cf686b0 100644
> > > > --- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> > > > +++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
> > > > @@ -369,6 +369,8 @@ static void mxsfb_crtc_atomic_enable(struct drm_crtc *crtc,
> > > >   			drm_atomic_get_new_bridge_state(state,
> > > >   							mxsfb->bridge);
> > > >   		bus_format = bridge_state->input_bus_cfg.format;
> > > > +		if (bus_format == MEDIA_BUS_FMT_FIXED)
> > > > +			bus_format = MEDIA_BUS_FMT_RGB888_1X24;
> > > 
> > > Shouldn't the NWL bridge return the correct format ?
> > 
> > Yes it should and I'll send a separate patch for that but we currently
> > don't do anything meaningful at all if the bridge doesn't do format
> > negotiation and then fail setup in mxsfb_set_formats().
> > 
> > I think we should at least preserve the status quo (as we do with the
> > non bridge case in b776b0f00f24 too).
> > 
> > We could have a warning to spot drivers that don't do that yet and hence
> > the generic code returns MEDIA_BUS_FMT_FIXED.
> > 
> That sounds sensible. Using a default format if we don't know what to
> do is going to be a unpleasant surprise for those with a display
> pipeline that doesn't work with the default format. So please add a
> dev_warn when we are doing this fallback.
> 
> Also I would argue that the NWL fix is the patch that should go in the
> stable tree. This one should only be a additional safety net, so I
> would drop the Fixes tag.

Dropped and folded into the small series with other fixes needed to
get get the bus format propagated up from the panel.
Cheers,
 -- Guido

> 
> Regards,
> Lucas
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/mxsfb/mxsfb_kms.c b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
index af6c620adf6e..4ef94cf686b0 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_kms.c
+++ b/drivers/gpu/drm/mxsfb/mxsfb_kms.c
@@ -369,6 +369,8 @@  static void mxsfb_crtc_atomic_enable(struct drm_crtc *crtc,
 			drm_atomic_get_new_bridge_state(state,
 							mxsfb->bridge);
 		bus_format = bridge_state->input_bus_cfg.format;
+		if (bus_format == MEDIA_BUS_FMT_FIXED)
+			bus_format = MEDIA_BUS_FMT_RGB888_1X24;
 	}
 
 	/* If there is no bridge, use bus format from connector */