Message ID | 20241008120652.159190-13-tzimmermann@suse.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm: Introduce DRM client library | expand |
-----Original Message----- From: Intel-gfx <intel-gfx-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> Subject: [PATCH v3 12/12] 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. > > 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> LGTM. Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com> -Jonathan Cavitt > --- > drivers/gpu/drm/Kconfig | 26 ++++++++++++++++++++----- > drivers/gpu/drm/Makefile | 14 +++++++++---- > drivers/gpu/drm/drm_client_setup.c | 3 +++ > drivers/gpu/drm/drm_kms_helper_common.c | 3 +++ > 4 files changed, 37 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig > index ea1cc924528c..a9055c0b9a1a 100644 > --- a/drivers/gpu/drm/Kconfig > +++ b/drivers/gpu/drm/Kconfig > @@ -9,8 +9,6 @@ menuconfig DRM > tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)" > depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && HAS_DMA > select DRM_PANEL_ORIENTATION_QUIRKS > - select DRM_KMS_HELPER if DRM_FBDEV_EMULATION > - select FB_CORE if DRM_FBDEV_EMULATION > select HDMI > select I2C > select DMA_SHARED_BUFFER > @@ -218,10 +216,19 @@ config DRM_CLIENT > option. Drivers that support the default clients should > select DRM_CLIENT_SELECTION instead. > > +config DRM_CLIENT_LIB > + tristate > + depends on DRM > + 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 > - bool > + tristate > depends on DRM > - select DRM_CLIENT_SETUP if DRM_FBDEV_EMULATION > + select DRM_CLIENT_LIB if DRM_FBDEV_EMULATION > help > Drivers that support in-kernel DRM clients have to select this > option. > @@ -229,11 +236,18 @@ config DRM_CLIENT_SELECTION > config DRM_CLIENT_SETUP > bool > 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 > bool "Enable legacy fbdev support for your modesetting driver" > - depends on DRM > + depends on DRM_CLIENT_SELECTION > select DRM_CLIENT > + select DRM_CLIENT_SETUP > select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE > default FB > help > @@ -272,6 +286,8 @@ config DRM_FBDEV_LEAK_PHYS_SMEM > If in doubt, say "N" or spread the word to your closed source > library vendor. > > +endmenu > + > config DRM_LOAD_EDID_FIRMWARE > bool "Allow to specify an EDID data set instead of probing for it" > depends on DRM > diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile > index c3e5d353588e..edfd2ebaf153 100644 > --- a/drivers/gpu/drm/Makefile > +++ b/drivers/gpu/drm/Makefile > @@ -145,13 +145,19 @@ drm_kms_helper-y := \ > drm_probe_helper.o \ > drm_self_refresh_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_FBDEV_EMULATION) += \ > +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 \ > drm_fb_helper.o > -obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o > +obj-$(CONFIG_DRM_CLIENT_LIB) += drm_client_lib.o > > # > # Drivers and the rest > diff --git a/drivers/gpu/drm/drm_client_setup.c b/drivers/gpu/drm/drm_client_setup.c > index 5969c4ffe31b..c14221ca5a0d 100644 > --- a/drivers/gpu/drm/drm_client_setup.c > +++ b/drivers/gpu/drm/drm_client_setup.c > @@ -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); > } > EXPORT_SYMBOL(drm_client_setup_with_color_mode); > + > +MODULE_DESCRIPTION("In-kernel DRM clients"); > +MODULE_LICENSE("GPL and additional rights"); > diff --git a/drivers/gpu/drm/drm_kms_helper_common.c b/drivers/gpu/drm/drm_kms_helper_common.c > index cfdbc1ac88dc..ecff0b1414ac 100644 > --- a/drivers/gpu/drm/drm_kms_helper_common.c > +++ b/drivers/gpu/drm/drm_kms_helper_common.c > @@ -31,11 +31,13 @@ > > #if defined(CONFIG_DRM_FBDEV_EMULATION) > bool drm_fbdev_emulation = true; > +EXPORT_SYMBOL(drm_fbdev_emulation); > module_param_named(fbdev_emulation, drm_fbdev_emulation, bool, 0600); > MODULE_PARM_DESC(fbdev_emulation, > "Enable legacy fbdev emulation [default=true]"); > > int drm_fbdev_overalloc = CONFIG_DRM_FBDEV_OVERALLOC; > +EXPORT_SYMBOL(drm_fbdev_overalloc); > module_param(drm_fbdev_overalloc, int, 0444); > MODULE_PARM_DESC(drm_fbdev_overalloc, > "Overallocation of the fbdev buffer (%) [default=" > @@ -55,6 +57,7 @@ MODULE_PARM_DESC(drm_fbdev_overalloc, > * considered as a broken and legacy behaviour from a modern fbdev device. > */ > bool drm_leak_fbdev_smem; > +EXPORT_SYMBOL(drm_leak_fbdev_smem); > #if IS_ENABLED(CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM) > module_param_unsafe(drm_leak_fbdev_smem, bool, 0600); > MODULE_PARM_DESC(drm_leak_fbdev_smem, > -- > 2.46.0 > >
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig index ea1cc924528c..a9055c0b9a1a 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig @@ -9,8 +9,6 @@ menuconfig DRM tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)" depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && HAS_DMA select DRM_PANEL_ORIENTATION_QUIRKS - select DRM_KMS_HELPER if DRM_FBDEV_EMULATION - select FB_CORE if DRM_FBDEV_EMULATION select HDMI select I2C select DMA_SHARED_BUFFER @@ -218,10 +216,19 @@ config DRM_CLIENT option. Drivers that support the default clients should select DRM_CLIENT_SELECTION instead. +config DRM_CLIENT_LIB + tristate + depends on DRM + 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 - bool + tristate depends on DRM - select DRM_CLIENT_SETUP if DRM_FBDEV_EMULATION + select DRM_CLIENT_LIB if DRM_FBDEV_EMULATION help Drivers that support in-kernel DRM clients have to select this option. @@ -229,11 +236,18 @@ config DRM_CLIENT_SELECTION config DRM_CLIENT_SETUP bool 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 bool "Enable legacy fbdev support for your modesetting driver" - depends on DRM + depends on DRM_CLIENT_SELECTION select DRM_CLIENT + select DRM_CLIENT_SETUP select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE default FB help @@ -272,6 +286,8 @@ config DRM_FBDEV_LEAK_PHYS_SMEM If in doubt, say "N" or spread the word to your closed source library vendor. +endmenu + config DRM_LOAD_EDID_FIRMWARE bool "Allow to specify an EDID data set instead of probing for it" depends on DRM diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index c3e5d353588e..edfd2ebaf153 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@ -145,13 +145,19 @@ drm_kms_helper-y := \ drm_probe_helper.o \ drm_self_refresh_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_FBDEV_EMULATION) += \ +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 \ drm_fb_helper.o -obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o +obj-$(CONFIG_DRM_CLIENT_LIB) += drm_client_lib.o # # Drivers and the rest diff --git a/drivers/gpu/drm/drm_client_setup.c b/drivers/gpu/drm/drm_client_setup.c index 5969c4ffe31b..c14221ca5a0d 100644 --- a/drivers/gpu/drm/drm_client_setup.c +++ b/drivers/gpu/drm/drm_client_setup.c @@ -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); } EXPORT_SYMBOL(drm_client_setup_with_color_mode); + +MODULE_DESCRIPTION("In-kernel DRM clients"); +MODULE_LICENSE("GPL and additional rights"); diff --git a/drivers/gpu/drm/drm_kms_helper_common.c b/drivers/gpu/drm/drm_kms_helper_common.c index cfdbc1ac88dc..ecff0b1414ac 100644 --- a/drivers/gpu/drm/drm_kms_helper_common.c +++ b/drivers/gpu/drm/drm_kms_helper_common.c @@ -31,11 +31,13 @@ #if defined(CONFIG_DRM_FBDEV_EMULATION) bool drm_fbdev_emulation = true; +EXPORT_SYMBOL(drm_fbdev_emulation); module_param_named(fbdev_emulation, drm_fbdev_emulation, bool, 0600); MODULE_PARM_DESC(fbdev_emulation, "Enable legacy fbdev emulation [default=true]"); int drm_fbdev_overalloc = CONFIG_DRM_FBDEV_OVERALLOC; +EXPORT_SYMBOL(drm_fbdev_overalloc); module_param(drm_fbdev_overalloc, int, 0444); MODULE_PARM_DESC(drm_fbdev_overalloc, "Overallocation of the fbdev buffer (%) [default=" @@ -55,6 +57,7 @@ MODULE_PARM_DESC(drm_fbdev_overalloc, * considered as a broken and legacy behaviour from a modern fbdev device. */ bool drm_leak_fbdev_smem; +EXPORT_SYMBOL(drm_leak_fbdev_smem); #if IS_ENABLED(CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM) module_param_unsafe(drm_leak_fbdev_smem, bool, 0600); MODULE_PARM_DESC(drm_leak_fbdev_smem,
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. 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> --- drivers/gpu/drm/Kconfig | 26 ++++++++++++++++++++----- drivers/gpu/drm/Makefile | 14 +++++++++---- drivers/gpu/drm/drm_client_setup.c | 3 +++ drivers/gpu/drm/drm_kms_helper_common.c | 3 +++ 4 files changed, 37 insertions(+), 9 deletions(-)