1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00

drm/client: Add client-lib module

Add drm_client_lib.ko to contain DRM's built-in client. Move the
existing client for fbdev emulation into the new module. Protect the
new module behind CONFIG_DRM_CLIENT_LIB.

The Kconfig rules separate the DRM drivers from the DRM clients. A
driver can opt into the default clients, but the user configures
each client individually. To do so, DRM drivers still select
DRM_CLIENT_SELECTION. The option is now a tristate that further
selects all dependencies of the enabled DRM clients. There's
a menu option for each client. Enabling at least one client also
selects DRM_CLIENT_SETUP, so that drivers call drm_client_setup().
New DRM clients should depend on DRM_CLIENT_SELECTION.

There are existing kernel options in drm_fb_helper.o, so leave this
file in the KMS-helper module for now.

v5:
- leave fbdev helpers in drm_kms_helper.ko for now
v3:
- fix commit changelog
v2:
- keep client code in core
- protect lib with DRM_CLIENT_LIB
- remove duplicate line from Makefile (Jocelyn)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241014085740.582287-13-tzimmermann@suse.de
This commit is contained in:
Thomas Zimmermann 2024-10-14 10:55:26 +02:00
parent 1f828b4dd4
commit dadd28d414
3 changed files with 34 additions and 11 deletions

View file

@ -9,8 +9,6 @@ menuconfig DRM
tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)" tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)"
depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && HAS_DMA depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && HAS_DMA
select DRM_PANEL_ORIENTATION_QUIRKS select DRM_PANEL_ORIENTATION_QUIRKS
select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
select FB_CORE if DRM_FBDEV_EMULATION
select HDMI select HDMI
select I2C select I2C
select DMA_SHARED_BUFFER select DMA_SHARED_BUFFER
@ -219,10 +217,19 @@ config DRM_CLIENT
option. Drivers that support the default clients should option. Drivers that support the default clients should
select DRM_CLIENT_SELECTION instead. select DRM_CLIENT_SELECTION instead.
config DRM_CLIENT_SELECTION config DRM_CLIENT_LIB
bool tristate
depends on DRM depends on DRM
select DRM_CLIENT_SETUP if DRM_FBDEV_EMULATION select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
select FB_CORE if DRM_FBDEV_EMULATION
help
This option enables the DRM client library and selects all
modules and components according to the enabled clients.
config DRM_CLIENT_SELECTION
tristate
depends on DRM
select DRM_CLIENT_LIB if DRM_FBDEV_EMULATION
help help
Drivers that support in-kernel DRM clients have to select this Drivers that support in-kernel DRM clients have to select this
option. option.
@ -230,11 +237,18 @@ config DRM_CLIENT_SELECTION
config DRM_CLIENT_SETUP config DRM_CLIENT_SETUP
bool bool
depends on DRM_CLIENT_SELECTION depends on DRM_CLIENT_SELECTION
help
Enables the DRM client selection. DRM drivers that support the
default clients should select DRM_CLIENT_SELECTION instead.
menu "Supported DRM clients"
depends on DRM_CLIENT_SELECTION
config DRM_FBDEV_EMULATION config DRM_FBDEV_EMULATION
bool "Enable legacy fbdev support for your modesetting driver" bool "Enable legacy fbdev support for your modesetting driver"
depends on DRM depends on DRM_CLIENT_SELECTION
select DRM_CLIENT select DRM_CLIENT
select DRM_CLIENT_SETUP
select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
default FB default FB
help help
@ -273,6 +287,8 @@ config DRM_FBDEV_LEAK_PHYS_SMEM
If in doubt, say "N" or spread the word to your closed source If in doubt, say "N" or spread the word to your closed source
library vendor. library vendor.
endmenu
config DRM_LOAD_EDID_FIRMWARE config DRM_LOAD_EDID_FIRMWARE
bool "Allow to specify an EDID data set instead of probing for it" bool "Allow to specify an EDID data set instead of probing for it"
depends on DRM depends on DRM

View file

@ -144,14 +144,18 @@ drm_kms_helper-y := \
drm_probe_helper.o \ drm_probe_helper.o \
drm_self_refresh_helper.o \ drm_self_refresh_helper.o \
drm_simple_kms_helper.o drm_simple_kms_helper.o
drm_kms_helper-$(CONFIG_DRM_CLIENT_SETUP) += \
drm_client_setup.o
drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o
drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += \ drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fb_helper.o
drm_fbdev_client.o \
drm_fb_helper.o
obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o
#
# DRM clients
#
drm_client_lib-y := drm_client_setup.o
drm_client_lib-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fbdev_client.o
obj-$(CONFIG_DRM_CLIENT_LIB) += drm_client_lib.o
# #
# Drivers and the rest # Drivers and the rest
# #

View file

@ -64,3 +64,6 @@ void drm_client_setup_with_color_mode(struct drm_device *dev, unsigned int color
drm_client_setup_with_fourcc(dev, fourcc); drm_client_setup_with_fourcc(dev, fourcc);
} }
EXPORT_SYMBOL(drm_client_setup_with_color_mode); EXPORT_SYMBOL(drm_client_setup_with_color_mode);
MODULE_DESCRIPTION("In-kernel DRM clients");
MODULE_LICENSE("GPL and additional rights");