linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior
@ 2016-06-02 14:31 Boris Brezillon
  2016-06-02 14:31 ` [PATCH 01/20] drm/atomic: Fix remaining places where !funcs->best_encoder is valid Boris Brezillon
                   ` (19 more replies)
  0 siblings, 20 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

Hello,

This patch series aims at replacing all dummy ->best_encoder()
implementations where we have a 1:1 relationship between encoders
and connectors.
The core already provides the drm_atomic_helper_best_encoder()
function which is taking the first encoder attached to the
connector (after making sure only one encoder was attached to the
connector), but it's not automatically used, and drivers wanting
to rely on this default behavior have to explicitly assign their
->best_encoder() hook to drm_atomic_helper_best_encoder().

The first patch fixes remaining places where
drm_atomic_helper_best_encoder() should be called when ->best_encoder()
is NULL, so that drivers using the atomic helpers can get rid of the
explicit ->best_encoder assignment if they need to rely on the default
drm_atomic_helper_best_encoder() implementation.

The following patches are killing all open coded ->best_encoder()
implementations that could be replaced by
drm_atomic_helper_best_encoder().

All modifications have been compile tested except for the changed on
the intel driver.
I've also tested on an atmel board, but I recommend waiting for DRM
driver maintainers feedback before applying the associated changes.

Note that once patch 1 is applied, the other patches can be applied
independently.

Best Regards,

Boris 

Boris Brezillon (20):
  drm/atomic: Fix remaining places where !funcs->best_encoder is valid
  drm: arc: Rely on the default ->best_encoder() behavior
  drm: atmel-hlcdc: Rely on the default ->best_encoder() behavior
  drm: exynos: Rely on the default ->best_encoder() behavior
  drm: fsl-dcu: Rely on the default ->best_encoder() behavior
  drm: i915: Rely on the default ->best_encoder() behavior where
    appropriate
  drm: mediatek: Rely on the default ->best_encoder() behavior
  drm: msm: Rely on the default ->best_encoder() behavior where
    appropriate
  drm: rcar-du: Rely on the default ->best_encoder() behavior
  drm: rockchip: Rely on the default ->best_encoder() behavior
  drm: sti: Rely on the default ->best_encoder() behavior
  drm: sun4i: Rely on the default ->best_encoder() behavior
  drm: tegra: Rely on the default ->best_encoder() behavior
  drm: vc4: Rely on the default ->best_encoder() behavior
  drm: virtgpu: Rely on the default ->best_encoder() behavior
  drm: omap: Rely on the default ->best_encoder() behavior
  drm/bridge: anx78xx: Rely on the default ->best_encoder() behavior
  drm/bridge: ptn3460: Rely on the default ->best_encoder() behavior
  drm/bridge: ps8622: Rely on the default ->best_encoder() behavior
  drm/bridge: dw-hdmi: Use drm_atomic_helper_best_encoder()

 drivers/gpu/drm/arc/arcpgu_hdmi.c                  | 18 ------------------
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c   | 12 ------------
 drivers/gpu/drm/bridge/analogix-anx78xx.c          |  8 --------
 drivers/gpu/drm/bridge/dw-hdmi.c                   | 11 +----------
 drivers/gpu/drm/bridge/nxp-ptn3460.c               |  8 --------
 drivers/gpu/drm/bridge/parade-ps8622.c             | 10 ----------
 drivers/gpu/drm/drm_atomic_helper.c                |  4 +++-
 drivers/gpu/drm/drm_fb_helper.c                    | 13 ++++++++++++-
 drivers/gpu/drm/exynos/exynos_drm_dpi.c            |  9 ---------
 drivers/gpu/drm/exynos/exynos_drm_dsi.c            |  9 ---------
 drivers/gpu/drm/exynos/exynos_drm_vidi.c           |  8 --------
 drivers/gpu/drm/exynos/exynos_hdmi.c               |  8 --------
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c          |  9 ---------
 drivers/gpu/drm/i915/intel_crt.c                   |  1 -
 drivers/gpu/drm/i915/intel_display.c               |  8 --------
 drivers/gpu/drm/i915/intel_dp.c                    |  1 -
 drivers/gpu/drm/i915/intel_drv.h                   |  1 -
 drivers/gpu/drm/i915/intel_dsi.c                   |  1 -
 drivers/gpu/drm/i915/intel_dvo.c                   |  1 -
 drivers/gpu/drm/i915/intel_hdmi.c                  |  1 -
 drivers/gpu/drm/i915/intel_lvds.c                  |  1 -
 drivers/gpu/drm/i915/intel_sdvo.c                  |  1 -
 drivers/gpu/drm/i915/intel_tv.c                    |  1 -
 drivers/gpu/drm/mediatek/mtk_dsi.c                 |  9 ---------
 drivers/gpu/drm/msm/edp/edp_connector.c            | 10 ----------
 drivers/gpu/drm/msm/hdmi/hdmi_connector.c          |  8 --------
 drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c |  9 ---------
 drivers/gpu/drm/omapdrm/omap_connector.c           |  8 --------
 drivers/gpu/drm/rcar-du/rcar_du_encoder.c          | 12 ------------
 drivers/gpu/drm/rcar-du/rcar_du_encoder.h          |  3 ---
 drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c          |  1 -
 drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c          |  1 -
 drivers/gpu/drm/rcar-du/rcar_du_vgacon.c           |  1 -
 drivers/gpu/drm/rockchip/dw-mipi-dsi.c             |  9 ---------
 drivers/gpu/drm/rockchip/inno_hdmi.c               |  9 ---------
 drivers/gpu/drm/sti/sti_dvo.c                      | 10 ----------
 drivers/gpu/drm/sti/sti_hda.c                      | 10 ----------
 drivers/gpu/drm/sti/sti_hdmi.c                     | 10 ----------
 drivers/gpu/drm/sun4i/sun4i_rgb.c                  | 10 ----------
 drivers/gpu/drm/sun4i/sun4i_tv.c                   |  9 ---------
 drivers/gpu/drm/tegra/drm.h                        |  2 --
 drivers/gpu/drm/tegra/dsi.c                        |  1 -
 drivers/gpu/drm/tegra/hdmi.c                       |  1 -
 drivers/gpu/drm/tegra/output.c                     |  8 --------
 drivers/gpu/drm/tegra/rgb.c                        |  1 -
 drivers/gpu/drm/tegra/sor.c                        |  1 -
 drivers/gpu/drm/vc4/vc4_dpi.c                      |  9 ---------
 drivers/gpu/drm/vc4/vc4_hdmi.c                     |  9 ---------
 drivers/gpu/drm/virtio/virtgpu_display.c           | 10 ----------
 49 files changed, 16 insertions(+), 299 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 31+ messages in thread

* [PATCH 01/20] drm/atomic: Fix remaining places where !funcs->best_encoder is valid
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 21:05   ` Laurent Pinchart
  2016-06-02 14:31 ` [PATCH 02/20] drm: arc: Rely on the default ->best_encoder() behavior Boris Brezillon
                   ` (18 subsequent siblings)
  19 siblings, 1 reply; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

Adapt drm_pick_crtcs() and update_connector_routing() to fallback to
drm_atomic_helper_best_encoder() if funcs->best_encoder() is NULL so
that DRM drivers can leave this hook unassigned if they know they want
to use drm_atomic_helper_best_encoder().

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/drm_atomic_helper.c |  4 +++-
 drivers/gpu/drm/drm_fb_helper.c     | 13 ++++++++++++-
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index f6a3350..849d029 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -300,8 +300,10 @@ update_connector_routing(struct drm_atomic_state *state,
 	if (funcs->atomic_best_encoder)
 		new_encoder = funcs->atomic_best_encoder(connector,
 							 connector_state);
-	else
+	else if (funcs->best_encoder)
 		new_encoder = funcs->best_encoder(connector);
+	else
+		new_encoder = drm_atomic_helper_best_encoder(connector);
 
 	if (!new_encoder) {
 		DRM_DEBUG_ATOMIC("No suitable encoder found for [CONNECTOR:%d:%s]\n",
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 7c2eb75..d44389a 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -2000,7 +2000,18 @@ static int drm_pick_crtcs(struct drm_fb_helper *fb_helper,
 		my_score++;
 
 	connector_funcs = connector->helper_private;
-	encoder = connector_funcs->best_encoder(connector);
+
+	/*
+	 * If the DRM device implements atomic hooks and ->best_encoder() is
+	 * NULL we fallback to the default drm_atomic_helper_best_encoder()
+	 * helper.
+	 */
+	if (fb_helper->dev->mode_config.funcs->atomic_commit &&
+	    !connector_funcs->best_encoder)
+		encoder = drm_atomic_helper_best_encoder(connector);
+	else
+		encoder = connector_funcs->best_encoder(connector);
+
 	if (!encoder)
 		goto out;
 
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 02/20] drm: arc: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
  2016-06-02 14:31 ` [PATCH 01/20] drm/atomic: Fix remaining places where !funcs->best_encoder is valid Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 03/20] drm: atmel-hlcdc: " Boris Brezillon
                   ` (17 subsequent siblings)
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

We have a 1:1 relationship between connectors and encoders and the
driver is relying on the atomic helpers: we can drop the custom
->best_encoder(), and let the core call drm_atomic_helper_best_encoder()
for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/arc/arcpgu_hdmi.c | 18 ------------------
 1 file changed, 18 deletions(-)

diff --git a/drivers/gpu/drm/arc/arcpgu_hdmi.c b/drivers/gpu/drm/arc/arcpgu_hdmi.c
index 08b6bae..b7a8b2a 100644
--- a/drivers/gpu/drm/arc/arcpgu_hdmi.c
+++ b/drivers/gpu/drm/arc/arcpgu_hdmi.c
@@ -46,23 +46,6 @@ static int arcpgu_drm_connector_get_modes(struct drm_connector *connector)
 	return sfuncs->get_modes(&slave->base, connector);
 }
 
-struct drm_encoder *
-arcpgu_drm_connector_best_encoder(struct drm_connector *connector)
-{
-	struct drm_encoder_slave *slave;
-	struct arcpgu_drm_connector *con =
-		container_of(connector, struct arcpgu_drm_connector, connector);
-
-	slave = con->encoder_slave;
-	if (slave == NULL) {
-		dev_err(connector->dev->dev,
-			"connector_best_encoder: cannot find slave encoder for connector\n");
-		return NULL;
-	}
-
-	return &slave->base;
-}
-
 static enum drm_connector_status
 arcpgu_drm_connector_detect(struct drm_connector *connector, bool force)
 {
@@ -97,7 +80,6 @@ static void arcpgu_drm_connector_destroy(struct drm_connector *connector)
 static const struct drm_connector_helper_funcs
 arcpgu_drm_connector_helper_funcs = {
 	.get_modes = arcpgu_drm_connector_get_modes,
-	.best_encoder = arcpgu_drm_connector_best_encoder,
 };
 
 static const struct drm_connector_funcs arcpgu_drm_connector_funcs = {
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 03/20] drm: atmel-hlcdc: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
  2016-06-02 14:31 ` [PATCH 01/20] drm/atomic: Fix remaining places where !funcs->best_encoder is valid Boris Brezillon
  2016-06-02 14:31 ` [PATCH 02/20] drm: arc: Rely on the default ->best_encoder() behavior Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 04/20] drm: exynos: " Boris Brezillon
                   ` (16 subsequent siblings)
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

We have a 1:1 relationship between connectors and encoders and the
driver is relying on the atomic helpers: we can drop the custom
->best_encoder() and let the core call drm_atomic_helper_best_encoder()
for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c | 12 ------------
 1 file changed, 12 deletions(-)

diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c
index 39802c0..473a475 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_output.c
@@ -113,21 +113,9 @@ static int atmel_hlcdc_rgb_mode_valid(struct drm_connector *connector,
 	return atmel_hlcdc_dc_mode_valid(rgb->dc, mode);
 }
 
-
-
-static struct drm_encoder *
-atmel_hlcdc_rgb_best_encoder(struct drm_connector *connector)
-{
-	struct atmel_hlcdc_rgb_output *rgb =
-			drm_connector_to_atmel_hlcdc_rgb_output(connector);
-
-	return &rgb->encoder;
-}
-
 static const struct drm_connector_helper_funcs atmel_hlcdc_panel_connector_helper_funcs = {
 	.get_modes = atmel_hlcdc_panel_get_modes,
 	.mode_valid = atmel_hlcdc_rgb_mode_valid,
-	.best_encoder = atmel_hlcdc_rgb_best_encoder,
 };
 
 static enum drm_connector_status
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 04/20] drm: exynos: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (2 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 03/20] drm: atmel-hlcdc: " Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 05/20] drm: fsl-dcu: " Boris Brezillon
                   ` (15 subsequent siblings)
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

We have 1:1 relationship between connectors and encoders and the driver
is relying on the atomic helpers: we can drop the custom ->best_encoder()
implementations and let the core call drm_atomic_helper_best_encoder()
for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/exynos/exynos_drm_dpi.c  | 9 ---------
 drivers/gpu/drm/exynos/exynos_drm_dsi.c  | 9 ---------
 drivers/gpu/drm/exynos/exynos_drm_vidi.c | 8 --------
 drivers/gpu/drm/exynos/exynos_hdmi.c     | 8 --------
 4 files changed, 34 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
index 5e38e74..ad6b73c 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c
@@ -93,17 +93,8 @@ static int exynos_dpi_get_modes(struct drm_connector *connector)
 	return 0;
 }
 
-static struct drm_encoder *
-exynos_dpi_best_encoder(struct drm_connector *connector)
-{
-	struct exynos_dpi *ctx = connector_to_dpi(connector);
-
-	return &ctx->encoder;
-}
-
 static const struct drm_connector_helper_funcs exynos_dpi_connector_helper_funcs = {
 	.get_modes = exynos_dpi_get_modes,
-	.best_encoder = exynos_dpi_best_encoder,
 };
 
 static int exynos_dpi_create_connector(struct drm_encoder *encoder)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index 601ecf8..e07cb1f 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -1566,17 +1566,8 @@ static int exynos_dsi_get_modes(struct drm_connector *connector)
 	return 0;
 }
 
-static struct drm_encoder *
-exynos_dsi_best_encoder(struct drm_connector *connector)
-{
-	struct exynos_dsi *dsi = connector_to_dsi(connector);
-
-	return &dsi->encoder;
-}
-
 static const struct drm_connector_helper_funcs exynos_dsi_connector_helper_funcs = {
 	.get_modes = exynos_dsi_get_modes,
-	.best_encoder = exynos_dsi_best_encoder,
 };
 
 static int exynos_dsi_create_connector(struct drm_encoder *encoder)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
index 608b0af..e8f6c92 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c
@@ -378,16 +378,8 @@ static int vidi_get_modes(struct drm_connector *connector)
 	return drm_add_edid_modes(connector, edid);
 }
 
-static struct drm_encoder *vidi_best_encoder(struct drm_connector *connector)
-{
-	struct vidi_context *ctx = ctx_from_connector(connector);
-
-	return &ctx->encoder;
-}
-
 static const struct drm_connector_helper_funcs vidi_connector_helper_funcs = {
 	.get_modes = vidi_get_modes,
-	.best_encoder = vidi_best_encoder,
 };
 
 static int vidi_create_connector(struct drm_encoder *encoder)
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
index 58de5a4..1625d7c 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -937,17 +937,9 @@ static int hdmi_mode_valid(struct drm_connector *connector,
 	return MODE_OK;
 }
 
-static struct drm_encoder *hdmi_best_encoder(struct drm_connector *connector)
-{
-	struct hdmi_context *hdata = connector_to_hdmi(connector);
-
-	return &hdata->encoder;
-}
-
 static const struct drm_connector_helper_funcs hdmi_connector_helper_funcs = {
 	.get_modes = hdmi_get_modes,
 	.mode_valid = hdmi_mode_valid,
-	.best_encoder = hdmi_best_encoder,
 };
 
 static int hdmi_create_connector(struct drm_encoder *encoder)
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 05/20] drm: fsl-dcu: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (3 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 04/20] drm: exynos: " Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 06/20] drm: i915: Rely on the default ->best_encoder() behavior where appropriate Boris Brezillon
                   ` (14 subsequent siblings)
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

We have a 1:1 relationship between connectors and encoders and the
driver is relying on the atomic helpers: we can drop the custom
->best_encoder() and let the core call drm_atomic_helper_best_encoder()
for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
index 98c998d..0b0989e 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_rgb.c
@@ -102,14 +102,6 @@ static const struct drm_connector_funcs fsl_dcu_drm_connector_funcs = {
 	.reset = drm_atomic_helper_connector_reset,
 };
 
-static struct drm_encoder *
-fsl_dcu_drm_connector_best_encoder(struct drm_connector *connector)
-{
-	struct fsl_dcu_drm_connector *fsl_con = to_fsl_dcu_connector(connector);
-
-	return fsl_con->encoder;
-}
-
 static int fsl_dcu_drm_connector_get_modes(struct drm_connector *connector)
 {
 	struct fsl_dcu_drm_connector *fsl_connector;
@@ -136,7 +128,6 @@ static int fsl_dcu_drm_connector_mode_valid(struct drm_connector *connector,
 }
 
 static const struct drm_connector_helper_funcs connector_helper_funcs = {
-	.best_encoder = fsl_dcu_drm_connector_best_encoder,
 	.get_modes = fsl_dcu_drm_connector_get_modes,
 	.mode_valid = fsl_dcu_drm_connector_mode_valid,
 };
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 06/20] drm: i915: Rely on the default ->best_encoder() behavior where appropriate
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (4 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 05/20] drm: fsl-dcu: " Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 07/20] drm: mediatek: Rely on the default ->best_encoder() behavior Boris Brezillon
                   ` (13 subsequent siblings)
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

For all outputs except dp_mst, we have a 1:1 relationship between
connectors and encoders and the driver is relying on the atomic helpers:
we can drop the custom ->best_encoder() implementation and let the core
call drm_atomic_helper_best_encoder() for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/i915/intel_crt.c     | 1 -
 drivers/gpu/drm/i915/intel_display.c | 8 --------
 drivers/gpu/drm/i915/intel_dp.c      | 1 -
 drivers/gpu/drm/i915/intel_drv.h     | 1 -
 drivers/gpu/drm/i915/intel_dsi.c     | 1 -
 drivers/gpu/drm/i915/intel_dvo.c     | 1 -
 drivers/gpu/drm/i915/intel_hdmi.c    | 1 -
 drivers/gpu/drm/i915/intel_lvds.c    | 1 -
 drivers/gpu/drm/i915/intel_sdvo.c    | 1 -
 drivers/gpu/drm/i915/intel_tv.c      | 1 -
 10 files changed, 17 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index 3fbb6fc..bd0cd68 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -753,7 +753,6 @@ static const struct drm_connector_funcs intel_crt_connector_funcs = {
 static const struct drm_connector_helper_funcs intel_crt_connector_helper_funcs = {
 	.mode_valid = intel_crt_mode_valid,
 	.get_modes = intel_crt_get_modes,
-	.best_encoder = intel_best_encoder,
 };
 
 static const struct drm_encoder_funcs intel_crt_enc_funcs = {
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 2113f40..77026ce 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -16113,14 +16113,6 @@ void intel_modeset_cleanup(struct drm_device *dev)
 	intel_teardown_gmbus(dev);
 }
 
-/*
- * Return which encoder is currently attached for connector.
- */
-struct drm_encoder *intel_best_encoder(struct drm_connector *connector)
-{
-	return &intel_attached_encoder(connector)->base;
-}
-
 void intel_connector_attach_encoder(struct intel_connector *connector,
 				    struct intel_encoder *encoder)
 {
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index f192f58..21b2833 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -4935,7 +4935,6 @@ static const struct drm_connector_funcs intel_dp_connector_funcs = {
 static const struct drm_connector_helper_funcs intel_dp_connector_helper_funcs = {
 	.get_modes = intel_dp_get_modes,
 	.mode_valid = intel_dp_mode_valid,
-	.best_encoder = intel_best_encoder,
 };
 
 static const struct drm_encoder_funcs intel_dp_enc_funcs = {
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index a28b4aa..79a4d6b 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1128,7 +1128,6 @@ struct intel_connector *intel_connector_alloc(void);
 bool intel_connector_get_hw_state(struct intel_connector *connector);
 void intel_connector_attach_encoder(struct intel_connector *connector,
 				    struct intel_encoder *encoder);
-struct drm_encoder *intel_best_encoder(struct drm_connector *connector);
 struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
 					     struct drm_crtc *crtc);
 enum pipe intel_get_pipe_from_connector(struct intel_connector *connector);
diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
index 366ad6c..ec51952 100644
--- a/drivers/gpu/drm/i915/intel_dsi.c
+++ b/drivers/gpu/drm/i915/intel_dsi.c
@@ -1378,7 +1378,6 @@ static const struct drm_encoder_funcs intel_dsi_funcs = {
 static const struct drm_connector_helper_funcs intel_dsi_connector_helper_funcs = {
 	.get_modes = intel_dsi_get_modes,
 	.mode_valid = intel_dsi_mode_valid,
-	.best_encoder = intel_best_encoder,
 };
 
 static const struct drm_connector_funcs intel_dsi_connector_funcs = {
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
index 286baec..34b7e3f 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -351,7 +351,6 @@ static const struct drm_connector_funcs intel_dvo_connector_funcs = {
 static const struct drm_connector_helper_funcs intel_dvo_connector_helper_funcs = {
 	.mode_valid = intel_dvo_mode_valid,
 	.get_modes = intel_dvo_get_modes,
-	.best_encoder = intel_best_encoder,
 };
 
 static void intel_dvo_enc_destroy(struct drm_encoder *encoder)
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 2c3bd9c..aef4bc8 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -2114,7 +2114,6 @@ static const struct drm_connector_funcs intel_hdmi_connector_funcs = {
 static const struct drm_connector_helper_funcs intel_hdmi_connector_helper_funcs = {
 	.get_modes = intel_hdmi_get_modes,
 	.mode_valid = intel_hdmi_mode_valid,
-	.best_encoder = intel_best_encoder,
 };
 
 static const struct drm_encoder_funcs intel_hdmi_enc_funcs = {
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index bc53c0d..d4faa5a 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -547,7 +547,6 @@ static int intel_lvds_set_property(struct drm_connector *connector,
 static const struct drm_connector_helper_funcs intel_lvds_connector_helper_funcs = {
 	.get_modes = intel_lvds_get_modes,
 	.mode_valid = intel_lvds_mode_valid,
-	.best_encoder = intel_best_encoder,
 };
 
 static const struct drm_connector_funcs intel_lvds_connector_funcs = {
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 2128fae..5cd48ff 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -2191,7 +2191,6 @@ static const struct drm_connector_funcs intel_sdvo_connector_funcs = {
 static const struct drm_connector_helper_funcs intel_sdvo_connector_helper_funcs = {
 	.get_modes = intel_sdvo_get_modes,
 	.mode_valid = intel_sdvo_mode_valid,
-	.best_encoder = intel_best_encoder,
 };
 
 static void intel_sdvo_enc_destroy(struct drm_encoder *encoder)
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index 223129d..47fe241 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -1512,7 +1512,6 @@ static const struct drm_connector_funcs intel_tv_connector_funcs = {
 static const struct drm_connector_helper_funcs intel_tv_connector_helper_funcs = {
 	.mode_valid = intel_tv_mode_valid,
 	.get_modes = intel_tv_get_modes,
-	.best_encoder = intel_best_encoder,
 };
 
 static const struct drm_encoder_funcs intel_tv_enc_funcs = {
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 07/20] drm: mediatek: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (5 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 06/20] drm: i915: Rely on the default ->best_encoder() behavior where appropriate Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 08/20] drm: msm: Rely on the default ->best_encoder() behavior where appropriate Boris Brezillon
                   ` (12 subsequent siblings)
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

We have a 1:1 relationship between connectors and encoders and the
driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementation and let the core call
drm_atomic_helper_best_encoder() for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/mediatek/mtk_dsi.c | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c
index 2d808e5..7343ffc 100644
--- a/drivers/gpu/drm/mediatek/mtk_dsi.c
+++ b/drivers/gpu/drm/mediatek/mtk_dsi.c
@@ -575,14 +575,6 @@ static int mtk_dsi_connector_get_modes(struct drm_connector *connector)
 	return drm_panel_get_modes(dsi->panel);
 }
 
-static struct drm_encoder *mtk_dsi_connector_best_encoder(
-		struct drm_connector *connector)
-{
-	struct mtk_dsi *dsi = connector_to_dsi(connector);
-
-	return &dsi->encoder;
-}
-
 static const struct drm_encoder_helper_funcs mtk_dsi_encoder_helper_funcs = {
 	.mode_fixup = mtk_dsi_encoder_mode_fixup,
 	.mode_set = mtk_dsi_encoder_mode_set,
@@ -603,7 +595,6 @@ static const struct drm_connector_funcs mtk_dsi_connector_funcs = {
 static const struct drm_connector_helper_funcs
 	mtk_dsi_connector_helper_funcs = {
 	.get_modes = mtk_dsi_connector_get_modes,
-	.best_encoder = mtk_dsi_connector_best_encoder,
 };
 
 static int mtk_drm_attach_bridge(struct drm_bridge *bridge,
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 08/20] drm: msm: Rely on the default ->best_encoder() behavior where appropriate
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (6 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 07/20] drm: mediatek: Rely on the default ->best_encoder() behavior Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 09/20] drm: rcar-du: Rely on the default ->best_encoder() behavior Boris Brezillon
                   ` (11 subsequent siblings)
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

For all outputs except DSI we have a 1:1 relationship between connectors
and encoders and the driver is relying on the atomic helpers: we can
drop the custom ->best_encoder() and let the core call
drm_atomic_helper_best_encoder() for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/msm/edp/edp_connector.c            | 10 ----------
 drivers/gpu/drm/msm/hdmi/hdmi_connector.c          |  8 --------
 drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c |  9 ---------
 3 files changed, 27 deletions(-)

diff --git a/drivers/gpu/drm/msm/edp/edp_connector.c b/drivers/gpu/drm/msm/edp/edp_connector.c
index 72360cd..5960628 100644
--- a/drivers/gpu/drm/msm/edp/edp_connector.c
+++ b/drivers/gpu/drm/msm/edp/edp_connector.c
@@ -91,15 +91,6 @@ static int edp_connector_mode_valid(struct drm_connector *connector,
 	return MODE_OK;
 }
 
-static struct drm_encoder *
-edp_connector_best_encoder(struct drm_connector *connector)
-{
-	struct edp_connector *edp_connector = to_edp_connector(connector);
-
-	DBG("");
-	return edp_connector->edp->encoder;
-}
-
 static const struct drm_connector_funcs edp_connector_funcs = {
 	.dpms = drm_atomic_helper_connector_dpms,
 	.detect = edp_connector_detect,
@@ -113,7 +104,6 @@ static const struct drm_connector_funcs edp_connector_funcs = {
 static const struct drm_connector_helper_funcs edp_connector_helper_funcs = {
 	.get_modes = edp_connector_get_modes,
 	.mode_valid = edp_connector_mode_valid,
-	.best_encoder = edp_connector_best_encoder,
 };
 
 /* initialize connector */
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_connector.c b/drivers/gpu/drm/msm/hdmi/hdmi_connector.c
index b15d726..a2515b4 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_connector.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_connector.c
@@ -406,13 +406,6 @@ static int msm_hdmi_connector_mode_valid(struct drm_connector *connector,
 	return 0;
 }
 
-static struct drm_encoder *
-msm_hdmi_connector_best_encoder(struct drm_connector *connector)
-{
-	struct hdmi_connector *hdmi_connector = to_hdmi_connector(connector);
-	return hdmi_connector->hdmi->encoder;
-}
-
 static const struct drm_connector_funcs hdmi_connector_funcs = {
 	.dpms = drm_atomic_helper_connector_dpms,
 	.detect = hdmi_connector_detect,
@@ -426,7 +419,6 @@ static const struct drm_connector_funcs hdmi_connector_funcs = {
 static const struct drm_connector_helper_funcs msm_hdmi_connector_helper_funcs = {
 	.get_modes = msm_hdmi_connector_get_modes,
 	.mode_valid = msm_hdmi_connector_mode_valid,
-	.best_encoder = msm_hdmi_connector_best_encoder,
 };
 
 /* initialize connector */
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c
index 2648cd7..353429b 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_lvds_connector.c
@@ -90,14 +90,6 @@ static int mdp4_lvds_connector_mode_valid(struct drm_connector *connector,
 	return MODE_OK;
 }
 
-static struct drm_encoder *
-mdp4_lvds_connector_best_encoder(struct drm_connector *connector)
-{
-	struct mdp4_lvds_connector *mdp4_lvds_connector =
-			to_mdp4_lvds_connector(connector);
-	return mdp4_lvds_connector->encoder;
-}
-
 static const struct drm_connector_funcs mdp4_lvds_connector_funcs = {
 	.dpms = drm_atomic_helper_connector_dpms,
 	.detect = mdp4_lvds_connector_detect,
@@ -111,7 +103,6 @@ static const struct drm_connector_funcs mdp4_lvds_connector_funcs = {
 static const struct drm_connector_helper_funcs mdp4_lvds_connector_helper_funcs = {
 	.get_modes = mdp4_lvds_connector_get_modes,
 	.mode_valid = mdp4_lvds_connector_mode_valid,
-	.best_encoder = mdp4_lvds_connector_best_encoder,
 };
 
 /* initialize connector */
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 09/20] drm: rcar-du: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (7 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 08/20] drm: msm: Rely on the default ->best_encoder() behavior where appropriate Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 20:57   ` Laurent Pinchart
  2016-06-02 14:31 ` [PATCH 10/20] drm: rockchip: " Boris Brezillon
                   ` (10 subsequent siblings)
  19 siblings, 1 reply; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

All outputs have a 1:1 relationship between connectors and encoders,
and the driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementations and let the core call
drm_atomic_helper_best_encoder() for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 12 ------------
 drivers/gpu/drm/rcar-du/rcar_du_encoder.h |  3 ---
 drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c |  1 -
 drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c |  1 -
 drivers/gpu/drm/rcar-du/rcar_du_vgacon.c  |  1 -
 5 files changed, 18 deletions(-)

diff --git a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
index 4e939e4..55149e9 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
@@ -27,18 +27,6 @@
 #include "rcar_du_vgacon.h"
 
 /* -----------------------------------------------------------------------------
- * Common connector functions
- */
-
-struct drm_encoder *
-rcar_du_connector_best_encoder(struct drm_connector *connector)
-{
-	struct rcar_du_connector *rcon = to_rcar_connector(connector);
-
-	return rcar_encoder_to_drm_encoder(rcon->encoder);
-}
-
-/* -----------------------------------------------------------------------------
  * Encoder
  */
 
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_encoder.h b/drivers/gpu/drm/rcar-du/rcar_du_encoder.h
index 719b6f2a..a8669c3 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_encoder.h
+++ b/drivers/gpu/drm/rcar-du/rcar_du_encoder.h
@@ -49,9 +49,6 @@ struct rcar_du_connector {
 #define to_rcar_connector(c) \
 	container_of(c, struct rcar_du_connector, connector)
 
-struct drm_encoder *
-rcar_du_connector_best_encoder(struct drm_connector *connector);
-
 int rcar_du_encoder_init(struct rcar_du_device *rcdu,
 			 enum rcar_du_encoder_type type,
 			 enum rcar_du_output output,
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c b/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
index 6c92714..612b4d5 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
@@ -52,7 +52,6 @@ static int rcar_du_hdmi_connector_mode_valid(struct drm_connector *connector,
 static const struct drm_connector_helper_funcs connector_helper_funcs = {
 	.get_modes = rcar_du_hdmi_connector_get_modes,
 	.mode_valid = rcar_du_hdmi_connector_mode_valid,
-	.best_encoder = rcar_du_connector_best_encoder,
 };
 
 static enum drm_connector_status
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c b/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c
index e905f5d..6afd0af 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c
@@ -59,7 +59,6 @@ static int rcar_du_lvds_connector_get_modes(struct drm_connector *connector)
 
 static const struct drm_connector_helper_funcs connector_helper_funcs = {
 	.get_modes = rcar_du_lvds_connector_get_modes,
-	.best_encoder = rcar_du_connector_best_encoder,
 };
 
 static enum drm_connector_status
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c b/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c
index 9d7e5c9..68f7ffa 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c
@@ -28,7 +28,6 @@ static int rcar_du_vga_connector_get_modes(struct drm_connector *connector)
 
 static const struct drm_connector_helper_funcs connector_helper_funcs = {
 	.get_modes = rcar_du_vga_connector_get_modes,
-	.best_encoder = rcar_du_connector_best_encoder,
 };
 
 static enum drm_connector_status
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 10/20] drm: rockchip: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (8 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 09/20] drm: rcar-du: Rely on the default ->best_encoder() behavior Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-07  0:51   ` Mark yao
  2016-06-02 14:31 ` [PATCH 11/20] drm: sti: " Boris Brezillon
                   ` (9 subsequent siblings)
  19 siblings, 1 reply; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

All outputss have a 1:1 relationship between connectors and encoders
and the driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementations  and let the core call
drm_atomic_helper_best_encoder() for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/rockchip/dw-mipi-dsi.c | 9 ---------
 drivers/gpu/drm/rockchip/inno_hdmi.c   | 9 ---------
 2 files changed, 18 deletions(-)

diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c
index dedc65b..ca22e5e 100644
--- a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c
+++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c
@@ -964,18 +964,9 @@ static enum drm_mode_status dw_mipi_dsi_mode_valid(
 	return mode_status;
 }
 
-static struct drm_encoder *dw_mipi_dsi_connector_best_encoder(
-					struct drm_connector *connector)
-{
-	struct dw_mipi_dsi *dsi = con_to_dsi(connector);
-
-	return &dsi->encoder;
-}
-
 static struct drm_connector_helper_funcs dw_mipi_dsi_connector_helper_funcs = {
 	.get_modes = dw_mipi_dsi_connector_get_modes,
 	.mode_valid = dw_mipi_dsi_mode_valid,
-	.best_encoder = dw_mipi_dsi_connector_best_encoder,
 };
 
 static enum drm_connector_status
diff --git a/drivers/gpu/drm/rockchip/inno_hdmi.c b/drivers/gpu/drm/rockchip/inno_hdmi.c
index f8b4feb..006260d 100644
--- a/drivers/gpu/drm/rockchip/inno_hdmi.c
+++ b/drivers/gpu/drm/rockchip/inno_hdmi.c
@@ -579,14 +579,6 @@ inno_hdmi_connector_mode_valid(struct drm_connector *connector,
 	return MODE_OK;
 }
 
-static struct drm_encoder *
-inno_hdmi_connector_best_encoder(struct drm_connector *connector)
-{
-	struct inno_hdmi *hdmi = to_inno_hdmi(connector);
-
-	return &hdmi->encoder;
-}
-
 static int
 inno_hdmi_probe_single_connector_modes(struct drm_connector *connector,
 				       uint32_t maxX, uint32_t maxY)
@@ -613,7 +605,6 @@ static struct drm_connector_funcs inno_hdmi_connector_funcs = {
 static struct drm_connector_helper_funcs inno_hdmi_connector_helper_funcs = {
 	.get_modes = inno_hdmi_connector_get_modes,
 	.mode_valid = inno_hdmi_connector_mode_valid,
-	.best_encoder = inno_hdmi_connector_best_encoder,
 };
 
 static int inno_hdmi_register(struct drm_device *drm, struct inno_hdmi *hdmi)
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 11/20] drm: sti: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (9 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 10/20] drm: rockchip: " Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 12/20] drm: sun4i: " Boris Brezillon
                   ` (8 subsequent siblings)
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

All outputs have a 1:1 relationship between connectors and encoders
and the driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementations and let the core call
drm_atomic_helper_best_encoder() for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/sti/sti_dvo.c  | 10 ----------
 drivers/gpu/drm/sti/sti_hda.c  | 10 ----------
 drivers/gpu/drm/sti/sti_hdmi.c | 10 ----------
 3 files changed, 30 deletions(-)

diff --git a/drivers/gpu/drm/sti/sti_dvo.c b/drivers/gpu/drm/sti/sti_dvo.c
index 25f7663..d5627d1 100644
--- a/drivers/gpu/drm/sti/sti_dvo.c
+++ b/drivers/gpu/drm/sti/sti_dvo.c
@@ -384,20 +384,10 @@ static int sti_dvo_connector_mode_valid(struct drm_connector *connector,
 	return MODE_OK;
 }
 
-struct drm_encoder *sti_dvo_best_encoder(struct drm_connector *connector)
-{
-	struct sti_dvo_connector *dvo_connector
-		= to_sti_dvo_connector(connector);
-
-	/* Best encoder is the one associated during connector creation */
-	return dvo_connector->encoder;
-}
-
 static const
 struct drm_connector_helper_funcs sti_dvo_connector_helper_funcs = {
 	.get_modes = sti_dvo_connector_get_modes,
 	.mode_valid = sti_dvo_connector_mode_valid,
-	.best_encoder = sti_dvo_best_encoder,
 };
 
 static enum drm_connector_status
diff --git a/drivers/gpu/drm/sti/sti_hda.c b/drivers/gpu/drm/sti/sti_hda.c
index f7d3464..c4649f5 100644
--- a/drivers/gpu/drm/sti/sti_hda.c
+++ b/drivers/gpu/drm/sti/sti_hda.c
@@ -676,20 +676,10 @@ static int sti_hda_connector_mode_valid(struct drm_connector *connector,
 	return MODE_OK;
 }
 
-struct drm_encoder *sti_hda_best_encoder(struct drm_connector *connector)
-{
-	struct sti_hda_connector *hda_connector
-		= to_sti_hda_connector(connector);
-
-	/* Best encoder is the one associated during connector creation */
-	return hda_connector->encoder;
-}
-
 static const
 struct drm_connector_helper_funcs sti_hda_connector_helper_funcs = {
 	.get_modes = sti_hda_connector_get_modes,
 	.mode_valid = sti_hda_connector_mode_valid,
-	.best_encoder = sti_hda_best_encoder,
 };
 
 static enum drm_connector_status
diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c
index 6ef0715..dc9ab6e 100644
--- a/drivers/gpu/drm/sti/sti_hdmi.c
+++ b/drivers/gpu/drm/sti/sti_hdmi.c
@@ -897,20 +897,10 @@ static int sti_hdmi_connector_mode_valid(struct drm_connector *connector,
 	return MODE_OK;
 }
 
-struct drm_encoder *sti_hdmi_best_encoder(struct drm_connector *connector)
-{
-	struct sti_hdmi_connector *hdmi_connector
-		= to_sti_hdmi_connector(connector);
-
-	/* Best encoder is the one associated during connector creation */
-	return hdmi_connector->encoder;
-}
-
 static const
 struct drm_connector_helper_funcs sti_hdmi_connector_helper_funcs = {
 	.get_modes = sti_hdmi_connector_get_modes,
 	.mode_valid = sti_hdmi_connector_mode_valid,
-	.best_encoder = sti_hdmi_best_encoder,
 };
 
 /* get detection status of display device */
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 12/20] drm: sun4i: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (10 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 11/20] drm: sti: " Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 13/20] drm: tegra: " Boris Brezillon
                   ` (7 subsequent siblings)
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

All outputs have a 1:1 relationship between connectors and encoders
and the driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementations and let the core call
drm_atomic_helper_best_encoder() for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/sun4i/sun4i_rgb.c | 10 ----------
 drivers/gpu/drm/sun4i/sun4i_tv.c  |  9 ---------
 2 files changed, 19 deletions(-)

diff --git a/drivers/gpu/drm/sun4i/sun4i_rgb.c b/drivers/gpu/drm/sun4i/sun4i_rgb.c
index ab64948..442cfe2 100644
--- a/drivers/gpu/drm/sun4i/sun4i_rgb.c
+++ b/drivers/gpu/drm/sun4i/sun4i_rgb.c
@@ -90,19 +90,9 @@ static int sun4i_rgb_mode_valid(struct drm_connector *connector,
 	return MODE_OK;
 }
 
-static struct drm_encoder *
-sun4i_rgb_best_encoder(struct drm_connector *connector)
-{
-	struct sun4i_rgb *rgb =
-		drm_connector_to_sun4i_rgb(connector);
-
-	return &rgb->encoder;
-}
-
 static struct drm_connector_helper_funcs sun4i_rgb_con_helper_funcs = {
 	.get_modes	= sun4i_rgb_get_modes,
 	.mode_valid	= sun4i_rgb_mode_valid,
-	.best_encoder	= sun4i_rgb_best_encoder,
 };
 
 static enum drm_connector_status
diff --git a/drivers/gpu/drm/sun4i/sun4i_tv.c b/drivers/gpu/drm/sun4i/sun4i_tv.c
index bc047f9..b841478 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tv.c
@@ -526,18 +526,9 @@ static int sun4i_tv_comp_mode_valid(struct drm_connector *connector,
 	return MODE_OK;
 }
 
-static struct drm_encoder *
-sun4i_tv_comp_best_encoder(struct drm_connector *connector)
-{
-	struct sun4i_tv *tv = drm_connector_to_sun4i_tv(connector);
-
-	return &tv->encoder;
-}
-
 static struct drm_connector_helper_funcs sun4i_tv_comp_connector_helper_funcs = {
 	.get_modes	= sun4i_tv_comp_get_modes,
 	.mode_valid	= sun4i_tv_comp_mode_valid,
-	.best_encoder	= sun4i_tv_comp_best_encoder,
 };
 
 static enum drm_connector_status
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 13/20] drm: tegra: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (11 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 12/20] drm: sun4i: " Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 14/20] drm: vc4: " Boris Brezillon
                   ` (6 subsequent siblings)
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

All outputs have a 1:1 relationship between connectors and encoders
and the driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementation and let the core call
drm_atomic_helper_best_encoder() for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/tegra/drm.h    | 2 --
 drivers/gpu/drm/tegra/dsi.c    | 1 -
 drivers/gpu/drm/tegra/hdmi.c   | 1 -
 drivers/gpu/drm/tegra/output.c | 8 --------
 drivers/gpu/drm/tegra/rgb.c    | 1 -
 drivers/gpu/drm/tegra/sor.c    | 1 -
 6 files changed, 14 deletions(-)

diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h
index f52d6cb2..0ddcce1 100644
--- a/drivers/gpu/drm/tegra/drm.h
+++ b/drivers/gpu/drm/tegra/drm.h
@@ -239,8 +239,6 @@ int tegra_output_init(struct drm_device *drm, struct tegra_output *output);
 void tegra_output_exit(struct tegra_output *output);
 
 int tegra_output_connector_get_modes(struct drm_connector *connector);
-struct drm_encoder *
-tegra_output_connector_best_encoder(struct drm_connector *connector);
 enum drm_connector_status
 tegra_output_connector_detect(struct drm_connector *connector, bool force);
 void tegra_output_connector_destroy(struct drm_connector *connector);
diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c
index d1239eb..099cccb 100644
--- a/drivers/gpu/drm/tegra/dsi.c
+++ b/drivers/gpu/drm/tegra/dsi.c
@@ -794,7 +794,6 @@ tegra_dsi_connector_mode_valid(struct drm_connector *connector,
 static const struct drm_connector_helper_funcs tegra_dsi_connector_helper_funcs = {
 	.get_modes = tegra_output_connector_get_modes,
 	.mode_valid = tegra_dsi_connector_mode_valid,
-	.best_encoder = tegra_output_connector_best_encoder,
 };
 
 static const struct drm_encoder_funcs tegra_dsi_encoder_funcs = {
diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c
index b7ef492..2fdb879 100644
--- a/drivers/gpu/drm/tegra/hdmi.c
+++ b/drivers/gpu/drm/tegra/hdmi.c
@@ -806,7 +806,6 @@ static const struct drm_connector_helper_funcs
 tegra_hdmi_connector_helper_funcs = {
 	.get_modes = tegra_output_connector_get_modes,
 	.mode_valid = tegra_hdmi_connector_mode_valid,
-	.best_encoder = tegra_output_connector_best_encoder,
 };
 
 static const struct drm_encoder_funcs tegra_hdmi_encoder_funcs = {
diff --git a/drivers/gpu/drm/tegra/output.c b/drivers/gpu/drm/tegra/output.c
index 46664b6..1480f6a 100644
--- a/drivers/gpu/drm/tegra/output.c
+++ b/drivers/gpu/drm/tegra/output.c
@@ -42,14 +42,6 @@ int tegra_output_connector_get_modes(struct drm_connector *connector)
 	return err;
 }
 
-struct drm_encoder *
-tegra_output_connector_best_encoder(struct drm_connector *connector)
-{
-	struct tegra_output *output = connector_to_output(connector);
-
-	return &output->encoder;
-}
-
 enum drm_connector_status
 tegra_output_connector_detect(struct drm_connector *connector, bool force)
 {
diff --git a/drivers/gpu/drm/tegra/rgb.c b/drivers/gpu/drm/tegra/rgb.c
index e246334..a131b44 100644
--- a/drivers/gpu/drm/tegra/rgb.c
+++ b/drivers/gpu/drm/tegra/rgb.c
@@ -112,7 +112,6 @@ tegra_rgb_connector_mode_valid(struct drm_connector *connector,
 static const struct drm_connector_helper_funcs tegra_rgb_connector_helper_funcs = {
 	.get_modes = tegra_output_connector_get_modes,
 	.mode_valid = tegra_rgb_connector_mode_valid,
-	.best_encoder = tegra_output_connector_best_encoder,
 };
 
 static const struct drm_encoder_funcs tegra_rgb_encoder_funcs = {
diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c
index 757c6e8..34958d7 100644
--- a/drivers/gpu/drm/tegra/sor.c
+++ b/drivers/gpu/drm/tegra/sor.c
@@ -1087,7 +1087,6 @@ tegra_sor_connector_mode_valid(struct drm_connector *connector,
 static const struct drm_connector_helper_funcs tegra_sor_connector_helper_funcs = {
 	.get_modes = tegra_sor_connector_get_modes,
 	.mode_valid = tegra_sor_connector_mode_valid,
-	.best_encoder = tegra_output_connector_best_encoder,
 };
 
 static const struct drm_encoder_funcs tegra_sor_encoder_funcs = {
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 14/20] drm: vc4: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (12 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 13/20] drm: tegra: " Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 15/20] drm: virtgpu: " Boris Brezillon
                   ` (5 subsequent siblings)
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

All outputs have a 1:1 relationship between connectors and encoders and
the driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementations and let the core call
drm_atomic_helper_best_encoder() for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/vc4/vc4_dpi.c  | 9 ---------
 drivers/gpu/drm/vc4/vc4_hdmi.c | 9 ---------
 2 files changed, 18 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c
index 9817dbf..dba1114 100644
--- a/drivers/gpu/drm/vc4/vc4_dpi.c
+++ b/drivers/gpu/drm/vc4/vc4_dpi.c
@@ -208,14 +208,6 @@ static int vc4_dpi_connector_get_modes(struct drm_connector *connector)
 	return 0;
 }
 
-static struct drm_encoder *
-vc4_dpi_connector_best_encoder(struct drm_connector *connector)
-{
-	struct vc4_dpi_connector *dpi_connector =
-		to_vc4_dpi_connector(connector);
-	return dpi_connector->encoder;
-}
-
 static const struct drm_connector_funcs vc4_dpi_connector_funcs = {
 	.dpms = drm_atomic_helper_connector_dpms,
 	.detect = vc4_dpi_connector_detect,
@@ -228,7 +220,6 @@ static const struct drm_connector_funcs vc4_dpi_connector_funcs = {
 
 static const struct drm_connector_helper_funcs vc4_dpi_connector_helper_funcs = {
 	.get_modes = vc4_dpi_connector_get_modes,
-	.best_encoder = vc4_dpi_connector_best_encoder,
 };
 
 static struct drm_connector *vc4_dpi_connector_init(struct drm_device *dev,
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index fd2644d..68df91c 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -208,14 +208,6 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector)
 	return ret;
 }
 
-static struct drm_encoder *
-vc4_hdmi_connector_best_encoder(struct drm_connector *connector)
-{
-	struct vc4_hdmi_connector *hdmi_connector =
-		to_vc4_hdmi_connector(connector);
-	return hdmi_connector->encoder;
-}
-
 static const struct drm_connector_funcs vc4_hdmi_connector_funcs = {
 	.dpms = drm_atomic_helper_connector_dpms,
 	.detect = vc4_hdmi_connector_detect,
@@ -228,7 +220,6 @@ static const struct drm_connector_funcs vc4_hdmi_connector_funcs = {
 
 static const struct drm_connector_helper_funcs vc4_hdmi_connector_helper_funcs = {
 	.get_modes = vc4_hdmi_connector_get_modes,
-	.best_encoder = vc4_hdmi_connector_best_encoder,
 };
 
 static struct drm_connector *vc4_hdmi_connector_init(struct drm_device *dev,
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 15/20] drm: virtgpu: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (13 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 14/20] drm: vc4: " Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 16/20] drm: omap: " Boris Brezillon
                   ` (4 subsequent siblings)
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

The virtgpu output exposes a 1:1 relationship between connectors and
encoders and the driver is relying on the atomic helpers: we can drop
the custom ->best_encoder() implementation and let the core call
drm_atomic_helper_best_encoder() for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/virtio/virtgpu_display.c | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index d4305da..4d41dcb 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -341,15 +341,6 @@ static int virtio_gpu_conn_mode_valid(struct drm_connector *connector,
 	return MODE_BAD;
 }
 
-static struct drm_encoder*
-virtio_gpu_best_encoder(struct drm_connector *connector)
-{
-	struct virtio_gpu_output *virtio_gpu_output =
-		drm_connector_to_virtio_gpu_output(connector);
-
-	return &virtio_gpu_output->enc;
-}
-
 static const struct drm_encoder_helper_funcs virtio_gpu_enc_helper_funcs = {
 	.mode_set   = virtio_gpu_enc_mode_set,
 	.enable     = virtio_gpu_enc_enable,
@@ -359,7 +350,6 @@ static const struct drm_encoder_helper_funcs virtio_gpu_enc_helper_funcs = {
 static const struct drm_connector_helper_funcs virtio_gpu_conn_helper_funcs = {
 	.get_modes    = virtio_gpu_conn_get_modes,
 	.mode_valid   = virtio_gpu_conn_mode_valid,
-	.best_encoder = virtio_gpu_best_encoder,
 };
 
 static enum drm_connector_status virtio_gpu_conn_detect(
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 16/20] drm: omap: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (14 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 15/20] drm: virtgpu: " Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 21:00   ` Laurent Pinchart
  2016-06-02 14:31 ` [PATCH 17/20] drm/bridge: anx78xx: " Boris Brezillon
                   ` (3 subsequent siblings)
  19 siblings, 1 reply; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

We have a 1:1 relationship between connectors and encoders and the
driver is relying on the atomic helpers: we can drop the custom
->best_encoder() implementation and let the core call
drm_atomic_helper_best_encoder() for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/omapdrm/omap_connector.c | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c b/drivers/gpu/drm/omapdrm/omap_connector.c
index ce2d67b..80af5e1 100644
--- a/drivers/gpu/drm/omapdrm/omap_connector.c
+++ b/drivers/gpu/drm/omapdrm/omap_connector.c
@@ -256,13 +256,6 @@ static int omap_connector_mode_valid(struct drm_connector *connector,
 	return ret;
 }
 
-struct drm_encoder *omap_connector_attached_encoder(
-		struct drm_connector *connector)
-{
-	struct omap_connector *omap_connector = to_omap_connector(connector);
-	return omap_connector->encoder;
-}
-
 static const struct drm_connector_funcs omap_connector_funcs = {
 	.dpms = drm_atomic_helper_connector_dpms,
 	.reset = drm_atomic_helper_connector_reset,
@@ -276,7 +269,6 @@ static const struct drm_connector_funcs omap_connector_funcs = {
 static const struct drm_connector_helper_funcs omap_connector_helper_funcs = {
 	.get_modes = omap_connector_get_modes,
 	.mode_valid = omap_connector_mode_valid,
-	.best_encoder = omap_connector_attached_encoder,
 };
 
 /* initialize connector */
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 17/20] drm/bridge: anx78xx: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (15 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 16/20] drm: omap: " Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 18/20] drm/bridge: ptn3460: " Boris Brezillon
                   ` (2 subsequent siblings)
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

We have a 1:1 relationship between connectors and encoders, and the driver
is relying on the atomic helpers: we can drop the custom ->best_encoder(),
and let the core call drm_atomic_helper_best_encoder() for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/bridge/analogix-anx78xx.c | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/drivers/gpu/drm/bridge/analogix-anx78xx.c b/drivers/gpu/drm/bridge/analogix-anx78xx.c
index d087b05..f9f03bc 100644
--- a/drivers/gpu/drm/bridge/analogix-anx78xx.c
+++ b/drivers/gpu/drm/bridge/analogix-anx78xx.c
@@ -986,16 +986,8 @@ unlock:
 	return num_modes;
 }
 
-static struct drm_encoder *anx78xx_best_encoder(struct drm_connector *connector)
-{
-	struct anx78xx *anx78xx = connector_to_anx78xx(connector);
-
-	return anx78xx->bridge.encoder;
-}
-
 static const struct drm_connector_helper_funcs anx78xx_connector_helper_funcs = {
 	.get_modes = anx78xx_get_modes,
-	.best_encoder = anx78xx_best_encoder,
 };
 
 static enum drm_connector_status anx78xx_detect(struct drm_connector *connector,
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 18/20] drm/bridge: ptn3460: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (16 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 17/20] drm/bridge: anx78xx: " Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 19/20] drm/bridge: ps8622: " Boris Brezillon
  2016-06-02 14:31 ` [PATCH 20/20] drm/bridge: dw-hdmi: Use drm_atomic_helper_best_encoder() Boris Brezillon
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

We have a 1:1 relationship between connectors and encoders, and the driver
is relying on the atomic helpers: we can drop the custom ->best_encoder(),
and let the core call drm_atomic_helper_best_encoder() for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/bridge/nxp-ptn3460.c | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/drivers/gpu/drm/bridge/nxp-ptn3460.c b/drivers/gpu/drm/bridge/nxp-ptn3460.c
index 7ecd59f..93f3dac 100644
--- a/drivers/gpu/drm/bridge/nxp-ptn3460.c
+++ b/drivers/gpu/drm/bridge/nxp-ptn3460.c
@@ -235,16 +235,8 @@ out:
 	return num_modes;
 }
 
-static struct drm_encoder *ptn3460_best_encoder(struct drm_connector *connector)
-{
-	struct ptn3460_bridge *ptn_bridge = connector_to_ptn3460(connector);
-
-	return ptn_bridge->bridge.encoder;
-}
-
 static const struct drm_connector_helper_funcs ptn3460_connector_helper_funcs = {
 	.get_modes = ptn3460_get_modes,
-	.best_encoder = ptn3460_best_encoder,
 };
 
 static enum drm_connector_status ptn3460_detect(struct drm_connector *connector,
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 19/20] drm/bridge: ps8622: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (17 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 18/20] drm/bridge: ptn3460: " Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  2016-06-02 14:31 ` [PATCH 20/20] drm/bridge: dw-hdmi: Use drm_atomic_helper_best_encoder() Boris Brezillon
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

We have a 1:1 relationship between connectors and encoders, and the driver
is relying on the atomic helpers: we can drop the custom ->best_encoder(),
and let the core call drm_atomic_helper_best_encoder() for us.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/bridge/parade-ps8622.c | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/drivers/gpu/drm/bridge/parade-ps8622.c b/drivers/gpu/drm/bridge/parade-ps8622.c
index be881e9..5cd8dd7 100644
--- a/drivers/gpu/drm/bridge/parade-ps8622.c
+++ b/drivers/gpu/drm/bridge/parade-ps8622.c
@@ -474,18 +474,8 @@ static int ps8622_get_modes(struct drm_connector *connector)
 	return drm_panel_get_modes(ps8622->panel);
 }
 
-static struct drm_encoder *ps8622_best_encoder(struct drm_connector *connector)
-{
-	struct ps8622_bridge *ps8622;
-
-	ps8622 = connector_to_ps8622(connector);
-
-	return ps8622->bridge.encoder;
-}
-
 static const struct drm_connector_helper_funcs ps8622_connector_helper_funcs = {
 	.get_modes = ps8622_get_modes,
-	.best_encoder = ps8622_best_encoder,
 };
 
 static enum drm_connector_status ps8622_detect(struct drm_connector *connector,
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH 20/20] drm/bridge: dw-hdmi: Use drm_atomic_helper_best_encoder()
  2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
                   ` (18 preceding siblings ...)
  2016-06-02 14:31 ` [PATCH 19/20] drm/bridge: ps8622: " Boris Brezillon
@ 2016-06-02 14:31 ` Boris Brezillon
  19 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-02 14:31 UTC (permalink / raw)
  To: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization, Boris Brezillon

We have a 1:1 relationship between connectors and encoders, which means
we can rely on the drm_atomic_helper_best_encoder() behavior.

We still have to explicitly assign ->best_encoder() to
drm_atomic_helper_best_encoder(), because the automated fallback to
drm_atomic_helper_best_encoder() when ->best_encoder() is NULL is only
available when the DRM device is using the atomic helpers, and this bridge
is compatible with non-atomic and atomic devices.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/bridge/dw-hdmi.c | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/bridge/dw-hdmi.c b/drivers/gpu/drm/bridge/dw-hdmi.c
index c9d9412..70b1f7d 100644
--- a/drivers/gpu/drm/bridge/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/dw-hdmi.c
@@ -1476,15 +1476,6 @@ dw_hdmi_connector_mode_valid(struct drm_connector *connector,
 	return mode_status;
 }
 
-static struct drm_encoder *dw_hdmi_connector_best_encoder(struct drm_connector
-							   *connector)
-{
-	struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,
-					     connector);
-
-	return hdmi->encoder;
-}
-
 static void dw_hdmi_connector_destroy(struct drm_connector *connector)
 {
 	drm_connector_unregister(connector);
@@ -1525,7 +1516,7 @@ static const struct drm_connector_funcs dw_hdmi_atomic_connector_funcs = {
 static const struct drm_connector_helper_funcs dw_hdmi_connector_helper_funcs = {
 	.get_modes = dw_hdmi_connector_get_modes,
 	.mode_valid = dw_hdmi_connector_mode_valid,
-	.best_encoder = dw_hdmi_connector_best_encoder,
+	.best_encoder = drm_atomic_helper_best_encoder,
 };
 
 static const struct drm_bridge_funcs dw_hdmi_bridge_funcs = {
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 31+ messages in thread

* Re: [PATCH 09/20] drm: rcar-du: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 ` [PATCH 09/20] drm: rcar-du: Rely on the default ->best_encoder() behavior Boris Brezillon
@ 2016-06-02 20:57   ` Laurent Pinchart
  2016-06-03  7:38     ` Boris Brezillon
  0 siblings, 1 reply; 31+ messages in thread
From: Laurent Pinchart @ 2016-06-02 20:57 UTC (permalink / raw)
  To: Boris Brezillon
  Cc: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter,
	linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark, Mark Yao,
	Heiko Stuebner, Benjamin Gaignard, Vincent Abriou, Maxime Ripard,
	Chen-Yu Tsai, Thierry Re ding, Stephen Warren, Alexandre Courbot,
	Eric Anholt, Gerd Hoffmann, linux-mediatek, linux-arm-msm,
	freedreno, linux-renesas-soc, linux-rockchip, linux-tegra,
	virtualization

Hi Boris,

Thank you for the patch.

On Thursday 02 Jun 2016 16:31:36 Boris Brezillon wrote:
> All outputs have a 1:1 relationship between connectors and encoders,
> and the driver is relying on the atomic helpers: we can drop the custom
> ->best_encoder() implementations and let the core call
> drm_atomic_helper_best_encoder() for us.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
>  drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 12 ------------
>  drivers/gpu/drm/rcar-du/rcar_du_encoder.h |  3 ---
>  drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c |  1 -
>  drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c |  1 -
>  drivers/gpu/drm/rcar-du/rcar_du_vgacon.c  |  1 -
>  5 files changed, 18 deletions(-)
> 
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c index 4e939e4..55149e9 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> @@ -27,18 +27,6 @@
>  #include "rcar_du_vgacon.h"
> 
>  /*
> ---------------------------------------------------------------------------
> -- - * Common connector functions
> - */
> -
> -struct drm_encoder *
> -rcar_du_connector_best_encoder(struct drm_connector *connector)
> -{
> -	struct rcar_du_connector *rcon = to_rcar_connector(connector);
> -
> -	return rcar_encoder_to_drm_encoder(rcon->encoder);
> -}
> -
> -/*
> ---------------------------------------------------------------------------
> -- * Encoder
>   */
> 
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_encoder.h
> b/drivers/gpu/drm/rcar-du/rcar_du_encoder.h index 719b6f2a..a8669c3 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_encoder.h
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_encoder.h
> @@ -49,9 +49,6 @@ struct rcar_du_connector {
>  #define to_rcar_connector(c) \
>  	container_of(c, struct rcar_du_connector, connector)
> 
> -struct drm_encoder *
> -rcar_du_connector_best_encoder(struct drm_connector *connector);
> -
>  int rcar_du_encoder_init(struct rcar_du_device *rcdu,
>  			 enum rcar_du_encoder_type type,
>  			 enum rcar_du_output output,
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
> b/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c index 6c92714..612b4d5 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
> @@ -52,7 +52,6 @@ static int rcar_du_hdmi_connector_mode_valid(struct
> drm_connector *connector, static const struct drm_connector_helper_funcs
> connector_helper_funcs = { .get_modes = rcar_du_hdmi_connector_get_modes,
>  	.mode_valid = rcar_du_hdmi_connector_mode_valid,
> -	.best_encoder = rcar_du_connector_best_encoder,
>  };
> 
>  static enum drm_connector_status
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c
> b/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c index e905f5d..6afd0af 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c
> @@ -59,7 +59,6 @@ static int rcar_du_lvds_connector_get_modes(struct
> drm_connector *connector)
> 
>  static const struct drm_connector_helper_funcs connector_helper_funcs = {
>  	.get_modes = rcar_du_lvds_connector_get_modes,
> -	.best_encoder = rcar_du_connector_best_encoder,
>  };
> 
>  static enum drm_connector_status
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c
> b/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c index 9d7e5c9..68f7ffa 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c
> @@ -28,7 +28,6 @@ static int rcar_du_vga_connector_get_modes(struct
> drm_connector *connector)
> 
>  static const struct drm_connector_helper_funcs connector_helper_funcs = {
>  	.get_modes = rcar_du_vga_connector_get_modes,
> -	.best_encoder = rcar_du_connector_best_encoder,
>  };
> 
>  static enum drm_connector_status

You can also remove

        rcon->encoder = renc;

from rcar_du_vga_connector_init(), it's not needed anymore. The same code in 
rcar_du_hdmi_connector_init() has to stay for now though, as it's used to 
locate the slave encoder in the HDMI support code. That should change when the 
driver will be converted to use drm_bridge.

I can also fix this during the conversion to drm_bridge if you don't want to 
resubmit. In any case,

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

-- 
Regards,

Laurent Pinchart

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 16/20] drm: omap: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 ` [PATCH 16/20] drm: omap: " Boris Brezillon
@ 2016-06-02 21:00   ` Laurent Pinchart
  0 siblings, 0 replies; 31+ messages in thread
From: Laurent Pinchart @ 2016-06-02 21:00 UTC (permalink / raw)
  To: Boris Brezillon
  Cc: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter,
	linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark, Mark Yao,
	Heiko Stuebner, Benjamin Gaignard, Vincent Abriou, Maxime Ripard,
	Chen-Yu Tsai, Thierry Re ding, Stephen Warren, Alexandre Courbot,
	Eric Anholt, Gerd Hoffmann, linux-mediatek, linux-arm-msm,
	freedreno, linux-renesas-soc, linux-rockchip, linux-tegra,
	virtualization

Hi Boris,

Thank you for the patch.

On Thursday 02 Jun 2016 16:31:43 Boris Brezillon wrote:
> We have a 1:1 relationship between connectors and encoders and the
> driver is relying on the atomic helpers: we can drop the custom
> ->best_encoder() implementation and let the core call
> drm_atomic_helper_best_encoder() for us.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
>  drivers/gpu/drm/omapdrm/omap_connector.c | 8 --------
>  1 file changed, 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/omap_connector.c
> b/drivers/gpu/drm/omapdrm/omap_connector.c index ce2d67b..80af5e1 100644
> --- a/drivers/gpu/drm/omapdrm/omap_connector.c
> +++ b/drivers/gpu/drm/omapdrm/omap_connector.c
> @@ -256,13 +256,6 @@ static int omap_connector_mode_valid(struct
> drm_connector *connector, return ret;
>  }
> 
> -struct drm_encoder *omap_connector_attached_encoder(
> -		struct drm_connector *connector)
> -{
> -	struct omap_connector *omap_connector = to_omap_connector(connector);
> -	return omap_connector->encoder;

The omap_connector::encoder field is assigned but not used anymore, you can 
remove it.

With that fixed,

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> -}
> -
>  static const struct drm_connector_funcs omap_connector_funcs = {
>  	.dpms = drm_atomic_helper_connector_dpms,
>  	.reset = drm_atomic_helper_connector_reset,
> @@ -276,7 +269,6 @@ static const struct drm_connector_funcs
> omap_connector_funcs = { static const struct drm_connector_helper_funcs
> omap_connector_helper_funcs = { .get_modes = omap_connector_get_modes,
>  	.mode_valid = omap_connector_mode_valid,
> -	.best_encoder = omap_connector_attached_encoder,
>  };
> 
>  /* initialize connector */

-- 
Regards,

Laurent Pinchart

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 01/20] drm/atomic: Fix remaining places where !funcs->best_encoder is valid
  2016-06-02 14:31 ` [PATCH 01/20] drm/atomic: Fix remaining places where !funcs->best_encoder is valid Boris Brezillon
@ 2016-06-02 21:05   ` Laurent Pinchart
  2016-06-02 21:57     ` Daniel Vetter
  2016-06-03  7:36     ` Boris Brezillon
  0 siblings, 2 replies; 31+ messages in thread
From: Laurent Pinchart @ 2016-06-02 21:05 UTC (permalink / raw)
  To: Boris Brezillon
  Cc: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter,
	linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark, Mark Yao,
	Heiko Stuebner, Benjamin Gaignard, Vincent Abriou, Maxime Ripard,
	Chen-Yu Tsai, Thierry Re ding, Stephen Warren, Alexandre Courbot,
	Eric Anholt, Gerd Hoffmann, linux-mediatek, linux-arm-msm,
	freedreno, linux-renesas-soc, linux-rockchip, linux-tegra,
	virtualization

Hi Boris,

Thank you for the patch.

On Thursday 02 Jun 2016 16:31:28 Boris Brezillon wrote:
> Adapt drm_pick_crtcs() and update_connector_routing() to fallback to
> drm_atomic_helper_best_encoder() if funcs->best_encoder() is NULL so
> that DRM drivers can leave this hook unassigned if they know they want
> to use drm_atomic_helper_best_encoder().

Could you please update include/drm/drm_modeset_helper_vtables.h to document 
this new behaviour ?

The only drawback I see in this patch is the additional object lookup 
performed by drm_atomic_helper_best_encoder() at runtime. I wonder if we could 
somehow cache the information, as the assignment can't change when there's a 
1:1 correspondence between encoders and connectors.

> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
>  drivers/gpu/drm/drm_atomic_helper.c |  4 +++-
>  drivers/gpu/drm/drm_fb_helper.c     | 13 ++++++++++++-
>  2 files changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> b/drivers/gpu/drm/drm_atomic_helper.c index f6a3350..849d029 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -300,8 +300,10 @@ update_connector_routing(struct drm_atomic_state
> *state, if (funcs->atomic_best_encoder)
>  		new_encoder = funcs->atomic_best_encoder(connector,
>  							 connector_state);
> -	else
> +	else if (funcs->best_encoder)
>  		new_encoder = funcs->best_encoder(connector);
> +	else
> +		new_encoder = drm_atomic_helper_best_encoder(connector);
> 
>  	if (!new_encoder) {
>  		DRM_DEBUG_ATOMIC("No suitable encoder found for [CONNECTOR:%d:%s]\n",
> diff --git a/drivers/gpu/drm/drm_fb_helper.c
> b/drivers/gpu/drm/drm_fb_helper.c index 7c2eb75..d44389a 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -2000,7 +2000,18 @@ static int drm_pick_crtcs(struct drm_fb_helper
> *fb_helper, my_score++;
> 
>  	connector_funcs = connector->helper_private;
> -	encoder = connector_funcs->best_encoder(connector);
> +
> +	/*
> +	 * If the DRM device implements atomic hooks and ->best_encoder() is
> +	 * NULL we fallback to the default drm_atomic_helper_best_encoder()
> +	 * helper.
> +	 */
> +	if (fb_helper->dev->mode_config.funcs->atomic_commit &&
> +	    !connector_funcs->best_encoder)
> +		encoder = drm_atomic_helper_best_encoder(connector);
> +	else
> +		encoder = connector_funcs->best_encoder(connector);
> +
>  	if (!encoder)
>  		goto out;

-- 
Regards,

Laurent Pinchart

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 01/20] drm/atomic: Fix remaining places where !funcs->best_encoder is valid
  2016-06-02 21:05   ` Laurent Pinchart
@ 2016-06-02 21:57     ` Daniel Vetter
  2016-06-02 22:40       ` [Intel-gfx] " Chris Wilson
  2016-06-03  7:37       ` Boris Brezillon
  2016-06-03  7:36     ` Boris Brezillon
  1 sibling, 2 replies; 31+ messages in thread
From: Daniel Vetter @ 2016-06-02 21:57 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Boris Brezillon, David Airlie, dri-devel, Daniel Vetter,
	Linux Kernel Mailing List, linux-arm-kernel, Kukjin Kim,
	Krzysztof Kozlowski, linux-samsung-soc, intel-gfx, Jani Nikula,
	Alexey Brodkin, Inki Dae, Joonyoung Shim, Seung-Woo Kim,
	Kyungmin Park, Stefan Agner, Alison Wang, Matthias Brugger,
	Rob Clark, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Re ding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno,
	open list:DRM DRIVERS FOR RENESAS, open list:ARM/Rockchip SoC...,
	linux-tegra, open list:VIRTIO CORE, NET...

On Thu, Jun 2, 2016 at 11:05 PM, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
> Hi Boris,
>
> Thank you for the patch.
>
> On Thursday 02 Jun 2016 16:31:28 Boris Brezillon wrote:
>> Adapt drm_pick_crtcs() and update_connector_routing() to fallback to
>> drm_atomic_helper_best_encoder() if funcs->best_encoder() is NULL so
>> that DRM drivers can leave this hook unassigned if they know they want
>> to use drm_atomic_helper_best_encoder().
>
> Could you please update include/drm/drm_modeset_helper_vtables.h to document
> this new behaviour ?

Thanks for reminding me. Please update hooks for both
atomic_best_encoder and best_encoder. Also mention that it's only
optional for atomic drivers. There's lots of examples in that file for
the wording usually used.

> The only drawback I see in this patch is the additional object lookup
> performed by drm_atomic_helper_best_encoder() at runtime. I wonder if we could
> somehow cache the information, as the assignment can't change when there's a
> 1:1 correspondence between encoders and connectors.

drm_encoder_find is an idr lookup. That should be plenty fast,
especially for modeset code. Usually what's too expensive even for
modeset code is linear list walks. But Chris just submitted patches to
convert most of them into simple lookups.
-Daniel

>>> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
>> ---
>>  drivers/gpu/drm/drm_atomic_helper.c |  4 +++-
>>  drivers/gpu/drm/drm_fb_helper.c     | 13 ++++++++++++-
>>  2 files changed, 15 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_atomic_helper.c
>> b/drivers/gpu/drm/drm_atomic_helper.c index f6a3350..849d029 100644
>> --- a/drivers/gpu/drm/drm_atomic_helper.c
>> +++ b/drivers/gpu/drm/drm_atomic_helper.c
>> @@ -300,8 +300,10 @@ update_connector_routing(struct drm_atomic_state
>> *state, if (funcs->atomic_best_encoder)
>>               new_encoder = funcs->atomic_best_encoder(connector,
>>                                                        connector_state);
>> -     else
>> +     else if (funcs->best_encoder)
>>               new_encoder = funcs->best_encoder(connector);
>> +     else
>> +             new_encoder = drm_atomic_helper_best_encoder(connector);
>>
>>       if (!new_encoder) {
>>               DRM_DEBUG_ATOMIC("No suitable encoder found for [CONNECTOR:%d:%s]\n",
>> diff --git a/drivers/gpu/drm/drm_fb_helper.c
>> b/drivers/gpu/drm/drm_fb_helper.c index 7c2eb75..d44389a 100644
>> --- a/drivers/gpu/drm/drm_fb_helper.c
>> +++ b/drivers/gpu/drm/drm_fb_helper.c
>> @@ -2000,7 +2000,18 @@ static int drm_pick_crtcs(struct drm_fb_helper
>> *fb_helper, my_score++;
>>
>>       connector_funcs = connector->helper_private;
>> -     encoder = connector_funcs->best_encoder(connector);
>> +
>> +     /*
>> +      * If the DRM device implements atomic hooks and ->best_encoder() is
>> +      * NULL we fallback to the default drm_atomic_helper_best_encoder()
>> +      * helper.
>> +      */
>> +     if (fb_helper->dev->mode_config.funcs->atomic_commit &&
>> +         !connector_funcs->best_encoder)
>> +             encoder = drm_atomic_helper_best_encoder(connector);
>> +     else
>> +             encoder = connector_funcs->best_encoder(connector);
>> +
>>       if (!encoder)
>>               goto out;
>
> --
> Regards,
>
> Laurent Pinchart
>



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [Intel-gfx] [PATCH 01/20] drm/atomic: Fix remaining places where !funcs->best_encoder is valid
  2016-06-02 21:57     ` Daniel Vetter
@ 2016-06-02 22:40       ` Chris Wilson
  2016-06-03  7:37       ` Boris Brezillon
  1 sibling, 0 replies; 31+ messages in thread
From: Chris Wilson @ 2016-06-02 22:40 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Laurent Pinchart, Krzysztof Kozlowski, Heiko Stuebner,
	David Airlie, dri-devel, open list:VIRTIO CORE, NET...,
	Thierry Re ding, Gerd Hoffmann, Benjamin Gaignard, Daniel Vetter,
	Boris Brezillon, linux-samsung-soc, Joonyoung Shim,
	Alexey Brodkin, open list:ARM/Rockchip SoC...,
	Chen-Yu Tsai, Kukjin Kim, linux-tegra, Stephen Warren,
	linux-arm-msm, intel-gfx, Inki Dae, linux-mediatek, Stefan Agner,
	Matthias Brugger, Vincent Abriou, linux-arm-kernel, Mark Yao,
	Alison Wang, Seung-Woo Kim, Linux Kernel Mailing List,
	open list:DRM DRIVERS FOR RENESAS, Kyungmin Park, Maxime Ripard,
	freedreno, Alexandre Courbot

On Thu, Jun 02, 2016 at 11:57:02PM +0200, Daniel Vetter wrote:
> drm_encoder_find is an idr lookup. That should be plenty fast,
> especially for modeset code. Usually what's too expensive even for
> modeset code is linear list walks. But Chris just submitted patches to
> convert most of them into simple lookups.

For the idr_find, I'm tempted to replace the mutex with a rwlock. It
helps pathological cases, but in reality there are more crucial
locks around the hw that limit concurrency. ;-)
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 01/20] drm/atomic: Fix remaining places where !funcs->best_encoder is valid
  2016-06-02 21:05   ` Laurent Pinchart
  2016-06-02 21:57     ` Daniel Vetter
@ 2016-06-03  7:36     ` Boris Brezillon
  1 sibling, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-03  7:36 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter,
	linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark, Mark Yao,
	Heiko Stuebner, Benjamin Gaignard, Vincent Abriou, Maxime Ripard,
	Chen-Yu Tsai, Thierry Re ding, Stephen Warren, Alexandre Courbot,
	Eric Anholt, Gerd Hoffmann, linux-mediatek, linux-arm-msm,
	freedreno, linux-renesas-soc, linux-rockchip, linux-tegra,
	virtualization

On Fri, 03 Jun 2016 00:05:46 +0300
Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote:

> Hi Boris,
> 
> Thank you for the patch.
> 
> On Thursday 02 Jun 2016 16:31:28 Boris Brezillon wrote:
> > Adapt drm_pick_crtcs() and update_connector_routing() to fallback to
> > drm_atomic_helper_best_encoder() if funcs->best_encoder() is NULL so
> > that DRM drivers can leave this hook unassigned if they know they want
> > to use drm_atomic_helper_best_encoder().  
> 
> Could you please update include/drm/drm_modeset_helper_vtables.h to document 
> this new behaviour ?

Sure.

> 
> The only drawback I see in this patch is the additional object lookup 
> performed by drm_atomic_helper_best_encoder() at runtime. I wonder if we could 
> somehow cache the information, as the assignment can't change when there's a 
> 1:1 correspondence between encoders and connectors.
> 
> > Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> > ---
> >  drivers/gpu/drm/drm_atomic_helper.c |  4 +++-
> >  drivers/gpu/drm/drm_fb_helper.c     | 13 ++++++++++++-
> >  2 files changed, 15 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> > b/drivers/gpu/drm/drm_atomic_helper.c index f6a3350..849d029 100644
> > --- a/drivers/gpu/drm/drm_atomic_helper.c
> > +++ b/drivers/gpu/drm/drm_atomic_helper.c
> > @@ -300,8 +300,10 @@ update_connector_routing(struct drm_atomic_state
> > *state, if (funcs->atomic_best_encoder)
> >  		new_encoder = funcs->atomic_best_encoder(connector,
> >  							 connector_state);
> > -	else
> > +	else if (funcs->best_encoder)
> >  		new_encoder = funcs->best_encoder(connector);
> > +	else
> > +		new_encoder = drm_atomic_helper_best_encoder(connector);
> > 
> >  	if (!new_encoder) {
> >  		DRM_DEBUG_ATOMIC("No suitable encoder found for [CONNECTOR:%d:%s]\n",
> > diff --git a/drivers/gpu/drm/drm_fb_helper.c
> > b/drivers/gpu/drm/drm_fb_helper.c index 7c2eb75..d44389a 100644
> > --- a/drivers/gpu/drm/drm_fb_helper.c
> > +++ b/drivers/gpu/drm/drm_fb_helper.c
> > @@ -2000,7 +2000,18 @@ static int drm_pick_crtcs(struct drm_fb_helper
> > *fb_helper, my_score++;
> > 
> >  	connector_funcs = connector->helper_private;
> > -	encoder = connector_funcs->best_encoder(connector);
> > +
> > +	/*
> > +	 * If the DRM device implements atomic hooks and ->best_encoder() is
> > +	 * NULL we fallback to the default drm_atomic_helper_best_encoder()
> > +	 * helper.
> > +	 */
> > +	if (fb_helper->dev->mode_config.funcs->atomic_commit &&
> > +	    !connector_funcs->best_encoder)
> > +		encoder = drm_atomic_helper_best_encoder(connector);
> > +	else
> > +		encoder = connector_funcs->best_encoder(connector);
> > +
> >  	if (!encoder)
> >  		goto out;  
> 



-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 01/20] drm/atomic: Fix remaining places where !funcs->best_encoder is valid
  2016-06-02 21:57     ` Daniel Vetter
  2016-06-02 22:40       ` [Intel-gfx] " Chris Wilson
@ 2016-06-03  7:37       ` Boris Brezillon
  2016-06-03 19:01         ` Daniel Vetter
  1 sibling, 1 reply; 31+ messages in thread
From: Boris Brezillon @ 2016-06-03  7:37 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Laurent Pinchart, David Airlie, dri-devel, Daniel Vetter,
	Linux Kernel Mailing List, linux-arm-kernel, Kukjin Kim,
	Krzysztof Kozlowski, linux-samsung-soc, intel-gfx, Jani Nikula,
	Alexey Brodkin, Inki Dae, Joonyoung Shim, Seung-Woo Kim,
	Kyungmin Park, Stefan Agner, Alison Wang, Matthias Brugger,
	Rob Clark, Mark Yao, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Re ding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno,
	open list:DRM DRIVERS FOR RENESAS, open list:ARM/Rockchip SoC...,
	linux-tegra, open list:VIRTIO CORE, NET...

On Thu, 2 Jun 2016 23:57:02 +0200
Daniel Vetter <daniel@ffwll.ch> wrote:

> On Thu, Jun 2, 2016 at 11:05 PM, Laurent Pinchart
> <laurent.pinchart@ideasonboard.com> wrote:
> > Hi Boris,
> >
> > Thank you for the patch.
> >
> > On Thursday 02 Jun 2016 16:31:28 Boris Brezillon wrote:  
> >> Adapt drm_pick_crtcs() and update_connector_routing() to fallback to
> >> drm_atomic_helper_best_encoder() if funcs->best_encoder() is NULL so
> >> that DRM drivers can leave this hook unassigned if they know they want
> >> to use drm_atomic_helper_best_encoder().  
> >
> > Could you please update include/drm/drm_modeset_helper_vtables.h to document
> > this new behaviour ?  
> 
> Thanks for reminding me. Please update hooks for both
> atomic_best_encoder and best_encoder. Also mention that it's only
> optional for atomic drivers. There's lots of examples in that file for
> the wording usually used.

Hm, I haven't changed anything for the ->atomic_best_encoder() hook, or
am I missing something?

> 
> > The only drawback I see in this patch is the additional object lookup
> > performed by drm_atomic_helper_best_encoder() at runtime. I wonder if we could
> > somehow cache the information, as the assignment can't change when there's a
> > 1:1 correspondence between encoders and connectors.  
> 
> drm_encoder_find is an idr lookup. That should be plenty fast,
> especially for modeset code. Usually what's too expensive even for
> modeset code is linear list walks. But Chris just submitted patches to
> convert most of them into simple lookups.
> -Daniel
> 
> >>> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>  
> >> ---
> >>  drivers/gpu/drm/drm_atomic_helper.c |  4 +++-
> >>  drivers/gpu/drm/drm_fb_helper.c     | 13 ++++++++++++-
> >>  2 files changed, 15 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> >> b/drivers/gpu/drm/drm_atomic_helper.c index f6a3350..849d029 100644
> >> --- a/drivers/gpu/drm/drm_atomic_helper.c
> >> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> >> @@ -300,8 +300,10 @@ update_connector_routing(struct drm_atomic_state
> >> *state, if (funcs->atomic_best_encoder)
> >>               new_encoder = funcs->atomic_best_encoder(connector,
> >>                                                        connector_state);
> >> -     else
> >> +     else if (funcs->best_encoder)
> >>               new_encoder = funcs->best_encoder(connector);
> >> +     else
> >> +             new_encoder = drm_atomic_helper_best_encoder(connector);
> >>
> >>       if (!new_encoder) {
> >>               DRM_DEBUG_ATOMIC("No suitable encoder found for [CONNECTOR:%d:%s]\n",
> >> diff --git a/drivers/gpu/drm/drm_fb_helper.c
> >> b/drivers/gpu/drm/drm_fb_helper.c index 7c2eb75..d44389a 100644
> >> --- a/drivers/gpu/drm/drm_fb_helper.c
> >> +++ b/drivers/gpu/drm/drm_fb_helper.c
> >> @@ -2000,7 +2000,18 @@ static int drm_pick_crtcs(struct drm_fb_helper
> >> *fb_helper, my_score++;
> >>
> >>       connector_funcs = connector->helper_private;
> >> -     encoder = connector_funcs->best_encoder(connector);
> >> +
> >> +     /*
> >> +      * If the DRM device implements atomic hooks and ->best_encoder() is
> >> +      * NULL we fallback to the default drm_atomic_helper_best_encoder()
> >> +      * helper.
> >> +      */
> >> +     if (fb_helper->dev->mode_config.funcs->atomic_commit &&
> >> +         !connector_funcs->best_encoder)
> >> +             encoder = drm_atomic_helper_best_encoder(connector);
> >> +     else
> >> +             encoder = connector_funcs->best_encoder(connector);
> >> +
> >>       if (!encoder)
> >>               goto out;  
> >
> > --
> > Regards,
> >
> > Laurent Pinchart
> >  
> 
> 
> 



-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 09/20] drm: rcar-du: Rely on the default ->best_encoder() behavior
  2016-06-02 20:57   ` Laurent Pinchart
@ 2016-06-03  7:38     ` Boris Brezillon
  0 siblings, 0 replies; 31+ messages in thread
From: Boris Brezillon @ 2016-06-03  7:38 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: David Airlie, Daniel Vetter, dri-devel, Daniel Vetter,
	linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark, Mark Yao,
	Heiko Stuebner, Benjamin Gaignard, Vincent Abriou, Maxime Ripard,
	Chen-Yu Tsai, Thierry Re ding, Stephen Warren, Alexandre Courbot,
	Eric Anholt, Gerd Hoffmann, linux-mediatek, linux-arm-msm,
	freedreno, linux-renesas-soc, linux-rockchip, linux-tegra,
	virtualization

On Thu, 02 Jun 2016 23:57:14 +0300
Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote:

> Hi Boris,
> 
> Thank you for the patch.
> 
> On Thursday 02 Jun 2016 16:31:36 Boris Brezillon wrote:
> > All outputs have a 1:1 relationship between connectors and encoders,
> > and the driver is relying on the atomic helpers: we can drop the custom  
> > ->best_encoder() implementations and let the core call  
> > drm_atomic_helper_best_encoder() for us.
> > 
> > Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> > ---
> >  drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 12 ------------
> >  drivers/gpu/drm/rcar-du/rcar_du_encoder.h |  3 ---
> >  drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c |  1 -
> >  drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c |  1 -
> >  drivers/gpu/drm/rcar-du/rcar_du_vgacon.c  |  1 -
> >  5 files changed, 18 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> > b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c index 4e939e4..55149e9 100644
> > --- a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> > +++ b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> > @@ -27,18 +27,6 @@
> >  #include "rcar_du_vgacon.h"
> > 
> >  /*
> > ---------------------------------------------------------------------------
> > -- - * Common connector functions
> > - */
> > -
> > -struct drm_encoder *
> > -rcar_du_connector_best_encoder(struct drm_connector *connector)
> > -{
> > -	struct rcar_du_connector *rcon = to_rcar_connector(connector);
> > -
> > -	return rcar_encoder_to_drm_encoder(rcon->encoder);
> > -}
> > -
> > -/*
> > ---------------------------------------------------------------------------
> > -- * Encoder
> >   */
> > 
> > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_encoder.h
> > b/drivers/gpu/drm/rcar-du/rcar_du_encoder.h index 719b6f2a..a8669c3 100644
> > --- a/drivers/gpu/drm/rcar-du/rcar_du_encoder.h
> > +++ b/drivers/gpu/drm/rcar-du/rcar_du_encoder.h
> > @@ -49,9 +49,6 @@ struct rcar_du_connector {
> >  #define to_rcar_connector(c) \
> >  	container_of(c, struct rcar_du_connector, connector)
> > 
> > -struct drm_encoder *
> > -rcar_du_connector_best_encoder(struct drm_connector *connector);
> > -
> >  int rcar_du_encoder_init(struct rcar_du_device *rcdu,
> >  			 enum rcar_du_encoder_type type,
> >  			 enum rcar_du_output output,
> > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
> > b/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c index 6c92714..612b4d5 100644
> > --- a/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
> > +++ b/drivers/gpu/drm/rcar-du/rcar_du_hdmicon.c
> > @@ -52,7 +52,6 @@ static int rcar_du_hdmi_connector_mode_valid(struct
> > drm_connector *connector, static const struct drm_connector_helper_funcs
> > connector_helper_funcs = { .get_modes = rcar_du_hdmi_connector_get_modes,
> >  	.mode_valid = rcar_du_hdmi_connector_mode_valid,
> > -	.best_encoder = rcar_du_connector_best_encoder,
> >  };
> > 
> >  static enum drm_connector_status
> > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c
> > b/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c index e905f5d..6afd0af 100644
> > --- a/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c
> > +++ b/drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c
> > @@ -59,7 +59,6 @@ static int rcar_du_lvds_connector_get_modes(struct
> > drm_connector *connector)
> > 
> >  static const struct drm_connector_helper_funcs connector_helper_funcs = {
> >  	.get_modes = rcar_du_lvds_connector_get_modes,
> > -	.best_encoder = rcar_du_connector_best_encoder,
> >  };
> > 
> >  static enum drm_connector_status
> > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c
> > b/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c index 9d7e5c9..68f7ffa 100644
> > --- a/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c
> > +++ b/drivers/gpu/drm/rcar-du/rcar_du_vgacon.c
> > @@ -28,7 +28,6 @@ static int rcar_du_vga_connector_get_modes(struct
> > drm_connector *connector)
> > 
> >  static const struct drm_connector_helper_funcs connector_helper_funcs = {
> >  	.get_modes = rcar_du_vga_connector_get_modes,
> > -	.best_encoder = rcar_du_connector_best_encoder,
> >  };
> > 
> >  static enum drm_connector_status  
> 
> You can also remove
> 
>         rcon->encoder = renc;
> 
> from rcar_du_vga_connector_init(), it's not needed anymore. The same code in 
> rcar_du_hdmi_connector_init() has to stay for now though, as it's used to 
> locate the slave encoder in the HDMI support code. That should change when the 
> driver will be converted to use drm_bridge.
> 
> I can also fix this during the conversion to drm_bridge if you don't want to 
> resubmit. In any case,

There will be a v2 anyway, so I'll squash this change in the patch.

> 
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> 

Thanks,

Boris

-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 01/20] drm/atomic: Fix remaining places where !funcs->best_encoder is valid
  2016-06-03  7:37       ` Boris Brezillon
@ 2016-06-03 19:01         ` Daniel Vetter
  0 siblings, 0 replies; 31+ messages in thread
From: Daniel Vetter @ 2016-06-03 19:01 UTC (permalink / raw)
  To: Boris Brezillon
  Cc: Daniel Vetter, Laurent Pinchart, David Airlie, dri-devel,
	Daniel Vetter, Linux Kernel Mailing List, linux-arm-kernel,
	Kukjin Kim, Krzysztof Kozlowski, linux-samsung-soc, intel-gfx,
	Jani Nikula, Alexey Brodkin, Inki Dae, Joonyoung Shim,
	Seung-Woo Kim, Kyungmin Park, Stefan Agner, Alison Wang,
	Matthias Brugger, Rob Clark, Mark Yao, Heiko Stuebner,
	Benjamin Gaignard, Vincent Abriou, Maxime Ripard, Chen-Yu Tsai,
	Thierry Re ding, Stephen Warren, Alexandre Courbot, Eric Anholt,
	Gerd Hoffmann, linux-mediatek, linux-arm-msm, freedreno,
	open list:DRM DRIVERS FOR RENESAS, open list:ARM/Rockchip SoC...,
	linux-tegra, open list:VIRTIO CORE, NET...

On Fri, Jun 03, 2016 at 09:37:43AM +0200, Boris Brezillon wrote:
> On Thu, 2 Jun 2016 23:57:02 +0200
> Daniel Vetter <daniel@ffwll.ch> wrote:
> 
> > On Thu, Jun 2, 2016 at 11:05 PM, Laurent Pinchart
> > <laurent.pinchart@ideasonboard.com> wrote:
> > > Hi Boris,
> > >
> > > Thank you for the patch.
> > >
> > > On Thursday 02 Jun 2016 16:31:28 Boris Brezillon wrote:  
> > >> Adapt drm_pick_crtcs() and update_connector_routing() to fallback to
> > >> drm_atomic_helper_best_encoder() if funcs->best_encoder() is NULL so
> > >> that DRM drivers can leave this hook unassigned if they know they want
> > >> to use drm_atomic_helper_best_encoder().  
> > >
> > > Could you please update include/drm/drm_modeset_helper_vtables.h to document
> > > this new behaviour ?  
> > 
> > Thanks for reminding me. Please update hooks for both
> > atomic_best_encoder and best_encoder. Also mention that it's only
> > optional for atomic drivers. There's lots of examples in that file for
> > the wording usually used.
> 
> Hm, I haven't changed anything for the ->atomic_best_encoder() hook, or
> am I missing something?

Before you needed atomic_best_encoder or best_encoder (well that's the
idea at least), now both are optional. Kerneldoc needs to be adjusted in
both places to match new reality after your patch.
-Daniel

> 
> > 
> > > The only drawback I see in this patch is the additional object lookup
> > > performed by drm_atomic_helper_best_encoder() at runtime. I wonder if we could
> > > somehow cache the information, as the assignment can't change when there's a
> > > 1:1 correspondence between encoders and connectors.  
> > 
> > drm_encoder_find is an idr lookup. That should be plenty fast,
> > especially for modeset code. Usually what's too expensive even for
> > modeset code is linear list walks. But Chris just submitted patches to
> > convert most of them into simple lookups.
> > -Daniel
> > 
> > >>> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>  
> > >> ---
> > >>  drivers/gpu/drm/drm_atomic_helper.c |  4 +++-
> > >>  drivers/gpu/drm/drm_fb_helper.c     | 13 ++++++++++++-
> > >>  2 files changed, 15 insertions(+), 2 deletions(-)
> > >>
> > >> diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> > >> b/drivers/gpu/drm/drm_atomic_helper.c index f6a3350..849d029 100644
> > >> --- a/drivers/gpu/drm/drm_atomic_helper.c
> > >> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> > >> @@ -300,8 +300,10 @@ update_connector_routing(struct drm_atomic_state
> > >> *state, if (funcs->atomic_best_encoder)
> > >>               new_encoder = funcs->atomic_best_encoder(connector,
> > >>                                                        connector_state);
> > >> -     else
> > >> +     else if (funcs->best_encoder)
> > >>               new_encoder = funcs->best_encoder(connector);
> > >> +     else
> > >> +             new_encoder = drm_atomic_helper_best_encoder(connector);
> > >>
> > >>       if (!new_encoder) {
> > >>               DRM_DEBUG_ATOMIC("No suitable encoder found for [CONNECTOR:%d:%s]\n",
> > >> diff --git a/drivers/gpu/drm/drm_fb_helper.c
> > >> b/drivers/gpu/drm/drm_fb_helper.c index 7c2eb75..d44389a 100644
> > >> --- a/drivers/gpu/drm/drm_fb_helper.c
> > >> +++ b/drivers/gpu/drm/drm_fb_helper.c
> > >> @@ -2000,7 +2000,18 @@ static int drm_pick_crtcs(struct drm_fb_helper
> > >> *fb_helper, my_score++;
> > >>
> > >>       connector_funcs = connector->helper_private;
> > >> -     encoder = connector_funcs->best_encoder(connector);
> > >> +
> > >> +     /*
> > >> +      * If the DRM device implements atomic hooks and ->best_encoder() is
> > >> +      * NULL we fallback to the default drm_atomic_helper_best_encoder()
> > >> +      * helper.
> > >> +      */
> > >> +     if (fb_helper->dev->mode_config.funcs->atomic_commit &&
> > >> +         !connector_funcs->best_encoder)
> > >> +             encoder = drm_atomic_helper_best_encoder(connector);
> > >> +     else
> > >> +             encoder = connector_funcs->best_encoder(connector);
> > >> +
> > >>       if (!encoder)
> > >>               goto out;  
> > >
> > > --
> > > Regards,
> > >
> > > Laurent Pinchart
> > >  
> > 
> > 
> > 
> 
> 
> 
> -- 
> Boris Brezillon, Free Electrons
> Embedded Linux and Kernel engineering
> http://free-electrons.com

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 10/20] drm: rockchip: Rely on the default ->best_encoder() behavior
  2016-06-02 14:31 ` [PATCH 10/20] drm: rockchip: " Boris Brezillon
@ 2016-06-07  0:51   ` Mark yao
  0 siblings, 0 replies; 31+ messages in thread
From: Mark yao @ 2016-06-07  0:51 UTC (permalink / raw)
  To: Boris Brezillon, David Airlie, Daniel Vetter, dri-devel, Daniel Vetter
  Cc: linux-kernel, linux-arm-kernel, Kukjin Kim, Krzysztof Kozlowski,
	linux-samsung-soc, intel-gfx, Jani Nikula, Alexey Brodkin,
	Inki Dae, Joonyoung Shim, Seung-Woo Kim, Kyungmin Park,
	Stefan Agner, Alison Wang, Matthias Brugger, Rob Clark,
	Laurent Pinchart, Heiko Stuebner, Benjamin Gaignard,
	Vincent Abriou, Maxime Ripard, Chen-Yu Tsai, Thierry Reding,
	Stephen Warren, Alexandre Courbot, Eric Anholt, Gerd Hoffmann,
	linux-mediatek, linux-arm-msm, freedreno, linux-renesas-soc,
	linux-rockchip, linux-tegra, virtualization

On 2016年06月02日 22:31, Boris Brezillon wrote:
> All outputss have a 1:1 relationship between connectors and encoders
> and the driver is relying on the atomic helpers: we can drop the custom
> ->best_encoder() implementations  and let the core call
> drm_atomic_helper_best_encoder() for us.

Good, All connectors and encoders is 1:1 relationship on rockchip 
outputs, so

Acked-by: Mark Yao <mark.yao@rock-chips.com>

>
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
>   drivers/gpu/drm/rockchip/dw-mipi-dsi.c | 9 ---------
>   drivers/gpu/drm/rockchip/inno_hdmi.c   | 9 ---------
>   2 files changed, 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c
> index dedc65b..ca22e5e 100644
> --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c
> +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c
> @@ -964,18 +964,9 @@ static enum drm_mode_status dw_mipi_dsi_mode_valid(
>   	return mode_status;
>   }
>   
> -static struct drm_encoder *dw_mipi_dsi_connector_best_encoder(
> -					struct drm_connector *connector)
> -{
> -	struct dw_mipi_dsi *dsi = con_to_dsi(connector);
> -
> -	return &dsi->encoder;
> -}
> -
>   static struct drm_connector_helper_funcs dw_mipi_dsi_connector_helper_funcs = {
>   	.get_modes = dw_mipi_dsi_connector_get_modes,
>   	.mode_valid = dw_mipi_dsi_mode_valid,
> -	.best_encoder = dw_mipi_dsi_connector_best_encoder,
>   };
>   
>   static enum drm_connector_status
> diff --git a/drivers/gpu/drm/rockchip/inno_hdmi.c b/drivers/gpu/drm/rockchip/inno_hdmi.c
> index f8b4feb..006260d 100644
> --- a/drivers/gpu/drm/rockchip/inno_hdmi.c
> +++ b/drivers/gpu/drm/rockchip/inno_hdmi.c
> @@ -579,14 +579,6 @@ inno_hdmi_connector_mode_valid(struct drm_connector *connector,
>   	return MODE_OK;
>   }
>   
> -static struct drm_encoder *
> -inno_hdmi_connector_best_encoder(struct drm_connector *connector)
> -{
> -	struct inno_hdmi *hdmi = to_inno_hdmi(connector);
> -
> -	return &hdmi->encoder;
> -}
> -
>   static int
>   inno_hdmi_probe_single_connector_modes(struct drm_connector *connector,
>   				       uint32_t maxX, uint32_t maxY)
> @@ -613,7 +605,6 @@ static struct drm_connector_funcs inno_hdmi_connector_funcs = {
>   static struct drm_connector_helper_funcs inno_hdmi_connector_helper_funcs = {
>   	.get_modes = inno_hdmi_connector_get_modes,
>   	.mode_valid = inno_hdmi_connector_mode_valid,
> -	.best_encoder = inno_hdmi_connector_best_encoder,
>   };
>   
>   static int inno_hdmi_register(struct drm_device *drm, struct inno_hdmi *hdmi)


-- 
Mark Yao

^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2016-06-07  0:52 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-02 14:31 [PATCH 00/20] drm/atomic: Provide default ->best_encoder() behavior Boris Brezillon
2016-06-02 14:31 ` [PATCH 01/20] drm/atomic: Fix remaining places where !funcs->best_encoder is valid Boris Brezillon
2016-06-02 21:05   ` Laurent Pinchart
2016-06-02 21:57     ` Daniel Vetter
2016-06-02 22:40       ` [Intel-gfx] " Chris Wilson
2016-06-03  7:37       ` Boris Brezillon
2016-06-03 19:01         ` Daniel Vetter
2016-06-03  7:36     ` Boris Brezillon
2016-06-02 14:31 ` [PATCH 02/20] drm: arc: Rely on the default ->best_encoder() behavior Boris Brezillon
2016-06-02 14:31 ` [PATCH 03/20] drm: atmel-hlcdc: " Boris Brezillon
2016-06-02 14:31 ` [PATCH 04/20] drm: exynos: " Boris Brezillon
2016-06-02 14:31 ` [PATCH 05/20] drm: fsl-dcu: " Boris Brezillon
2016-06-02 14:31 ` [PATCH 06/20] drm: i915: Rely on the default ->best_encoder() behavior where appropriate Boris Brezillon
2016-06-02 14:31 ` [PATCH 07/20] drm: mediatek: Rely on the default ->best_encoder() behavior Boris Brezillon
2016-06-02 14:31 ` [PATCH 08/20] drm: msm: Rely on the default ->best_encoder() behavior where appropriate Boris Brezillon
2016-06-02 14:31 ` [PATCH 09/20] drm: rcar-du: Rely on the default ->best_encoder() behavior Boris Brezillon
2016-06-02 20:57   ` Laurent Pinchart
2016-06-03  7:38     ` Boris Brezillon
2016-06-02 14:31 ` [PATCH 10/20] drm: rockchip: " Boris Brezillon
2016-06-07  0:51   ` Mark yao
2016-06-02 14:31 ` [PATCH 11/20] drm: sti: " Boris Brezillon
2016-06-02 14:31 ` [PATCH 12/20] drm: sun4i: " Boris Brezillon
2016-06-02 14:31 ` [PATCH 13/20] drm: tegra: " Boris Brezillon
2016-06-02 14:31 ` [PATCH 14/20] drm: vc4: " Boris Brezillon
2016-06-02 14:31 ` [PATCH 15/20] drm: virtgpu: " Boris Brezillon
2016-06-02 14:31 ` [PATCH 16/20] drm: omap: " Boris Brezillon
2016-06-02 21:00   ` Laurent Pinchart
2016-06-02 14:31 ` [PATCH 17/20] drm/bridge: anx78xx: " Boris Brezillon
2016-06-02 14:31 ` [PATCH 18/20] drm/bridge: ptn3460: " Boris Brezillon
2016-06-02 14:31 ` [PATCH 19/20] drm/bridge: ps8622: " Boris Brezillon
2016-06-02 14:31 ` [PATCH 20/20] drm/bridge: dw-hdmi: Use drm_atomic_helper_best_encoder() Boris Brezillon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).