Re: [PATCH 10/27] drm: bridge: Pass drm_display_info to drm_bridge_funcs .mode_valid()
Hi, On Tue, May 26, 2020 at 04:14:48AM +0300, Laurent Pinchart wrote: > When validating a mode, bridges may need to do so in the context of a > display, as specified by drm_display_info. An example is the meson > dw-hdmi bridge that needs to consider the YUV 4:2:0 output format to > perform clock calculations. > > Bridges that need the display info currently retrieve it from the > drm_connector created by the bridge. This gets in the way of moving > connector creation out of bridge drivers. To make this possible, pass > the drm_display_info to drm_bridge_funcs .mode_valid(). > > Changes to the bridge drivers have been performed with the following > coccinelle semantic patch and have been compile-tested. > > @ rule1 @ > identifier funcs; > identifier fn; > @@ > struct drm_bridge_funcs funcs = { > ..., > .mode_valid = fn > }; > > @ depends on rule1 @ > identifier rule1.fn; > identifier bridge; > identifier mode; > @@ > enum drm_mode_status fn( > struct drm_bridge *bridge, > + const struct drm_display_info *info, > const struct drm_display_mode *mode > ) > { > ... > } > > Signed-off-by: Laurent Pinchart > --- > drivers/gpu/drm/bridge/analogix/analogix-anx6345.c | 1 + > drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c | 1 + > drivers/gpu/drm/bridge/cdns-dsi.c | 1 + > drivers/gpu/drm/bridge/chrontel-ch7033.c | 1 + > drivers/gpu/drm/bridge/nwl-dsi.c | 1 + > drivers/gpu/drm/bridge/sii9234.c | 1 + > drivers/gpu/drm/bridge/sil-sii8620.c | 1 + > drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 1 + > drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 1 + > drivers/gpu/drm/bridge/tc358767.c | 1 + > drivers/gpu/drm/bridge/tc358768.c | 1 + > drivers/gpu/drm/bridge/thc63lvd1024.c | 1 + > drivers/gpu/drm/bridge/ti-tfp410.c | 1 + > drivers/gpu/drm/drm_atomic_helper.c| 3 ++- > drivers/gpu/drm/drm_bridge.c | 4 +++- > drivers/gpu/drm/drm_probe_helper.c | 4 +++- > drivers/gpu/drm/i2c/tda998x_drv.c | 1 + > drivers/gpu/drm/omapdrm/dss/dpi.c | 1 + > drivers/gpu/drm/omapdrm/dss/sdi.c | 1 + > drivers/gpu/drm/omapdrm/dss/venc.c | 1 + > include/drm/drm_bridge.h | 3 +++ > 21 files changed, 28 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c > b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c > index 2bc6e4f85171..371f4a9f866d 100644 > --- a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c > +++ b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c > @@ -585,6 +585,7 @@ static int anx6345_bridge_attach(struct drm_bridge > *bridge, > > static enum drm_mode_status > anx6345_bridge_mode_valid(struct drm_bridge *bridge, > + const struct drm_display_info *info, > const struct drm_display_mode *mode) > { > if (mode->flags & DRM_MODE_FLAG_INTERLACE) > diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c > b/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c > index 0d5a5ad0c9ee..81debd02c169 100644 > --- a/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c > +++ b/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c > @@ -944,6 +944,7 @@ static int anx78xx_bridge_attach(struct drm_bridge > *bridge, > > static enum drm_mode_status > anx78xx_bridge_mode_valid(struct drm_bridge *bridge, > + const struct drm_display_info *info, > const struct drm_display_mode *mode) > { > if (mode->flags & DRM_MODE_FLAG_INTERLACE) > diff --git a/drivers/gpu/drm/bridge/cdns-dsi.c > b/drivers/gpu/drm/bridge/cdns-dsi.c > index 69c3892caee5..76373e31df92 100644 > --- a/drivers/gpu/drm/bridge/cdns-dsi.c > +++ b/drivers/gpu/drm/bridge/cdns-dsi.c > @@ -663,6 +663,7 @@ static int cdns_dsi_bridge_attach(struct drm_bridge > *bridge, > > static enum drm_mode_status > cdns_dsi_bridge_mode_valid(struct drm_bridge *bridge, > +const struct drm_display_info *info, > const struct drm_display_mode *mode) > { > struct cdns_dsi_input *input = bridge_to_cdns_dsi_input(bridge); > diff --git a/drivers/gpu/drm/bridge/chrontel-ch7033.c > b/drivers/gpu/drm/bridge/chrontel-ch7033.c > index f8675d82974b..486f405c2e16 100644 > --- a/drivers/gpu/drm/bridge/chrontel-ch7033.c > +++ b/drivers/gpu/drm/bridge/chrontel-ch7033.c > @@ -317,6 +317,7 @@ static void ch7033_bridge_detach(struct drm_bridge > *bridge) > } > > static enum drm_mode_status ch7033_bridge_mode_valid(struct drm_bridge > *bridge, > + const struct drm_display_info *info, >const struct drm_display_mode *mode) > { > if (mode->clock > 165000) > diff --git
Re: [PATCH 10/27] drm: bridge: Pass drm_display_info to drm_bridge_funcs .mode_valid()
On Tue, 26 May 2020 04:14:48 +0300 Laurent Pinchart wrote: > When validating a mode, bridges may need to do so in the context of a > display, as specified by drm_display_info. An example is the meson > dw-hdmi bridge that needs to consider the YUV 4:2:0 output format to > perform clock calculations. > > Bridges that need the display info currently retrieve it from the > drm_connector created by the bridge. This gets in the way of moving > connector creation out of bridge drivers. To make this possible, pass > the drm_display_info to drm_bridge_funcs .mode_valid(). > > Changes to the bridge drivers have been performed with the following > coccinelle semantic patch and have been compile-tested. > > @ rule1 @ > identifier funcs; > identifier fn; > @@ > struct drm_bridge_funcs funcs = { > ..., > .mode_valid = fn > }; > > @ depends on rule1 @ > identifier rule1.fn; > identifier bridge; > identifier mode; > @@ > enum drm_mode_status fn( > struct drm_bridge *bridge, > + const struct drm_display_info *info, > const struct drm_display_mode *mode > ) > { > ... > } > > Signed-off-by: Laurent Pinchart Reviewed-by: Boris Brezillon ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH 10/27] drm: bridge: Pass drm_display_info to drm_bridge_funcs .mode_valid()
On 26/05/2020 03:14, Laurent Pinchart wrote: > When validating a mode, bridges may need to do so in the context of a > display, as specified by drm_display_info. An example is the meson > dw-hdmi bridge that needs to consider the YUV 4:2:0 output format to > perform clock calculations. > > Bridges that need the display info currently retrieve it from the > drm_connector created by the bridge. This gets in the way of moving > connector creation out of bridge drivers. To make this possible, pass > the drm_display_info to drm_bridge_funcs .mode_valid(). > > Changes to the bridge drivers have been performed with the following > coccinelle semantic patch and have been compile-tested. > > @ rule1 @ > identifier funcs; > identifier fn; > @@ > struct drm_bridge_funcs funcs = { > ..., > .mode_valid = fn > }; > > @ depends on rule1 @ > identifier rule1.fn; > identifier bridge; > identifier mode; > @@ > enum drm_mode_status fn( > struct drm_bridge *bridge, > + const struct drm_display_info *info, > const struct drm_display_mode *mode > ) > { > ... > } > > Signed-off-by: Laurent Pinchart > --- > drivers/gpu/drm/bridge/analogix/analogix-anx6345.c | 1 + > drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c | 1 + > drivers/gpu/drm/bridge/cdns-dsi.c | 1 + > drivers/gpu/drm/bridge/chrontel-ch7033.c | 1 + > drivers/gpu/drm/bridge/nwl-dsi.c | 1 + > drivers/gpu/drm/bridge/sii9234.c | 1 + > drivers/gpu/drm/bridge/sil-sii8620.c | 1 + > drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 1 + > drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 1 + > drivers/gpu/drm/bridge/tc358767.c | 1 + > drivers/gpu/drm/bridge/tc358768.c | 1 + > drivers/gpu/drm/bridge/thc63lvd1024.c | 1 + > drivers/gpu/drm/bridge/ti-tfp410.c | 1 + > drivers/gpu/drm/drm_atomic_helper.c| 3 ++- > drivers/gpu/drm/drm_bridge.c | 4 +++- > drivers/gpu/drm/drm_probe_helper.c | 4 +++- > drivers/gpu/drm/i2c/tda998x_drv.c | 1 + > drivers/gpu/drm/omapdrm/dss/dpi.c | 1 + > drivers/gpu/drm/omapdrm/dss/sdi.c | 1 + > drivers/gpu/drm/omapdrm/dss/venc.c | 1 + > include/drm/drm_bridge.h | 3 +++ > 21 files changed, 28 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c > b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c > index 2bc6e4f85171..371f4a9f866d 100644 > --- a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c > +++ b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c > @@ -585,6 +585,7 @@ static int anx6345_bridge_attach(struct drm_bridge > *bridge, > > static enum drm_mode_status > anx6345_bridge_mode_valid(struct drm_bridge *bridge, > + const struct drm_display_info *info, > const struct drm_display_mode *mode) > { > if (mode->flags & DRM_MODE_FLAG_INTERLACE) > diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c > b/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c > index 0d5a5ad0c9ee..81debd02c169 100644 > --- a/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c > +++ b/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c > @@ -944,6 +944,7 @@ static int anx78xx_bridge_attach(struct drm_bridge > *bridge, > > static enum drm_mode_status > anx78xx_bridge_mode_valid(struct drm_bridge *bridge, > + const struct drm_display_info *info, > const struct drm_display_mode *mode) > { > if (mode->flags & DRM_MODE_FLAG_INTERLACE) > diff --git a/drivers/gpu/drm/bridge/cdns-dsi.c > b/drivers/gpu/drm/bridge/cdns-dsi.c > index 69c3892caee5..76373e31df92 100644 > --- a/drivers/gpu/drm/bridge/cdns-dsi.c > +++ b/drivers/gpu/drm/bridge/cdns-dsi.c > @@ -663,6 +663,7 @@ static int cdns_dsi_bridge_attach(struct drm_bridge > *bridge, > > static enum drm_mode_status > cdns_dsi_bridge_mode_valid(struct drm_bridge *bridge, > +const struct drm_display_info *info, > const struct drm_display_mode *mode) > { > struct cdns_dsi_input *input = bridge_to_cdns_dsi_input(bridge); > diff --git a/drivers/gpu/drm/bridge/chrontel-ch7033.c > b/drivers/gpu/drm/bridge/chrontel-ch7033.c > index f8675d82974b..486f405c2e16 100644 > --- a/drivers/gpu/drm/bridge/chrontel-ch7033.c > +++ b/drivers/gpu/drm/bridge/chrontel-ch7033.c > @@ -317,6 +317,7 @@ static void ch7033_bridge_detach(struct drm_bridge > *bridge) > } > > static enum drm_mode_status ch7033_bridge_mode_valid(struct drm_bridge > *bridge, > + const struct drm_display_info *info, >const struct drm_display_mode *mode) > { > if (mode->clock > 165000) > diff --git
[PATCH 10/27] drm: bridge: Pass drm_display_info to drm_bridge_funcs .mode_valid()
When validating a mode, bridges may need to do so in the context of a display, as specified by drm_display_info. An example is the meson dw-hdmi bridge that needs to consider the YUV 4:2:0 output format to perform clock calculations. Bridges that need the display info currently retrieve it from the drm_connector created by the bridge. This gets in the way of moving connector creation out of bridge drivers. To make this possible, pass the drm_display_info to drm_bridge_funcs .mode_valid(). Changes to the bridge drivers have been performed with the following coccinelle semantic patch and have been compile-tested. @ rule1 @ identifier funcs; identifier fn; @@ struct drm_bridge_funcs funcs = { ..., .mode_valid = fn }; @ depends on rule1 @ identifier rule1.fn; identifier bridge; identifier mode; @@ enum drm_mode_status fn( struct drm_bridge *bridge, + const struct drm_display_info *info, const struct drm_display_mode *mode ) { ... } Signed-off-by: Laurent Pinchart --- drivers/gpu/drm/bridge/analogix/analogix-anx6345.c | 1 + drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c | 1 + drivers/gpu/drm/bridge/cdns-dsi.c | 1 + drivers/gpu/drm/bridge/chrontel-ch7033.c | 1 + drivers/gpu/drm/bridge/nwl-dsi.c | 1 + drivers/gpu/drm/bridge/sii9234.c | 1 + drivers/gpu/drm/bridge/sil-sii8620.c | 1 + drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 1 + drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 1 + drivers/gpu/drm/bridge/tc358767.c | 1 + drivers/gpu/drm/bridge/tc358768.c | 1 + drivers/gpu/drm/bridge/thc63lvd1024.c | 1 + drivers/gpu/drm/bridge/ti-tfp410.c | 1 + drivers/gpu/drm/drm_atomic_helper.c| 3 ++- drivers/gpu/drm/drm_bridge.c | 4 +++- drivers/gpu/drm/drm_probe_helper.c | 4 +++- drivers/gpu/drm/i2c/tda998x_drv.c | 1 + drivers/gpu/drm/omapdrm/dss/dpi.c | 1 + drivers/gpu/drm/omapdrm/dss/sdi.c | 1 + drivers/gpu/drm/omapdrm/dss/venc.c | 1 + include/drm/drm_bridge.h | 3 +++ 21 files changed, 28 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c index 2bc6e4f85171..371f4a9f866d 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c +++ b/drivers/gpu/drm/bridge/analogix/analogix-anx6345.c @@ -585,6 +585,7 @@ static int anx6345_bridge_attach(struct drm_bridge *bridge, static enum drm_mode_status anx6345_bridge_mode_valid(struct drm_bridge *bridge, + const struct drm_display_info *info, const struct drm_display_mode *mode) { if (mode->flags & DRM_MODE_FLAG_INTERLACE) diff --git a/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c b/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c index 0d5a5ad0c9ee..81debd02c169 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c +++ b/drivers/gpu/drm/bridge/analogix/analogix-anx78xx.c @@ -944,6 +944,7 @@ static int anx78xx_bridge_attach(struct drm_bridge *bridge, static enum drm_mode_status anx78xx_bridge_mode_valid(struct drm_bridge *bridge, + const struct drm_display_info *info, const struct drm_display_mode *mode) { if (mode->flags & DRM_MODE_FLAG_INTERLACE) diff --git a/drivers/gpu/drm/bridge/cdns-dsi.c b/drivers/gpu/drm/bridge/cdns-dsi.c index 69c3892caee5..76373e31df92 100644 --- a/drivers/gpu/drm/bridge/cdns-dsi.c +++ b/drivers/gpu/drm/bridge/cdns-dsi.c @@ -663,6 +663,7 @@ static int cdns_dsi_bridge_attach(struct drm_bridge *bridge, static enum drm_mode_status cdns_dsi_bridge_mode_valid(struct drm_bridge *bridge, + const struct drm_display_info *info, const struct drm_display_mode *mode) { struct cdns_dsi_input *input = bridge_to_cdns_dsi_input(bridge); diff --git a/drivers/gpu/drm/bridge/chrontel-ch7033.c b/drivers/gpu/drm/bridge/chrontel-ch7033.c index f8675d82974b..486f405c2e16 100644 --- a/drivers/gpu/drm/bridge/chrontel-ch7033.c +++ b/drivers/gpu/drm/bridge/chrontel-ch7033.c @@ -317,6 +317,7 @@ static void ch7033_bridge_detach(struct drm_bridge *bridge) } static enum drm_mode_status ch7033_bridge_mode_valid(struct drm_bridge *bridge, +const struct drm_display_info *info, const struct drm_display_mode *mode) { if (mode->clock > 165000) diff --git a/drivers/gpu/drm/bridge/nwl-dsi.c b/drivers/gpu/drm/bridge/nwl-dsi.c index b14d725bf609..77a79af70914 100644 --- a/drivers/gpu/drm/bridge/nwl-dsi.c +++ b/drivers/gpu/drm/bridge/nwl-dsi.c @@ -818,6 +818,7 @@ static bool nwl_dsi_bridge_mode_fixup(struct drm_bridge *bridge,