On Wed, 26 Jun 2024 at 12:19, Thomas Zimmermann <tzimmermann@xxxxxxx> wrote: > > Hi > > Am 26.06.24 um 11:10 schrieb Dmitry Baryshkov: > > On Wed, Jun 26, 2024 at 11:01:11AM GMT, 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 <tzimmermann@xxxxxxx> > >>>> --- > >>>> 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. > > I'd say it's qui pro quo. We are wasting resources on drmm handling, but > > then keep it by dropping all drm_encoder_funcs instances. > > With drm_encoder_init() there's a static-const declared struct in RO > memory. With drmm_encoder_init(), there's a kalloc for the managed > callback data. It's RW memory and the alloc can fail. Therefore I prefer > drm_encoder_init() in this case. Ack. -- With best wishes Dmitry