Re: [PATCH 10/27] drm: bridge: Pass drm_display_info to drm_bridge_funcs .mode_valid()

2020-05-26 Thread Guido Günther
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()

2020-05-26 Thread Boris Brezillon
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()

2020-05-26 Thread Neil Armstrong
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()

2020-05-25 Thread Laurent Pinchart
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,