Hi Noralf, On 11/04/2017 02:04 PM, 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: Yannick Fertre <yannick.fertre@xxxxxx> > Cc: Philippe Cornu <philippe.cornu@xxxxxx> > Cc: Benjamin Gaignard <benjamin.gaignard@xxxxxxxxxx> > Cc: Vincent Abriou <vincent.abriou@xxxxxx> > Signed-off-by: Noralf Trønnes <noralf@xxxxxxxxxxx> Many thanks for this nice cleanup. I will have to push a small fix to move drm_kms_helper_poll_init() after drm_fb_cma_fbdev_init() in order to remove a warning when booting (+ a small cleanup as "ldev = ddev->dev_private;" is not used anymore before drm_fb_cma_fbdev_init(). Anyway, regarding your patchset for stm: Acked-by: Philippe Cornu <philippe.cornu@xxxxxx> Tested-by: Philippe Cornu <philippe.cornu@xxxxxx> Thank you, Philippe :-) > --- > drivers/gpu/drm/stm/drv.c | 37 ++++++------------------------------- > drivers/gpu/drm/stm/ltdc.h | 1 - > 2 files changed, 6 insertions(+), 32 deletions(-) > > diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c > index c857663eafc2..9a66f5671d4f 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; > > @@ -113,13 +97,9 @@ static int drv_load(struct drm_device *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 +112,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 */ > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel