All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions
@ 2017-11-15 14:19 Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 01/22] drm/gem-fb-helper: drm_gem_fbdev_fb_create() make funcs optional Noralf Trønnes
                   ` (23 more replies)
  0 siblings, 24 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

This patchset adds drm_fb_cma_fbdev_init/fini() functions that replaces
drm_fbdev_cma_init/fini(). The reason for doing so is to get rid of
struct drm_fbdev_cma and it's wrapper functions. The final piece will
happen when tinydrm moves away from the cma helper and we can remove the
struct.

Note:
Patches 19-22 depends on patchset:
[v3] drm: Add simple modeset suspend/resume helpers

Noralf.

Changes since version 1:
- Fix NULL pointer dereference in drm_fbdev_cma_create() (Benjamin)
- sti: Remove unused private variable (Benjamin)
- stm: Remove duplicate ldev assignment (Philippe)
- tilcdc: Rebase on: 'drm/tilcdc: Use drm_gem_cma_print_info()'

Noralf Trønnes (22):
  drm/gem-fb-helper: drm_gem_fbdev_fb_create() make funcs optional
  drm/cma-helper: Add drm_fb_cma_fbdev_init/fini()
  drm/arc: Use drm_fb_cma_fbdev_init/fini()
  drm/arm/hdlcd: Use drm_fb_cma_fbdev_init/fini()
  drm/atmel-hlcdc: Use drm_fb_cma_fbdev_init/fini()
  drm/hisilicon/kirin: Use drm_fb_cma_fbdev_init/fini()
  drm/imx: Use drm_fb_cma_fbdev_init/fini()
  drm/meson: Use drm_fb_cma_fbdev_init/fini()
  drm/mxsfb: Use drm_fb_cma_fbdev_init/fini()
  drm/pl111: Use drm_fb_cma_fbdev_init/fini()
  drm/rcar-du: Use drm_fb_cma_fbdev_init/fini()
  drm/sti: Use drm_fb_cma_fbdev_init/fini()
  drm/stm: Use drm_fb_cma_fbdev_init/fini()
  drm/sun4i: Use drm_fb_cma_fbdev_init/fini()
  drm/tilcdc: Use drm_fb_cma_fbdev_init/fini()
  drm/tve200: Use drm_fb_cma_fbdev_init/fini()
  drm/vc4: Use drm_fb_cma_fbdev_init/fini()
  drm/zte: Use drm_fb_cma_fbdev_init/fini()
  drm/arm/mali: Use drm_fb_cma_fbdev_init/fini()
  drm/fsl-dcu: Use drm_fb_cma_fbdev_init/fini()
  drm/tinydrm: Use drm_fb_cma_fbdev_init_with_funcs/fini()
  drm/cma-helper: Remove drm_fbdev_cma* functions

 Documentation/gpu/todo.rst                      |   5 -
 drivers/gpu/drm/arc/arcpgu.h                    |   4 -
 drivers/gpu/drm/arc/arcpgu_drv.c                |  36 +----
 drivers/gpu/drm/arm/hdlcd_drv.c                 |  37 +----
 drivers/gpu/drm/arm/hdlcd_drv.h                 |   1 -
 drivers/gpu/drm/arm/malidp_drv.c                |  39 +----
 drivers/gpu/drm/arm/malidp_drv.h                |   1 -
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c    |  26 +---
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h    |   2 +-
 drivers/gpu/drm/drm_fb_cma_helper.c             | 191 +++++++++---------------
 drivers/gpu/drm/drm_gem_framebuffer_helper.c    |   6 +-
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c       |  26 +---
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h       |   1 -
 drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c |  35 +----
 drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h |   4 -
 drivers/gpu/drm/imx/imx-drm-core.c              |  33 +---
 drivers/gpu/drm/imx/imx-drm.h                   |   1 -
 drivers/gpu/drm/meson/meson_drv.c               |  20 +--
 drivers/gpu/drm/meson/meson_drv.h               |   1 -
 drivers/gpu/drm/mxsfb/mxsfb_drv.c               |  21 +--
 drivers/gpu/drm/mxsfb/mxsfb_drv.h               |   1 -
 drivers/gpu/drm/pl111/pl111_drm.h               |   1 -
 drivers/gpu/drm/pl111/pl111_drv.c               |  16 +-
 drivers/gpu/drm/rcar-du/rcar_du_drv.c           |  13 +-
 drivers/gpu/drm/rcar-du/rcar_du_drv.h           |   2 -
 drivers/gpu/drm/rcar-du/rcar_du_kms.c           |  20 +--
 drivers/gpu/drm/sti/sti_drv.c                   |  27 +---
 drivers/gpu/drm/sti/sti_drv.h                   |   1 -
 drivers/gpu/drm/stm/drv.c                       |  38 +----
 drivers/gpu/drm/stm/ltdc.h                      |   1 -
 drivers/gpu/drm/sun4i/sun4i_drv.c               |  14 +-
 drivers/gpu/drm/sun4i/sun4i_drv.h               |   2 -
 drivers/gpu/drm/sun4i/sun4i_framebuffer.c       |  18 +--
 drivers/gpu/drm/sun4i/sun4i_framebuffer.h       |   2 +-
 drivers/gpu/drm/tilcdc/tilcdc_drv.c             |  26 +---
 drivers/gpu/drm/tilcdc/tilcdc_drv.h             |   2 -
 drivers/gpu/drm/tinydrm/core/tinydrm-core.c     |  37 +----
 drivers/gpu/drm/tinydrm/mi0283qt.c              |   3 +-
 drivers/gpu/drm/tinydrm/st7586.c                |   3 +-
 drivers/gpu/drm/tve200/tve200_drm.h             |   1 -
 drivers/gpu/drm/tve200/tve200_drv.c             |  16 +-
 drivers/gpu/drm/vc4/vc4_drv.c                   |  13 +-
 drivers/gpu/drm/vc4/vc4_drv.h                   |   2 -
 drivers/gpu/drm/vc4/vc4_kms.c                   |  18 +--
 drivers/gpu/drm/zte/zx_drm_drv.c                |  48 +-----
 include/drm/drm_fb_cma_helper.h                 |  29 +---
 include/drm/tinydrm/tinydrm.h                   |   3 -
 47 files changed, 198 insertions(+), 649 deletions(-)

-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 01/22] drm/gem-fb-helper: drm_gem_fbdev_fb_create() make funcs optional
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 02/22] drm/cma-helper: Add drm_fb_cma_fbdev_init/fini() Noralf Trønnes
                   ` (22 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Make the drm_framebuffer_funcs argument optional for drivers that
don't need to set the dirty callback.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/drm_gem_framebuffer_helper.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_gem_framebuffer_helper.c b/drivers/gpu/drm/drm_gem_framebuffer_helper.c
index aa8cb9bfa499..4d682a6e8bcb 100644
--- a/drivers/gpu/drm/drm_gem_framebuffer_helper.c
+++ b/drivers/gpu/drm/drm_gem_framebuffer_helper.c
@@ -272,7 +272,8 @@ EXPORT_SYMBOL_GPL(drm_gem_fb_prepare_fb);
  * @sizes: fbdev size description
  * @pitch_align: Optional pitch alignment
  * @obj: GEM object backing the framebuffer
- * @funcs: vtable to be used for the new framebuffer object
+ * @funcs: Optional vtable to be used for the new framebuffer object when the
+ *         dirty callback is needed.
  *
  * This function creates a framebuffer from a &drm_fb_helper_surface_size
  * description for use in the &drm_fb_helper_funcs.fb_probe callback.
@@ -300,6 +301,9 @@ drm_gem_fbdev_fb_create(struct drm_device *dev,
 	if (obj->size < mode_cmd.pitches[0] * mode_cmd.height)
 		return ERR_PTR(-EINVAL);
 
+	if (!funcs)
+		funcs = &drm_gem_fb_funcs;
+
 	return drm_gem_fb_alloc(dev, &mode_cmd, &obj, 1, funcs);
 }
 EXPORT_SYMBOL(drm_gem_fbdev_fb_create);
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 02/22] drm/cma-helper: Add drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 01/22] drm/gem-fb-helper: drm_gem_fbdev_fb_create() make funcs optional Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-30 17:38   ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 03/22] drm/arc: Use drm_fb_cma_fbdev_init/fini() Noralf Trønnes
                   ` (21 subsequent siblings)
  23 siblings, 1 reply; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Add functions drm_fb_cma_fbdev_init(), drm_fb_cma_fbdev_fini() and
drm_fb_cma_fbdev_init_with_funcs(). These functions relies on the fact
that the drm_fb_helper struct is stored in dev->drm_fb_helper_private
so drivers don't need to store it.

Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---

Changes since version 1:
- Fix NULL pointer dereference in drm_fbdev_cma_create() (Benjamin)

 drivers/gpu/drm/drm_fb_cma_helper.c | 119 +++++++++++++++++++++++++++++++++++-
 include/drm/drm_fb_cma_helper.h     |   7 +++
 2 files changed, 123 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c
index 35b56dfba929..186d00adfb5f 100644
--- a/drivers/gpu/drm/drm_fb_cma_helper.c
+++ b/drivers/gpu/drm/drm_fb_cma_helper.c
@@ -23,6 +23,7 @@
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
 #include <drm/drm_fb_cma_helper.h>
+#include <drm/drm_print.h>
 #include <linux/module.h>
 
 #define DEFAULT_FBDEFIO_DELAY_MS 50
@@ -42,7 +43,7 @@ struct drm_fbdev_cma {
  * callback function to create a cma backed framebuffer.
  *
  * An fbdev framebuffer backed by cma is also available by calling
- * drm_fbdev_cma_init(). drm_fbdev_cma_fini() tears it down.
+ * drm_fb_cma_fbdev_init(). drm_fb_cma_fbdev_fini() tears it down.
  * If the &drm_framebuffer_funcs.dirty callback is set, fb_deferred_io will be
  * set up automatically. &drm_framebuffer_funcs.dirty is called by
  * drm_fb_helper_deferred_io() in process context (&struct delayed_work).
@@ -68,7 +69,7 @@ struct drm_fbdev_cma {
  *
  * Initialize::
  *
- *     fbdev = drm_fbdev_cma_init_with_funcs(dev, 16,
+ *     fbdev = drm_fb_cma_fbdev_init_with_funcs(dev, 16,
  *                                           dev->mode_config.num_crtc,
  *                                           dev->mode_config.num_connector,
  *                                           &driver_fb_funcs);
@@ -256,7 +257,7 @@ drm_fbdev_cma_create(struct drm_fb_helper *helper,
 	fbi->screen_size = size;
 	fbi->fix.smem_len = size;
 
-	if (fbdev_cma->fb_funcs->dirty) {
+	if (fb->funcs->dirty) {
 		ret = drm_fbdev_cma_defio_init(fbi, obj);
 		if (ret)
 			goto err_cma_destroy;
@@ -277,6 +278,118 @@ static const struct drm_fb_helper_funcs drm_fb_cma_helper_funcs = {
 	.fb_probe = drm_fbdev_cma_create,
 };
 
+/**
+ * drm_fb_cma_fbdev_init_with_funcs() - Allocate and initialize fbdev emulation
+ * @dev: DRM device
+ * @preferred_bpp: Preferred bits per pixel for the device.
+ *                 @dev->mode_config.preferred_depth is used if this is zero.
+ * @max_conn_count: Maximum number of connectors.
+ *                  @dev->mode_config.num_connector is used if this is zero.
+ * @funcs: Framebuffer functions, in particular a custom dirty() callback.
+ *         Can be NULL.
+ *
+ * Returns:
+ * Zero on success or negative error code on failure.
+ */
+int drm_fb_cma_fbdev_init_with_funcs(struct drm_device *dev,
+	unsigned int preferred_bpp, unsigned int max_conn_count,
+	const struct drm_framebuffer_funcs *funcs)
+{
+	struct drm_fbdev_cma *fbdev_cma;
+	struct drm_fb_helper *fb_helper;
+	int ret;
+
+	if (!preferred_bpp)
+		preferred_bpp = dev->mode_config.preferred_depth;
+	if (!preferred_bpp)
+		preferred_bpp = 32;
+
+	if (!max_conn_count)
+		max_conn_count = dev->mode_config.num_connector;
+
+	fbdev_cma = kzalloc(sizeof(*fbdev_cma), GFP_KERNEL);
+	if (!fbdev_cma)
+		return -ENOMEM;
+
+	fbdev_cma->fb_funcs = funcs;
+	fb_helper = &fbdev_cma->fb_helper;
+
+	drm_fb_helper_prepare(dev, fb_helper, &drm_fb_cma_helper_funcs);
+
+	ret = drm_fb_helper_init(dev, fb_helper, max_conn_count);
+	if (ret < 0) {
+		DRM_DEV_ERROR(dev->dev, "Failed to initialize fbdev helper.\n");
+		goto err_free;
+	}
+
+	ret = drm_fb_helper_single_add_all_connectors(fb_helper);
+	if (ret < 0) {
+		DRM_DEV_ERROR(dev->dev, "Failed to add connectors.\n");
+		goto err_drm_fb_helper_fini;
+	}
+
+	ret = drm_fb_helper_initial_config(fb_helper, preferred_bpp);
+	if (ret < 0) {
+		DRM_DEV_ERROR(dev->dev, "Failed to set fbdev configuration.\n");
+		goto err_drm_fb_helper_fini;
+	}
+
+	return 0;
+
+err_drm_fb_helper_fini:
+	drm_fb_helper_fini(fb_helper);
+err_free:
+	kfree(fbdev_cma);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(drm_fb_cma_fbdev_init_with_funcs);
+
+/**
+ * drm_fb_cma_fbdev_init() - Allocate and initialize fbdev emulation
+ * @dev: DRM device
+ * @preferred_bpp: Preferred bits per pixel for the device.
+ *                 @dev->mode_config.preferred_depth is used if this is zero.
+ * @max_conn_count: Maximum number of connectors.
+ *                  @dev->mode_config.num_connector is used if this is zero.
+ *
+ * Returns:
+ * Zero on success or negative error code on failure.
+ */
+int drm_fb_cma_fbdev_init(struct drm_device *dev, unsigned int preferred_bpp,
+			  unsigned int max_conn_count)
+{
+	return drm_fb_cma_fbdev_init_with_funcs(dev, preferred_bpp,
+						max_conn_count, NULL);
+}
+EXPORT_SYMBOL_GPL(drm_fb_cma_fbdev_init);
+
+/**
+ * drm_fb_cma_fbdev_fini() - Teardown fbdev emulation
+ * @dev: DRM device
+ */
+void drm_fb_cma_fbdev_fini(struct drm_device *dev)
+{
+	struct drm_fb_helper *fb_helper = dev->fb_helper;
+
+	if (!fb_helper)
+		return;
+
+	/* Unregister if it hasn't been done already */
+	if (fb_helper->fbdev && fb_helper->fbdev->dev)
+		drm_fb_helper_unregister_fbi(fb_helper);
+
+	if (fb_helper->fbdev)
+		drm_fbdev_cma_defio_fini(fb_helper->fbdev);
+
+	if (fb_helper->fb)
+		drm_framebuffer_remove(fb_helper->fb);
+
+	drm_fb_helper_fini(fb_helper);
+	kfree(to_fbdev_cma(fb_helper));
+}
+EXPORT_SYMBOL_GPL(drm_fb_cma_fbdev_fini);
+
 /**
  * drm_fbdev_cma_init_with_funcs() - Allocate and initializes a drm_fbdev_cma struct
  * @dev: DRM device
diff --git a/include/drm/drm_fb_cma_helper.h b/include/drm/drm_fb_cma_helper.h
index a613ff022e6c..4fb2d5563420 100644
--- a/include/drm/drm_fb_cma_helper.h
+++ b/include/drm/drm_fb_cma_helper.h
@@ -15,6 +15,13 @@ struct drm_mode_fb_cmd2;
 struct drm_plane;
 struct drm_plane_state;
 
+int drm_fb_cma_fbdev_init_with_funcs(struct drm_device *dev,
+	unsigned int preferred_bpp, unsigned int max_conn_count,
+	const struct drm_framebuffer_funcs *funcs);
+int drm_fb_cma_fbdev_init(struct drm_device *dev, unsigned int preferred_bpp,
+			  unsigned int max_conn_count);
+void drm_fb_cma_fbdev_fini(struct drm_device *dev);
+
 struct drm_fbdev_cma *drm_fbdev_cma_init_with_funcs(struct drm_device *dev,
 	unsigned int preferred_bpp, unsigned int max_conn_count,
 	const struct drm_framebuffer_funcs *funcs);
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 03/22] drm/arc: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 01/22] drm/gem-fb-helper: drm_gem_fbdev_fb_create() make funcs optional Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 02/22] drm/cma-helper: Add drm_fb_cma_fbdev_init/fini() Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-21 16:49   ` Alexey Brodkin
  2018-09-27  8:49   ` Alexey Brodkin
  2017-11-15 14:19 ` [PATCH v2 04/22] drm/arm/hdlcd: " Noralf Trønnes
                   ` (20 subsequent siblings)
  23 siblings, 2 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.
Remove unused function prototype arcpgu_fbdev_cma_init().

Cc: Alexey Brodkin <abrodkin@synopsys.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
---
 drivers/gpu/drm/arc/arcpgu.h     |  4 ----
 drivers/gpu/drm/arc/arcpgu_drv.c | 36 +++++++-----------------------------
 2 files changed, 7 insertions(+), 33 deletions(-)

diff --git a/drivers/gpu/drm/arc/arcpgu.h b/drivers/gpu/drm/arc/arcpgu.h
index e8fcf3ab1d9a..90ef76b19f8a 100644
--- a/drivers/gpu/drm/arc/arcpgu.h
+++ b/drivers/gpu/drm/arc/arcpgu.h
@@ -20,7 +20,6 @@
 struct arcpgu_drm_private {
 	void __iomem		*regs;
 	struct clk		*clk;
-	struct drm_fbdev_cma	*fbdev;
 	struct drm_framebuffer	*fb;
 	struct drm_crtc		crtc;
 	struct drm_plane	*plane;
@@ -43,8 +42,5 @@ static inline u32 arc_pgu_read(struct arcpgu_drm_private *arcpgu,
 int arc_pgu_setup_crtc(struct drm_device *dev);
 int arcpgu_drm_hdmi_init(struct drm_device *drm, struct device_node *np);
 int arcpgu_drm_sim_init(struct drm_device *drm, struct device_node *np);
-struct drm_fbdev_cma *arcpgu_fbdev_cma_init(struct drm_device *dev,
-	unsigned int preferred_bpp, unsigned int num_crtc,
-	unsigned int max_conn_count);
 
 #endif
diff --git a/drivers/gpu/drm/arc/arcpgu_drv.c b/drivers/gpu/drm/arc/arcpgu_drv.c
index f067de4e1e82..e25981adbed0 100644
--- a/drivers/gpu/drm/arc/arcpgu_drv.c
+++ b/drivers/gpu/drm/arc/arcpgu_drv.c
@@ -16,6 +16,7 @@
 
 #include <linux/clk.h>
 #include <drm/drm_crtc_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
@@ -25,16 +26,9 @@
 #include "arcpgu.h"
 #include "arcpgu_regs.h"
 
-static void arcpgu_fb_output_poll_changed(struct drm_device *dev)
-{
-	struct arcpgu_drm_private *arcpgu = dev->dev_private;
-
-	drm_fbdev_cma_hotplug_event(arcpgu->fbdev);
-}
-
 static const struct drm_mode_config_funcs arcpgu_drm_modecfg_funcs = {
 	.fb_create  = drm_gem_fb_create,
-	.output_poll_changed = arcpgu_fb_output_poll_changed,
+	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = drm_atomic_helper_commit,
 };
@@ -51,13 +45,6 @@ static void arcpgu_setup_mode_config(struct drm_device *drm)
 
 DEFINE_DRM_GEM_CMA_FOPS(arcpgu_drm_ops);
 
-static void arcpgu_lastclose(struct drm_device *drm)
-{
-	struct arcpgu_drm_private *arcpgu = drm->dev_private;
-
-	drm_fbdev_cma_restore_mode(arcpgu->fbdev);
-}
-
 static int arcpgu_load(struct drm_device *drm)
 {
 	struct platform_device *pdev = to_platform_device(drm->dev);
@@ -113,13 +100,9 @@ static int arcpgu_load(struct drm_device *drm)
 	drm_mode_config_reset(drm);
 	drm_kms_helper_poll_init(drm);
 
-	arcpgu->fbdev = drm_fbdev_cma_init(drm, 16,
-					   drm->mode_config.num_connector);
-	if (IS_ERR(arcpgu->fbdev)) {
-		ret = PTR_ERR(arcpgu->fbdev);
-		arcpgu->fbdev = NULL;
-		return -ENODEV;
-	}
+	ret = drm_fb_cma_fbdev_init(drm, 16, 0);
+	if (ret)
+		return ret;
 
 	platform_set_drvdata(pdev, drm);
 	return 0;
@@ -127,12 +110,7 @@ static int arcpgu_load(struct drm_device *drm)
 
 static int arcpgu_unload(struct drm_device *drm)
 {
-	struct arcpgu_drm_private *arcpgu = drm->dev_private;
-
-	if (arcpgu->fbdev) {
-		drm_fbdev_cma_fini(arcpgu->fbdev);
-		arcpgu->fbdev = NULL;
-	}
+	drm_fb_cma_fbdev_fini(drm);
 	drm_kms_helper_poll_fini(drm);
 	drm_mode_config_cleanup(drm);
 
@@ -167,7 +145,7 @@ static int arcpgu_debugfs_init(struct drm_minor *minor)
 static struct drm_driver arcpgu_drm_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
 			   DRIVER_ATOMIC,
-	.lastclose = arcpgu_lastclose,
+	.lastclose = drm_fb_helper_lastclose,
 	.name = "arcpgu",
 	.desc = "ARC PGU Controller",
 	.date = "20160219",
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 04/22] drm/arm/hdlcd: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (2 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 03/22] drm/arc: Use drm_fb_cma_fbdev_init/fini() Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 05/22] drm/atmel-hlcdc: " Noralf Trønnes
                   ` (19 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Brian Starkey <brian.starkey@arm.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Acked-by: Liviu Dudau <liviu.dudau@arm.com>
---
 drivers/gpu/drm/arm/hdlcd_drv.c | 37 ++++++-------------------------------
 drivers/gpu/drm/arm/hdlcd_drv.h |  1 -
 2 files changed, 6 insertions(+), 32 deletions(-)

diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
index 59b21bdc0c30..9752240d3540 100644
--- a/drivers/gpu/drm/arm/hdlcd_drv.c
+++ b/drivers/gpu/drm/arm/hdlcd_drv.c
@@ -99,16 +99,9 @@ static int hdlcd_load(struct drm_device *drm, unsigned long flags)
 	return ret;
 }
 
-static void hdlcd_fb_output_poll_changed(struct drm_device *drm)
-{
-	struct hdlcd_drm_private *hdlcd = drm->dev_private;
-
-	drm_fbdev_cma_hotplug_event(hdlcd->fbdev);
-}
-
 static const struct drm_mode_config_funcs hdlcd_mode_config_funcs = {
 	.fb_create = drm_gem_fb_create,
-	.output_poll_changed = hdlcd_fb_output_poll_changed,
+	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = drm_atomic_helper_commit,
 };
@@ -123,13 +116,6 @@ static void hdlcd_setup_mode_config(struct drm_device *drm)
 	drm->mode_config.funcs = &hdlcd_mode_config_funcs;
 }
 
-static void hdlcd_lastclose(struct drm_device *drm)
-{
-	struct hdlcd_drm_private *hdlcd = drm->dev_private;
-
-	drm_fbdev_cma_restore_mode(hdlcd->fbdev);
-}
-
 static irqreturn_t hdlcd_irq(int irq, void *arg)
 {
 	struct drm_device *drm = arg;
@@ -245,7 +231,7 @@ static struct drm_driver hdlcd_driver = {
 	.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
 			   DRIVER_MODESET | DRIVER_PRIME |
 			   DRIVER_ATOMIC,
-	.lastclose = hdlcd_lastclose,
+	.lastclose = drm_fb_helper_lastclose,
 	.irq_handler = hdlcd_irq,
 	.irq_preinstall = hdlcd_irq_preinstall,
 	.irq_postinstall = hdlcd_irq_postinstall,
@@ -320,14 +306,9 @@ static int hdlcd_drm_bind(struct device *dev)
 	drm_mode_config_reset(drm);
 	drm_kms_helper_poll_init(drm);
 
-	hdlcd->fbdev = drm_fbdev_cma_init(drm, 32,
-					  drm->mode_config.num_connector);
-
-	if (IS_ERR(hdlcd->fbdev)) {
-		ret = PTR_ERR(hdlcd->fbdev);
-		hdlcd->fbdev = NULL;
+	ret = drm_fb_cma_fbdev_init(drm, 32, 0);
+	if (ret)
 		goto err_fbdev;
-	}
 
 	ret = drm_dev_register(drm, 0);
 	if (ret)
@@ -336,10 +317,7 @@ static int hdlcd_drm_bind(struct device *dev)
 	return 0;
 
 err_register:
-	if (hdlcd->fbdev) {
-		drm_fbdev_cma_fini(hdlcd->fbdev);
-		hdlcd->fbdev = NULL;
-	}
+	drm_fb_cma_fbdev_fini(drm);
 err_fbdev:
 	drm_kms_helper_poll_fini(drm);
 err_vblank:
@@ -365,10 +343,7 @@ static void hdlcd_drm_unbind(struct device *dev)
 	struct hdlcd_drm_private *hdlcd = drm->dev_private;
 
 	drm_dev_unregister(drm);
-	if (hdlcd->fbdev) {
-		drm_fbdev_cma_fini(hdlcd->fbdev);
-		hdlcd->fbdev = NULL;
-	}
+	drm_fb_cma_fbdev_fini(drm);
 	drm_kms_helper_poll_fini(drm);
 	component_unbind_all(dev, drm);
 	of_node_put(hdlcd->crtc.port);
diff --git a/drivers/gpu/drm/arm/hdlcd_drv.h b/drivers/gpu/drm/arm/hdlcd_drv.h
index e3950a071152..a9f0b4350d95 100644
--- a/drivers/gpu/drm/arm/hdlcd_drv.h
+++ b/drivers/gpu/drm/arm/hdlcd_drv.h
@@ -8,7 +8,6 @@
 struct hdlcd_drm_private {
 	void __iomem			*mmio;
 	struct clk			*clk;
-	struct drm_fbdev_cma		*fbdev;
 	struct drm_crtc			crtc;
 	struct drm_plane		*plane;
 	struct drm_atomic_state		*state;
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 05/22] drm/atmel-hlcdc: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (3 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 04/22] drm/arm/hdlcd: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 06/22] drm/hisilicon/kirin: " Noralf Trønnes
                   ` (18 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 26 ++++----------------------
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h |  2 +-
 2 files changed, 5 insertions(+), 23 deletions(-)

diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
index c6e8061ffcfc..c1ea5c36b006 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
@@ -461,13 +461,6 @@ static struct drm_framebuffer *atmel_hlcdc_fb_create(struct drm_device *dev,
 	return drm_gem_fb_create(dev, file_priv, mode_cmd);
 }
 
-static void atmel_hlcdc_fb_output_poll_changed(struct drm_device *dev)
-{
-	struct atmel_hlcdc_dc *dc = dev->dev_private;
-
-	drm_fbdev_cma_hotplug_event(dc->fbdev);
-}
-
 struct atmel_hlcdc_dc_commit {
 	struct work_struct work;
 	struct drm_device *dev;
@@ -563,7 +556,7 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev,
 
 static const struct drm_mode_config_funcs mode_config_funcs = {
 	.fb_create = atmel_hlcdc_fb_create,
-	.output_poll_changed = atmel_hlcdc_fb_output_poll_changed,
+	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = atmel_hlcdc_dc_atomic_commit,
 };
@@ -665,10 +658,7 @@ static int atmel_hlcdc_dc_load(struct drm_device *dev)
 
 	platform_set_drvdata(pdev, dev);
 
-	dc->fbdev = drm_fbdev_cma_init(dev, 24,
-			dev->mode_config.num_connector);
-	if (IS_ERR(dc->fbdev))
-		dc->fbdev = NULL;
+	drm_fb_cma_fbdev_init(dev, 24, 0);
 
 	drm_kms_helper_poll_init(dev);
 
@@ -688,8 +678,7 @@ static void atmel_hlcdc_dc_unload(struct drm_device *dev)
 {
 	struct atmel_hlcdc_dc *dc = dev->dev_private;
 
-	if (dc->fbdev)
-		drm_fbdev_cma_fini(dc->fbdev);
+	drm_fb_cma_fbdev_fini(dev);
 	flush_workqueue(dc->wq);
 	drm_kms_helper_poll_fini(dev);
 	drm_mode_config_cleanup(dev);
@@ -705,13 +694,6 @@ static void atmel_hlcdc_dc_unload(struct drm_device *dev)
 	destroy_workqueue(dc->wq);
 }
 
-static void atmel_hlcdc_dc_lastclose(struct drm_device *dev)
-{
-	struct atmel_hlcdc_dc *dc = dev->dev_private;
-
-	drm_fbdev_cma_restore_mode(dc->fbdev);
-}
-
 static int atmel_hlcdc_dc_irq_postinstall(struct drm_device *dev)
 {
 	struct atmel_hlcdc_dc *dc = dev->dev_private;
@@ -744,7 +726,7 @@ static struct drm_driver atmel_hlcdc_dc_driver = {
 	.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
 			   DRIVER_MODESET | DRIVER_PRIME |
 			   DRIVER_ATOMIC,
-	.lastclose = atmel_hlcdc_dc_lastclose,
+	.lastclose = drm_fb_helper_lastclose,
 	.irq_handler = atmel_hlcdc_dc_irq_handler,
 	.irq_preinstall = atmel_hlcdc_dc_irq_uninstall,
 	.irq_postinstall = atmel_hlcdc_dc_irq_postinstall,
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
index 6833ee253cfa..ab32d5b268d2 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
@@ -32,6 +32,7 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_crtc_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
@@ -374,7 +375,6 @@ struct atmel_hlcdc_dc {
 	const struct atmel_hlcdc_dc_desc *desc;
 	struct dma_pool *dscrpool;
 	struct atmel_hlcdc *hlcdc;
-	struct drm_fbdev_cma *fbdev;
 	struct drm_crtc *crtc;
 	struct atmel_hlcdc_layer *layers[ATMEL_HLCDC_MAX_LAYERS];
 	struct workqueue_struct *wq;
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 06/22] drm/hisilicon/kirin: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (4 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 05/22] drm/atmel-hlcdc: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 07/22] drm/imx: " Noralf Trønnes
                   ` (17 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Xinliang Liu <z.liuxinliang@hisilicon.com>
Cc: Rongrong Zou <zourongrong@gmail.com>
Cc: Xinwei Kong <kong.kongxinwei@hisilicon.com>
Cc: Chen Feng <puck.chen@hisilicon.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
---
 drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c | 35 ++++---------------------
 drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h |  4 ---
 2 files changed, 5 insertions(+), 34 deletions(-)

diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
index ddb0403f1975..e3673efbf1c2 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
@@ -21,6 +21,7 @@
 
 #include <drm/drmP.h>
 #include <drm/drm_gem_cma_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
 #include <drm/drm_atomic_helper.h>
@@ -33,32 +34,17 @@ static struct kirin_dc_ops *dc_ops;
 
 static int kirin_drm_kms_cleanup(struct drm_device *dev)
 {
-	struct kirin_drm_private *priv = dev->dev_private;
-
-	if (priv->fbdev) {
-		drm_fbdev_cma_fini(priv->fbdev);
-		priv->fbdev = NULL;
-	}
-
+	drm_fb_cma_fbdev_fini(dev);
 	drm_kms_helper_poll_fini(dev);
 	dc_ops->cleanup(to_platform_device(dev->dev));
 	drm_mode_config_cleanup(dev);
-	devm_kfree(dev->dev, priv);
-	dev->dev_private = NULL;
 
 	return 0;
 }
 
-static void kirin_fbdev_output_poll_changed(struct drm_device *dev)
-{
-	struct kirin_drm_private *priv = dev->dev_private;
-
-	drm_fbdev_cma_hotplug_event(priv->fbdev);
-}
-
 static const struct drm_mode_config_funcs kirin_drm_mode_config_funcs = {
 	.fb_create = drm_gem_fb_create,
-	.output_poll_changed = kirin_fbdev_output_poll_changed,
+	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = drm_atomic_helper_commit,
 };
@@ -76,14 +62,8 @@ static void kirin_drm_mode_config_init(struct drm_device *dev)
 
 static int kirin_drm_kms_init(struct drm_device *dev)
 {
-	struct kirin_drm_private *priv;
 	int ret;
 
-	priv = devm_kzalloc(dev->dev, sizeof(*priv), GFP_KERNEL);
-	if (!priv)
-		return -ENOMEM;
-
-	dev->dev_private = priv;
 	dev_set_drvdata(dev->dev, dev);
 
 	/* dev->mode_config initialization */
@@ -117,12 +97,9 @@ static int kirin_drm_kms_init(struct drm_device *dev)
 	/* init kms poll for handling hpd */
 	drm_kms_helper_poll_init(dev);
 
-	priv->fbdev = drm_fbdev_cma_init(dev, 32,
-					 dev->mode_config.num_connector);
-
-	if (IS_ERR(priv->fbdev)) {
+	ret = drm_fb_cma_fbdev_init(dev, 32, 0);
+	if (ret) {
 		DRM_ERROR("failed to initialize fbdev.\n");
-		ret = PTR_ERR(priv->fbdev);
 		goto err_cleanup_poll;
 	}
 	return 0;
@@ -135,8 +112,6 @@ static int kirin_drm_kms_init(struct drm_device *dev)
 	dc_ops->cleanup(to_platform_device(dev->dev));
 err_mode_config_cleanup:
 	drm_mode_config_cleanup(dev);
-	devm_kfree(dev->dev, priv);
-	dev->dev_private = NULL;
 
 	return ret;
 }
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
index 56cb62df065c..ad027d1cc826 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
@@ -19,10 +19,6 @@ struct kirin_dc_ops {
 	void (*cleanup)(struct platform_device *pdev);
 };
 
-struct kirin_drm_private {
-	struct drm_fbdev_cma *fbdev;
-};
-
 extern const struct kirin_dc_ops ade_dc_ops;
 
 #endif /* __KIRIN_DRM_DRV_H__ */
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 07/22] drm/imx: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (5 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 06/22] drm/hisilicon/kirin: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 08/22] drm/meson: " Noralf Trønnes
                   ` (16 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Acked-by: Philipp Zabel <p.zabel@pengutronix.de>
---
 drivers/gpu/drm/imx/imx-drm-core.c | 33 ++++++---------------------------
 drivers/gpu/drm/imx/imx-drm.h      |  1 -
 2 files changed, 6 insertions(+), 28 deletions(-)

diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
index 93c7e3f9b4a8..197484f01849 100644
--- a/drivers/gpu/drm/imx/imx-drm-core.c
+++ b/drivers/gpu/drm/imx/imx-drm-core.c
@@ -38,7 +38,6 @@
 struct imx_drm_device {
 	struct drm_device			*drm;
 	unsigned int				pipes;
-	struct drm_fbdev_cma			*fbhelper;
 	struct drm_atomic_state			*state;
 };
 
@@ -47,13 +46,6 @@ static int legacyfb_depth = 16;
 module_param(legacyfb_depth, int, 0444);
 #endif
 
-static void imx_drm_driver_lastclose(struct drm_device *drm)
-{
-	struct imx_drm_device *imxdrm = drm->dev_private;
-
-	drm_fbdev_cma_restore_mode(imxdrm->fbhelper);
-}
-
 DEFINE_DRM_GEM_CMA_FOPS(imx_drm_driver_fops);
 
 void imx_drm_connector_destroy(struct drm_connector *connector)
@@ -69,13 +61,6 @@ void imx_drm_encoder_destroy(struct drm_encoder *encoder)
 }
 EXPORT_SYMBOL_GPL(imx_drm_encoder_destroy);
 
-static void imx_drm_output_poll_changed(struct drm_device *drm)
-{
-	struct imx_drm_device *imxdrm = drm->dev_private;
-
-	drm_fbdev_cma_hotplug_event(imxdrm->fbhelper);
-}
-
 static int imx_drm_atomic_check(struct drm_device *dev,
 				struct drm_atomic_state *state)
 {
@@ -107,7 +92,7 @@ static int imx_drm_atomic_check(struct drm_device *dev,
 
 static const struct drm_mode_config_funcs imx_drm_mode_config_funcs = {
 	.fb_create = drm_gem_fb_create,
-	.output_poll_changed = imx_drm_output_poll_changed,
+	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = imx_drm_atomic_check,
 	.atomic_commit = drm_atomic_helper_commit,
 };
@@ -179,7 +164,7 @@ static const struct drm_ioctl_desc imx_drm_ioctls[] = {
 static struct drm_driver imx_drm_driver = {
 	.driver_features	= DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
 				  DRIVER_ATOMIC,
-	.lastclose		= imx_drm_driver_lastclose,
+	.lastclose		= drm_fb_helper_lastclose,
 	.gem_free_object_unlocked = drm_gem_cma_free_object,
 	.gem_vm_ops		= &drm_gem_cma_vm_ops,
 	.dumb_create		= drm_gem_cma_dumb_create,
@@ -291,12 +276,9 @@ static int imx_drm_bind(struct device *dev)
 		dev_warn(dev, "Invalid legacyfb_depth.  Defaulting to 16bpp\n");
 		legacyfb_depth = 16;
 	}
-	imxdrm->fbhelper = drm_fbdev_cma_init(drm, legacyfb_depth, MAX_CRTC);
-	if (IS_ERR(imxdrm->fbhelper)) {
-		ret = PTR_ERR(imxdrm->fbhelper);
-		imxdrm->fbhelper = NULL;
+	ret = drm_fb_cma_fbdev_init(drm, legacyfb_depth, MAX_CRTC);
+	if (ret)
 		goto err_unbind;
-	}
 #endif
 
 	drm_kms_helper_poll_init(drm);
@@ -310,8 +292,7 @@ static int imx_drm_bind(struct device *dev)
 err_fbhelper:
 	drm_kms_helper_poll_fini(drm);
 #if IS_ENABLED(CONFIG_DRM_FBDEV_EMULATION)
-	if (imxdrm->fbhelper)
-		drm_fbdev_cma_fini(imxdrm->fbhelper);
+	drm_fb_cma_fbdev_fini(drm);
 err_unbind:
 #endif
 	component_unbind_all(drm->dev, drm);
@@ -326,14 +307,12 @@ static int imx_drm_bind(struct device *dev)
 static void imx_drm_unbind(struct device *dev)
 {
 	struct drm_device *drm = dev_get_drvdata(dev);
-	struct imx_drm_device *imxdrm = drm->dev_private;
 
 	drm_dev_unregister(drm);
 
 	drm_kms_helper_poll_fini(drm);
 
-	if (imxdrm->fbhelper)
-		drm_fbdev_cma_fini(imxdrm->fbhelper);
+	drm_fb_cma_fbdev_fini(drm);
 
 	drm_mode_config_cleanup(drm);
 
diff --git a/drivers/gpu/drm/imx/imx-drm.h b/drivers/gpu/drm/imx/imx-drm.h
index f6dd64be9cd5..8afdc49ee695 100644
--- a/drivers/gpu/drm/imx/imx-drm.h
+++ b/drivers/gpu/drm/imx/imx-drm.h
@@ -7,7 +7,6 @@ struct drm_connector;
 struct drm_device;
 struct drm_display_mode;
 struct drm_encoder;
-struct drm_fbdev_cma;
 struct drm_framebuffer;
 struct drm_plane;
 struct imx_drm_crtc;
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 08/22] drm/meson: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (6 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 07/22] drm/imx: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 09/22] drm/mxsfb: " Noralf Trønnes
                   ` (15 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Neil Armstrong <narmstrong@baylibre.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
---
 drivers/gpu/drm/meson/meson_drv.c | 20 +++++---------------
 drivers/gpu/drm/meson/meson_drv.h |  1 -
 2 files changed, 5 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c
index 3b804fdaf7a0..35e6ad5b565f 100644
--- a/drivers/gpu/drm/meson/meson_drv.c
+++ b/drivers/gpu/drm/meson/meson_drv.c
@@ -35,6 +35,7 @@
 #include <drm/drm_plane_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_rect.h>
 #include <drm/drm_fb_helper.h>
@@ -68,15 +69,8 @@
  * - Powering Up HDMI controller and PHY
  */
 
-static void meson_fb_output_poll_changed(struct drm_device *dev)
-{
-	struct meson_drm *priv = dev->dev_private;
-
-	drm_fbdev_cma_hotplug_event(priv->fbdev);
-}
-
 static const struct drm_mode_config_funcs meson_mode_config_funcs = {
-	.output_poll_changed = meson_fb_output_poll_changed,
+	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check        = drm_atomic_helper_check,
 	.atomic_commit       = drm_atomic_helper_commit,
 	.fb_create           = drm_gem_fb_create,
@@ -254,12 +248,9 @@ static int meson_drv_bind_master(struct device *dev, bool has_components)
 
 	drm_mode_config_reset(drm);
 
-	priv->fbdev = drm_fbdev_cma_init(drm, 32,
-					 drm->mode_config.num_connector);
-	if (IS_ERR(priv->fbdev)) {
-		ret = PTR_ERR(priv->fbdev);
+	ret = drm_fb_cma_fbdev_init(drm, 32, 0);
+	if (ret)
 		goto free_drm;
-	}
 
 	drm_kms_helper_poll_init(drm);
 
@@ -285,11 +276,10 @@ static int meson_drv_bind(struct device *dev)
 static void meson_drv_unbind(struct device *dev)
 {
 	struct drm_device *drm = dev_get_drvdata(dev);
-	struct meson_drm *priv = drm->dev_private;
 
 	drm_dev_unregister(drm);
 	drm_kms_helper_poll_fini(drm);
-	drm_fbdev_cma_fini(priv->fbdev);
+	drm_fb_cma_fbdev_fini(drm);
 	drm_mode_config_cleanup(drm);
 	drm_dev_unref(drm);
 
diff --git a/drivers/gpu/drm/meson/meson_drv.h b/drivers/gpu/drm/meson/meson_drv.h
index 5e8b392b9d1f..746bbdbbdec3 100644
--- a/drivers/gpu/drm/meson/meson_drv.h
+++ b/drivers/gpu/drm/meson/meson_drv.h
@@ -33,7 +33,6 @@ struct meson_drm {
 
 	struct drm_device *drm;
 	struct drm_crtc *crtc;
-	struct drm_fbdev_cma *fbdev;
 	struct drm_plane *primary_plane;
 
 	/* Components Data */
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 09/22] drm/mxsfb: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (7 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 08/22] drm/meson: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 10/22] drm/pl111: " Noralf Trønnes
                   ` (14 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Marek Vasut <marex@denx.de>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
---
 drivers/gpu/drm/mxsfb/mxsfb_drv.c | 21 ++++-----------------
 drivers/gpu/drm/mxsfb/mxsfb_drv.h |  1 -
 2 files changed, 4 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
index 1207ffe36250..d846dbfc22e9 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c
+++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
@@ -223,11 +223,8 @@ static int mxsfb_load(struct drm_device *drm, unsigned long flags)
 
 	drm_kms_helper_poll_init(drm);
 
-	mxsfb->fbdev = drm_fbdev_cma_init(drm, 32,
-					  drm->mode_config.num_connector);
-	if (IS_ERR(mxsfb->fbdev)) {
-		ret = PTR_ERR(mxsfb->fbdev);
-		mxsfb->fbdev = NULL;
+	ret = drm_fb_cma_fbdev_init(drm, 32, 0);
+	if (ret) {
 		dev_err(drm->dev, "Failed to init FB CMA area\n");
 		goto err_cma;
 	}
@@ -250,10 +247,7 @@ static int mxsfb_load(struct drm_device *drm, unsigned long flags)
 
 static void mxsfb_unload(struct drm_device *drm)
 {
-	struct mxsfb_drm_private *mxsfb = drm->dev_private;
-
-	if (mxsfb->fbdev)
-		drm_fbdev_cma_fini(mxsfb->fbdev);
+	drm_fb_cma_fbdev_fini(drm);
 
 	drm_kms_helper_poll_fini(drm);
 	drm_mode_config_cleanup(drm);
@@ -267,13 +261,6 @@ static void mxsfb_unload(struct drm_device *drm)
 	pm_runtime_disable(drm->dev);
 }
 
-static void mxsfb_lastclose(struct drm_device *drm)
-{
-	struct mxsfb_drm_private *mxsfb = drm->dev_private;
-
-	drm_fbdev_cma_restore_mode(mxsfb->fbdev);
-}
-
 static int mxsfb_enable_vblank(struct drm_device *drm, unsigned int crtc)
 {
 	struct mxsfb_drm_private *mxsfb = drm->dev_private;
@@ -329,7 +316,7 @@ static struct drm_driver mxsfb_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET |
 				  DRIVER_PRIME | DRIVER_ATOMIC |
 				  DRIVER_HAVE_IRQ,
-	.lastclose		= mxsfb_lastclose,
+	.lastclose		= drm_fb_helper_lastclose,
 	.irq_handler		= mxsfb_irq_handler,
 	.irq_preinstall		= mxsfb_irq_preinstall,
 	.irq_uninstall		= mxsfb_irq_preinstall,
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.h b/drivers/gpu/drm/mxsfb/mxsfb_drv.h
index 5d0883fc805b..bedd6801edca 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_drv.h
+++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.h
@@ -37,7 +37,6 @@ struct mxsfb_drm_private {
 	struct drm_simple_display_pipe	pipe;
 	struct drm_connector		connector;
 	struct drm_panel		*panel;
-	struct drm_fbdev_cma		*fbdev;
 };
 
 int mxsfb_setup_crtc(struct drm_device *dev);
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 10/22] drm/pl111: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (8 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 09/22] drm/mxsfb: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 11/22] drm/rcar-du: " Noralf Trønnes
                   ` (13 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Eric Anholt <eric@anholt.net>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
---
 drivers/gpu/drm/pl111/pl111_drm.h |  1 -
 drivers/gpu/drm/pl111/pl111_drv.c | 16 ++++------------
 2 files changed, 4 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/pl111/pl111_drm.h b/drivers/gpu/drm/pl111/pl111_drm.h
index 440f53ebee8c..07fa2cdb364a 100644
--- a/drivers/gpu/drm/pl111/pl111_drm.h
+++ b/drivers/gpu/drm/pl111/pl111_drm.h
@@ -53,7 +53,6 @@ struct pl111_drm_dev_private {
 	struct drm_panel *panel;
 	struct drm_bridge *bridge;
 	struct drm_simple_display_pipe pipe;
-	struct drm_fbdev_cma *fbdev;
 
 	void *regs;
 	u32 ienb;
diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c
index 201d57d5cb54..acb738c69873 100644
--- a/drivers/gpu/drm/pl111/pl111_drv.c
+++ b/drivers/gpu/drm/pl111/pl111_drv.c
@@ -64,6 +64,7 @@
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_of.h>
 #include <drm/drm_bridge.h>
@@ -137,8 +138,7 @@ static int pl111_modeset_init(struct drm_device *dev)
 
 	drm_mode_config_reset(dev);
 
-	priv->fbdev = drm_fbdev_cma_init(dev, 32,
-					 dev->mode_config.num_connector);
+	drm_fb_cma_fbdev_init(dev, 32, 0);
 
 	drm_kms_helper_poll_init(dev);
 
@@ -155,17 +155,10 @@ static int pl111_modeset_init(struct drm_device *dev)
 
 DEFINE_DRM_GEM_CMA_FOPS(drm_fops);
 
-static void pl111_lastclose(struct drm_device *dev)
-{
-	struct pl111_drm_dev_private *priv = dev->dev_private;
-
-	drm_fbdev_cma_restore_mode(priv->fbdev);
-}
-
 static struct drm_driver pl111_drm_driver = {
 	.driver_features =
 		DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME | DRIVER_ATOMIC,
-	.lastclose = pl111_lastclose,
+	.lastclose = drm_fb_helper_lastclose,
 	.ioctls = NULL,
 	.fops = &drm_fops,
 	.name = "pl111",
@@ -281,8 +274,7 @@ static int pl111_amba_remove(struct amba_device *amba_dev)
 	struct pl111_drm_dev_private *priv = drm->dev_private;
 
 	drm_dev_unregister(drm);
-	if (priv->fbdev)
-		drm_fbdev_cma_fini(priv->fbdev);
+	drm_fb_cma_fbdev_fini(drm);
 	if (priv->panel)
 		drm_panel_bridge_remove(priv->bridge);
 	drm_mode_config_cleanup(drm);
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 11/22] drm/rcar-du: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (9 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 10/22] drm/pl111: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 12/22] drm/sti: " Noralf Trønnes
                   ` (12 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
---
 drivers/gpu/drm/rcar-du/rcar_du_drv.c | 13 +++----------
 drivers/gpu/drm/rcar-du/rcar_du_drv.h |  2 --
 drivers/gpu/drm/rcar-du/rcar_du_kms.c | 20 +++++---------------
 3 files changed, 8 insertions(+), 27 deletions(-)

diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
index d2f29e6b1112..aa342a1b0d12 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
@@ -23,6 +23,7 @@
 
 #include <drm/drmP.h>
 #include <drm/drm_crtc_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 
@@ -224,19 +225,12 @@ MODULE_DEVICE_TABLE(of, rcar_du_of_table);
  * DRM operations
  */
 
-static void rcar_du_lastclose(struct drm_device *dev)
-{
-	struct rcar_du_device *rcdu = dev->dev_private;
-
-	drm_fbdev_cma_restore_mode(rcdu->fbdev);
-}
-
 DEFINE_DRM_GEM_CMA_FOPS(rcar_du_fops);
 
 static struct drm_driver rcar_du_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME
 				| DRIVER_ATOMIC,
-	.lastclose		= rcar_du_lastclose,
+	.lastclose		= drm_fb_helper_lastclose,
 	.gem_free_object_unlocked = drm_gem_cma_free_object,
 	.gem_vm_ops		= &drm_gem_cma_vm_ops,
 	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
@@ -298,8 +292,7 @@ static int rcar_du_remove(struct platform_device *pdev)
 
 	drm_dev_unregister(ddev);
 
-	if (rcdu->fbdev)
-		drm_fbdev_cma_fini(rcdu->fbdev);
+	drm_fb_cma_fbdev_fini(ddev);
 
 	drm_kms_helper_poll_fini(ddev);
 	drm_mode_config_cleanup(ddev);
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.h b/drivers/gpu/drm/rcar-du/rcar_du_drv.h
index f8cd79488ece..bb3516ad26b3 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.h
+++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.h
@@ -24,7 +24,6 @@
 struct clk;
 struct device;
 struct drm_device;
-struct drm_fbdev_cma;
 struct rcar_du_device;
 struct rcar_du_lvdsenc;
 
@@ -80,7 +79,6 @@ struct rcar_du_device {
 	void __iomem *mmio;
 
 	struct drm_device *ddev;
-	struct drm_fbdev_cma *fbdev;
 
 	struct rcar_du_crtc crtcs[RCAR_DU_MAX_CRTCS];
 	unsigned int num_crtcs;
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
index 566d1a948c8f..344c4613fbc1 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
@@ -16,6 +16,7 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_crtc_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
@@ -217,13 +218,6 @@ rcar_du_fb_create(struct drm_device *dev, struct drm_file *file_priv,
 	return drm_gem_fb_create(dev, file_priv, mode_cmd);
 }
 
-static void rcar_du_output_poll_changed(struct drm_device *dev)
-{
-	struct rcar_du_device *rcdu = dev->dev_private;
-
-	drm_fbdev_cma_hotplug_event(rcdu->fbdev);
-}
-
 /* -----------------------------------------------------------------------------
  * Atomic Check and Update
  */
@@ -278,7 +272,7 @@ static const struct drm_mode_config_helper_funcs rcar_du_mode_config_helper = {
 
 static const struct drm_mode_config_funcs rcar_du_mode_config_funcs = {
 	.fb_create = rcar_du_fb_create,
-	.output_poll_changed = rcar_du_output_poll_changed,
+	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = rcar_du_atomic_check,
 	.atomic_commit = drm_atomic_helper_commit,
 };
@@ -519,7 +513,6 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu)
 
 	struct drm_device *dev = rcdu->ddev;
 	struct drm_encoder *encoder;
-	struct drm_fbdev_cma *fbdev;
 	unsigned int num_encoders;
 	unsigned int num_groups;
 	unsigned int i;
@@ -629,12 +622,9 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu)
 	drm_kms_helper_poll_init(dev);
 
 	if (dev->mode_config.num_connector) {
-		fbdev = drm_fbdev_cma_init(dev, 32,
-					   dev->mode_config.num_connector);
-		if (IS_ERR(fbdev))
-			return PTR_ERR(fbdev);
-
-		rcdu->fbdev = fbdev;
+		ret = drm_fb_cma_fbdev_init(dev, 32, 0);
+		if (ret)
+			return ret;
 	} else {
 		dev_info(rcdu->dev,
 			 "no connector found, disabling fbdev emulation\n");
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 12/22] drm/sti: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (10 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 11/22] drm/rcar-du: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 15:01   ` Benjamin Gaignard
  2017-11-15 14:19 ` [PATCH v2 13/22] drm/stm: " Noralf Trønnes
                   ` (11 subsequent siblings)
  23 siblings, 1 reply; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Cc: Vincent Abriou <vincent.abriou@st.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
---
 drivers/gpu/drm/sti/sti_drv.c | 27 +++++----------------------
 drivers/gpu/drm/sti/sti_drv.h |  1 -
 2 files changed, 5 insertions(+), 23 deletions(-)

diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
index 9e9343101738..a4553a31c59e 100644
--- a/drivers/gpu/drm/sti/sti_drv.c
+++ b/drivers/gpu/drm/sti/sti_drv.c
@@ -17,6 +17,7 @@
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_of.h>
 
@@ -138,16 +139,9 @@ static int sti_atomic_check(struct drm_device *dev,
 	return ret;
 }
 
-static void sti_output_poll_changed(struct drm_device *ddev)
-{
-	struct sti_private *private = ddev->dev_private;
-
-	drm_fbdev_cma_hotplug_event(private->fbdev);
-}
-
 static const struct drm_mode_config_funcs sti_mode_config_funcs = {
 	.fb_create = drm_gem_fb_create,
-	.output_poll_changed = sti_output_poll_changed,
+	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = sti_atomic_check,
 	.atomic_commit = drm_atomic_helper_commit,
 };
@@ -230,11 +224,7 @@ static void sti_cleanup(struct drm_device *ddev)
 {
 	struct sti_private *private = ddev->dev_private;
 
-	if (private->fbdev) {
-		drm_fbdev_cma_fini(private->fbdev);
-		private->fbdev = NULL;
-	}
-
+	drm_fb_cma_fbdev_fini(ddev);
 	drm_kms_helper_poll_fini(ddev);
 	component_unbind_all(ddev->dev, ddev);
 	kfree(private);
@@ -244,8 +234,6 @@ static void sti_cleanup(struct drm_device *ddev)
 static int sti_bind(struct device *dev)
 {
 	struct drm_device *ddev;
-	struct sti_private *private;
-	struct drm_fbdev_cma *fbdev;
 	int ret;
 
 	ddev = drm_dev_alloc(&sti_driver, dev);
@@ -266,15 +254,10 @@ static int sti_bind(struct device *dev)
 
 	drm_mode_config_reset(ddev);
 
-	private = ddev->dev_private;
 	if (ddev->mode_config.num_connector) {
-		fbdev = drm_fbdev_cma_init(ddev, 32,
-					   ddev->mode_config.num_connector);
-		if (IS_ERR(fbdev)) {
+		ret = drm_fb_cma_fbdev_init(ddev, 32, 0);
+		if (ret)
 			DRM_DEBUG_DRIVER("Warning: fails to create fbdev\n");
-			fbdev = NULL;
-		}
-		private->fbdev = fbdev;
 	}
 
 	return 0;
diff --git a/drivers/gpu/drm/sti/sti_drv.h b/drivers/gpu/drm/sti/sti_drv.h
index 6502ed2d3351..16c5c9110cb0 100644
--- a/drivers/gpu/drm/sti/sti_drv.h
+++ b/drivers/gpu/drm/sti/sti_drv.h
@@ -24,7 +24,6 @@ struct sti_private {
 	struct sti_compositor *compo;
 	struct drm_property *plane_zorder_property;
 	struct drm_device *drm_dev;
-	struct drm_fbdev_cma *fbdev;
 };
 
 extern struct platform_driver sti_tvout_driver;
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 13/22] drm/stm: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (11 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 12/22] drm/sti: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 14/22] drm/sun4i: " Noralf Trønnes
                   ` (10 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.
Remove duplicate ldev assignment.

Cc: Yannick Fertre <yannick.fertre@st.com>
Cc: Philippe Cornu <philippe.cornu@st.com>
Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Cc: Vincent Abriou <vincent.abriou@st.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Acked-by: Philippe Cornu <philippe.cornu@st.com>
---
 drivers/gpu/drm/stm/drv.c  | 38 ++++++--------------------------------
 drivers/gpu/drm/stm/ltdc.h |  1 -
 2 files changed, 6 insertions(+), 33 deletions(-)

diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c
index c857663eafc2..555b05010e9b 100644
--- a/drivers/gpu/drm/stm/drv.c
+++ b/drivers/gpu/drm/stm/drv.c
@@ -15,6 +15,7 @@
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
@@ -24,35 +25,19 @@
 #define STM_MAX_FB_WIDTH	2048
 #define STM_MAX_FB_HEIGHT	2048 /* same as width to handle orientation */
 
-static void drv_output_poll_changed(struct drm_device *ddev)
-{
-	struct ltdc_device *ldev = ddev->dev_private;
-
-	drm_fbdev_cma_hotplug_event(ldev->fbdev);
-}
-
 static const struct drm_mode_config_funcs drv_mode_config_funcs = {
 	.fb_create = drm_gem_fb_create,
-	.output_poll_changed = drv_output_poll_changed,
+	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = drm_atomic_helper_commit,
 };
 
-static void drv_lastclose(struct drm_device *ddev)
-{
-	struct ltdc_device *ldev = ddev->dev_private;
-
-	DRM_DEBUG("%s\n", __func__);
-
-	drm_fbdev_cma_restore_mode(ldev->fbdev);
-}
-
 DEFINE_DRM_GEM_CMA_FOPS(drv_driver_fops);
 
 static struct drm_driver drv_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME |
 			   DRIVER_ATOMIC,
-	.lastclose = drv_lastclose,
+	.lastclose = drm_fb_helper_lastclose,
 	.name = "stm",
 	.desc = "STMicroelectronics SoC DRM",
 	.date = "20170330",
@@ -79,7 +64,6 @@ static struct drm_driver drv_driver = {
 static int drv_load(struct drm_device *ddev)
 {
 	struct platform_device *pdev = to_platform_device(ddev->dev);
-	struct drm_fbdev_cma *fbdev;
 	struct ltdc_device *ldev;
 	int ret;
 
@@ -112,14 +96,9 @@ static int drv_load(struct drm_device *ddev)
 	drm_kms_helper_poll_init(ddev);
 
 	if (ddev->mode_config.num_connector) {
-		ldev = ddev->dev_private;
-		fbdev = drm_fbdev_cma_init(ddev, 16,
-					   ddev->mode_config.num_connector);
-		if (IS_ERR(fbdev)) {
+		ret = drm_fb_cma_fbdev_init(ddev, 16, 0);
+		if (ret)
 			DRM_DEBUG("Warning: fails to create fbdev\n");
-			fbdev = NULL;
-		}
-		ldev->fbdev = fbdev;
 	}
 
 	platform_set_drvdata(pdev, ddev);
@@ -132,14 +111,9 @@ static int drv_load(struct drm_device *ddev)
 
 static void drv_unload(struct drm_device *ddev)
 {
-	struct ltdc_device *ldev = ddev->dev_private;
-
 	DRM_DEBUG("%s\n", __func__);
 
-	if (ldev->fbdev) {
-		drm_fbdev_cma_fini(ldev->fbdev);
-		ldev->fbdev = NULL;
-	}
+	drm_fb_cma_fbdev_fini(ddev);
 	drm_kms_helper_poll_fini(ddev);
 	ltdc_unload(ddev);
 	drm_mode_config_cleanup(ddev);
diff --git a/drivers/gpu/drm/stm/ltdc.h b/drivers/gpu/drm/stm/ltdc.h
index ae437557d715..27ac217406be 100644
--- a/drivers/gpu/drm/stm/ltdc.h
+++ b/drivers/gpu/drm/stm/ltdc.h
@@ -21,7 +21,6 @@ struct ltdc_caps {
 };
 
 struct ltdc_device {
-	struct drm_fbdev_cma *fbdev;
 	void __iomem *regs;
 	struct clk *pixel_clk;	/* lcd pixel clock */
 	struct mutex err_lock;	/* protecting error_status */
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 14/22] drm/sun4i: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (12 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 13/22] drm/stm: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 15/22] drm/tilcdc: " Noralf Trønnes
                   ` (9 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
---
 drivers/gpu/drm/sun4i/sun4i_drv.c         | 14 +++-----------
 drivers/gpu/drm/sun4i/sun4i_drv.h         |  2 --
 drivers/gpu/drm/sun4i/sun4i_framebuffer.c | 18 +++++-------------
 drivers/gpu/drm/sun4i/sun4i_framebuffer.h |  2 +-
 4 files changed, 9 insertions(+), 27 deletions(-)

diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index 75c76cdd82bc..2743c8a839a0 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -26,20 +26,13 @@
 #include "sun4i_framebuffer.h"
 #include "sun4i_tcon.h"
 
-static void sun4i_drv_lastclose(struct drm_device *dev)
-{
-	struct sun4i_drv *drv = dev->dev_private;
-
-	drm_fbdev_cma_restore_mode(drv->fbdev);
-}
-
 DEFINE_DRM_GEM_CMA_FOPS(sun4i_drv_fops);
 
 static struct drm_driver sun4i_drv_driver = {
 	.driver_features	= DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME | DRIVER_ATOMIC,
 
 	/* Generic Operations */
-	.lastclose		= sun4i_drv_lastclose,
+	.lastclose		= drm_fb_helper_lastclose,
 	.fops			= &sun4i_drv_fops,
 	.name			= "sun4i-drm",
 	.desc			= "Allwinner sun4i Display Engine",
@@ -126,10 +119,9 @@ static int sun4i_drv_bind(struct device *dev)
 	sun4i_remove_framebuffers();
 
 	/* Create our framebuffer */
-	drv->fbdev = sun4i_framebuffer_init(drm);
-	if (IS_ERR(drv->fbdev)) {
+	ret = sun4i_framebuffer_init(drm);
+	if (ret) {
 		dev_err(drm->dev, "Couldn't create our framebuffer\n");
-		ret = PTR_ERR(drv->fbdev);
 		goto cleanup_mode_config;
 	}
 
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.h b/drivers/gpu/drm/sun4i/sun4i_drv.h
index a960c89270cc..2825f140da54 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.h
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.h
@@ -20,8 +20,6 @@
 struct sun4i_drv {
 	struct list_head	engine_list;
 	struct list_head	tcon_list;
-
-	struct drm_fbdev_cma	*fbdev;
 };
 
 #endif /* _SUN4I_DRV_H_ */
diff --git a/drivers/gpu/drm/sun4i/sun4i_framebuffer.c b/drivers/gpu/drm/sun4i/sun4i_framebuffer.c
index 2992f0a6b349..38a36c0dfa2f 100644
--- a/drivers/gpu/drm/sun4i/sun4i_framebuffer.c
+++ b/drivers/gpu/drm/sun4i/sun4i_framebuffer.c
@@ -11,6 +11,7 @@
  */
 
 #include <drm/drm_atomic_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
 #include <drm/drmP.h>
@@ -18,21 +19,14 @@
 #include "sun4i_drv.h"
 #include "sun4i_framebuffer.h"
 
-static void sun4i_de_output_poll_changed(struct drm_device *drm)
-{
-	struct sun4i_drv *drv = drm->dev_private;
-
-	drm_fbdev_cma_hotplug_event(drv->fbdev);
-}
-
 static const struct drm_mode_config_funcs sun4i_de_mode_config_funcs = {
-	.output_poll_changed	= sun4i_de_output_poll_changed,
+	.output_poll_changed	= drm_fb_helper_output_poll_changed,
 	.atomic_check		= drm_atomic_helper_check,
 	.atomic_commit		= drm_atomic_helper_commit,
 	.fb_create		= drm_gem_fb_create,
 };
 
-struct drm_fbdev_cma *sun4i_framebuffer_init(struct drm_device *drm)
+int sun4i_framebuffer_init(struct drm_device *drm)
 {
 	drm_mode_config_reset(drm);
 
@@ -41,12 +35,10 @@ struct drm_fbdev_cma *sun4i_framebuffer_init(struct drm_device *drm)
 
 	drm->mode_config.funcs = &sun4i_de_mode_config_funcs;
 
-	return drm_fbdev_cma_init(drm, 32, drm->mode_config.num_connector);
+	return drm_fb_cma_fbdev_init(drm, 32, 0);
 }
 
 void sun4i_framebuffer_free(struct drm_device *drm)
 {
-	struct sun4i_drv *drv = drm->dev_private;
-
-	drm_fbdev_cma_fini(drv->fbdev);
+	drm_fb_cma_fbdev_fini(drm);
 }
diff --git a/drivers/gpu/drm/sun4i/sun4i_framebuffer.h b/drivers/gpu/drm/sun4i/sun4i_framebuffer.h
index 3afd65252ee0..7ef0aed8384c 100644
--- a/drivers/gpu/drm/sun4i/sun4i_framebuffer.h
+++ b/drivers/gpu/drm/sun4i/sun4i_framebuffer.h
@@ -13,7 +13,7 @@
 #ifndef _SUN4I_FRAMEBUFFER_H_
 #define _SUN4I_FRAMEBUFFER_H_
 
-struct drm_fbdev_cma *sun4i_framebuffer_init(struct drm_device *drm);
+int sun4i_framebuffer_init(struct drm_device *drm);
 void sun4i_framebuffer_free(struct drm_device *drm);
 
 #endif /* _SUN4I_FRAMEBUFFER_H_ */
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 15/22] drm/tilcdc: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (13 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 14/22] drm/sun4i: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 16/22] drm/tve200: " Noralf Trønnes
                   ` (8 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Jyri Sarha <jsarha@ti.com>
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Acked-by: Jyri Sarha <jsarha@ti.com>
---
 drivers/gpu/drm/tilcdc/tilcdc_drv.c | 26 +++++---------------------
 drivers/gpu/drm/tilcdc/tilcdc_drv.h |  2 --
 2 files changed, 5 insertions(+), 23 deletions(-)

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index bc4feb3a84b9..1afde61f1247 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -69,12 +69,6 @@ static struct drm_framebuffer *tilcdc_fb_create(struct drm_device *dev,
 	return drm_gem_fb_create(dev, file_priv, mode_cmd);
 }
 
-static void tilcdc_fb_output_poll_changed(struct drm_device *dev)
-{
-	struct tilcdc_drm_private *priv = dev->dev_private;
-	drm_fbdev_cma_hotplug_event(priv->fbdev);
-}
-
 static int tilcdc_atomic_check(struct drm_device *dev,
 			       struct drm_atomic_state *state)
 {
@@ -146,7 +140,7 @@ static int tilcdc_commit(struct drm_device *dev,
 
 static const struct drm_mode_config_funcs mode_config_funcs = {
 	.fb_create = tilcdc_fb_create,
-	.output_poll_changed = tilcdc_fb_output_poll_changed,
+	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = tilcdc_atomic_check,
 	.atomic_commit = tilcdc_commit,
 };
@@ -198,8 +192,7 @@ static void tilcdc_fini(struct drm_device *dev)
 
 	drm_kms_helper_poll_fini(dev);
 
-	if (priv->fbdev)
-		drm_fbdev_cma_fini(priv->fbdev);
+	drm_fb_cma_fbdev_fini(dev);
 
 	drm_irq_uninstall(dev);
 	drm_mode_config_cleanup(dev);
@@ -405,12 +398,9 @@ static int tilcdc_init(struct drm_driver *ddrv, struct device *dev)
 
 	drm_mode_config_reset(ddev);
 
-	priv->fbdev = drm_fbdev_cma_init(ddev, bpp,
-					 ddev->mode_config.num_connector);
-	if (IS_ERR(priv->fbdev)) {
-		ret = PTR_ERR(priv->fbdev);
+	ret = drm_fb_cma_fbdev_init(ddev, bpp, 0);
+	if (ret)
 		goto init_failed;
-	}
 
 	drm_kms_helper_poll_init(ddev);
 
@@ -427,12 +417,6 @@ static int tilcdc_init(struct drm_driver *ddrv, struct device *dev)
 	return ret;
 }
 
-static void tilcdc_lastclose(struct drm_device *dev)
-{
-	struct tilcdc_drm_private *priv = dev->dev_private;
-	drm_fbdev_cma_restore_mode(priv->fbdev);
-}
-
 static irqreturn_t tilcdc_irq(int irq, void *arg)
 {
 	struct drm_device *dev = arg;
@@ -537,7 +521,7 @@ DEFINE_DRM_GEM_CMA_FOPS(fops);
 static struct drm_driver tilcdc_driver = {
 	.driver_features    = (DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET |
 			       DRIVER_PRIME | DRIVER_ATOMIC),
-	.lastclose          = tilcdc_lastclose,
+	.lastclose          = drm_fb_helper_lastclose,
 	.irq_handler        = tilcdc_irq,
 	.gem_free_object_unlocked = drm_gem_cma_free_object,
 	.gem_print_info     = drm_gem_cma_print_info,
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.h b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
index 8caa11bc7aec..ead512216669 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.h
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
@@ -79,8 +79,6 @@ struct tilcdc_drm_private {
 
 	struct workqueue_struct *wq;
 
-	struct drm_fbdev_cma *fbdev;
-
 	struct drm_crtc *crtc;
 
 	unsigned int num_encoders;
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 16/22] drm/tve200: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (14 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 15/22] drm/tilcdc: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 17/22] drm/vc4: " Noralf Trønnes
                   ` (7 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
---
 drivers/gpu/drm/tve200/tve200_drm.h |  1 -
 drivers/gpu/drm/tve200/tve200_drv.c | 16 ++++------------
 2 files changed, 4 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/tve200/tve200_drm.h b/drivers/gpu/drm/tve200/tve200_drm.h
index 628b79324c48..5c270055bd58 100644
--- a/drivers/gpu/drm/tve200/tve200_drm.h
+++ b/drivers/gpu/drm/tve200/tve200_drm.h
@@ -103,7 +103,6 @@ struct tve200_drm_dev_private {
 	struct drm_panel *panel;
 	struct drm_bridge *bridge;
 	struct drm_simple_display_pipe pipe;
-	struct drm_fbdev_cma *fbdev;
 
 	void *regs;
 	struct clk *pclk;
diff --git a/drivers/gpu/drm/tve200/tve200_drv.c b/drivers/gpu/drm/tve200/tve200_drv.c
index bd6c9454d767..44911d921864 100644
--- a/drivers/gpu/drm/tve200/tve200_drv.c
+++ b/drivers/gpu/drm/tve200/tve200_drv.c
@@ -46,6 +46,7 @@
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_panel.h>
 #include <drm/drm_of.h>
@@ -130,8 +131,7 @@ static int tve200_modeset_init(struct drm_device *dev)
 	 * Passing in 16 here will make the RGB656 mode the default
 	 * Passing in 32 will use XRGB8888 mode
 	 */
-	priv->fbdev = drm_fbdev_cma_init(dev, 16,
-					 dev->mode_config.num_connector);
+	drm_fb_cma_fbdev_init(dev, 16, 0);
 	drm_kms_helper_poll_init(dev);
 
 	goto finish;
@@ -146,17 +146,10 @@ static int tve200_modeset_init(struct drm_device *dev)
 
 DEFINE_DRM_GEM_CMA_FOPS(drm_fops);
 
-static void tve200_lastclose(struct drm_device *dev)
-{
-	struct tve200_drm_dev_private *priv = dev->dev_private;
-
-	drm_fbdev_cma_restore_mode(priv->fbdev);
-}
-
 static struct drm_driver tve200_drm_driver = {
 	.driver_features =
 		DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME | DRIVER_ATOMIC,
-	.lastclose = tve200_lastclose,
+	.lastclose = drm_fb_helper_lastclose,
 	.ioctls = NULL,
 	.fops = &drm_fops,
 	.name = "tve200",
@@ -270,8 +263,7 @@ static int tve200_remove(struct platform_device *pdev)
 	struct tve200_drm_dev_private *priv = drm->dev_private;
 
 	drm_dev_unregister(drm);
-	if (priv->fbdev)
-		drm_fbdev_cma_fini(priv->fbdev);
+	drm_fb_cma_fbdev_fini(drm);
 	if (priv->panel)
 		drm_panel_bridge_remove(priv->bridge);
 	drm_mode_config_cleanup(drm);
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 17/22] drm/vc4: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (15 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 16/22] drm/tve200: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 18/22] drm/zte: " Noralf Trønnes
                   ` (6 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Eric Anholt <eric@anholt.net>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
---
 drivers/gpu/drm/vc4/vc4_drv.c | 13 ++-----------
 drivers/gpu/drm/vc4/vc4_drv.h |  2 --
 drivers/gpu/drm/vc4/vc4_kms.c | 18 ++++--------------
 3 files changed, 6 insertions(+), 27 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c
index e3c29729da2e..ceb385fd69c5 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.c
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
@@ -111,13 +111,6 @@ static int vc4_get_param_ioctl(struct drm_device *dev, void *data,
 	return 0;
 }
 
-static void vc4_lastclose(struct drm_device *dev)
-{
-	struct vc4_dev *vc4 = to_vc4_dev(dev);
-
-	drm_fbdev_cma_restore_mode(vc4->fbdev);
-}
-
 static const struct vm_operations_struct vc4_vm_ops = {
 	.fault = vc4_fault,
 	.open = drm_gem_vm_open,
@@ -159,7 +152,7 @@ static struct drm_driver vc4_drm_driver = {
 			    DRIVER_HAVE_IRQ |
 			    DRIVER_RENDER |
 			    DRIVER_PRIME),
-	.lastclose = vc4_lastclose,
+	.lastclose = drm_fb_helper_lastclose,
 	.irq_handler = vc4_irq,
 	.irq_preinstall = vc4_irq_preinstall,
 	.irq_postinstall = vc4_irq_postinstall,
@@ -301,12 +294,10 @@ static void vc4_drm_unbind(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct drm_device *drm = platform_get_drvdata(pdev);
-	struct vc4_dev *vc4 = to_vc4_dev(drm);
 
 	drm_dev_unregister(drm);
 
-	if (vc4->fbdev)
-		drm_fbdev_cma_fini(vc4->fbdev);
+	drm_fb_cma_fbdev_fini(drm);
 
 	drm_mode_config_cleanup(drm);
 
diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
index 9c0d380c96f2..3af22936d9b3 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.h
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
@@ -39,8 +39,6 @@ struct vc4_dev {
 	struct vc4_dsi *dsi1;
 	struct vc4_vec *vec;
 
-	struct drm_fbdev_cma *fbdev;
-
 	struct vc4_hang_state *hang_state;
 
 	/* The kernel-space BO cache.  Tracks buffers that have been
diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
index 50c4959b5bd3..4256f294c346 100644
--- a/drivers/gpu/drm/vc4/vc4_kms.c
+++ b/drivers/gpu/drm/vc4/vc4_kms.c
@@ -19,17 +19,11 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_plane_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
 #include "vc4_drv.h"
 
-static void vc4_output_poll_changed(struct drm_device *dev)
-{
-	struct vc4_dev *vc4 = to_vc4_dev(dev);
-
-	drm_fbdev_cma_hotplug_event(vc4->fbdev);
-}
-
 static void
 vc4_atomic_complete_commit(struct drm_atomic_state *state)
 {
@@ -194,7 +188,7 @@ static struct drm_framebuffer *vc4_fb_create(struct drm_device *dev,
 }
 
 static const struct drm_mode_config_funcs vc4_mode_funcs = {
-	.output_poll_changed = vc4_output_poll_changed,
+	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = vc4_atomic_commit,
 	.fb_create = vc4_fb_create,
@@ -224,12 +218,8 @@ int vc4_kms_load(struct drm_device *dev)
 
 	drm_mode_config_reset(dev);
 
-	if (dev->mode_config.num_connector) {
-		vc4->fbdev = drm_fbdev_cma_init(dev, 32,
-						dev->mode_config.num_connector);
-		if (IS_ERR(vc4->fbdev))
-			vc4->fbdev = NULL;
-	}
+	if (dev->mode_config.num_connector)
+		drm_fb_cma_fbdev_init(dev, 32, 0);
 
 	drm_kms_helper_poll_init(dev);
 
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 18/22] drm/zte: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (16 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 17/22] drm/vc4: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-17 13:46   ` Shawn Guo
  2017-11-15 14:19 ` [PATCH v2 19/22] drm/arm/mali: " Noralf Trønnes
                   ` (5 subsequent siblings)
  23 siblings, 1 reply; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Shawn Guo <shawnguo@kernel.org>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
---
 drivers/gpu/drm/zte/zx_drm_drv.c | 48 +++++-----------------------------------
 1 file changed, 6 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/zte/zx_drm_drv.c b/drivers/gpu/drm/zte/zx_drm_drv.c
index e8b8266c0cde..6f4205e80378 100644
--- a/drivers/gpu/drm/zte/zx_drm_drv.c
+++ b/drivers/gpu/drm/zte/zx_drm_drv.c
@@ -29,37 +29,19 @@
 #include "zx_drm_drv.h"
 #include "zx_vou.h"
 
-struct zx_drm_private {
-	struct drm_fbdev_cma *fbdev;
-};
-
-static void zx_drm_fb_output_poll_changed(struct drm_device *drm)
-{
-	struct zx_drm_private *priv = drm->dev_private;
-
-	drm_fbdev_cma_hotplug_event(priv->fbdev);
-}
-
 static const struct drm_mode_config_funcs zx_drm_mode_config_funcs = {
 	.fb_create = drm_gem_fb_create,
-	.output_poll_changed = zx_drm_fb_output_poll_changed,
+	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = drm_atomic_helper_commit,
 };
 
-static void zx_drm_lastclose(struct drm_device *drm)
-{
-	struct zx_drm_private *priv = drm->dev_private;
-
-	drm_fbdev_cma_restore_mode(priv->fbdev);
-}
-
 DEFINE_DRM_GEM_CMA_FOPS(zx_drm_fops);
 
 static struct drm_driver zx_drm_driver = {
 	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
 			   DRIVER_ATOMIC,
-	.lastclose = zx_drm_lastclose,
+	.lastclose = drm_fb_helper_lastclose,
 	.gem_free_object_unlocked = drm_gem_cma_free_object,
 	.gem_vm_ops = &drm_gem_cma_vm_ops,
 	.dumb_create = drm_gem_cma_dumb_create,
@@ -83,18 +65,12 @@ static struct drm_driver zx_drm_driver = {
 static int zx_drm_bind(struct device *dev)
 {
 	struct drm_device *drm;
-	struct zx_drm_private *priv;
 	int ret;
 
-	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
-	if (!priv)
-		return -ENOMEM;
-
 	drm = drm_dev_alloc(&zx_drm_driver, dev);
 	if (IS_ERR(drm))
 		return PTR_ERR(drm);
 
-	drm->dev_private = priv;
 	dev_set_drvdata(dev, drm);
 
 	drm_mode_config_init(drm);
@@ -125,12 +101,9 @@ static int zx_drm_bind(struct device *dev)
 	drm_mode_config_reset(drm);
 	drm_kms_helper_poll_init(drm);
 
-	priv->fbdev = drm_fbdev_cma_init(drm, 32,
-					 drm->mode_config.num_connector);
-	if (IS_ERR(priv->fbdev)) {
-		ret = PTR_ERR(priv->fbdev);
+	ret = drm_fb_cma_fbdev_init(drm, 32, 0);
+	if (ret) {
 		DRM_DEV_ERROR(dev, "failed to init cma fbdev: %d\n", ret);
-		priv->fbdev = NULL;
 		goto out_poll_fini;
 	}
 
@@ -141,10 +114,7 @@ static int zx_drm_bind(struct device *dev)
 	return 0;
 
 out_fbdev_fini:
-	if (priv->fbdev) {
-		drm_fbdev_cma_fini(priv->fbdev);
-		priv->fbdev = NULL;
-	}
+	drm_fb_cma_fbdev_fini(drm);
 out_poll_fini:
 	drm_kms_helper_poll_fini(drm);
 	drm_mode_config_cleanup(drm);
@@ -152,7 +122,6 @@ static int zx_drm_bind(struct device *dev)
 	component_unbind_all(dev, drm);
 out_unregister:
 	dev_set_drvdata(dev, NULL);
-	drm->dev_private = NULL;
 	drm_dev_unref(drm);
 	return ret;
 }
@@ -160,18 +129,13 @@ static int zx_drm_bind(struct device *dev)
 static void zx_drm_unbind(struct device *dev)
 {
 	struct drm_device *drm = dev_get_drvdata(dev);
-	struct zx_drm_private *priv = drm->dev_private;
 
 	drm_dev_unregister(drm);
-	if (priv->fbdev) {
-		drm_fbdev_cma_fini(priv->fbdev);
-		priv->fbdev = NULL;
-	}
+	drm_fb_cma_fbdev_fini(drm);
 	drm_kms_helper_poll_fini(drm);
 	drm_mode_config_cleanup(drm);
 	component_unbind_all(dev, drm);
 	dev_set_drvdata(dev, NULL);
-	drm->dev_private = NULL;
 	drm_dev_unref(drm);
 }
 
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 19/22] drm/arm/mali: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (17 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 18/22] drm/zte: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:19 ` [PATCH v2 20/22] drm/fsl-dcu: " Noralf Trønnes
                   ` (4 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Brian Starkey <brian.starkey@arm.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Acked-by: Liviu Dudau <liviu.dudau@arm.com>
---
 drivers/gpu/drm/arm/malidp_drv.c | 39 +++++++--------------------------------
 drivers/gpu/drm/arm/malidp_drv.h |  1 -
 2 files changed, 7 insertions(+), 33 deletions(-)

diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
index 75f0bce33941..65ecc49c5862 100644
--- a/drivers/gpu/drm/arm/malidp_drv.c
+++ b/drivers/gpu/drm/arm/malidp_drv.c
@@ -13,7 +13,6 @@
 #include <linux/module.h>
 #include <linux/clk.h>
 #include <linux/component.h>
-#include <linux/console.h>
 #include <linux/of_device.h>
 #include <linux/of_graph.h>
 #include <linux/of_reserved_mem.h>
@@ -24,6 +23,7 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_crtc_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
@@ -183,13 +183,6 @@ static int malidp_set_and_wait_config_valid(struct drm_device *drm)
 	return (ret > 0) ? 0 : -ETIMEDOUT;
 }
 
-static void malidp_output_poll_changed(struct drm_device *drm)
-{
-	struct malidp_drm *malidp = drm->dev_private;
-
-	drm_fbdev_cma_hotplug_event(malidp->fbdev);
-}
-
 static void malidp_atomic_commit_hw_done(struct drm_atomic_state *state)
 {
 	struct drm_pending_vblank_event *event;
@@ -252,7 +245,7 @@ static const struct drm_mode_config_helper_funcs malidp_mode_config_helpers = {
 
 static const struct drm_mode_config_funcs malidp_mode_config_funcs = {
 	.fb_create = drm_gem_fb_create,
-	.output_poll_changed = malidp_output_poll_changed,
+	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = drm_atomic_helper_commit,
 };
@@ -317,19 +310,12 @@ static int malidp_irq_init(struct platform_device *pdev)
 	return 0;
 }
 
-static void malidp_lastclose(struct drm_device *drm)
-{
-	struct malidp_drm *malidp = drm->dev_private;
-
-	drm_fbdev_cma_restore_mode(malidp->fbdev);
-}
-
 DEFINE_DRM_GEM_CMA_FOPS(fops);
 
 static struct drm_driver malidp_driver = {
 	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
 			   DRIVER_PRIME,
-	.lastclose = malidp_lastclose,
+	.lastclose = drm_fb_helper_lastclose,
 	.gem_free_object_unlocked = drm_gem_cma_free_object,
 	.gem_vm_ops = &drm_gem_cma_vm_ops,
 	.dumb_create = drm_gem_cma_dumb_create,
@@ -627,14 +613,9 @@ static int malidp_bind(struct device *dev)
 
 	drm_mode_config_reset(drm);
 
-	malidp->fbdev = drm_fbdev_cma_init(drm, 32,
-					   drm->mode_config.num_connector);
-
-	if (IS_ERR(malidp->fbdev)) {
-		ret = PTR_ERR(malidp->fbdev);
-		malidp->fbdev = NULL;
+	ret = drm_fb_cma_fbdev_init(drm, 32, 0);
+	if (ret)
 		goto fbdev_fail;
-	}
 
 	drm_kms_helper_poll_init(drm);
 
@@ -645,10 +626,7 @@ static int malidp_bind(struct device *dev)
 	return 0;
 
 register_fail:
-	if (malidp->fbdev) {
-		drm_fbdev_cma_fini(malidp->fbdev);
-		malidp->fbdev = NULL;
-	}
+	drm_fb_cma_fbdev_fini(drm);
 	drm_kms_helper_poll_fini(drm);
 fbdev_fail:
 	pm_runtime_get_sync(dev);
@@ -685,10 +663,7 @@ static void malidp_unbind(struct device *dev)
 	struct malidp_drm *malidp = drm->dev_private;
 
 	drm_dev_unregister(drm);
-	if (malidp->fbdev) {
-		drm_fbdev_cma_fini(malidp->fbdev);
-		malidp->fbdev = NULL;
-	}
+	drm_fb_cma_fbdev_fini(drm);
 	drm_kms_helper_poll_fini(drm);
 	pm_runtime_get_sync(dev);
 	malidp_se_irq_fini(drm);
diff --git a/drivers/gpu/drm/arm/malidp_drv.h b/drivers/gpu/drm/arm/malidp_drv.h
index 70ed6aeccf05..e0d12c9fc6b8 100644
--- a/drivers/gpu/drm/arm/malidp_drv.h
+++ b/drivers/gpu/drm/arm/malidp_drv.h
@@ -20,7 +20,6 @@
 
 struct malidp_drm {
 	struct malidp_hw_device *dev;
-	struct drm_fbdev_cma *fbdev;
 	struct drm_crtc crtc;
 	wait_queue_head_t wq;
 	atomic_t config_valid;
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 20/22] drm/fsl-dcu: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (18 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 19/22] drm/arm/mali: " Noralf Trønnes
@ 2017-11-15 14:19 ` Noralf Trønnes
  2017-11-15 14:20 ` [PATCH v2 21/22] drm/tinydrm: Use drm_fb_cma_fbdev_init_with_funcs/fini() Noralf Trønnes
                   ` (3 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:19 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Stefan Agner <stefan@agner.ch>
Cc: Alison Wang <alison.wang@freescale.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
---
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 26 ++++++--------------------
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h |  1 -
 2 files changed, 6 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
index 80232321a244..e487a2002783 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
@@ -11,7 +11,6 @@
 
 #include <linux/clk.h>
 #include <linux/clk-provider.h>
-#include <linux/console.h>
 #include <linux/io.h>
 #include <linux/mfd/syscon.h>
 #include <linux/mm.h>
@@ -25,6 +24,7 @@
 #include <drm/drmP.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_modeset_helper.h>
@@ -89,19 +89,15 @@ static int fsl_dcu_load(struct drm_device *dev, unsigned long flags)
 			"Invalid legacyfb_depth.  Defaulting to 24bpp\n");
 		legacyfb_depth = 24;
 	}
-	fsl_dev->fbdev = drm_fbdev_cma_init(dev, legacyfb_depth, 1);
-	if (IS_ERR(fsl_dev->fbdev)) {
-		ret = PTR_ERR(fsl_dev->fbdev);
-		fsl_dev->fbdev = NULL;
+	ret = drm_fb_cma_fbdev_init(dev, legacyfb_depth, 1);
+	if (ret)
 		goto done;
-	}
 
 	return 0;
 done:
 	drm_kms_helper_poll_fini(dev);
 
-	if (fsl_dev->fbdev)
-		drm_fbdev_cma_fini(fsl_dev->fbdev);
+	drm_fb_cma_fbdev_fini(dev);
 
 	drm_mode_config_cleanup(dev);
 	drm_irq_uninstall(dev);
@@ -112,13 +108,10 @@ static int fsl_dcu_load(struct drm_device *dev, unsigned long flags)
 
 static void fsl_dcu_unload(struct drm_device *dev)
 {
-	struct fsl_dcu_drm_device *fsl_dev = dev->dev_private;
-
 	drm_atomic_helper_shutdown(dev);
 	drm_kms_helper_poll_fini(dev);
 
-	if (fsl_dev->fbdev)
-		drm_fbdev_cma_fini(fsl_dev->fbdev);
+	drm_fb_cma_fbdev_fini(dev);
 
 	drm_mode_config_cleanup(dev);
 	drm_irq_uninstall(dev);
@@ -147,19 +140,12 @@ static irqreturn_t fsl_dcu_drm_irq(int irq, void *arg)
 	return IRQ_HANDLED;
 }
 
-static void fsl_dcu_drm_lastclose(struct drm_device *dev)
-{
-	struct fsl_dcu_drm_device *fsl_dev = dev->dev_private;
-
-	drm_fbdev_cma_restore_mode(fsl_dev->fbdev);
-}
-
 DEFINE_DRM_GEM_CMA_FOPS(fsl_dcu_drm_fops);
 
 static struct drm_driver fsl_dcu_drm_driver = {
 	.driver_features	= DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
 				| DRIVER_PRIME | DRIVER_ATOMIC,
-	.lastclose		= fsl_dcu_drm_lastclose,
+	.lastclose		= drm_fb_helper_lastclose,
 	.load			= fsl_dcu_load,
 	.unload			= fsl_dcu_unload,
 	.irq_handler		= fsl_dcu_drm_irq,
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h
index 93bfb98012d4..cb87bb74cb87 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h
@@ -191,7 +191,6 @@ struct fsl_dcu_drm_device {
 	/*protects hardware register*/
 	spinlock_t irq_lock;
 	struct drm_device *drm;
-	struct drm_fbdev_cma *fbdev;
 	struct drm_crtc crtc;
 	struct drm_encoder encoder;
 	struct fsl_dcu_drm_connector connector;
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 21/22] drm/tinydrm: Use drm_fb_cma_fbdev_init_with_funcs/fini()
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (19 preceding siblings ...)
  2017-11-15 14:19 ` [PATCH v2 20/22] drm/fsl-dcu: " Noralf Trønnes
@ 2017-11-15 14:20 ` Noralf Trønnes
  2017-11-15 14:20 ` [PATCH v2 22/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (2 subsequent siblings)
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:20 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Use drm_fb_cma_fbdev_init_with_funcs() and drm_fb_cma_fbdev_fini() which
relies on the fact that drm_device holds a pointer to the drm_fb_helper
structure. This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.
Remove todo entry.

Cc: David Lechner <david@lechnology.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Acked-by: David Lechner <david@lechnology.com>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 Documentation/gpu/todo.rst                  |  5 ----
 drivers/gpu/drm/tinydrm/core/tinydrm-core.c | 37 ++++-------------------------
 drivers/gpu/drm/tinydrm/mi0283qt.c          |  3 ++-
 drivers/gpu/drm/tinydrm/st7586.c            |  3 ++-
 include/drm/tinydrm/tinydrm.h               |  3 ---
 5 files changed, 9 insertions(+), 42 deletions(-)

diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
index 6bce1beafabe..6dbcd4a90015 100644
--- a/Documentation/gpu/todo.rst
+++ b/Documentation/gpu/todo.rst
@@ -395,11 +395,6 @@ those drivers as simple as possible, so lots of room for refactoring:
   one of the ideas for having a shared dsi/dbi helper, abstracting away the
   transport details more.
 
-- tinydrm_lastclose could be drm_fb_helper_lastclose. Only thing we need
-  for that is to store the drm_fb_helper pointer somewhere in
-  drm_device->mode_config. And then we could roll that out to all the
-  drivers.
-
 - tinydrm_gem_cma_prime_import_sg_table should probably go into the cma
   helpers, as a _vmapped variant (since not every driver needs the vmap).
   And tinydrm_gem_cma_free_object could the be merged into
diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
index bd7b82824a34..4c6616278c48 100644
--- a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
+++ b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c
@@ -10,6 +10,7 @@
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
 #include <drm/tinydrm/tinydrm.h>
 #include <linux/device.h>
@@ -35,23 +36,6 @@
  * and registers the DRM device using devm_tinydrm_register().
  */
 
-/**
- * tinydrm_lastclose - DRM lastclose helper
- * @drm: DRM device
- *
- * This function ensures that fbdev is restored when drm_lastclose() is called
- * on the last drm_release(). Drivers can use this as their
- * &drm_driver->lastclose callback.
- */
-void tinydrm_lastclose(struct drm_device *drm)
-{
-	struct tinydrm_device *tdev = drm->dev_private;
-
-	DRM_DEBUG_KMS("\n");
-	drm_fbdev_cma_restore_mode(tdev->fbdev_cma);
-}
-EXPORT_SYMBOL(tinydrm_lastclose);
-
 /**
  * tinydrm_gem_cma_prime_import_sg_table - Produce a CMA GEM object from
  *     another driver's scatter/gather table of pinned pages
@@ -214,35 +198,24 @@ EXPORT_SYMBOL(devm_tinydrm_init);
 static int tinydrm_register(struct tinydrm_device *tdev)
 {
 	struct drm_device *drm = tdev->drm;
-	int bpp = drm->mode_config.preferred_depth;
-	struct drm_fbdev_cma *fbdev;
 	int ret;
 
 	ret = drm_dev_register(tdev->drm, 0);
 	if (ret)
 		return ret;
 
-	fbdev = drm_fbdev_cma_init_with_funcs(drm, bpp ? bpp : 32,
-					      drm->mode_config.num_connector,
-					      tdev->fb_funcs);
-	if (IS_ERR(fbdev))
-		DRM_ERROR("Failed to initialize fbdev: %ld\n", PTR_ERR(fbdev));
-	else
-		tdev->fbdev_cma = fbdev;
+	ret = drm_fb_cma_fbdev_init_with_funcs(drm, 0, 0, tdev->fb_funcs);
+	if (ret)
+		DRM_ERROR("Failed to initialize fbdev: %d\n", ret);
 
 	return 0;
 }
 
 static void tinydrm_unregister(struct tinydrm_device *tdev)
 {
-	struct drm_fbdev_cma *fbdev_cma = tdev->fbdev_cma;
-
 	drm_atomic_helper_shutdown(tdev->drm);
-	/* don't restore fbdev in lastclose, keep pipeline disabled */
-	tdev->fbdev_cma = NULL;
+	drm_fb_cma_fbdev_fini(tdev->drm);
 	drm_dev_unregister(tdev->drm);
-	if (fbdev_cma)
-		drm_fbdev_cma_fini(fbdev_cma);
 }
 
 static void devm_tinydrm_register_release(void *data)
diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c
index 70ae4f76f455..674d407640be 100644
--- a/drivers/gpu/drm/tinydrm/mi0283qt.c
+++ b/drivers/gpu/drm/tinydrm/mi0283qt.c
@@ -9,6 +9,7 @@
  * (at your option) any later version.
  */
 
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_modeset_helper.h>
 #include <drm/tinydrm/ili9341.h>
 #include <drm/tinydrm/mipi-dbi.h>
@@ -140,7 +141,7 @@ static struct drm_driver mi0283qt_driver = {
 				  DRIVER_ATOMIC,
 	.fops			= &mi0283qt_fops,
 	TINYDRM_GEM_DRIVER_OPS,
-	.lastclose		= tinydrm_lastclose,
+	.lastclose		= drm_fb_helper_lastclose,
 	.debugfs_init		= mipi_dbi_debugfs_init,
 	.name			= "mi0283qt",
 	.desc			= "Multi-Inno MI0283QT",
diff --git a/drivers/gpu/drm/tinydrm/st7586.c b/drivers/gpu/drm/tinydrm/st7586.c
index 0a2c60da5c0e..5aebfceb740e 100644
--- a/drivers/gpu/drm/tinydrm/st7586.c
+++ b/drivers/gpu/drm/tinydrm/st7586.c
@@ -17,6 +17,7 @@
 #include <linux/spi/spi.h>
 #include <video/mipi_display.h>
 
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
 #include <drm/tinydrm/mipi-dbi.h>
 #include <drm/tinydrm/tinydrm-helpers.h>
@@ -320,7 +321,7 @@ static struct drm_driver st7586_driver = {
 				  DRIVER_ATOMIC,
 	.fops			= &st7586_fops,
 	TINYDRM_GEM_DRIVER_OPS,
-	.lastclose		= tinydrm_lastclose,
+	.lastclose		= drm_fb_helper_lastclose,
 	.debugfs_init		= mipi_dbi_debugfs_init,
 	.name			= "st7586",
 	.desc			= "Sitronix ST7586",
diff --git a/include/drm/tinydrm/tinydrm.h b/include/drm/tinydrm/tinydrm.h
index 03cd9d72308c..07a9a11fe19d 100644
--- a/include/drm/tinydrm/tinydrm.h
+++ b/include/drm/tinydrm/tinydrm.h
@@ -19,14 +19,12 @@
  * @drm: DRM device
  * @pipe: Display pipe structure
  * @dirty_lock: Serializes framebuffer flushing
- * @fbdev_cma: CMA fbdev structure
  * @fb_funcs: Framebuffer functions used when creating framebuffers
  */
 struct tinydrm_device {
 	struct drm_device *drm;
 	struct drm_simple_display_pipe pipe;
 	struct mutex dirty_lock;
-	struct drm_fbdev_cma *fbdev_cma;
 	const struct drm_framebuffer_funcs *fb_funcs;
 };
 
@@ -80,7 +78,6 @@ pipe_to_tinydrm(struct drm_simple_display_pipe *pipe)
 	.type = DRM_MODE_TYPE_DRIVER, \
 	.clock = 1 /* pass validation */
 
-void tinydrm_lastclose(struct drm_device *drm);
 void tinydrm_gem_cma_free_object(struct drm_gem_object *gem_obj);
 struct drm_gem_object *
 tinydrm_gem_cma_prime_import_sg_table(struct drm_device *drm,
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v2 22/22] drm/cma-helper: Remove drm_fbdev_cma* functions
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (20 preceding siblings ...)
  2017-11-15 14:20 ` [PATCH v2 21/22] drm/tinydrm: Use drm_fb_cma_fbdev_init_with_funcs/fini() Noralf Trønnes
@ 2017-11-15 14:20 ` Noralf Trønnes
  2017-11-16  8:14 ` [PATCH v2 00/22] " Shawn Guo
  2017-12-08 13:59 ` Noralf Trønnes
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-15 14:20 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo

Remove the unused struct drm_fbdev_cma functions.

Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/drm_fb_cma_helper.c | 158 ------------------------------------
 include/drm/drm_fb_cma_helper.h     |  28 +------
 2 files changed, 3 insertions(+), 183 deletions(-)

diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c
index 186d00adfb5f..7e2a01fa8a38 100644
--- a/drivers/gpu/drm/drm_fb_cma_helper.c
+++ b/drivers/gpu/drm/drm_fb_cma_helper.c
@@ -389,161 +389,3 @@ void drm_fb_cma_fbdev_fini(struct drm_device *dev)
 	kfree(to_fbdev_cma(fb_helper));
 }
 EXPORT_SYMBOL_GPL(drm_fb_cma_fbdev_fini);
-
-/**
- * drm_fbdev_cma_init_with_funcs() - Allocate and initializes a drm_fbdev_cma struct
- * @dev: DRM device
- * @preferred_bpp: Preferred bits per pixel for the device
- * @max_conn_count: Maximum number of connectors
- * @funcs: fb helper functions, in particular a custom dirty() callback
- *
- * Returns a newly allocated drm_fbdev_cma struct or a ERR_PTR.
- */
-struct drm_fbdev_cma *drm_fbdev_cma_init_with_funcs(struct drm_device *dev,
-	unsigned int preferred_bpp, unsigned int max_conn_count,
-	const struct drm_framebuffer_funcs *funcs)
-{
-	struct drm_fbdev_cma *fbdev_cma;
-	struct drm_fb_helper *helper;
-	int ret;
-
-	fbdev_cma = kzalloc(sizeof(*fbdev_cma), GFP_KERNEL);
-	if (!fbdev_cma) {
-		dev_err(dev->dev, "Failed to allocate drm fbdev.\n");
-		return ERR_PTR(-ENOMEM);
-	}
-	fbdev_cma->fb_funcs = funcs;
-
-	helper = &fbdev_cma->fb_helper;
-
-	drm_fb_helper_prepare(dev, helper, &drm_fb_cma_helper_funcs);
-
-	ret = drm_fb_helper_init(dev, helper, max_conn_count);
-	if (ret < 0) {
-		dev_err(dev->dev, "Failed to initialize drm fb helper.\n");
-		goto err_free;
-	}
-
-	ret = drm_fb_helper_single_add_all_connectors(helper);
-	if (ret < 0) {
-		dev_err(dev->dev, "Failed to add connectors.\n");
-		goto err_drm_fb_helper_fini;
-
-	}
-
-	ret = drm_fb_helper_initial_config(helper, preferred_bpp);
-	if (ret < 0) {
-		dev_err(dev->dev, "Failed to set initial hw configuration.\n");
-		goto err_drm_fb_helper_fini;
-	}
-
-	return fbdev_cma;
-
-err_drm_fb_helper_fini:
-	drm_fb_helper_fini(helper);
-err_free:
-	kfree(fbdev_cma);
-
-	return ERR_PTR(ret);
-}
-EXPORT_SYMBOL_GPL(drm_fbdev_cma_init_with_funcs);
-
-static const struct drm_framebuffer_funcs drm_fb_cma_funcs = {
-	.destroy	= drm_gem_fb_destroy,
-	.create_handle	= drm_gem_fb_create_handle,
-};
-
-/**
- * drm_fbdev_cma_init() - Allocate and initializes a drm_fbdev_cma struct
- * @dev: DRM device
- * @preferred_bpp: Preferred bits per pixel for the device
- * @max_conn_count: Maximum number of connectors
- *
- * Returns a newly allocated drm_fbdev_cma struct or a ERR_PTR.
- */
-struct drm_fbdev_cma *drm_fbdev_cma_init(struct drm_device *dev,
-	unsigned int preferred_bpp, unsigned int max_conn_count)
-{
-	return drm_fbdev_cma_init_with_funcs(dev, preferred_bpp,
-					     max_conn_count,
-					     &drm_fb_cma_funcs);
-}
-EXPORT_SYMBOL_GPL(drm_fbdev_cma_init);
-
-/**
- * drm_fbdev_cma_fini() - Free drm_fbdev_cma struct
- * @fbdev_cma: The drm_fbdev_cma struct
- */
-void drm_fbdev_cma_fini(struct drm_fbdev_cma *fbdev_cma)
-{
-	drm_fb_helper_unregister_fbi(&fbdev_cma->fb_helper);
-	if (fbdev_cma->fb_helper.fbdev)
-		drm_fbdev_cma_defio_fini(fbdev_cma->fb_helper.fbdev);
-
-	if (fbdev_cma->fb_helper.fb)
-		drm_framebuffer_remove(fbdev_cma->fb_helper.fb);
-
-	drm_fb_helper_fini(&fbdev_cma->fb_helper);
-	kfree(fbdev_cma);
-}
-EXPORT_SYMBOL_GPL(drm_fbdev_cma_fini);
-
-/**
- * drm_fbdev_cma_restore_mode() - Restores initial framebuffer mode
- * @fbdev_cma: The drm_fbdev_cma struct, may be NULL
- *
- * This function is usually called from the &drm_driver.lastclose callback.
- */
-void drm_fbdev_cma_restore_mode(struct drm_fbdev_cma *fbdev_cma)
-{
-	if (fbdev_cma)
-		drm_fb_helper_restore_fbdev_mode_unlocked(&fbdev_cma->fb_helper);
-}
-EXPORT_SYMBOL_GPL(drm_fbdev_cma_restore_mode);
-
-/**
- * drm_fbdev_cma_hotplug_event() - Poll for hotpulug events
- * @fbdev_cma: The drm_fbdev_cma struct, may be NULL
- *
- * This function is usually called from the &drm_mode_config.output_poll_changed
- * callback.
- */
-void drm_fbdev_cma_hotplug_event(struct drm_fbdev_cma *fbdev_cma)
-{
-	if (fbdev_cma)
-		drm_fb_helper_hotplug_event(&fbdev_cma->fb_helper);
-}
-EXPORT_SYMBOL_GPL(drm_fbdev_cma_hotplug_event);
-
-/**
- * drm_fbdev_cma_set_suspend - wrapper around drm_fb_helper_set_suspend
- * @fbdev_cma: The drm_fbdev_cma struct, may be NULL
- * @state: desired state, zero to resume, non-zero to suspend
- *
- * Calls drm_fb_helper_set_suspend, which is a wrapper around
- * fb_set_suspend implemented by fbdev core.
- */
-void drm_fbdev_cma_set_suspend(struct drm_fbdev_cma *fbdev_cma, bool state)
-{
-	if (fbdev_cma)
-		drm_fb_helper_set_suspend(&fbdev_cma->fb_helper, state);
-}
-EXPORT_SYMBOL(drm_fbdev_cma_set_suspend);
-
-/**
- * drm_fbdev_cma_set_suspend_unlocked - wrapper around
- *                                      drm_fb_helper_set_suspend_unlocked
- * @fbdev_cma: The drm_fbdev_cma struct, may be NULL
- * @state: desired state, zero to resume, non-zero to suspend
- *
- * Calls drm_fb_helper_set_suspend, which is a wrapper around
- * fb_set_suspend implemented by fbdev core.
- */
-void drm_fbdev_cma_set_suspend_unlocked(struct drm_fbdev_cma *fbdev_cma,
-					bool state)
-{
-	if (fbdev_cma)
-		drm_fb_helper_set_suspend_unlocked(&fbdev_cma->fb_helper,
-						   state);
-}
-EXPORT_SYMBOL(drm_fbdev_cma_set_suspend_unlocked);
diff --git a/include/drm/drm_fb_cma_helper.h b/include/drm/drm_fb_cma_helper.h
index 4fb2d5563420..cde293ae0ccb 100644
--- a/include/drm/drm_fb_cma_helper.h
+++ b/include/drm/drm_fb_cma_helper.h
@@ -1,18 +1,10 @@
 #ifndef __DRM_FB_CMA_HELPER_H__
 #define __DRM_FB_CMA_HELPER_H__
 
-struct drm_fbdev_cma;
-struct drm_gem_cma_object;
-
-struct drm_fb_helper_surface_size;
-struct drm_framebuffer_funcs;
-struct drm_fb_helper_funcs;
-struct drm_framebuffer;
-struct drm_fb_helper;
 struct drm_device;
-struct drm_file;
-struct drm_mode_fb_cmd2;
-struct drm_plane;
+struct drm_framebuffer;
+struct drm_framebuffer_funcs;
+struct drm_gem_cma_object;
 struct drm_plane_state;
 
 int drm_fb_cma_fbdev_init_with_funcs(struct drm_device *dev,
@@ -22,19 +14,6 @@ int drm_fb_cma_fbdev_init(struct drm_device *dev, unsigned int preferred_bpp,
 			  unsigned int max_conn_count);
 void drm_fb_cma_fbdev_fini(struct drm_device *dev);
 
-struct drm_fbdev_cma *drm_fbdev_cma_init_with_funcs(struct drm_device *dev,
-	unsigned int preferred_bpp, unsigned int max_conn_count,
-	const struct drm_framebuffer_funcs *funcs);
-struct drm_fbdev_cma *drm_fbdev_cma_init(struct drm_device *dev,
-	unsigned int preferred_bpp, unsigned int max_conn_count);
-void drm_fbdev_cma_fini(struct drm_fbdev_cma *fbdev_cma);
-
-void drm_fbdev_cma_restore_mode(struct drm_fbdev_cma *fbdev_cma);
-void drm_fbdev_cma_hotplug_event(struct drm_fbdev_cma *fbdev_cma);
-void drm_fbdev_cma_set_suspend(struct drm_fbdev_cma *fbdev_cma, bool state);
-void drm_fbdev_cma_set_suspend_unlocked(struct drm_fbdev_cma *fbdev_cma,
-					bool state);
-
 struct drm_gem_cma_object *drm_fb_cma_get_gem_obj(struct drm_framebuffer *fb,
 	unsigned int plane);
 
@@ -43,4 +22,3 @@ dma_addr_t drm_fb_cma_get_gem_addr(struct drm_framebuffer *fb,
 				   unsigned int plane);
 
 #endif
-
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 12/22] drm/sti: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 ` [PATCH v2 12/22] drm/sti: " Noralf Trønnes
@ 2017-11-15 15:01   ` Benjamin Gaignard
  0 siblings, 0 replies; 38+ messages in thread
From: Benjamin Gaignard @ 2017-11-15 15:01 UTC (permalink / raw)
  To: Noralf Trønnes
  Cc: narmstrong, Liviu Dudau, Laurent Pinchart, Marek Vašut,
	boris.brezillon, abrodkin, z.liuxinliang, kongxinwei (A),
	Tomi Valkeinen, David Lechner, Chen Feng, Jyri Sarha, dri-devel,
	Vincent Abriou, Alison Wang, Philippe Cornu, Yannick Fertre,
	Rongrong Zou, Maxime Ripard, Shawn Guo

2017-11-15 15:19 GMT+01:00 Noralf Trønnes <noralf@tronnes.org>:
> Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
> the fact that drm_device holds a pointer to the drm_fb_helper structure.
> This means that the driver doesn't have to keep track of that.
> Also use the drm_fb_helper functions directly.

This v2 doesn't crash anymore so

Acked-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>

>
> Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
> Cc: Vincent Abriou <vincent.abriou@st.com>
> Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
> ---
>  drivers/gpu/drm/sti/sti_drv.c | 27 +++++----------------------
>  drivers/gpu/drm/sti/sti_drv.h |  1 -
>  2 files changed, 5 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
> index 9e9343101738..a4553a31c59e 100644
> --- a/drivers/gpu/drm/sti/sti_drv.c
> +++ b/drivers/gpu/drm/sti/sti_drv.c
> @@ -17,6 +17,7 @@
>  #include <drm/drm_crtc_helper.h>
>  #include <drm/drm_gem_cma_helper.h>
>  #include <drm/drm_gem_framebuffer_helper.h>
> +#include <drm/drm_fb_helper.h>
>  #include <drm/drm_fb_cma_helper.h>
>  #include <drm/drm_of.h>
>
> @@ -138,16 +139,9 @@ static int sti_atomic_check(struct drm_device *dev,
>         return ret;
>  }
>
> -static void sti_output_poll_changed(struct drm_device *ddev)
> -{
> -       struct sti_private *private = ddev->dev_private;
> -
> -       drm_fbdev_cma_hotplug_event(private->fbdev);
> -}
> -
>  static const struct drm_mode_config_funcs sti_mode_config_funcs = {
>         .fb_create = drm_gem_fb_create,
> -       .output_poll_changed = sti_output_poll_changed,
> +       .output_poll_changed = drm_fb_helper_output_poll_changed,
>         .atomic_check = sti_atomic_check,
>         .atomic_commit = drm_atomic_helper_commit,
>  };
> @@ -230,11 +224,7 @@ static void sti_cleanup(struct drm_device *ddev)
>  {
>         struct sti_private *private = ddev->dev_private;
>
> -       if (private->fbdev) {
> -               drm_fbdev_cma_fini(private->fbdev);
> -               private->fbdev = NULL;
> -       }
> -
> +       drm_fb_cma_fbdev_fini(ddev);
>         drm_kms_helper_poll_fini(ddev);
>         component_unbind_all(ddev->dev, ddev);
>         kfree(private);
> @@ -244,8 +234,6 @@ static void sti_cleanup(struct drm_device *ddev)
>  static int sti_bind(struct device *dev)
>  {
>         struct drm_device *ddev;
> -       struct sti_private *private;
> -       struct drm_fbdev_cma *fbdev;
>         int ret;
>
>         ddev = drm_dev_alloc(&sti_driver, dev);
> @@ -266,15 +254,10 @@ static int sti_bind(struct device *dev)
>
>         drm_mode_config_reset(ddev);
>
> -       private = ddev->dev_private;
>         if (ddev->mode_config.num_connector) {
> -               fbdev = drm_fbdev_cma_init(ddev, 32,
> -                                          ddev->mode_config.num_connector);
> -               if (IS_ERR(fbdev)) {
> +               ret = drm_fb_cma_fbdev_init(ddev, 32, 0);
> +               if (ret)
>                         DRM_DEBUG_DRIVER("Warning: fails to create fbdev\n");
> -                       fbdev = NULL;
> -               }
> -               private->fbdev = fbdev;
>         }
>
>         return 0;
> diff --git a/drivers/gpu/drm/sti/sti_drv.h b/drivers/gpu/drm/sti/sti_drv.h
> index 6502ed2d3351..16c5c9110cb0 100644
> --- a/drivers/gpu/drm/sti/sti_drv.h
> +++ b/drivers/gpu/drm/sti/sti_drv.h
> @@ -24,7 +24,6 @@ struct sti_private {
>         struct sti_compositor *compo;
>         struct drm_property *plane_zorder_property;
>         struct drm_device *drm_dev;
> -       struct drm_fbdev_cma *fbdev;
>  };
>
>  extern struct platform_driver sti_tvout_driver;
> --
> 2.14.2
>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (21 preceding siblings ...)
  2017-11-15 14:20 ` [PATCH v2 22/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
@ 2017-11-16  8:14 ` Shawn Guo
  2017-11-16 20:11   ` Noralf Trønnes
  2017-12-08 13:59 ` Noralf Trønnes
  23 siblings, 1 reply; 38+ messages in thread
From: Shawn Guo @ 2017-11-16  8:14 UTC (permalink / raw)
  To: Noralf Trønnes
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, dri-devel,
	vincent.abriou, alison.wang, philippe.cornu, yannick.fertre,
	zourongrong, maxime.ripard

On Wed, Nov 15, 2017 at 03:19:39PM +0100, Noralf Trønnes wrote:
> This patchset adds drm_fb_cma_fbdev_init/fini() functions that replaces
> drm_fbdev_cma_init/fini(). The reason for doing so is to get rid of
> struct drm_fbdev_cma and it's wrapper functions. The final piece will
> happen when tinydrm moves away from the cma helper and we can remove the
> struct.
> 
> Note:
> Patches 19-22 depends on patchset:
> [v3] drm: Add simple modeset suspend/resume helpers

Is there a git branch somewhere we can test?

Shawn
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions
  2017-11-16  8:14 ` [PATCH v2 00/22] " Shawn Guo
@ 2017-11-16 20:11   ` Noralf Trønnes
  2017-11-17  9:10     ` Alexey Brodkin
  0 siblings, 1 reply; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-16 20:11 UTC (permalink / raw)
  To: Shawn Guo
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, dri-devel,
	vincent.abriou, alison.wang, philippe.cornu, yannick.fertre,
	zourongrong, maxime.ripard


Den 16.11.2017 09.14, skrev Shawn Guo:
> On Wed, Nov 15, 2017 at 03:19:39PM +0100, Noralf Trønnes wrote:
>> This patchset adds drm_fb_cma_fbdev_init/fini() functions that replaces
>> drm_fbdev_cma_init/fini(). The reason for doing so is to get rid of
>> struct drm_fbdev_cma and it's wrapper functions. The final piece will
>> happen when tinydrm moves away from the cma helper and we can remove the
>> struct.
>>
>> Note:
>> Patches 19-22 depends on patchset:
>> [v3] drm: Add simple modeset suspend/resume helpers
> Is there a git branch somewhere we can test?
>

Here you go: https://github.com/notro/linux/tree/drm_fb_cma_fbdev_init

It includes the pending fsl-dcu suspend/resume patches and the patchset
mentioned above.

Noralf.

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions
  2017-11-16 20:11   ` Noralf Trønnes
@ 2017-11-17  9:10     ` Alexey Brodkin
  2017-11-17 11:12       ` Noralf Trønnes
  2017-11-20 23:52       ` Noralf Trønnes
  0 siblings, 2 replies; 38+ messages in thread
From: Alexey Brodkin @ 2017-11-17  9:10 UTC (permalink / raw)
  To: noralf
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, z.liuxinliang, kong.kongxinwei, tomi.valkeinen,
	david, puck.chen, jsarha, dri-devel, vincent.abriou, alison.wang,
	philippe.cornu, yannick.fertre, zourongrong

Hi Noralf,

On Thu, 2017-11-16 at 21:11 +0100, Noralf Trønnes wrote:
> Den 16.11.2017 09.14, skrev Shawn Guo:
> > 
> > On Wed, Nov 15, 2017 at 03:19:39PM +0100, Noralf Trønnes wrote:
> > > 
> > > This patchset adds drm_fb_cma_fbdev_init/fini() functions that replaces
> > > drm_fbdev_cma_init/fini(). The reason for doing so is to get rid of
> > > struct drm_fbdev_cma and it's wrapper functions. The final piece will
> > > happen when tinydrm moves away from the cma helper and we can remove the
> > > struct.
> > > 
> > > Note:
> > > Patches 19-22 depends on patchset:
> > > [v3] drm: Add simple modeset suspend/resume helpers
> > Is there a git branch somewhere we can test?
> > 
> 
> Here you go: https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_notro_linux_tree_drm-5Ffb-5Fcma-5Ffbdev-5Finit&d=DwIDaQ&c=DPL6_X_6JkXFx
> 7AXWqB0tg&r=OtZvQ4lNHIbjtyysXrNW8RbX6WFkigcev-xByzJ_fLk&m=McbBjcx46wmGkpM3GHmk9URB1xbd6ywS-
> Z5tpdWwDX8&s=BewulagwMNQa5xW19olMnlzV5DI5cZ_7eDSPyUpzMV8&e=

Thanks for that this really helps to test your patches.
And looks like something is broken for ARC PGU + ADV7511 with your tree:
-------------------------->8------------------------
adv7511: probe of 1-0039 failed with error -2
arcpgu e0017000.pgu: arc_pgu ID: 0x41440304
arcpgu e0017000.pgu: assigned reserved memory node frame_buffe
r@9e000000
[drm] Cannot find any crtc or sizes
[drm] Cannot find any crtc or sizes
[drm] Initialized arcpgu 1.0.0 20160219 for e0017000.pgu on minor 0
-------------------------->8------------------------

That's what I see on vanilla 4.14 kernel:
-------------------------->8------------------------
arcpgu e0017000.pgu: arc_pgu ID: 0x41440304
arcpgu e0017000.pgu: assigned reserved memory node frame_buffer@9e000000
Console: switching to colour frame buffer device 160x45
arcpgu e0017000.pgu: fb0:  frame buffer device
[drm] Initialized arcpgu 1.0.0 20160219 for e0017000.pgu on minor 0
-------------------------->8------------------------

Any thoughts?

-Alexey
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions
  2017-11-17  9:10     ` Alexey Brodkin
@ 2017-11-17 11:12       ` Noralf Trønnes
  2017-11-20 23:52       ` Noralf Trønnes
  1 sibling, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-17 11:12 UTC (permalink / raw)
  To: Alexey Brodkin
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, z.liuxinliang, kong.kongxinwei, tomi.valkeinen,
	david, puck.chen, jsarha, dri-devel, vincent.abriou, alison.wang,
	philippe.cornu, yannick.fertre, zourongrong


Den 17.11.2017 10.10, skrev Alexey Brodkin:
> Hi Noralf,
>
> On Thu, 2017-11-16 at 21:11 +0100, Noralf Trønnes wrote:
>> Den 16.11.2017 09.14, skrev Shawn Guo:
>>> On Wed, Nov 15, 2017 at 03:19:39PM +0100, Noralf Trønnes wrote:
>>>> This patchset adds drm_fb_cma_fbdev_init/fini() functions that replaces
>>>> drm_fbdev_cma_init/fini(). The reason for doing so is to get rid of
>>>> struct drm_fbdev_cma and it's wrapper functions. The final piece will
>>>> happen when tinydrm moves away from the cma helper and we can remove the
>>>> struct.
>>>>
>>>> Note:
>>>> Patches 19-22 depends on patchset:
>>>> [v3] drm: Add simple modeset suspend/resume helpers
>>> Is there a git branch somewhere we can test?
>>>
>> Here you go: https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_notro_linux_tree_drm-5Ffb-5Fcma-5Ffbdev-5Finit&d=DwIDaQ&c=DPL6_X_6JkXFx
>> 7AXWqB0tg&r=OtZvQ4lNHIbjtyysXrNW8RbX6WFkigcev-xByzJ_fLk&m=McbBjcx46wmGkpM3GHmk9URB1xbd6ywS-
>> Z5tpdWwDX8&s=BewulagwMNQa5xW19olMnlzV5DI5cZ_7eDSPyUpzMV8&e=
> Thanks for that this really helps to test your patches.

That's nice to know so I can include it in future patchsets like this.

> And looks like something is broken for ARC PGU + ADV7511 with your tree:
> -------------------------->8------------------------
> adv7511: probe of 1-0039 failed with error -2

-2 is -ENOENT
There are some changes to adv7511 in drm-misc since 4.14.
I suggest you try drm-misc-next directly to see if that works or not.

Noralf.

> arcpgu e0017000.pgu: arc_pgu ID: 0x41440304
> arcpgu e0017000.pgu: assigned reserved memory node frame_buffe
> r@9e000000
> [drm] Cannot find any crtc or sizes
> [drm] Cannot find any crtc or sizes
> [drm] Initialized arcpgu 1.0.0 20160219 for e0017000.pgu on minor 0
> -------------------------->8------------------------
>
> That's what I see on vanilla 4.14 kernel:
> -------------------------->8------------------------
> arcpgu e0017000.pgu: arc_pgu ID: 0x41440304
> arcpgu e0017000.pgu: assigned reserved memory node frame_buffer@9e000000
> Console: switching to colour frame buffer device 160x45
> arcpgu e0017000.pgu: fb0:  frame buffer device
> [drm] Initialized arcpgu 1.0.0 20160219 for e0017000.pgu on minor 0
> -------------------------->8------------------------
>
> Any thoughts?
>
> -Alexey
>

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 18/22] drm/zte: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 ` [PATCH v2 18/22] drm/zte: " Noralf Trønnes
@ 2017-11-17 13:46   ` Shawn Guo
  0 siblings, 0 replies; 38+ messages in thread
From: Shawn Guo @ 2017-11-17 13:46 UTC (permalink / raw)
  To: Noralf Trønnes
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, dri-devel,
	vincent.abriou, alison.wang, philippe.cornu, yannick.fertre,
	zourongrong, maxime.ripard

On Wed, Nov 15, 2017 at 03:19:57PM +0100, Noralf Trønnes wrote:
> Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
> the fact that drm_device holds a pointer to the drm_fb_helper structure.
> This means that the driver doesn't have to keep track of that.
> Also use the drm_fb_helper functions directly.
> 
> Cc: Shawn Guo <shawnguo@kernel.org>

Acked-by: Shawn Guo <shawnguo@kernel.org>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions
  2017-11-17  9:10     ` Alexey Brodkin
  2017-11-17 11:12       ` Noralf Trønnes
@ 2017-11-20 23:52       ` Noralf Trønnes
  2017-11-21 16:47         ` Alexey Brodkin
  1 sibling, 1 reply; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-20 23:52 UTC (permalink / raw)
  To: Alexey Brodkin
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, z.liuxinliang, kong.kongxinwei, tomi.valkeinen,
	david, puck.chen, jsarha, dri-devel, vincent.abriou, alison.wang,
	philippe.cornu, yannick.fertre, zourongrong


Den 17.11.2017 10.10, skrev Alexey Brodkin:
> Hi Noralf,
>
> On Thu, 2017-11-16 at 21:11 +0100, Noralf Trønnes wrote:
>> Den 16.11.2017 09.14, skrev Shawn Guo:
>>> On Wed, Nov 15, 2017 at 03:19:39PM +0100, Noralf Trønnes wrote:
>>>> This patchset adds drm_fb_cma_fbdev_init/fini() functions that replaces
>>>> drm_fbdev_cma_init/fini(). The reason for doing so is to get rid of
>>>> struct drm_fbdev_cma and it's wrapper functions. The final piece will
>>>> happen when tinydrm moves away from the cma helper and we can remove the
>>>> struct.
>>>>
>>>> Note:
>>>> Patches 19-22 depends on patchset:
>>>> [v3] drm: Add simple modeset suspend/resume helpers
>>> Is there a git branch somewhere we can test?
>>>
>> Here you go: https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_notro_linux_tree_drm-5Ffb-5Fcma-5Ffbdev-5Finit&d=DwIDaQ&c=DPL6_X_6JkXFx
>> 7AXWqB0tg&r=OtZvQ4lNHIbjtyysXrNW8RbX6WFkigcev-xByzJ_fLk&m=McbBjcx46wmGkpM3GHmk9URB1xbd6ywS-
>> Z5tpdWwDX8&s=BewulagwMNQa5xW19olMnlzV5DI5cZ_7eDSPyUpzMV8&e=
> Thanks for that this really helps to test your patches.
> And looks like something is broken for ARC PGU + ADV7511 with your tree:
> -------------------------->8------------------------
> adv7511: probe of 1-0039 failed with error -2

Maybe the problem is with the cec support added after 4.14:

drm: adv7511/33: add HDMI CEC support
https://cgit.freedesktop.org/drm/drm-misc/commit/drivers/gpu/drm/bridge/adv7511?id=3b1b975003e4a3da4b93ab032487a3ae4afca7b5

Apparently there's a problem with it:

[PATCHv2] drm: adv7511/33: Fix adv7511_cec_init() failure handling
https://lists.freedesktop.org/archives/dri-devel/2017-November/158024.html

Noralf.


> arcpgu e0017000.pgu: arc_pgu ID: 0x41440304
> arcpgu e0017000.pgu: assigned reserved memory node frame_buffe
> r@9e000000
> [drm] Cannot find any crtc or sizes
> [drm] Cannot find any crtc or sizes
> [drm] Initialized arcpgu 1.0.0 20160219 for e0017000.pgu on minor 0
> -------------------------->8------------------------
>
> That's what I see on vanilla 4.14 kernel:
> -------------------------->8------------------------
> arcpgu e0017000.pgu: arc_pgu ID: 0x41440304
> arcpgu e0017000.pgu: assigned reserved memory node frame_buffer@9e000000
> Console: switching to colour frame buffer device 160x45
> arcpgu e0017000.pgu: fb0:  frame buffer device
> [drm] Initialized arcpgu 1.0.0 20160219 for e0017000.pgu on minor 0
> -------------------------->8------------------------
>
> Any thoughts?
>
> -Alexey
>

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions
  2017-11-20 23:52       ` Noralf Trønnes
@ 2017-11-21 16:47         ` Alexey Brodkin
  0 siblings, 0 replies; 38+ messages in thread
From: Alexey Brodkin @ 2017-11-21 16:47 UTC (permalink / raw)
  To: noralf
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, z.liuxinliang, kong.kongxinwei, tomi.valkeinen,
	david, puck.chen, jsarha, dri-devel, vincent.abriou, alison.wang,
	philippe.cornu, yannick.fertre, zourongrong

Hi Noralf,

On Tue, 2017-11-21 at 00:52 +0100, Noralf Trønnes wrote:
> Den 17.11.2017 10.10, skrev Alexey Brodkin:
> > 
> > Hi Noralf,
> > 
> > On Thu, 2017-11-16 at 21:11 +0100, Noralf Trønnes wrote:
> > > 
> > > Den 16.11.2017 09.14, skrev Shawn Guo:
> > > > 
> > > > On Wed, Nov 15, 2017 at 03:19:39PM +0100, Noralf Trønnes wrote:
> > > > > 
> > > > > This patchset adds drm_fb_cma_fbdev_init/fini() functions that replaces
> > > > > drm_fbdev_cma_init/fini(). The reason for doing so is to get rid of
> > > > > struct drm_fbdev_cma and it's wrapper functions. The final piece will
> > > > > happen when tinydrm moves away from the cma helper and we can remove the
> > > > > struct.
> > > > > 
> > > > > Note:
> > > > > Patches 19-22 depends on patchset:
> > > > > [v3] drm: Add simple modeset suspend/resume helpers
> > > > Is there a git branch somewhere we can test?
> > > > 
> > > Here you go: https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_notro_linux_tree_drm-5Ffb-5Fcma-5Ffbdev-5Finit&d=DwIDaQ&c=DPL6_X_6J
> > > kXFx
> > > 7AXWqB0tg&r=OtZvQ4lNHIbjtyysXrNW8RbX6WFkigcev-xByzJ_fLk&m=McbBjcx46wmGkpM3GHmk9URB1xbd6ywS-
> > > Z5tpdWwDX8&s=BewulagwMNQa5xW19olMnlzV5DI5cZ_7eDSPyUpzMV8&e=
> > Thanks for that this really helps to test your patches.
> > And looks like something is broken for ARC PGU + ADV7511 with your tree:
> > -------------------------->8------------------------
> > adv7511: probe of 1-0039 failed with error -2
> 
> Maybe the problem is with the cec support added after 4.14:
> 
> drm: adv7511/33: add HDMI CEC support
> https://urldefense.proofpoint.com/v2/url?u=https-3A__cgit.freedesktop.org_drm_drm-2Dmisc_commit_drivers_gpu_drm_bridge_adv7511-3Fid-3D3b1b975003e4a3
> da4b93ab032487a3ae4afca7b5&d=DwIDaQ&c=DPL6_X_6JkXFx7AXWqB0tg&r=lqdeeSSEes0GFDDl656eViXO7breS55ytWkhpk5R81I&m=H7HSEHrOweYdtYmtV7QQ7l6ndVPGq1aUigPo3Wq
> DlNg&s=67zDRPjQ2iyMOhroP6wat67ESWhYnGPAhKgbmgHwxQ0&e=
> 
> Apparently there's a problem with it:
> 
> [PATCHv2] drm: adv7511/33: Fix adv7511_cec_init() failure handling
> https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.freedesktop.org_archives_dri-2Ddevel_2017-2DNovember_158024.html&d=DwIDaQ&c=DPL6_X_6JkXFx
> 7AXWqB0tg&r=lqdeeSSEes0GFDDl656eViXO7breS55ytWkhpk5R81I&m=H7HSEHrOweYdtYmtV7QQ7l6ndVPGq1aUigPo3WqDlNg&s=ecprlgbDaK04JzdFl4w5JR7J-
> HoHaHCMwB0BfgRxufY&e=

Thanks a lot for the pointer!

Indeed this patch fixes a problem:
------------------------------------>8--------------------------------
arcpgu e0017000.pgu: arc_pgu ID: 0x41440304
arcpgu e0017000.pgu: assigned reserved memory node frame_buffer@9e000000
Console: switching to colour frame buffer device 160x45
arcpgu e0017000.pgu: fb0:  frame buffer device
[drm] Initialized arcpgu 1.0.0 20160219 for e0017000.pgu on minor 0
------------------------------------>8--------------------------------

So I'll reply with my ack for ARC PGU patch then as it works perfectly fine for me.

-Alexey
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 03/22] drm/arc: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 ` [PATCH v2 03/22] drm/arc: Use drm_fb_cma_fbdev_init/fini() Noralf Trønnes
@ 2017-11-21 16:49   ` Alexey Brodkin
  2018-09-27  8:49   ` Alexey Brodkin
  1 sibling, 0 replies; 38+ messages in thread
From: Alexey Brodkin @ 2017-11-21 16:49 UTC (permalink / raw)
  To: noralf
  Cc: narmstrong, liviu.dudau, dri-devel, laurent.pinchart, marex,
	boris.brezillon, z.liuxinliang, kong.kongxinwei, tomi.valkeinen,
	david, puck.chen, jsarha, vincent.abriou, alison.wang,
	philippe.cornu, yannick.fertre, zourongrong

Hi Noralf,

On Wed, 2017-11-15 at 15:19 +0100, Noralf Trønnes wrote:
> Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
> the fact that drm_device holds a pointer to the drm_fb_helper structure.
> This means that the driver doesn't have to keep track of that.
> Also use the drm_fb_helper functions directly.
> Remove unused function prototype arcpgu_fbdev_cma_init().
> 
> Cc: Alexey Brodkin <abrodkin@synopsys.com>
> Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

Acked-by: Alexey Brodkin <abrodkin@synopsys.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 02/22] drm/cma-helper: Add drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 ` [PATCH v2 02/22] drm/cma-helper: Add drm_fb_cma_fbdev_init/fini() Noralf Trønnes
@ 2017-11-30 17:38   ` Noralf Trønnes
  2017-12-07 13:09     ` Noralf Trønnes
  0 siblings, 1 reply; 38+ messages in thread
From: Noralf Trønnes @ 2017-11-30 17:38 UTC (permalink / raw)
  To: dri-devel, laurent.pinchart
  Cc: narmstrong, liviu.dudau, marex, boris.brezillon, abrodkin,
	z.liuxinliang, kong.kongxinwei, tomi.valkeinen, david, puck.chen,
	jsarha, vincent.abriou, alison.wang, philippe.cornu,
	yannick.fertre, zourongrong, maxime.ripard, shawnguo

Laurent,

Can you please have a look at this and see if it's ok with you?

Noralf.


Den 15.11.2017 15.19, skrev Noralf Trønnes:
> Add functions drm_fb_cma_fbdev_init(), drm_fb_cma_fbdev_fini() and
> drm_fb_cma_fbdev_init_with_funcs(). These functions relies on the fact
> that the drm_fb_helper struct is stored in dev->drm_fb_helper_private
> so drivers don't need to store it.
>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> ---
>
> Changes since version 1:
> - Fix NULL pointer dereference in drm_fbdev_cma_create() (Benjamin)
>
>   drivers/gpu/drm/drm_fb_cma_helper.c | 119 +++++++++++++++++++++++++++++++++++-
>   include/drm/drm_fb_cma_helper.h     |   7 +++
>   2 files changed, 123 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c
> index 35b56dfba929..186d00adfb5f 100644
> --- a/drivers/gpu/drm/drm_fb_cma_helper.c
> +++ b/drivers/gpu/drm/drm_fb_cma_helper.c
> @@ -23,6 +23,7 @@
>   #include <drm/drm_gem_cma_helper.h>
>   #include <drm/drm_gem_framebuffer_helper.h>
>   #include <drm/drm_fb_cma_helper.h>
> +#include <drm/drm_print.h>
>   #include <linux/module.h>
>   
>   #define DEFAULT_FBDEFIO_DELAY_MS 50
> @@ -42,7 +43,7 @@ struct drm_fbdev_cma {
>    * callback function to create a cma backed framebuffer.
>    *
>    * An fbdev framebuffer backed by cma is also available by calling
> - * drm_fbdev_cma_init(). drm_fbdev_cma_fini() tears it down.
> + * drm_fb_cma_fbdev_init(). drm_fb_cma_fbdev_fini() tears it down.
>    * If the &drm_framebuffer_funcs.dirty callback is set, fb_deferred_io will be
>    * set up automatically. &drm_framebuffer_funcs.dirty is called by
>    * drm_fb_helper_deferred_io() in process context (&struct delayed_work).
> @@ -68,7 +69,7 @@ struct drm_fbdev_cma {
>    *
>    * Initialize::
>    *
> - *     fbdev = drm_fbdev_cma_init_with_funcs(dev, 16,
> + *     fbdev = drm_fb_cma_fbdev_init_with_funcs(dev, 16,
>    *                                           dev->mode_config.num_crtc,
>    *                                           dev->mode_config.num_connector,
>    *                                           &driver_fb_funcs);
> @@ -256,7 +257,7 @@ drm_fbdev_cma_create(struct drm_fb_helper *helper,
>   	fbi->screen_size = size;
>   	fbi->fix.smem_len = size;
>   
> -	if (fbdev_cma->fb_funcs->dirty) {
> +	if (fb->funcs->dirty) {
>   		ret = drm_fbdev_cma_defio_init(fbi, obj);
>   		if (ret)
>   			goto err_cma_destroy;
> @@ -277,6 +278,118 @@ static const struct drm_fb_helper_funcs drm_fb_cma_helper_funcs = {
>   	.fb_probe = drm_fbdev_cma_create,
>   };
>   
> +/**
> + * drm_fb_cma_fbdev_init_with_funcs() - Allocate and initialize fbdev emulation
> + * @dev: DRM device
> + * @preferred_bpp: Preferred bits per pixel for the device.
> + *                 @dev->mode_config.preferred_depth is used if this is zero.
> + * @max_conn_count: Maximum number of connectors.
> + *                  @dev->mode_config.num_connector is used if this is zero.
> + * @funcs: Framebuffer functions, in particular a custom dirty() callback.
> + *         Can be NULL.
> + *
> + * Returns:
> + * Zero on success or negative error code on failure.
> + */
> +int drm_fb_cma_fbdev_init_with_funcs(struct drm_device *dev,
> +	unsigned int preferred_bpp, unsigned int max_conn_count,
> +	const struct drm_framebuffer_funcs *funcs)
> +{
> +	struct drm_fbdev_cma *fbdev_cma;
> +	struct drm_fb_helper *fb_helper;
> +	int ret;
> +
> +	if (!preferred_bpp)
> +		preferred_bpp = dev->mode_config.preferred_depth;
> +	if (!preferred_bpp)
> +		preferred_bpp = 32;
> +
> +	if (!max_conn_count)
> +		max_conn_count = dev->mode_config.num_connector;
> +
> +	fbdev_cma = kzalloc(sizeof(*fbdev_cma), GFP_KERNEL);
> +	if (!fbdev_cma)
> +		return -ENOMEM;
> +
> +	fbdev_cma->fb_funcs = funcs;
> +	fb_helper = &fbdev_cma->fb_helper;
> +
> +	drm_fb_helper_prepare(dev, fb_helper, &drm_fb_cma_helper_funcs);
> +
> +	ret = drm_fb_helper_init(dev, fb_helper, max_conn_count);
> +	if (ret < 0) {
> +		DRM_DEV_ERROR(dev->dev, "Failed to initialize fbdev helper.\n");
> +		goto err_free;
> +	}
> +
> +	ret = drm_fb_helper_single_add_all_connectors(fb_helper);
> +	if (ret < 0) {
> +		DRM_DEV_ERROR(dev->dev, "Failed to add connectors.\n");
> +		goto err_drm_fb_helper_fini;
> +	}
> +
> +	ret = drm_fb_helper_initial_config(fb_helper, preferred_bpp);
> +	if (ret < 0) {
> +		DRM_DEV_ERROR(dev->dev, "Failed to set fbdev configuration.\n");
> +		goto err_drm_fb_helper_fini;
> +	}
> +
> +	return 0;
> +
> +err_drm_fb_helper_fini:
> +	drm_fb_helper_fini(fb_helper);
> +err_free:
> +	kfree(fbdev_cma);
> +
> +	return ret;
> +}
> +EXPORT_SYMBOL_GPL(drm_fb_cma_fbdev_init_with_funcs);
> +
> +/**
> + * drm_fb_cma_fbdev_init() - Allocate and initialize fbdev emulation
> + * @dev: DRM device
> + * @preferred_bpp: Preferred bits per pixel for the device.
> + *                 @dev->mode_config.preferred_depth is used if this is zero.
> + * @max_conn_count: Maximum number of connectors.
> + *                  @dev->mode_config.num_connector is used if this is zero.
> + *
> + * Returns:
> + * Zero on success or negative error code on failure.
> + */
> +int drm_fb_cma_fbdev_init(struct drm_device *dev, unsigned int preferred_bpp,
> +			  unsigned int max_conn_count)
> +{
> +	return drm_fb_cma_fbdev_init_with_funcs(dev, preferred_bpp,
> +						max_conn_count, NULL);
> +}
> +EXPORT_SYMBOL_GPL(drm_fb_cma_fbdev_init);
> +
> +/**
> + * drm_fb_cma_fbdev_fini() - Teardown fbdev emulation
> + * @dev: DRM device
> + */
> +void drm_fb_cma_fbdev_fini(struct drm_device *dev)
> +{
> +	struct drm_fb_helper *fb_helper = dev->fb_helper;
> +
> +	if (!fb_helper)
> +		return;
> +
> +	/* Unregister if it hasn't been done already */
> +	if (fb_helper->fbdev && fb_helper->fbdev->dev)
> +		drm_fb_helper_unregister_fbi(fb_helper);
> +
> +	if (fb_helper->fbdev)
> +		drm_fbdev_cma_defio_fini(fb_helper->fbdev);
> +
> +	if (fb_helper->fb)
> +		drm_framebuffer_remove(fb_helper->fb);
> +
> +	drm_fb_helper_fini(fb_helper);
> +	kfree(to_fbdev_cma(fb_helper));
> +}
> +EXPORT_SYMBOL_GPL(drm_fb_cma_fbdev_fini);
> +
>   /**
>    * drm_fbdev_cma_init_with_funcs() - Allocate and initializes a drm_fbdev_cma struct
>    * @dev: DRM device
> diff --git a/include/drm/drm_fb_cma_helper.h b/include/drm/drm_fb_cma_helper.h
> index a613ff022e6c..4fb2d5563420 100644
> --- a/include/drm/drm_fb_cma_helper.h
> +++ b/include/drm/drm_fb_cma_helper.h
> @@ -15,6 +15,13 @@ struct drm_mode_fb_cmd2;
>   struct drm_plane;
>   struct drm_plane_state;
>   
> +int drm_fb_cma_fbdev_init_with_funcs(struct drm_device *dev,
> +	unsigned int preferred_bpp, unsigned int max_conn_count,
> +	const struct drm_framebuffer_funcs *funcs);
> +int drm_fb_cma_fbdev_init(struct drm_device *dev, unsigned int preferred_bpp,
> +			  unsigned int max_conn_count);
> +void drm_fb_cma_fbdev_fini(struct drm_device *dev);
> +
>   struct drm_fbdev_cma *drm_fbdev_cma_init_with_funcs(struct drm_device *dev,
>   	unsigned int preferred_bpp, unsigned int max_conn_count,
>   	const struct drm_framebuffer_funcs *funcs);

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 02/22] drm/cma-helper: Add drm_fb_cma_fbdev_init/fini()
  2017-11-30 17:38   ` Noralf Trønnes
@ 2017-12-07 13:09     ` Noralf Trønnes
  2017-12-07 14:55       ` Daniel Vetter
  0 siblings, 1 reply; 38+ messages in thread
From: Noralf Trønnes @ 2017-12-07 13:09 UTC (permalink / raw)
  To: dri-devel, laurent.pinchart, Daniel Vetter
  Cc: marex, boris.brezillon, david, narmstrong, liviu.dudau,
	alison.wang, abrodkin, philippe.cornu, jsarha, z.liuxinliang,
	kong.kongxinwei, tomi.valkeinen, puck.chen, zourongrong,
	shawnguo, maxime.ripard, vincent.abriou, yannick.fertre

Daniel,

There's no response from Laurent, can I go ahead and start applying?

Noralf.


Den 30.11.2017 18.38, skrev Noralf Trønnes:
> Laurent,
>
> Can you please have a look at this and see if it's ok with you?
>
> Noralf.
>
>
> Den 15.11.2017 15.19, skrev Noralf Trønnes:
>> Add functions drm_fb_cma_fbdev_init(), drm_fb_cma_fbdev_fini() and
>> drm_fb_cma_fbdev_init_with_funcs(). These functions relies on the fact
>> that the drm_fb_helper struct is stored in dev->drm_fb_helper_private
>> so drivers don't need to store it.
>>
>> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>> Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
>> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>> ---
>>
>> Changes since version 1:
>> - Fix NULL pointer dereference in drm_fbdev_cma_create() (Benjamin)
>>
>>   drivers/gpu/drm/drm_fb_cma_helper.c | 119 
>> +++++++++++++++++++++++++++++++++++-
>>   include/drm/drm_fb_cma_helper.h     |   7 +++
>>   2 files changed, 123 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c 
>> b/drivers/gpu/drm/drm_fb_cma_helper.c
>> index 35b56dfba929..186d00adfb5f 100644
>> --- a/drivers/gpu/drm/drm_fb_cma_helper.c
>> +++ b/drivers/gpu/drm/drm_fb_cma_helper.c
>> @@ -23,6 +23,7 @@
>>   #include <drm/drm_gem_cma_helper.h>
>>   #include <drm/drm_gem_framebuffer_helper.h>
>>   #include <drm/drm_fb_cma_helper.h>
>> +#include <drm/drm_print.h>
>>   #include <linux/module.h>
>>     #define DEFAULT_FBDEFIO_DELAY_MS 50
>> @@ -42,7 +43,7 @@ struct drm_fbdev_cma {
>>    * callback function to create a cma backed framebuffer.
>>    *
>>    * An fbdev framebuffer backed by cma is also available by calling
>> - * drm_fbdev_cma_init(). drm_fbdev_cma_fini() tears it down.
>> + * drm_fb_cma_fbdev_init(). drm_fb_cma_fbdev_fini() tears it down.
>>    * If the &drm_framebuffer_funcs.dirty callback is set, 
>> fb_deferred_io will be
>>    * set up automatically. &drm_framebuffer_funcs.dirty is called by
>>    * drm_fb_helper_deferred_io() in process context (&struct 
>> delayed_work).
>> @@ -68,7 +69,7 @@ struct drm_fbdev_cma {
>>    *
>>    * Initialize::
>>    *
>> - *     fbdev = drm_fbdev_cma_init_with_funcs(dev, 16,
>> + *     fbdev = drm_fb_cma_fbdev_init_with_funcs(dev, 16,
>>    * dev->mode_config.num_crtc,
>>    * dev->mode_config.num_connector,
>>    * &driver_fb_funcs);
>> @@ -256,7 +257,7 @@ drm_fbdev_cma_create(struct drm_fb_helper *helper,
>>       fbi->screen_size = size;
>>       fbi->fix.smem_len = size;
>>   -    if (fbdev_cma->fb_funcs->dirty) {
>> +    if (fb->funcs->dirty) {
>>           ret = drm_fbdev_cma_defio_init(fbi, obj);
>>           if (ret)
>>               goto err_cma_destroy;
>> @@ -277,6 +278,118 @@ static const struct drm_fb_helper_funcs 
>> drm_fb_cma_helper_funcs = {
>>       .fb_probe = drm_fbdev_cma_create,
>>   };
>>   +/**
>> + * drm_fb_cma_fbdev_init_with_funcs() - Allocate and initialize 
>> fbdev emulation
>> + * @dev: DRM device
>> + * @preferred_bpp: Preferred bits per pixel for the device.
>> + *                 @dev->mode_config.preferred_depth is used if this 
>> is zero.
>> + * @max_conn_count: Maximum number of connectors.
>> + *                  @dev->mode_config.num_connector is used if this 
>> is zero.
>> + * @funcs: Framebuffer functions, in particular a custom dirty() 
>> callback.
>> + *         Can be NULL.
>> + *
>> + * Returns:
>> + * Zero on success or negative error code on failure.
>> + */
>> +int drm_fb_cma_fbdev_init_with_funcs(struct drm_device *dev,
>> +    unsigned int preferred_bpp, unsigned int max_conn_count,
>> +    const struct drm_framebuffer_funcs *funcs)
>> +{
>> +    struct drm_fbdev_cma *fbdev_cma;
>> +    struct drm_fb_helper *fb_helper;
>> +    int ret;
>> +
>> +    if (!preferred_bpp)
>> +        preferred_bpp = dev->mode_config.preferred_depth;
>> +    if (!preferred_bpp)
>> +        preferred_bpp = 32;
>> +
>> +    if (!max_conn_count)
>> +        max_conn_count = dev->mode_config.num_connector;
>> +
>> +    fbdev_cma = kzalloc(sizeof(*fbdev_cma), GFP_KERNEL);
>> +    if (!fbdev_cma)
>> +        return -ENOMEM;
>> +
>> +    fbdev_cma->fb_funcs = funcs;
>> +    fb_helper = &fbdev_cma->fb_helper;
>> +
>> +    drm_fb_helper_prepare(dev, fb_helper, &drm_fb_cma_helper_funcs);
>> +
>> +    ret = drm_fb_helper_init(dev, fb_helper, max_conn_count);
>> +    if (ret < 0) {
>> +        DRM_DEV_ERROR(dev->dev, "Failed to initialize fbdev 
>> helper.\n");
>> +        goto err_free;
>> +    }
>> +
>> +    ret = drm_fb_helper_single_add_all_connectors(fb_helper);
>> +    if (ret < 0) {
>> +        DRM_DEV_ERROR(dev->dev, "Failed to add connectors.\n");
>> +        goto err_drm_fb_helper_fini;
>> +    }
>> +
>> +    ret = drm_fb_helper_initial_config(fb_helper, preferred_bpp);
>> +    if (ret < 0) {
>> +        DRM_DEV_ERROR(dev->dev, "Failed to set fbdev 
>> configuration.\n");
>> +        goto err_drm_fb_helper_fini;
>> +    }
>> +
>> +    return 0;
>> +
>> +err_drm_fb_helper_fini:
>> +    drm_fb_helper_fini(fb_helper);
>> +err_free:
>> +    kfree(fbdev_cma);
>> +
>> +    return ret;
>> +}
>> +EXPORT_SYMBOL_GPL(drm_fb_cma_fbdev_init_with_funcs);
>> +
>> +/**
>> + * drm_fb_cma_fbdev_init() - Allocate and initialize fbdev emulation
>> + * @dev: DRM device
>> + * @preferred_bpp: Preferred bits per pixel for the device.
>> + *                 @dev->mode_config.preferred_depth is used if this 
>> is zero.
>> + * @max_conn_count: Maximum number of connectors.
>> + *                  @dev->mode_config.num_connector is used if this 
>> is zero.
>> + *
>> + * Returns:
>> + * Zero on success or negative error code on failure.
>> + */
>> +int drm_fb_cma_fbdev_init(struct drm_device *dev, unsigned int 
>> preferred_bpp,
>> +              unsigned int max_conn_count)
>> +{
>> +    return drm_fb_cma_fbdev_init_with_funcs(dev, preferred_bpp,
>> +                        max_conn_count, NULL);
>> +}
>> +EXPORT_SYMBOL_GPL(drm_fb_cma_fbdev_init);
>> +
>> +/**
>> + * drm_fb_cma_fbdev_fini() - Teardown fbdev emulation
>> + * @dev: DRM device
>> + */
>> +void drm_fb_cma_fbdev_fini(struct drm_device *dev)
>> +{
>> +    struct drm_fb_helper *fb_helper = dev->fb_helper;
>> +
>> +    if (!fb_helper)
>> +        return;
>> +
>> +    /* Unregister if it hasn't been done already */
>> +    if (fb_helper->fbdev && fb_helper->fbdev->dev)
>> +        drm_fb_helper_unregister_fbi(fb_helper);
>> +
>> +    if (fb_helper->fbdev)
>> +        drm_fbdev_cma_defio_fini(fb_helper->fbdev);
>> +
>> +    if (fb_helper->fb)
>> +        drm_framebuffer_remove(fb_helper->fb);
>> +
>> +    drm_fb_helper_fini(fb_helper);
>> +    kfree(to_fbdev_cma(fb_helper));
>> +}
>> +EXPORT_SYMBOL_GPL(drm_fb_cma_fbdev_fini);
>> +
>>   /**
>>    * drm_fbdev_cma_init_with_funcs() - Allocate and initializes a 
>> drm_fbdev_cma struct
>>    * @dev: DRM device
>> diff --git a/include/drm/drm_fb_cma_helper.h 
>> b/include/drm/drm_fb_cma_helper.h
>> index a613ff022e6c..4fb2d5563420 100644
>> --- a/include/drm/drm_fb_cma_helper.h
>> +++ b/include/drm/drm_fb_cma_helper.h
>> @@ -15,6 +15,13 @@ struct drm_mode_fb_cmd2;
>>   struct drm_plane;
>>   struct drm_plane_state;
>>   +int drm_fb_cma_fbdev_init_with_funcs(struct drm_device *dev,
>> +    unsigned int preferred_bpp, unsigned int max_conn_count,
>> +    const struct drm_framebuffer_funcs *funcs);
>> +int drm_fb_cma_fbdev_init(struct drm_device *dev, unsigned int 
>> preferred_bpp,
>> +              unsigned int max_conn_count);
>> +void drm_fb_cma_fbdev_fini(struct drm_device *dev);
>> +
>>   struct drm_fbdev_cma *drm_fbdev_cma_init_with_funcs(struct 
>> drm_device *dev,
>>       unsigned int preferred_bpp, unsigned int max_conn_count,
>>       const struct drm_framebuffer_funcs *funcs);
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 02/22] drm/cma-helper: Add drm_fb_cma_fbdev_init/fini()
  2017-12-07 13:09     ` Noralf Trønnes
@ 2017-12-07 14:55       ` Daniel Vetter
  0 siblings, 0 replies; 38+ messages in thread
From: Daniel Vetter @ 2017-12-07 14:55 UTC (permalink / raw)
  To: Noralf Trønnes
  Cc: marex, boris.brezillon, david, narmstrong, Daniel Vetter,
	tomi.valkeinen, alison.wang, liviu.dudau, philippe.cornu,
	dri-devel, z.liuxinliang, kong.kongxinwei, abrodkin,
	laurent.pinchart, puck.chen, zourongrong, shawnguo,
	maxime.ripard, jsarha, vincent.abriou, yannick.fertre

On Thu, Dec 07, 2017 at 02:09:40PM +0100, Noralf Trønnes wrote:
> Daniel,
> 
> There's no response from Laurent, can I go ahead and start applying?

He's usually fairly responsive to a ping on irc, but yeah I think this is
plenty time, and it's a simple change. Imo good to go.
-Daniel

> 
> Noralf.
> 
> 
> Den 30.11.2017 18.38, skrev Noralf Trønnes:
> > Laurent,
> > 
> > Can you please have a look at this and see if it's ok with you?
> > 
> > Noralf.
> > 
> > 
> > Den 15.11.2017 15.19, skrev Noralf Trønnes:
> > > Add functions drm_fb_cma_fbdev_init(), drm_fb_cma_fbdev_fini() and
> > > drm_fb_cma_fbdev_init_with_funcs(). These functions relies on the fact
> > > that the drm_fb_helper struct is stored in dev->drm_fb_helper_private
> > > so drivers don't need to store it.
> > > 
> > > Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > > Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
> > > Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > > ---
> > > 
> > > Changes since version 1:
> > > - Fix NULL pointer dereference in drm_fbdev_cma_create() (Benjamin)
> > > 
> > >   drivers/gpu/drm/drm_fb_cma_helper.c | 119
> > > +++++++++++++++++++++++++++++++++++-
> > >   include/drm/drm_fb_cma_helper.h     |   7 +++
> > >   2 files changed, 123 insertions(+), 3 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c
> > > b/drivers/gpu/drm/drm_fb_cma_helper.c
> > > index 35b56dfba929..186d00adfb5f 100644
> > > --- a/drivers/gpu/drm/drm_fb_cma_helper.c
> > > +++ b/drivers/gpu/drm/drm_fb_cma_helper.c
> > > @@ -23,6 +23,7 @@
> > >   #include <drm/drm_gem_cma_helper.h>
> > >   #include <drm/drm_gem_framebuffer_helper.h>
> > >   #include <drm/drm_fb_cma_helper.h>
> > > +#include <drm/drm_print.h>
> > >   #include <linux/module.h>
> > >     #define DEFAULT_FBDEFIO_DELAY_MS 50
> > > @@ -42,7 +43,7 @@ struct drm_fbdev_cma {
> > >    * callback function to create a cma backed framebuffer.
> > >    *
> > >    * An fbdev framebuffer backed by cma is also available by calling
> > > - * drm_fbdev_cma_init(). drm_fbdev_cma_fini() tears it down.
> > > + * drm_fb_cma_fbdev_init(). drm_fb_cma_fbdev_fini() tears it down.
> > >    * If the &drm_framebuffer_funcs.dirty callback is set,
> > > fb_deferred_io will be
> > >    * set up automatically. &drm_framebuffer_funcs.dirty is called by
> > >    * drm_fb_helper_deferred_io() in process context (&struct
> > > delayed_work).
> > > @@ -68,7 +69,7 @@ struct drm_fbdev_cma {
> > >    *
> > >    * Initialize::
> > >    *
> > > - *     fbdev = drm_fbdev_cma_init_with_funcs(dev, 16,
> > > + *     fbdev = drm_fb_cma_fbdev_init_with_funcs(dev, 16,
> > >    * dev->mode_config.num_crtc,
> > >    * dev->mode_config.num_connector,
> > >    * &driver_fb_funcs);
> > > @@ -256,7 +257,7 @@ drm_fbdev_cma_create(struct drm_fb_helper *helper,
> > >       fbi->screen_size = size;
> > >       fbi->fix.smem_len = size;
> > >   -    if (fbdev_cma->fb_funcs->dirty) {
> > > +    if (fb->funcs->dirty) {
> > >           ret = drm_fbdev_cma_defio_init(fbi, obj);
> > >           if (ret)
> > >               goto err_cma_destroy;
> > > @@ -277,6 +278,118 @@ static const struct drm_fb_helper_funcs
> > > drm_fb_cma_helper_funcs = {
> > >       .fb_probe = drm_fbdev_cma_create,
> > >   };
> > >   +/**
> > > + * drm_fb_cma_fbdev_init_with_funcs() - Allocate and initialize
> > > fbdev emulation
> > > + * @dev: DRM device
> > > + * @preferred_bpp: Preferred bits per pixel for the device.
> > > + *                 @dev->mode_config.preferred_depth is used if
> > > this is zero.
> > > + * @max_conn_count: Maximum number of connectors.
> > > + *                  @dev->mode_config.num_connector is used if this
> > > is zero.
> > > + * @funcs: Framebuffer functions, in particular a custom dirty()
> > > callback.
> > > + *         Can be NULL.
> > > + *
> > > + * Returns:
> > > + * Zero on success or negative error code on failure.
> > > + */
> > > +int drm_fb_cma_fbdev_init_with_funcs(struct drm_device *dev,
> > > +    unsigned int preferred_bpp, unsigned int max_conn_count,
> > > +    const struct drm_framebuffer_funcs *funcs)
> > > +{
> > > +    struct drm_fbdev_cma *fbdev_cma;
> > > +    struct drm_fb_helper *fb_helper;
> > > +    int ret;
> > > +
> > > +    if (!preferred_bpp)
> > > +        preferred_bpp = dev->mode_config.preferred_depth;
> > > +    if (!preferred_bpp)
> > > +        preferred_bpp = 32;
> > > +
> > > +    if (!max_conn_count)
> > > +        max_conn_count = dev->mode_config.num_connector;
> > > +
> > > +    fbdev_cma = kzalloc(sizeof(*fbdev_cma), GFP_KERNEL);
> > > +    if (!fbdev_cma)
> > > +        return -ENOMEM;
> > > +
> > > +    fbdev_cma->fb_funcs = funcs;
> > > +    fb_helper = &fbdev_cma->fb_helper;
> > > +
> > > +    drm_fb_helper_prepare(dev, fb_helper, &drm_fb_cma_helper_funcs);
> > > +
> > > +    ret = drm_fb_helper_init(dev, fb_helper, max_conn_count);
> > > +    if (ret < 0) {
> > > +        DRM_DEV_ERROR(dev->dev, "Failed to initialize fbdev
> > > helper.\n");
> > > +        goto err_free;
> > > +    }
> > > +
> > > +    ret = drm_fb_helper_single_add_all_connectors(fb_helper);
> > > +    if (ret < 0) {
> > > +        DRM_DEV_ERROR(dev->dev, "Failed to add connectors.\n");
> > > +        goto err_drm_fb_helper_fini;
> > > +    }
> > > +
> > > +    ret = drm_fb_helper_initial_config(fb_helper, preferred_bpp);
> > > +    if (ret < 0) {
> > > +        DRM_DEV_ERROR(dev->dev, "Failed to set fbdev
> > > configuration.\n");
> > > +        goto err_drm_fb_helper_fini;
> > > +    }
> > > +
> > > +    return 0;
> > > +
> > > +err_drm_fb_helper_fini:
> > > +    drm_fb_helper_fini(fb_helper);
> > > +err_free:
> > > +    kfree(fbdev_cma);
> > > +
> > > +    return ret;
> > > +}
> > > +EXPORT_SYMBOL_GPL(drm_fb_cma_fbdev_init_with_funcs);
> > > +
> > > +/**
> > > + * drm_fb_cma_fbdev_init() - Allocate and initialize fbdev emulation
> > > + * @dev: DRM device
> > > + * @preferred_bpp: Preferred bits per pixel for the device.
> > > + *                 @dev->mode_config.preferred_depth is used if
> > > this is zero.
> > > + * @max_conn_count: Maximum number of connectors.
> > > + *                  @dev->mode_config.num_connector is used if this
> > > is zero.
> > > + *
> > > + * Returns:
> > > + * Zero on success or negative error code on failure.
> > > + */
> > > +int drm_fb_cma_fbdev_init(struct drm_device *dev, unsigned int
> > > preferred_bpp,
> > > +              unsigned int max_conn_count)
> > > +{
> > > +    return drm_fb_cma_fbdev_init_with_funcs(dev, preferred_bpp,
> > > +                        max_conn_count, NULL);
> > > +}
> > > +EXPORT_SYMBOL_GPL(drm_fb_cma_fbdev_init);
> > > +
> > > +/**
> > > + * drm_fb_cma_fbdev_fini() - Teardown fbdev emulation
> > > + * @dev: DRM device
> > > + */
> > > +void drm_fb_cma_fbdev_fini(struct drm_device *dev)
> > > +{
> > > +    struct drm_fb_helper *fb_helper = dev->fb_helper;
> > > +
> > > +    if (!fb_helper)
> > > +        return;
> > > +
> > > +    /* Unregister if it hasn't been done already */
> > > +    if (fb_helper->fbdev && fb_helper->fbdev->dev)
> > > +        drm_fb_helper_unregister_fbi(fb_helper);
> > > +
> > > +    if (fb_helper->fbdev)
> > > +        drm_fbdev_cma_defio_fini(fb_helper->fbdev);
> > > +
> > > +    if (fb_helper->fb)
> > > +        drm_framebuffer_remove(fb_helper->fb);
> > > +
> > > +    drm_fb_helper_fini(fb_helper);
> > > +    kfree(to_fbdev_cma(fb_helper));
> > > +}
> > > +EXPORT_SYMBOL_GPL(drm_fb_cma_fbdev_fini);
> > > +
> > >   /**
> > >    * drm_fbdev_cma_init_with_funcs() - Allocate and initializes a
> > > drm_fbdev_cma struct
> > >    * @dev: DRM device
> > > diff --git a/include/drm/drm_fb_cma_helper.h
> > > b/include/drm/drm_fb_cma_helper.h
> > > index a613ff022e6c..4fb2d5563420 100644
> > > --- a/include/drm/drm_fb_cma_helper.h
> > > +++ b/include/drm/drm_fb_cma_helper.h
> > > @@ -15,6 +15,13 @@ struct drm_mode_fb_cmd2;
> > >   struct drm_plane;
> > >   struct drm_plane_state;
> > >   +int drm_fb_cma_fbdev_init_with_funcs(struct drm_device *dev,
> > > +    unsigned int preferred_bpp, unsigned int max_conn_count,
> > > +    const struct drm_framebuffer_funcs *funcs);
> > > +int drm_fb_cma_fbdev_init(struct drm_device *dev, unsigned int
> > > preferred_bpp,
> > > +              unsigned int max_conn_count);
> > > +void drm_fb_cma_fbdev_fini(struct drm_device *dev);
> > > +
> > >   struct drm_fbdev_cma *drm_fbdev_cma_init_with_funcs(struct
> > > drm_device *dev,
> > >       unsigned int preferred_bpp, unsigned int max_conn_count,
> > >       const struct drm_framebuffer_funcs *funcs);
> > 
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > 
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions
  2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
                   ` (22 preceding siblings ...)
  2017-11-16  8:14 ` [PATCH v2 00/22] " Shawn Guo
@ 2017-12-08 13:59 ` Noralf Trønnes
  23 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2017-12-08 13:59 UTC (permalink / raw)
  To: dri-devel
  Cc: narmstrong, liviu.dudau, laurent.pinchart, marex,
	boris.brezillon, abrodkin, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, david, puck.chen, jsarha, vincent.abriou,
	alison.wang, philippe.cornu, yannick.fertre, zourongrong,
	maxime.ripard, shawnguo


Den 15.11.2017 15.19, skrev Noralf Trønnes:
> This patchset adds drm_fb_cma_fbdev_init/fini() functions that replaces
> drm_fbdev_cma_init/fini(). The reason for doing so is to get rid of
> struct drm_fbdev_cma and it's wrapper functions. The final piece will
> happen when tinydrm moves away from the cma helper and we can remove the
> struct.

The following has been applied to drm-misc-next.
I will resend a rebased version for the rest.
Thanks for reviewing.

Noralf.

[v2,01/22] drm/gem-fb-helper: drm_gem_fbdev_fb_create() make funcs optional
[v2,02/22] drm/cma-helper: Add drm_fb_cma_fbdev_init/fini()
[v2,05/22] drm/atmel-hlcdc: Use drm_fb_cma_fbdev_init/fini()
[v2,07/22] drm/imx: Use drm_fb_cma_fbdev_init/fini()
[v2,10/22] drm/pl111: Use drm_fb_cma_fbdev_init/fini()
[v2,12/22] drm/sti: Use drm_fb_cma_fbdev_init/fini()
[v2,13/22] drm/stm: Use drm_fb_cma_fbdev_init/fini()
[v2,14/22] drm/sun4i: Use drm_fb_cma_fbdev_init/fini()
[v2,15/22] drm/tilcdc: Use drm_fb_cma_fbdev_init/fini()
[v2,16/22] drm/tve200: Use drm_fb_cma_fbdev_init/fini()
[v2,17/22] drm/vc4: Use drm_fb_cma_fbdev_init/fini()
[v2,18/22] drm/zte: Use drm_fb_cma_fbdev_init/fini()
[v2,19/22] drm/arm/mali: Use drm_fb_cma_fbdev_init/fini()

> Note:
> Patches 19-22 depends on patchset:
> [v3] drm: Add simple modeset suspend/resume helpers
>
> Noralf.
>
> Changes since version 1:
> - Fix NULL pointer dereference in drm_fbdev_cma_create() (Benjamin)
> - sti: Remove unused private variable (Benjamin)
> - stm: Remove duplicate ldev assignment (Philippe)
> - tilcdc: Rebase on: 'drm/tilcdc: Use drm_gem_cma_print_info()'
>
> Noralf Trønnes (22):
>    drm/gem-fb-helper: drm_gem_fbdev_fb_create() make funcs optional
>    drm/cma-helper: Add drm_fb_cma_fbdev_init/fini()
>    drm/arc: Use drm_fb_cma_fbdev_init/fini()
>    drm/arm/hdlcd: Use drm_fb_cma_fbdev_init/fini()
>    drm/atmel-hlcdc: Use drm_fb_cma_fbdev_init/fini()
>    drm/hisilicon/kirin: Use drm_fb_cma_fbdev_init/fini()
>    drm/imx: Use drm_fb_cma_fbdev_init/fini()
>    drm/meson: Use drm_fb_cma_fbdev_init/fini()
>    drm/mxsfb: Use drm_fb_cma_fbdev_init/fini()
>    drm/pl111: Use drm_fb_cma_fbdev_init/fini()
>    drm/rcar-du: Use drm_fb_cma_fbdev_init/fini()
>    drm/sti: Use drm_fb_cma_fbdev_init/fini()
>    drm/stm: Use drm_fb_cma_fbdev_init/fini()
>    drm/sun4i: Use drm_fb_cma_fbdev_init/fini()
>    drm/tilcdc: Use drm_fb_cma_fbdev_init/fini()
>    drm/tve200: Use drm_fb_cma_fbdev_init/fini()
>    drm/vc4: Use drm_fb_cma_fbdev_init/fini()
>    drm/zte: Use drm_fb_cma_fbdev_init/fini()
>    drm/arm/mali: Use drm_fb_cma_fbdev_init/fini()
>    drm/fsl-dcu: Use drm_fb_cma_fbdev_init/fini()
>    drm/tinydrm: Use drm_fb_cma_fbdev_init_with_funcs/fini()
>    drm/cma-helper: Remove drm_fbdev_cma* functions
>
>   Documentation/gpu/todo.rst                      |   5 -
>   drivers/gpu/drm/arc/arcpgu.h                    |   4 -
>   drivers/gpu/drm/arc/arcpgu_drv.c                |  36 +----
>   drivers/gpu/drm/arm/hdlcd_drv.c                 |  37 +----
>   drivers/gpu/drm/arm/hdlcd_drv.h                 |   1 -
>   drivers/gpu/drm/arm/malidp_drv.c                |  39 +----
>   drivers/gpu/drm/arm/malidp_drv.h                |   1 -
>   drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c    |  26 +---
>   drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h    |   2 +-
>   drivers/gpu/drm/drm_fb_cma_helper.c             | 191 +++++++++---------------
>   drivers/gpu/drm/drm_gem_framebuffer_helper.c    |   6 +-
>   drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c       |  26 +---
>   drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h       |   1 -
>   drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c |  35 +----
>   drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h |   4 -
>   drivers/gpu/drm/imx/imx-drm-core.c              |  33 +---
>   drivers/gpu/drm/imx/imx-drm.h                   |   1 -
>   drivers/gpu/drm/meson/meson_drv.c               |  20 +--
>   drivers/gpu/drm/meson/meson_drv.h               |   1 -
>   drivers/gpu/drm/mxsfb/mxsfb_drv.c               |  21 +--
>   drivers/gpu/drm/mxsfb/mxsfb_drv.h               |   1 -
>   drivers/gpu/drm/pl111/pl111_drm.h               |   1 -
>   drivers/gpu/drm/pl111/pl111_drv.c               |  16 +-
>   drivers/gpu/drm/rcar-du/rcar_du_drv.c           |  13 +-
>   drivers/gpu/drm/rcar-du/rcar_du_drv.h           |   2 -
>   drivers/gpu/drm/rcar-du/rcar_du_kms.c           |  20 +--
>   drivers/gpu/drm/sti/sti_drv.c                   |  27 +---
>   drivers/gpu/drm/sti/sti_drv.h                   |   1 -
>   drivers/gpu/drm/stm/drv.c                       |  38 +----
>   drivers/gpu/drm/stm/ltdc.h                      |   1 -
>   drivers/gpu/drm/sun4i/sun4i_drv.c               |  14 +-
>   drivers/gpu/drm/sun4i/sun4i_drv.h               |   2 -
>   drivers/gpu/drm/sun4i/sun4i_framebuffer.c       |  18 +--
>   drivers/gpu/drm/sun4i/sun4i_framebuffer.h       |   2 +-
>   drivers/gpu/drm/tilcdc/tilcdc_drv.c             |  26 +---
>   drivers/gpu/drm/tilcdc/tilcdc_drv.h             |   2 -
>   drivers/gpu/drm/tinydrm/core/tinydrm-core.c     |  37 +----
>   drivers/gpu/drm/tinydrm/mi0283qt.c              |   3 +-
>   drivers/gpu/drm/tinydrm/st7586.c                |   3 +-
>   drivers/gpu/drm/tve200/tve200_drm.h             |   1 -
>   drivers/gpu/drm/tve200/tve200_drv.c             |  16 +-
>   drivers/gpu/drm/vc4/vc4_drv.c                   |  13 +-
>   drivers/gpu/drm/vc4/vc4_drv.h                   |   2 -
>   drivers/gpu/drm/vc4/vc4_kms.c                   |  18 +--
>   drivers/gpu/drm/zte/zx_drm_drv.c                |  48 +-----
>   include/drm/drm_fb_cma_helper.h                 |  29 +---
>   include/drm/tinydrm/tinydrm.h                   |   3 -
>   47 files changed, 198 insertions(+), 649 deletions(-)
>

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 03/22] drm/arc: Use drm_fb_cma_fbdev_init/fini()
  2017-11-15 14:19 ` [PATCH v2 03/22] drm/arc: Use drm_fb_cma_fbdev_init/fini() Noralf Trønnes
  2017-11-21 16:49   ` Alexey Brodkin
@ 2018-09-27  8:49   ` Alexey Brodkin
  2018-09-27 12:33     ` Noralf Trønnes
  1 sibling, 1 reply; 38+ messages in thread
From: Alexey Brodkin @ 2018-09-27  8:49 UTC (permalink / raw)
  To: stefan, noralf
  Cc: narmstrong, Alexey.Brodkin, liviu.dudau, dri-devel,
	laurent.pinchart, marex, boris.brezillon, z.liuxinliang,
	kong.kongxinwei, tomi.valkeinen, david, puck.chen, jsarha,
	vincent.abriou, alison.wang, philippe.cornu, yannick

Hi Noralf,

On Wed, 2017-11-15 at 15:19 +0100, Noralf Trønnes wrote:
> Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
> the fact that drm_device holds a pointer to the drm_fb_helper structure.
> This means that the driver doesn't have to keep track of that.
> Also use the drm_fb_helper functions directly.
> Remove unused function prototype arcpgu_fbdev_cma_init().
> 
> Cc: Alexey Brodkin <abrodkin@synopsys.com>
> Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

Similarly to drm/fsl-dcu driver this one never made it upstream.
I was under impression that entire series will be either accepted or not
but looks like fixes for separate drivers were pulled via separate trees.

Anyways I like this patch for ARC PGU and may confirm it works
perfectly fine on top of 4.18.10 so should I pull this into my tree and
send a pull-request to David or maybe all not yet accepted patches from the
series may go through the same tree?

-Alexey

And essentially...
Acked-by: Alexey Brodkin <abrodkin@synopsys.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v2 03/22] drm/arc: Use drm_fb_cma_fbdev_init/fini()
  2018-09-27  8:49   ` Alexey Brodkin
@ 2018-09-27 12:33     ` Noralf Trønnes
  0 siblings, 0 replies; 38+ messages in thread
From: Noralf Trønnes @ 2018-09-27 12:33 UTC (permalink / raw)
  To: Alexey Brodkin, stefan
  Cc: narmstrong, liviu.dudau, dri-devel, laurent.pinchart, marex,
	boris.brezillon, z.liuxinliang, kong.kongxinwei, tomi.valkeinen,
	david, puck.chen, jsarha, vincent.abriou, alison.wang,
	philippe.cornu, yannick.fertre, zourongrong


Den 27.09.2018 10.49, skrev Alexey Brodkin:
> Hi Noralf,
>
> On Wed, 2017-11-15 at 15:19 +0100, Noralf Trønnes wrote:
>> Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
>> the fact that drm_device holds a pointer to the drm_fb_helper structure.
>> This means that the driver doesn't have to keep track of that.
>> Also use the drm_fb_helper functions directly.
>> Remove unused function prototype arcpgu_fbdev_cma_init().
>>
>> Cc: Alexey Brodkin <abrodkin@synopsys.com>
>> Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
> Similarly to drm/fsl-dcu driver this one never made it upstream.
> I was under impression that entire series will be either accepted or not
> but looks like fixes for separate drivers were pulled via separate trees.
>
> Anyways I like this patch for ARC PGU and may confirm it works
> perfectly fine on top of 4.18.10 so should I pull this into my tree and
> send a pull-request to David or maybe all not yet accepted patches from the
> series may go through the same tree?
>
> -Alexey
>
> And essentially...
> Acked-by: Alexey Brodkin <abrodkin@synopsys.com>
>

It has been superseeded by this patch:

[02/20] drm/arc: Use drm_fbdev_generic_setup()
https://patchwork.freedesktop.org/patch/247862/

I'll reply to the cover letter of this series that it has been superseeded
and why.

Wrt to applying, I only do that if I get an ack from the driver maintainer
or a DRM maintainer for trivial stuff.
Some reply that they have applied/queued the patch in their tree for the
next version.

Noralf.

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

end of thread, other threads:[~2018-09-27 12:33 UTC | newest]

Thread overview: 38+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-15 14:19 [PATCH v2 00/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 01/22] drm/gem-fb-helper: drm_gem_fbdev_fb_create() make funcs optional Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 02/22] drm/cma-helper: Add drm_fb_cma_fbdev_init/fini() Noralf Trønnes
2017-11-30 17:38   ` Noralf Trønnes
2017-12-07 13:09     ` Noralf Trønnes
2017-12-07 14:55       ` Daniel Vetter
2017-11-15 14:19 ` [PATCH v2 03/22] drm/arc: Use drm_fb_cma_fbdev_init/fini() Noralf Trønnes
2017-11-21 16:49   ` Alexey Brodkin
2018-09-27  8:49   ` Alexey Brodkin
2018-09-27 12:33     ` Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 04/22] drm/arm/hdlcd: " Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 05/22] drm/atmel-hlcdc: " Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 06/22] drm/hisilicon/kirin: " Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 07/22] drm/imx: " Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 08/22] drm/meson: " Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 09/22] drm/mxsfb: " Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 10/22] drm/pl111: " Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 11/22] drm/rcar-du: " Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 12/22] drm/sti: " Noralf Trønnes
2017-11-15 15:01   ` Benjamin Gaignard
2017-11-15 14:19 ` [PATCH v2 13/22] drm/stm: " Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 14/22] drm/sun4i: " Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 15/22] drm/tilcdc: " Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 16/22] drm/tve200: " Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 17/22] drm/vc4: " Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 18/22] drm/zte: " Noralf Trønnes
2017-11-17 13:46   ` Shawn Guo
2017-11-15 14:19 ` [PATCH v2 19/22] drm/arm/mali: " Noralf Trønnes
2017-11-15 14:19 ` [PATCH v2 20/22] drm/fsl-dcu: " Noralf Trønnes
2017-11-15 14:20 ` [PATCH v2 21/22] drm/tinydrm: Use drm_fb_cma_fbdev_init_with_funcs/fini() Noralf Trønnes
2017-11-15 14:20 ` [PATCH v2 22/22] drm/cma-helper: Remove drm_fbdev_cma* functions Noralf Trønnes
2017-11-16  8:14 ` [PATCH v2 00/22] " Shawn Guo
2017-11-16 20:11   ` Noralf Trønnes
2017-11-17  9:10     ` Alexey Brodkin
2017-11-17 11:12       ` Noralf Trønnes
2017-11-20 23:52       ` Noralf Trønnes
2017-11-21 16:47         ` Alexey Brodkin
2017-12-08 13:59 ` Noralf Trønnes

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.