Hi Noralf, Le 08/09/2018 15:46, Noralf Trønnes a écrit : > The CMA helper is already using the drm_fb_helper_generic_probe part of > the generic fbdev emulation. This patch makes full use of the generic > fbdev emulation by using its drm_client callbacks. This means that > drm_mode_config_funcs->output_poll_changed and drm_driver->lastclose are > now handled by the emulation code. Additionally fbdev unregister happens > automatically on drm_dev_unregister(). > > The drm_fbdev_generic_setup() call is put after drm_dev_register() in the > driver. This is done to highlight the fact that fbdev emulation is an > internal client that makes use of the driver, it is not part of the > driver as such. If fbdev setup fails, an error is printed, but the driver > succeeds probing. > > Cc: Neil Armstrong <narmstrong@xxxxxxxxxxxx> > Signed-off-by: Noralf Trønnes <noralf@xxxxxxxxxxx> > --- > drivers/gpu/drm/meson/meson_drv.c | 19 ++----------------- > drivers/gpu/drm/meson/meson_drv.h | 1 - > 2 files changed, 2 insertions(+), 18 deletions(-) > > diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c > index d3443125e661..348b5a198b9d 100644 > --- a/drivers/gpu/drm/meson/meson_drv.c > +++ b/drivers/gpu/drm/meson/meson_drv.c > @@ -68,15 +68,7 @@ > * - 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, > .atomic_check = drm_atomic_helper_check, > .atomic_commit = drm_atomic_helper_commit, > .fb_create = drm_gem_fb_create, > @@ -282,13 +274,6 @@ 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); > - goto free_drm; > - } > - > drm_kms_helper_poll_init(drm); > > platform_set_drvdata(pdev, priv); > @@ -297,6 +282,8 @@ static int meson_drv_bind_master(struct device *dev, bool has_components) > if (ret) > goto free_drm; > > + drm_fbdev_generic_setup(drm, 32); > + > return 0; > > free_drm: > @@ -313,11 +300,9 @@ 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_mode_config_cleanup(drm); > drm_dev_put(drm); > > diff --git a/drivers/gpu/drm/meson/meson_drv.h b/drivers/gpu/drm/meson/meson_drv.h > index 8450d6ac8c9b..aab96260da9f 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 */ > A little bit late to get this in 4.20 (or 5.0) and get rid of the old fbdev code, but at least we have a (dirty) workaround in place for the Mali fbdev blob... Acked-by: Neil Armstrong <narmstrong@xxxxxxxxxxxx> Thanks for pushing the fbdev emulation on the right path ! Neil _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel