diff mbox series

[v3,11/12] drm/client: Make client support optional

Message ID 20241008120652.159190-12-tzimmermann@suse.de (mailing list archive)
State New
Headers show
Series drm: Introduce DRM client library | expand

Commit Message

Thomas Zimmermann Oct. 8, 2024, 11:59 a.m. UTC
Only build client code if DRM_CLIENT has been selected. Automatially
do so if one of the default clients has been enabled. If client support
has been disabled, the helpers for client-related events are empty and
the regular client functions are not present.

Amdgpu has an internal DRM client, so it has to select DRM_CLIENT by
itself unconditionally.

v3:
- provide empty drm_client_debugfs_init() if DRM_CLIENT=n (kernel
  test robot)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: Xinhui Pan <Xinhui.Pan@amd.com>
---
 drivers/gpu/drm/Kconfig            | 10 ++++++++++
 drivers/gpu/drm/Makefile           |  7 ++++---
 drivers/gpu/drm/amd/amdgpu/Kconfig |  1 +
 drivers/gpu/drm/drm_client_event.c |  2 ++
 drivers/gpu/drm/drm_debugfs.c      |  1 -
 drivers/gpu/drm/drm_internal.h     |  8 ++++++++
 include/drm/drm_client.h           |  2 --
 include/drm/drm_client_event.h     | 13 +++++++++++++
 8 files changed, 38 insertions(+), 6 deletions(-)

Comments

Cavitt, Jonathan Oct. 8, 2024, 9:41 p.m. UTC | #1
-----Original Message-----
From: Intel-xe <intel-xe-bounces@lists.freedesktop.org> On Behalf Of Thomas Zimmermann
Sent: Tuesday, October 8, 2024 5:00 AM
To: simona@ffwll.ch; airlied@gmail.com; javierm@redhat.com; jfalempe@redhat.com
Cc: dri-devel@lists.freedesktop.org; amd-gfx@lists.freedesktop.org; intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org; Thomas Zimmermann <tzimmermann@suse.de>; Alex Deucher <alexander.deucher@amd.com>; Christian König <christian.koenig@amd.com>; Xinhui Pan <Xinhui.Pan@amd.com>
Subject: [PATCH v3 11/12] drm/client: Make client support optional
> 
> Only build client code if DRM_CLIENT has been selected. Automatially
> do so if one of the default clients has been enabled. If client support
> has been disabled, the helpers for client-related events are empty and
> the regular client functions are not present.
> 
> Amdgpu has an internal DRM client, so it has to select DRM_CLIENT by
> itself unconditionally.
> 
> v3:
> - provide empty drm_client_debugfs_init() if DRM_CLIENT=n (kernel
>   test robot)
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Cc: "Christian König" <christian.koenig@amd.com>
> Cc: Xinhui Pan <Xinhui.Pan@amd.com>

LGTM.

Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
-Jonathan Cavitt

> ---
>  drivers/gpu/drm/Kconfig            | 10 ++++++++++
>  drivers/gpu/drm/Makefile           |  7 ++++---
>  drivers/gpu/drm/amd/amdgpu/Kconfig |  1 +
>  drivers/gpu/drm/drm_client_event.c |  2 ++
>  drivers/gpu/drm/drm_debugfs.c      |  1 -
>  drivers/gpu/drm/drm_internal.h     |  8 ++++++++
>  include/drm/drm_client.h           |  2 --
>  include/drm/drm_client_event.h     | 13 +++++++++++++
>  8 files changed, 38 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index 88c4837d070c..ea1cc924528c 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -209,6 +209,15 @@ config DRM_DEBUG_MODESET_LOCK
>  
>  	  If in doubt, say "N".
>  
> +config DRM_CLIENT
> +	bool
> +	depends on DRM
> +	help
> +	  Enables support for DRM clients. DRM drivers that need
> +	  struct drm_client_dev and its interfaces should select this
> +	  option. Drivers that support the default clients should
> +	  select DRM_CLIENT_SELECTION instead.
> +
>  config DRM_CLIENT_SELECTION
>  	bool
>  	depends on DRM
> @@ -224,6 +233,7 @@ config DRM_CLIENT_SETUP
>  config DRM_FBDEV_EMULATION
>  	bool "Enable legacy fbdev support for your modesetting driver"
>  	depends on DRM
> +	select DRM_CLIENT
>  	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
>  	default FB
>  	help
> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
> index 6b7d168ca790..c3e5d353588e 100644
> --- a/drivers/gpu/drm/Makefile
> +++ b/drivers/gpu/drm/Makefile
> @@ -41,9 +41,6 @@ drm-y := \
>  	drm_blend.o \
>  	drm_bridge.o \
>  	drm_cache.o \
> -	drm_client.o \
> -	drm_client_event.o \
> -	drm_client_modeset.o \
>  	drm_color_mgmt.o \
>  	drm_connector.o \
>  	drm_crtc.o \
> @@ -77,6 +74,10 @@ drm-y := \
>  	drm_vblank_work.o \
>  	drm_vma_manager.o \
>  	drm_writeback.o
> +drm-$(CONFIG_DRM_CLIENT) += \
> +	drm_client.o \
> +	drm_client_event.o \
> +	drm_client_modeset.o
>  drm-$(CONFIG_DRM_LIB_RANDOM) += lib/drm_random.o
>  drm-$(CONFIG_COMPAT) += drm_ioc32.o
>  drm-$(CONFIG_DRM_PANEL) += drm_panel.o
> diff --git a/drivers/gpu/drm/amd/amdgpu/Kconfig b/drivers/gpu/drm/amd/amdgpu/Kconfig
> index 680a94c361ba..41fa3377d9cf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/Kconfig
> +++ b/drivers/gpu/drm/amd/amdgpu/Kconfig
> @@ -5,6 +5,7 @@ config DRM_AMDGPU
>  	depends on DRM && PCI && MMU
>  	depends on !UML
>  	select FW_LOADER
> +	select DRM_CLIENT
>  	select DRM_CLIENT_SELECTION
>  	select DRM_DISPLAY_DP_HELPER
>  	select DRM_DISPLAY_DSC_HELPER
> diff --git a/drivers/gpu/drm/drm_client_event.c b/drivers/gpu/drm/drm_client_event.c
> index c52e93643672..e303de564485 100644
> --- a/drivers/gpu/drm/drm_client_event.c
> +++ b/drivers/gpu/drm/drm_client_event.c
> @@ -14,6 +14,8 @@
>  #include <drm/drm_drv.h>
>  #include <drm/drm_print.h>
>  
> +#include "drm_internal.h"
> +
>  /**
>   * drm_client_dev_unregister - Unregister clients
>   * @dev: DRM device
> diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c
> index 9d3e6dd68810..5844a9234d9f 100644
> --- a/drivers/gpu/drm/drm_debugfs.c
> +++ b/drivers/gpu/drm/drm_debugfs.c
> @@ -32,7 +32,6 @@
>  #include <drm/drm_atomic.h>
>  #include <drm/drm_auth.h>
>  #include <drm/drm_bridge.h>
> -#include <drm/drm_client.h>
>  #include <drm/drm_debugfs.h>
>  #include <drm/drm_device.h>
>  #include <drm/drm_drv.h>
> diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h
> index 9af72bab86d1..0bfcba6949b0 100644
> --- a/drivers/gpu/drm/drm_internal.h
> +++ b/drivers/gpu/drm/drm_internal.h
> @@ -48,6 +48,14 @@ struct drm_prime_file_private;
>  struct drm_printer;
>  struct drm_vblank_crtc;
>  
> +/* drm_client_event.c */
> +#if defined(CONFIG_DRM_CLIENT)
> +void drm_client_debugfs_init(struct drm_device *dev);
> +#else
> +static inline void drm_client_debugfs_init(struct drm_device *dev)
> +{ }
> +#endif
> +
>  /* drm_file.c */
>  extern struct mutex drm_global_mutex;
>  bool drm_dev_needs_global_mutex(struct drm_device *dev);
> diff --git a/include/drm/drm_client.h b/include/drm/drm_client.h
> index c03c4b0f3e94..3b13cf29ed55 100644
> --- a/include/drm/drm_client.h
> +++ b/include/drm/drm_client.h
> @@ -236,6 +236,4 @@ int drm_client_modeset_dpms(struct drm_client_dev *client, int mode);
>  	drm_for_each_connector_iter(connector, iter) \
>  		if (connector->connector_type != DRM_MODE_CONNECTOR_WRITEBACK)
>  
> -void drm_client_debugfs_init(struct drm_device *dev);
> -
>  #endif
> diff --git a/include/drm/drm_client_event.h b/include/drm/drm_client_event.h
> index 72c97d111169..99863554b055 100644
> --- a/include/drm/drm_client_event.h
> +++ b/include/drm/drm_client_event.h
> @@ -5,10 +5,23 @@
>  
>  struct drm_device;
>  
> +#if defined(CONFIG_DRM_CLIENT)
>  void drm_client_dev_unregister(struct drm_device *dev);
>  void drm_client_dev_hotplug(struct drm_device *dev);
>  void drm_client_dev_restore(struct drm_device *dev);
>  void drm_client_dev_suspend(struct drm_device *dev, bool holds_console_lock);
>  void drm_client_dev_resume(struct drm_device *dev, bool holds_console_lock);
> +#else
> +static inline void drm_client_dev_unregister(struct drm_device *dev)
> +{ }
> +static inline void drm_client_dev_hotplug(struct drm_device *dev)
> +{ }
> +static inline void drm_client_dev_restore(struct drm_device *dev)
> +{ }
> +static inline void drm_client_dev_suspend(struct drm_device *dev, bool holds_console_lock)
> +{ }
> +static inline void drm_client_dev_resume(struct drm_device *dev, bool holds_console_lock)
> +{ }
> +#endif
>  
>  #endif
> -- 
> 2.46.0
> 
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 88c4837d070c..ea1cc924528c 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -209,6 +209,15 @@  config DRM_DEBUG_MODESET_LOCK
 
 	  If in doubt, say "N".
 
+config DRM_CLIENT
+	bool
+	depends on DRM
+	help
+	  Enables support for DRM clients. DRM drivers that need
+	  struct drm_client_dev and its interfaces should select this
+	  option. Drivers that support the default clients should
+	  select DRM_CLIENT_SELECTION instead.
+
 config DRM_CLIENT_SELECTION
 	bool
 	depends on DRM
@@ -224,6 +233,7 @@  config DRM_CLIENT_SETUP
 config DRM_FBDEV_EMULATION
 	bool "Enable legacy fbdev support for your modesetting driver"
 	depends on DRM
+	select DRM_CLIENT
 	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
 	default FB
 	help
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
index 6b7d168ca790..c3e5d353588e 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
@@ -41,9 +41,6 @@  drm-y := \
 	drm_blend.o \
 	drm_bridge.o \
 	drm_cache.o \
-	drm_client.o \
-	drm_client_event.o \
-	drm_client_modeset.o \
 	drm_color_mgmt.o \
 	drm_connector.o \
 	drm_crtc.o \
@@ -77,6 +74,10 @@  drm-y := \
 	drm_vblank_work.o \
 	drm_vma_manager.o \
 	drm_writeback.o
+drm-$(CONFIG_DRM_CLIENT) += \
+	drm_client.o \
+	drm_client_event.o \
+	drm_client_modeset.o
 drm-$(CONFIG_DRM_LIB_RANDOM) += lib/drm_random.o
 drm-$(CONFIG_COMPAT) += drm_ioc32.o
 drm-$(CONFIG_DRM_PANEL) += drm_panel.o
diff --git a/drivers/gpu/drm/amd/amdgpu/Kconfig b/drivers/gpu/drm/amd/amdgpu/Kconfig
index 680a94c361ba..41fa3377d9cf 100644
--- a/drivers/gpu/drm/amd/amdgpu/Kconfig
+++ b/drivers/gpu/drm/amd/amdgpu/Kconfig
@@ -5,6 +5,7 @@  config DRM_AMDGPU
 	depends on DRM && PCI && MMU
 	depends on !UML
 	select FW_LOADER
+	select DRM_CLIENT
 	select DRM_CLIENT_SELECTION
 	select DRM_DISPLAY_DP_HELPER
 	select DRM_DISPLAY_DSC_HELPER
diff --git a/drivers/gpu/drm/drm_client_event.c b/drivers/gpu/drm/drm_client_event.c
index c52e93643672..e303de564485 100644
--- a/drivers/gpu/drm/drm_client_event.c
+++ b/drivers/gpu/drm/drm_client_event.c
@@ -14,6 +14,8 @@ 
 #include <drm/drm_drv.h>
 #include <drm/drm_print.h>
 
+#include "drm_internal.h"
+
 /**
  * drm_client_dev_unregister - Unregister clients
  * @dev: DRM device
diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c
index 9d3e6dd68810..5844a9234d9f 100644
--- a/drivers/gpu/drm/drm_debugfs.c
+++ b/drivers/gpu/drm/drm_debugfs.c
@@ -32,7 +32,6 @@ 
 #include <drm/drm_atomic.h>
 #include <drm/drm_auth.h>
 #include <drm/drm_bridge.h>
-#include <drm/drm_client.h>
 #include <drm/drm_debugfs.h>
 #include <drm/drm_device.h>
 #include <drm/drm_drv.h>
diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h
index 9af72bab86d1..0bfcba6949b0 100644
--- a/drivers/gpu/drm/drm_internal.h
+++ b/drivers/gpu/drm/drm_internal.h
@@ -48,6 +48,14 @@  struct drm_prime_file_private;
 struct drm_printer;
 struct drm_vblank_crtc;
 
+/* drm_client_event.c */
+#if defined(CONFIG_DRM_CLIENT)
+void drm_client_debugfs_init(struct drm_device *dev);
+#else
+static inline void drm_client_debugfs_init(struct drm_device *dev)
+{ }
+#endif
+
 /* drm_file.c */
 extern struct mutex drm_global_mutex;
 bool drm_dev_needs_global_mutex(struct drm_device *dev);
diff --git a/include/drm/drm_client.h b/include/drm/drm_client.h
index c03c4b0f3e94..3b13cf29ed55 100644
--- a/include/drm/drm_client.h
+++ b/include/drm/drm_client.h
@@ -236,6 +236,4 @@  int drm_client_modeset_dpms(struct drm_client_dev *client, int mode);
 	drm_for_each_connector_iter(connector, iter) \
 		if (connector->connector_type != DRM_MODE_CONNECTOR_WRITEBACK)
 
-void drm_client_debugfs_init(struct drm_device *dev);
-
 #endif
diff --git a/include/drm/drm_client_event.h b/include/drm/drm_client_event.h
index 72c97d111169..99863554b055 100644
--- a/include/drm/drm_client_event.h
+++ b/include/drm/drm_client_event.h
@@ -5,10 +5,23 @@ 
 
 struct drm_device;
 
+#if defined(CONFIG_DRM_CLIENT)
 void drm_client_dev_unregister(struct drm_device *dev);
 void drm_client_dev_hotplug(struct drm_device *dev);
 void drm_client_dev_restore(struct drm_device *dev);
 void drm_client_dev_suspend(struct drm_device *dev, bool holds_console_lock);
 void drm_client_dev_resume(struct drm_device *dev, bool holds_console_lock);
+#else
+static inline void drm_client_dev_unregister(struct drm_device *dev)
+{ }
+static inline void drm_client_dev_hotplug(struct drm_device *dev)
+{ }
+static inline void drm_client_dev_restore(struct drm_device *dev)
+{ }
+static inline void drm_client_dev_suspend(struct drm_device *dev, bool holds_console_lock)
+{ }
+static inline void drm_client_dev_resume(struct drm_device *dev, bool holds_console_lock)
+{ }
+#endif
 
 #endif