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

Reply via email to