drm/client: Make client support optional
authorThomas Zimmermann <tzimmermann@suse.de>
Mon, 14 Oct 2024 08:55:25 +0000 (10:55 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Fri, 18 Oct 2024 07:23:03 +0000 (09:23 +0200)
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>
Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241014085740.582287-12-tzimmermann@suse.de
drivers/gpu/drm/Kconfig
drivers/gpu/drm/Makefile
drivers/gpu/drm/amd/amdgpu/Kconfig
drivers/gpu/drm/drm_client_event.c
drivers/gpu/drm/drm_debugfs.c
drivers/gpu/drm/drm_internal.h
include/drm/drm_client.h
include/drm/drm_client_event.h

index d4f33a9..5cbb0b2 100644 (file)
@@ -210,6 +210,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
@@ -225,6 +234,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
index 252188d..fcb447c 100644 (file)
@@ -40,9 +40,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 \
@@ -76,6 +73,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
index 680a94c..41fa337 100644 (file)
@@ -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
index c52e936..e303de5 100644 (file)
@@ -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
index 52783ea..536409a 100644 (file)
@@ -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>
index 1705bfc..b2b6a8e 100644 (file)
@@ -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);
index c03c4b0..3b13cf2 100644 (file)
@@ -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
index 72c97d1..9986355 100644 (file)
@@ -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