Re: [PATCH] drm/ast: Inline drm_simple_encoder_init()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@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.
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)




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux