[PATCH] drm/ast: Inline drm_simple_encoder_init()

Thomas Zimmermann tzimmermann at suse.de
Fri Jun 28 10:59:07 UTC 2024


Hi

Am 27.06.24 um 09:47 schrieb Daniel Vetter:
> 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 <tzimmermann at 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?

I cannot say whether it's a good idea. At least it's sounds better then 
kcalloc-ing drm_res for each object. The drm_res instance could directly 
into struct drm_mode_object, so it's available for all the relevant 
stages of the modesetting pipeline.

Best regards
Thomas

>
> Cheers, Sima

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)



More information about the dri-devel mailing list