On Wed, Jun 26, 2024 at 07:59:52PM +0200, Daniel Vetter wrote: > On Wed, Jun 26, 2024 at 11:01:11AM +0200, Thomas Zimmermann wrote: > > Hi > > > > Am 26.06.24 um 06:34 schrieb Dmitry Baryshkov: > > > On Tue, Jun 25, 2024 at 03:18:09PM GMT, Thomas Zimmermann wrote: > > > > The function drm_simple_encoder_init() is a trivial helper and > > > > deprecated. Replace it with the regular call to drm_encoder_init(). > > > > Resolves the dependency on drm_simple_kms_helper.h. No functional > > > > changes. > > > > > > > > Signed-off-by: Thomas Zimmermann <tzimmerm...@suse.de> > > > > --- > > > > drivers/gpu/drm/ast/ast_mode.c | 45 ++++++++++++++++++++++++++++++---- > > > > 1 file changed, 40 insertions(+), 5 deletions(-) > > > > > > > > diff --git a/drivers/gpu/drm/ast/ast_mode.c > > > > b/drivers/gpu/drm/ast/ast_mode.c > > > > index 6695af70768f..2fd9c78eab73 100644 > > > > --- a/drivers/gpu/drm/ast/ast_mode.c > > > > +++ b/drivers/gpu/drm/ast/ast_mode.c > > > > @@ -45,7 +45,6 @@ > > > > #include <drm/drm_managed.h> > > > > #include <drm/drm_panic.h> > > > > #include <drm/drm_probe_helper.h> > > > > -#include <drm/drm_simple_kms_helper.h> > > > > #include "ast_ddc.h" > > > > #include "ast_drv.h" > > > > @@ -1358,6 +1357,14 @@ static int ast_crtc_init(struct drm_device *dev) > > > > return 0; > > > > } > > > > +/* > > > > + * VGA Encoder > > > > + */ > > > > + > > > > +static const struct drm_encoder_funcs ast_vga_encoder_funcs = { > > > > + .destroy = drm_encoder_cleanup, > > > > +}; > > > > + > > > > /* > > > > * VGA Connector > > > > */ > > > > @@ -1411,7 +1418,8 @@ static int ast_vga_output_init(struct ast_device > > > > *ast) > > > > struct drm_connector *connector = &ast->output.vga.connector; > > > > int ret; > > > > - ret = drm_simple_encoder_init(dev, encoder, > > > > DRM_MODE_ENCODER_DAC); > > > > + ret = drm_encoder_init(dev, encoder, &ast_vga_encoder_funcs, > > > > + DRM_MODE_ENCODER_DAC, NULL); > > > What about using drmm_encoder_init() instead? It will call > > > drm_encoder_cleanup automatically. > > > > IIRC the original use case for the drmm_encoder_*() funcs was to solve > > problems with the clean-up order if the encoder was added dynamically. The > > hardware for ast is entirely static and ast uses drmm_mode_config_init() for > > auto-cleaning up the modesetting pipeline. Using drmm_encoder_init() seems > > like a bit of wasted resources for no gain. > > The idea of drmm_ is that you use them all. That the managed version of > drm_mode_config_init also happens to still work with the unmanaged > encoder/connector/crtc/plane cleanup is just to facilitate gradual > conversions. > > And see my other reply, for drmm_encoder_init supporting the NULL funcs > case actually makes full sense. > > Also, any driver can be hotunbound through sysfs, no hotunplug of the hw > needed at all.
I pondered this some more, I think we could embed the drmm tracking structure into struct drm_encoder (and anywhere else we need one), which - would mean a lot of the drmm_ versions again get a void return value, like their non-managed counterparts. - we could truly roll out drmm_ versions everywhere and deprecate the unmanaged ones in a lot more cases, since drivers like ast could then also use it. I'm not sure this is a bright idea at scale, since devm_ doesn't do it afaik. But maybe we should just try. Thoughts? Cheers, Sima -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch