diff mbox series

[v2,3/5] drm/dp: Move DisplayPort helpers into separate helper module

Message ID 20211215104318.18866-4-tzimmermann@suse.de (mailing list archive)
State New, archived
Headers show
Series drm/dp: Move DisplayPort helpers into own module | expand

Commit Message

Thomas Zimmermann Dec. 15, 2021, 10:43 a.m. UTC
Move DisplayPort functions into a separate module to reduce the size
of the KMS helpers. Select DRM_DP_HELPER for all users of the code. To
avoid naming conflicts, rename drm_dp_helper.c to drm_dp.c

This change can help to reduce the size of the kernel binary. Some
numbers from a x86-64 test build:

Before:
	drm_kms_helper.ko:	447480 bytes

After:
	drm_dp_helper.ko:	216632 bytes
	drm_kms_helper.ko:	239424 bytes

For early-boot graphics, generic DRM drivers, such as simpledrm,
require DRM KMS helpers to be built into the kernel. Generic helper
functions for DisplayPort take up a significant portion of DRM KMS
helper library. These functions are not used by generic drivers and
can be loaded as a module.

v2:
	* move DP helper code into dp/ (Jani)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/Kconfig                       |  8 +++++++
 drivers/gpu/drm/Makefile                      | 10 ++++-----
 drivers/gpu/drm/bridge/Kconfig                |  4 ++++
 drivers/gpu/drm/bridge/analogix/Kconfig       |  2 ++
 drivers/gpu/drm/bridge/cadence/Kconfig        |  1 +
 drivers/gpu/drm/dp/Makefile                   |  7 ++++++
 .../gpu/drm/{drm_dp_helper.c => dp/drm_dp.c}  |  0
 drivers/gpu/drm/{ => dp}/drm_dp_aux_dev.c     |  0
 drivers/gpu/drm/{ => dp}/drm_dp_cec.c         |  0
 .../drm/{ => dp}/drm_dp_dual_mode_helper.c    |  0
 .../gpu/drm/{ => dp}/drm_dp_helper_internal.h |  0
 drivers/gpu/drm/dp/drm_dp_helper_mod.c        | 22 +++++++++++++++++++
 .../gpu/drm/{ => dp}/drm_dp_mst_topology.c    |  0
 .../{ => dp}/drm_dp_mst_topology_internal.h   |  0
 drivers/gpu/drm/drm_kms_helper_common.c       | 15 -------------
 drivers/gpu/drm/i915/Kconfig                  |  1 +
 drivers/gpu/drm/msm/Kconfig                   |  1 +
 drivers/gpu/drm/nouveau/Kconfig               |  1 +
 drivers/gpu/drm/rockchip/Kconfig              |  1 +
 drivers/gpu/drm/tegra/Kconfig                 |  1 +
 drivers/gpu/drm/xlnx/Kconfig                  |  1 +
 21 files changed, 54 insertions(+), 21 deletions(-)
 create mode 100644 drivers/gpu/drm/dp/Makefile
 rename drivers/gpu/drm/{drm_dp_helper.c => dp/drm_dp.c} (100%)
 rename drivers/gpu/drm/{ => dp}/drm_dp_aux_dev.c (100%)
 rename drivers/gpu/drm/{ => dp}/drm_dp_cec.c (100%)
 rename drivers/gpu/drm/{ => dp}/drm_dp_dual_mode_helper.c (100%)
 rename drivers/gpu/drm/{ => dp}/drm_dp_helper_internal.h (100%)
 create mode 100644 drivers/gpu/drm/dp/drm_dp_helper_mod.c
 rename drivers/gpu/drm/{ => dp}/drm_dp_mst_topology.c (100%)
 rename drivers/gpu/drm/{ => dp}/drm_dp_mst_topology_internal.h (100%)

Comments

Jani Nikula Dec. 15, 2021, 11:04 a.m. UTC | #1
On Wed, 15 Dec 2021, Thomas Zimmermann <tzimmermann@suse.de> wrote:
> 	* move DP helper code into dp/ (Jani)

I suggested adding the subdirectory, but I'm going to bikeshed the name,
which I didn't suggest.

$ find drivers/gpu/drm -mindepth 1 -maxdepth 1 -type d | wc -l
68

Assuming we move more of the drm modules to subdirectories, how are they
going to stand out from drivers?

I suggested drm_dp, which I understand results in tautology, but hey,
all the filenames under drm/ also have drm_*.[ch]. And I find that very
useful for git greps and other code archeology. With just the dp name,
you'd have to know and list all the drm subdirectories when looking up
stuff that's part of drm but not drivers.


BR,
Jani.
Thomas Zimmermann Dec. 15, 2021, 11:12 a.m. UTC | #2
Hi

Am 15.12.21 um 12:04 schrieb Jani Nikula:
> On Wed, 15 Dec 2021, Thomas Zimmermann <tzimmermann@suse.de> wrote:
>> 	* move DP helper code into dp/ (Jani)
> 
> I suggested adding the subdirectory, but I'm going to bikeshed the name,
> which I didn't suggest.
> 
> $ find drivers/gpu/drm -mindepth 1 -maxdepth 1 -type d | wc -l
> 68
> 
> Assuming we move more of the drm modules to subdirectories, how are they
> going to stand out from drivers?
> 
> I suggested drm_dp, which I understand results in tautology, but hey,
> all the filenames under drm/ also have drm_*.[ch]. And I find that very
> useful for git greps and other code archeology. With just the dp name,
> you'd have to know and list all the drm subdirectories when looking up
> stuff that's part of drm but not drivers.

I think we have enough filename prefixes already. drm/drm_dp/drm_dp_ is 
just ridiculous.

Best regards
Thomas

> 
> 
> BR,
> Jani.
> 
>
Michał Mirosław Jan. 8, 2022, 11:56 p.m. UTC | #3
On Wed, Dec 15, 2021 at 01:04:00PM +0200, Jani Nikula wrote:
> On Wed, 15 Dec 2021, Thomas Zimmermann <tzimmermann@suse.de> wrote:
> > 	* move DP helper code into dp/ (Jani)
> 
> I suggested adding the subdirectory, but I'm going to bikeshed the name,
> which I didn't suggest.
> 
> $ find drivers/gpu/drm -mindepth 1 -maxdepth 1 -type d | wc -l
> 68

Maybe the hardware-specific drivers could be moved up to drivers/gpu/
instead? That would make it obvious what code is generic and what is not.

Best Regards
Michał Mirosław
Javier Martinez Canillas Jan. 11, 2022, 10:21 a.m. UTC | #4
On Wed, Dec 15, 2021 at 12:12 PM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
> Hi
>
> Am 15.12.21 um 12:04 schrieb Jani Nikula:
> > On Wed, 15 Dec 2021, Thomas Zimmermann <tzimmermann@suse.de> wrote:
> >>      * move DP helper code into dp/ (Jani)
> >
> > I suggested adding the subdirectory, but I'm going to bikeshed the name,
> > which I didn't suggest.
> >
> > $ find drivers/gpu/drm -mindepth 1 -maxdepth 1 -type d | wc -l
> > 68
> >
> > Assuming we move more of the drm modules to subdirectories, how are they
> > going to stand out from drivers?
> >
> > I suggested drm_dp, which I understand results in tautology, but hey,
> > all the filenames under drm/ also have drm_*.[ch]. And I find that very
> > useful for git greps and other code archeology. With just the dp name,
> > you'd have to know and list all the drm subdirectories when looking up
> > stuff that's part of drm but not drivers.
>
> I think we have enough filename prefixes already. drm/drm_dp/drm_dp_ is
> just ridiculous.
>

Maybe what can be done is to just add a drivers/gpu/drm/core
subdirectory that would contain all the DRM core code ?

Then the dp helpers could be moved to drivers/gpu/drm/core/dp/drm_dp.c
for example. This would also make easy to differentiate the drm
modules from the drivers with just:

$ find drivers/gpu/drm -mindepth 1 -maxdepth 1 -type d -not -name core

Best regards,
Javier
Lyude Paul Jan. 11, 2022, 6:58 p.m. UTC | #5
Acked-by: Lyude Paul <lyude@redhat.com>

On Wed, 2021-12-15 at 11:43 +0100, Thomas Zimmermann wrote:
> Move DisplayPort functions into a separate module to reduce the size
> of the KMS helpers. Select DRM_DP_HELPER for all users of the code. To
> avoid naming conflicts, rename drm_dp_helper.c to drm_dp.c
> 
> This change can help to reduce the size of the kernel binary. Some
> numbers from a x86-64 test build:
> 
> Before:
>         drm_kms_helper.ko:      447480 bytes
> 
> After:
>         drm_dp_helper.ko:       216632 bytes
>         drm_kms_helper.ko:      239424 bytes
> 
> For early-boot graphics, generic DRM drivers, such as simpledrm,
> require DRM KMS helpers to be built into the kernel. Generic helper
> functions for DisplayPort take up a significant portion of DRM KMS
> helper library. These functions are not used by generic drivers and
> can be loaded as a module.
> 
> v2:
>         * move DP helper code into dp/ (Jani)
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
>  drivers/gpu/drm/Kconfig                       |  8 +++++++
>  drivers/gpu/drm/Makefile                      | 10 ++++-----
>  drivers/gpu/drm/bridge/Kconfig                |  4 ++++
>  drivers/gpu/drm/bridge/analogix/Kconfig       |  2 ++
>  drivers/gpu/drm/bridge/cadence/Kconfig        |  1 +
>  drivers/gpu/drm/dp/Makefile                   |  7 ++++++
>  .../gpu/drm/{drm_dp_helper.c => dp/drm_dp.c}  |  0
>  drivers/gpu/drm/{ => dp}/drm_dp_aux_dev.c     |  0
>  drivers/gpu/drm/{ => dp}/drm_dp_cec.c         |  0
>  .../drm/{ => dp}/drm_dp_dual_mode_helper.c    |  0
>  .../gpu/drm/{ => dp}/drm_dp_helper_internal.h |  0
>  drivers/gpu/drm/dp/drm_dp_helper_mod.c        | 22 +++++++++++++++++++
>  .../gpu/drm/{ => dp}/drm_dp_mst_topology.c    |  0
>  .../{ => dp}/drm_dp_mst_topology_internal.h   |  0
>  drivers/gpu/drm/drm_kms_helper_common.c       | 15 -------------
>  drivers/gpu/drm/i915/Kconfig                  |  1 +
>  drivers/gpu/drm/msm/Kconfig                   |  1 +
>  drivers/gpu/drm/nouveau/Kconfig               |  1 +
>  drivers/gpu/drm/rockchip/Kconfig              |  1 +
>  drivers/gpu/drm/tegra/Kconfig                 |  1 +
>  drivers/gpu/drm/xlnx/Kconfig                  |  1 +
>  21 files changed, 54 insertions(+), 21 deletions(-)
>  create mode 100644 drivers/gpu/drm/dp/Makefile
>  rename drivers/gpu/drm/{drm_dp_helper.c => dp/drm_dp.c} (100%)
>  rename drivers/gpu/drm/{ => dp}/drm_dp_aux_dev.c (100%)
>  rename drivers/gpu/drm/{ => dp}/drm_dp_cec.c (100%)
>  rename drivers/gpu/drm/{ => dp}/drm_dp_dual_mode_helper.c (100%)
>  rename drivers/gpu/drm/{ => dp}/drm_dp_helper_internal.h (100%)
>  create mode 100644 drivers/gpu/drm/dp/drm_dp_helper_mod.c
>  rename drivers/gpu/drm/{ => dp}/drm_dp_mst_topology.c (100%)
>  rename drivers/gpu/drm/{ => dp}/drm_dp_mst_topology_internal.h (100%)
> 
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index b1f22e457fd0..91f54aeb0b7c 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -80,6 +80,12 @@ config DRM_DEBUG_SELFTEST
>  
>           If in doubt, say "N".
>  
> +config DRM_DP_HELPER
> +       tristate
> +       depends on DRM
> +       help
> +         DRM helpers for DisplayPort.
> +
>  config DRM_KMS_HELPER
>         tristate
>         depends on DRM
> @@ -236,6 +242,7 @@ config DRM_RADEON
>         depends on DRM && PCI && MMU
>         depends on AGP || !AGP
>         select FW_LOADER
> +       select DRM_DP_HELPER
>          select DRM_KMS_HELPER
>          select DRM_TTM
>         select DRM_TTM_HELPER
> @@ -256,6 +263,7 @@ config DRM_AMDGPU
>         tristate "AMD GPU"
>         depends on DRM && PCI && MMU
>         select FW_LOADER
> +       select DRM_DP_HELPER
>         select DRM_KMS_HELPER
>         select DRM_SCHED
>         select DRM_TTM
> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
> index 301a44dc18e3..69be80ef1d31 100644
> --- a/drivers/gpu/drm/Makefile
> +++ b/drivers/gpu/drm/Makefile
> @@ -48,21 +48,18 @@ obj-$(CONFIG_DRM_VRAM_HELPER) += drm_vram_helper.o
>  drm_ttm_helper-y := drm_gem_ttm_helper.o
>  obj-$(CONFIG_DRM_TTM_HELPER) += drm_ttm_helper.o
>  
> -drm_kms_helper-y := drm_bridge_connector.o drm_crtc_helper.o
> drm_dp_helper.o \
> +drm_kms_helper-y := drm_bridge_connector.o drm_crtc_helper.o \
>                 drm_dsc.o drm_encoder_slave.o drm_flip_work.o drm_hdcp.o \
>                 drm_probe_helper.o \
> -               drm_plane_helper.o drm_dp_mst_topology.o drm_atomic_helper.o
> \
> -               drm_kms_helper_common.o drm_dp_dual_mode_helper.o \
> +               drm_plane_helper.o drm_atomic_helper.o \
> +               drm_kms_helper_common.o \
>                 drm_simple_kms_helper.o drm_modeset_helper.o \
>                 drm_scdc_helper.o drm_gem_atomic_helper.o \
>                 drm_gem_framebuffer_helper.o \
>                 drm_atomic_state_helper.o drm_damage_helper.o \
>                 drm_format_helper.o drm_self_refresh_helper.o drm_rect.o
> -
>  drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o
>  drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fb_helper.o
> -drm_kms_helper-$(CONFIG_DRM_DP_AUX_CHARDEV) += drm_dp_aux_dev.o
> -drm_kms_helper-$(CONFIG_DRM_DP_CEC) += drm_dp_cec.o
>  
>  obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o
>  obj-$(CONFIG_DRM_DEBUG_SELFTEST) += selftests/
> @@ -72,6 +69,7 @@ obj-$(CONFIG_DRM_MIPI_DBI) += drm_mipi_dbi.o
>  obj-$(CONFIG_DRM_MIPI_DSI) += drm_mipi_dsi.o
>  obj-$(CONFIG_DRM_PANEL_ORIENTATION_QUIRKS) +=
> drm_panel_orientation_quirks.o
>  obj-y                  += arm/
> +obj-y                  += dp/
>  obj-$(CONFIG_DRM_TTM)  += ttm/
>  obj-$(CONFIG_DRM_SCHED)        += scheduler/
>  obj-$(CONFIG_DRM_TDFX) += tdfx/
> diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig
> index 61db5a66b493..a27435a4c9c4 100644
> --- a/drivers/gpu/drm/bridge/Kconfig
> +++ b/drivers/gpu/drm/bridge/Kconfig
> @@ -183,6 +183,7 @@ config DRM_PARADE_PS8640
>         tristate "Parade PS8640 MIPI DSI to eDP Converter"
>         depends on OF
>         select DRM_DP_AUX_BUS
> +       select DRM_DP_HELPER
>         select DRM_KMS_HELPER
>         select DRM_MIPI_DSI
>         select DRM_PANEL
> @@ -253,6 +254,7 @@ config DRM_TOSHIBA_TC358764
>  config DRM_TOSHIBA_TC358767
>         tristate "Toshiba TC358767 eDP bridge"
>         depends on OF
> +       select DRM_DP_HELPER
>         select DRM_KMS_HELPER
>         select REGMAP_I2C
>         select DRM_PANEL
> @@ -272,6 +274,7 @@ config DRM_TOSHIBA_TC358768
>  config DRM_TOSHIBA_TC358775
>         tristate "Toshiba TC358775 DSI/LVDS bridge"
>         depends on OF
> +       select DRM_DP_HELPER
>         select DRM_KMS_HELPER
>         select REGMAP_I2C
>         select DRM_PANEL
> @@ -299,6 +302,7 @@ config DRM_TI_SN65DSI83
>  config DRM_TI_SN65DSI86
>         tristate "TI SN65DSI86 DSI to eDP bridge"
>         depends on OF
> +       select DRM_DP_HELPER
>         select DRM_KMS_HELPER
>         select REGMAP_I2C
>         select DRM_PANEL
> diff --git a/drivers/gpu/drm/bridge/analogix/Kconfig
> b/drivers/gpu/drm/bridge/analogix/Kconfig
> index 2ef6eb2b786c..319ba0df57be 100644
> --- a/drivers/gpu/drm/bridge/analogix/Kconfig
> +++ b/drivers/gpu/drm/bridge/analogix/Kconfig
> @@ -3,6 +3,7 @@ config DRM_ANALOGIX_ANX6345
>         tristate "Analogix ANX6345 bridge"
>         depends on OF
>         select DRM_ANALOGIX_DP
> +       select DRM_DP_HELPER
>         select DRM_KMS_HELPER
>         select REGMAP_I2C
>         help
> @@ -14,6 +15,7 @@ config DRM_ANALOGIX_ANX6345
>  config DRM_ANALOGIX_ANX78XX
>         tristate "Analogix ANX78XX bridge"
>         select DRM_ANALOGIX_DP
> +       select DRM_DP_HELPER
>         select DRM_KMS_HELPER
>         select REGMAP_I2C
>         help
> diff --git a/drivers/gpu/drm/bridge/cadence/Kconfig
> b/drivers/gpu/drm/bridge/cadence/Kconfig
> index ef8c230e0f62..de697bade05e 100644
> --- a/drivers/gpu/drm/bridge/cadence/Kconfig
> +++ b/drivers/gpu/drm/bridge/cadence/Kconfig
> @@ -1,6 +1,7 @@
>  # SPDX-License-Identifier: GPL-2.0-only
>  config DRM_CDNS_MHDP8546
>         tristate "Cadence DPI/DP bridge"
> +       select DRM_DP_HELPER
>         select DRM_KMS_HELPER
>         select DRM_PANEL_BRIDGE
>         depends on OF
> diff --git a/drivers/gpu/drm/dp/Makefile b/drivers/gpu/drm/dp/Makefile
> new file mode 100644
> index 000000000000..5b892aeff5ab
> --- /dev/null
> +++ b/drivers/gpu/drm/dp/Makefile
> @@ -0,0 +1,7 @@
> +# SPDX-License-Identifier: MIT
> +
> +drm_dp_helper-y := drm_dp.o drm_dp_dual_mode_helper.o drm_dp_helper_mod.o
> drm_dp_mst_topology.o
> +drm_dp_helper-$(CONFIG_DRM_DP_AUX_CHARDEV) += drm_dp_aux_dev.o
> +drm_dp_helper-$(CONFIG_DRM_DP_CEC) += drm_dp_cec.o
> +
> +obj-$(CONFIG_DRM_DP_HELPER) += drm_dp_helper.o
> diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/dp/drm_dp.c
> similarity index 100%
> rename from drivers/gpu/drm/drm_dp_helper.c
> rename to drivers/gpu/drm/dp/drm_dp.c
> diff --git a/drivers/gpu/drm/drm_dp_aux_dev.c
> b/drivers/gpu/drm/dp/drm_dp_aux_dev.c
> similarity index 100%
> rename from drivers/gpu/drm/drm_dp_aux_dev.c
> rename to drivers/gpu/drm/dp/drm_dp_aux_dev.c
> diff --git a/drivers/gpu/drm/drm_dp_cec.c b/drivers/gpu/drm/dp/drm_dp_cec.c
> similarity index 100%
> rename from drivers/gpu/drm/drm_dp_cec.c
> rename to drivers/gpu/drm/dp/drm_dp_cec.c
> diff --git a/drivers/gpu/drm/drm_dp_dual_mode_helper.c
> b/drivers/gpu/drm/dp/drm_dp_dual_mode_helper.c
> similarity index 100%
> rename from drivers/gpu/drm/drm_dp_dual_mode_helper.c
> rename to drivers/gpu/drm/dp/drm_dp_dual_mode_helper.c
> diff --git a/drivers/gpu/drm/drm_dp_helper_internal.h
> b/drivers/gpu/drm/dp/drm_dp_helper_internal.h
> similarity index 100%
> rename from drivers/gpu/drm/drm_dp_helper_internal.h
> rename to drivers/gpu/drm/dp/drm_dp_helper_internal.h
> diff --git a/drivers/gpu/drm/dp/drm_dp_helper_mod.c
> b/drivers/gpu/drm/dp/drm_dp_helper_mod.c
> new file mode 100644
> index 000000000000..db753de24000
> --- /dev/null
> +++ b/drivers/gpu/drm/dp/drm_dp_helper_mod.c
> @@ -0,0 +1,22 @@
> +// SPDX-License-Identifier: MIT
> +
> +#include <linux/module.h>
> +
> +#include "drm_dp_helper_internal.h"
> +
> +MODULE_DESCRIPTION("DRM DisplayPort helper");
> +MODULE_LICENSE("GPL and additional rights");
> +
> +static int __init drm_dp_helper_module_init(void)
> +{
> +       return drm_dp_aux_dev_init();
> +}
> +
> +static void __exit drm_dp_helper_module_exit(void)
> +{
> +       /* Call exit functions from specific dp helpers here */
> +       drm_dp_aux_dev_exit();
> +}
> +
> +module_init(drm_dp_helper_module_init);
> +module_exit(drm_dp_helper_module_exit);
> diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c
> b/drivers/gpu/drm/dp/drm_dp_mst_topology.c
> similarity index 100%
> rename from drivers/gpu/drm/drm_dp_mst_topology.c
> rename to drivers/gpu/drm/dp/drm_dp_mst_topology.c
> diff --git a/drivers/gpu/drm/drm_dp_mst_topology_internal.h
> b/drivers/gpu/drm/dp/drm_dp_mst_topology_internal.h
> similarity index 100%
> rename from drivers/gpu/drm/drm_dp_mst_topology_internal.h
> rename to drivers/gpu/drm/dp/drm_dp_mst_topology_internal.h
> diff --git a/drivers/gpu/drm/drm_kms_helper_common.c
> b/drivers/gpu/drm/drm_kms_helper_common.c
> index 88260d26409c..8be20080cd8d 100644
> --- a/drivers/gpu/drm/drm_kms_helper_common.c
> +++ b/drivers/gpu/drm/drm_kms_helper_common.c
> @@ -29,7 +29,6 @@
>  
>  #include <drm/drm_print.h>
>  
> -#include "drm_dp_helper_internal.h"
>  #include "drm_crtc_helper_internal.h"
>  
>  MODULE_AUTHOR("David Airlie, Jesse Barnes");
> @@ -62,17 +61,3 @@ MODULE_PARM_DESC(edid_firmware,
>                  "DEPRECATED. Use drm.edid_firmware module parameter
> instead.");
>  
>  #endif
> -
> -static int __init drm_kms_helper_init(void)
> -{
> -       return drm_dp_aux_dev_init();
> -}
> -
> -static void __exit drm_kms_helper_exit(void)
> -{
> -       /* Call exit functions from specific kms helpers here */
> -       drm_dp_aux_dev_exit();
> -}
> -
> -module_init(drm_kms_helper_init);
> -module_exit(drm_kms_helper_exit);
> diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig
> index a4c94dc2e216..b68e8b551b83 100644
> --- a/drivers/gpu/drm/i915/Kconfig
> +++ b/drivers/gpu/drm/i915/Kconfig
> @@ -9,6 +9,7 @@ config DRM_I915
>         # the shmem_readpage() which depends upon tmpfs
>         select SHMEM
>         select TMPFS
> +       select DRM_DP_HELPER
>         select DRM_KMS_HELPER
>         select DRM_PANEL
>         select DRM_MIPI_DSI
> diff --git a/drivers/gpu/drm/msm/Kconfig b/drivers/gpu/drm/msm/Kconfig
> index 39197b4beea7..75015b0e165e 100644
> --- a/drivers/gpu/drm/msm/Kconfig
> +++ b/drivers/gpu/drm/msm/Kconfig
> @@ -12,6 +12,7 @@ config DRM_MSM
>         select IOMMU_IO_PGTABLE
>         select QCOM_MDT_LOADER if ARCH_QCOM
>         select REGULATOR
> +       select DRM_DP_HELPER
>         select DRM_KMS_HELPER
>         select DRM_PANEL
>         select DRM_BRIDGE
> diff --git a/drivers/gpu/drm/nouveau/Kconfig
> b/drivers/gpu/drm/nouveau/Kconfig
> index 9436310d0854..3ec690b6f0b4 100644
> --- a/drivers/gpu/drm/nouveau/Kconfig
> +++ b/drivers/gpu/drm/nouveau/Kconfig
> @@ -4,6 +4,7 @@ config DRM_NOUVEAU
>         depends on DRM && PCI && MMU
>         select IOMMU_API
>         select FW_LOADER
> +       select DRM_DP_HELPER
>         select DRM_KMS_HELPER
>         select DRM_TTM
>         select DRM_TTM_HELPER
> diff --git a/drivers/gpu/drm/rockchip/Kconfig
> b/drivers/gpu/drm/rockchip/Kconfig
> index 9f1ecefc3933..d59dca5efb52 100644
> --- a/drivers/gpu/drm/rockchip/Kconfig
> +++ b/drivers/gpu/drm/rockchip/Kconfig
> @@ -2,6 +2,7 @@
>  config DRM_ROCKCHIP
>         tristate "DRM Support for Rockchip"
>         depends on DRM && ROCKCHIP_IOMMU
> +       select DRM_DP_HELPER
>         select DRM_GEM_CMA_HELPER
>         select DRM_KMS_HELPER
>         select DRM_PANEL
> diff --git a/drivers/gpu/drm/tegra/Kconfig b/drivers/gpu/drm/tegra/Kconfig
> index 1650a448eabd..dc88adc7ba40 100644
> --- a/drivers/gpu/drm/tegra/Kconfig
> +++ b/drivers/gpu/drm/tegra/Kconfig
> @@ -5,6 +5,7 @@ config DRM_TEGRA
>         depends on COMMON_CLK
>         depends on DRM
>         depends on OF
> +       select DRM_DP_HELPER
>         select DRM_KMS_HELPER
>         select DRM_MIPI_DSI
>         select DRM_PANEL
> diff --git a/drivers/gpu/drm/xlnx/Kconfig b/drivers/gpu/drm/xlnx/Kconfig
> index d8d38d86d5c6..06cf477dbcdd 100644
> --- a/drivers/gpu/drm/xlnx/Kconfig
> +++ b/drivers/gpu/drm/xlnx/Kconfig
> @@ -6,6 +6,7 @@ config DRM_ZYNQMP_DPSUB
>         depends on PHY_XILINX_ZYNQMP
>         depends on XILINX_ZYNQMP_DPDMA
>         select DMA_ENGINE
> +       select DRM_DP_HELPER
>         select DRM_GEM_CMA_HELPER
>         select DRM_KMS_HELPER
>         select GENERIC_PHY
diff mbox series

Patch

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index b1f22e457fd0..91f54aeb0b7c 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -80,6 +80,12 @@  config DRM_DEBUG_SELFTEST
 
 	  If in doubt, say "N".
 
+config DRM_DP_HELPER
+	tristate
+	depends on DRM
+	help
+	  DRM helpers for DisplayPort.
+
 config DRM_KMS_HELPER
 	tristate
 	depends on DRM
@@ -236,6 +242,7 @@  config DRM_RADEON
 	depends on DRM && PCI && MMU
 	depends on AGP || !AGP
 	select FW_LOADER
+	select DRM_DP_HELPER
         select DRM_KMS_HELPER
         select DRM_TTM
 	select DRM_TTM_HELPER
@@ -256,6 +263,7 @@  config DRM_AMDGPU
 	tristate "AMD GPU"
 	depends on DRM && PCI && MMU
 	select FW_LOADER
+	select DRM_DP_HELPER
 	select DRM_KMS_HELPER
 	select DRM_SCHED
 	select DRM_TTM
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
index 301a44dc18e3..69be80ef1d31 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
@@ -48,21 +48,18 @@  obj-$(CONFIG_DRM_VRAM_HELPER) += drm_vram_helper.o
 drm_ttm_helper-y := drm_gem_ttm_helper.o
 obj-$(CONFIG_DRM_TTM_HELPER) += drm_ttm_helper.o
 
-drm_kms_helper-y := drm_bridge_connector.o drm_crtc_helper.o drm_dp_helper.o \
+drm_kms_helper-y := drm_bridge_connector.o drm_crtc_helper.o \
 		drm_dsc.o drm_encoder_slave.o drm_flip_work.o drm_hdcp.o \
 		drm_probe_helper.o \
-		drm_plane_helper.o drm_dp_mst_topology.o drm_atomic_helper.o \
-		drm_kms_helper_common.o drm_dp_dual_mode_helper.o \
+		drm_plane_helper.o drm_atomic_helper.o \
+		drm_kms_helper_common.o \
 		drm_simple_kms_helper.o drm_modeset_helper.o \
 		drm_scdc_helper.o drm_gem_atomic_helper.o \
 		drm_gem_framebuffer_helper.o \
 		drm_atomic_state_helper.o drm_damage_helper.o \
 		drm_format_helper.o drm_self_refresh_helper.o drm_rect.o
-
 drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o
 drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fb_helper.o
-drm_kms_helper-$(CONFIG_DRM_DP_AUX_CHARDEV) += drm_dp_aux_dev.o
-drm_kms_helper-$(CONFIG_DRM_DP_CEC) += drm_dp_cec.o
 
 obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o
 obj-$(CONFIG_DRM_DEBUG_SELFTEST) += selftests/
@@ -72,6 +69,7 @@  obj-$(CONFIG_DRM_MIPI_DBI) += drm_mipi_dbi.o
 obj-$(CONFIG_DRM_MIPI_DSI) += drm_mipi_dsi.o
 obj-$(CONFIG_DRM_PANEL_ORIENTATION_QUIRKS) += drm_panel_orientation_quirks.o
 obj-y			+= arm/
+obj-y			+= dp/
 obj-$(CONFIG_DRM_TTM)	+= ttm/
 obj-$(CONFIG_DRM_SCHED)	+= scheduler/
 obj-$(CONFIG_DRM_TDFX)	+= tdfx/
diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig
index 61db5a66b493..a27435a4c9c4 100644
--- a/drivers/gpu/drm/bridge/Kconfig
+++ b/drivers/gpu/drm/bridge/Kconfig
@@ -183,6 +183,7 @@  config DRM_PARADE_PS8640
 	tristate "Parade PS8640 MIPI DSI to eDP Converter"
 	depends on OF
 	select DRM_DP_AUX_BUS
+	select DRM_DP_HELPER
 	select DRM_KMS_HELPER
 	select DRM_MIPI_DSI
 	select DRM_PANEL
@@ -253,6 +254,7 @@  config DRM_TOSHIBA_TC358764
 config DRM_TOSHIBA_TC358767
 	tristate "Toshiba TC358767 eDP bridge"
 	depends on OF
+	select DRM_DP_HELPER
 	select DRM_KMS_HELPER
 	select REGMAP_I2C
 	select DRM_PANEL
@@ -272,6 +274,7 @@  config DRM_TOSHIBA_TC358768
 config DRM_TOSHIBA_TC358775
 	tristate "Toshiba TC358775 DSI/LVDS bridge"
 	depends on OF
+	select DRM_DP_HELPER
 	select DRM_KMS_HELPER
 	select REGMAP_I2C
 	select DRM_PANEL
@@ -299,6 +302,7 @@  config DRM_TI_SN65DSI83
 config DRM_TI_SN65DSI86
 	tristate "TI SN65DSI86 DSI to eDP bridge"
 	depends on OF
+	select DRM_DP_HELPER
 	select DRM_KMS_HELPER
 	select REGMAP_I2C
 	select DRM_PANEL
diff --git a/drivers/gpu/drm/bridge/analogix/Kconfig b/drivers/gpu/drm/bridge/analogix/Kconfig
index 2ef6eb2b786c..319ba0df57be 100644
--- a/drivers/gpu/drm/bridge/analogix/Kconfig
+++ b/drivers/gpu/drm/bridge/analogix/Kconfig
@@ -3,6 +3,7 @@  config DRM_ANALOGIX_ANX6345
 	tristate "Analogix ANX6345 bridge"
 	depends on OF
 	select DRM_ANALOGIX_DP
+	select DRM_DP_HELPER
 	select DRM_KMS_HELPER
 	select REGMAP_I2C
 	help
@@ -14,6 +15,7 @@  config DRM_ANALOGIX_ANX6345
 config DRM_ANALOGIX_ANX78XX
 	tristate "Analogix ANX78XX bridge"
 	select DRM_ANALOGIX_DP
+	select DRM_DP_HELPER
 	select DRM_KMS_HELPER
 	select REGMAP_I2C
 	help
diff --git a/drivers/gpu/drm/bridge/cadence/Kconfig b/drivers/gpu/drm/bridge/cadence/Kconfig
index ef8c230e0f62..de697bade05e 100644
--- a/drivers/gpu/drm/bridge/cadence/Kconfig
+++ b/drivers/gpu/drm/bridge/cadence/Kconfig
@@ -1,6 +1,7 @@ 
 # SPDX-License-Identifier: GPL-2.0-only
 config DRM_CDNS_MHDP8546
 	tristate "Cadence DPI/DP bridge"
+	select DRM_DP_HELPER
 	select DRM_KMS_HELPER
 	select DRM_PANEL_BRIDGE
 	depends on OF
diff --git a/drivers/gpu/drm/dp/Makefile b/drivers/gpu/drm/dp/Makefile
new file mode 100644
index 000000000000..5b892aeff5ab
--- /dev/null
+++ b/drivers/gpu/drm/dp/Makefile
@@ -0,0 +1,7 @@ 
+# SPDX-License-Identifier: MIT
+
+drm_dp_helper-y := drm_dp.o drm_dp_dual_mode_helper.o drm_dp_helper_mod.o drm_dp_mst_topology.o
+drm_dp_helper-$(CONFIG_DRM_DP_AUX_CHARDEV) += drm_dp_aux_dev.o
+drm_dp_helper-$(CONFIG_DRM_DP_CEC) += drm_dp_cec.o
+
+obj-$(CONFIG_DRM_DP_HELPER) += drm_dp_helper.o
diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/dp/drm_dp.c
similarity index 100%
rename from drivers/gpu/drm/drm_dp_helper.c
rename to drivers/gpu/drm/dp/drm_dp.c
diff --git a/drivers/gpu/drm/drm_dp_aux_dev.c b/drivers/gpu/drm/dp/drm_dp_aux_dev.c
similarity index 100%
rename from drivers/gpu/drm/drm_dp_aux_dev.c
rename to drivers/gpu/drm/dp/drm_dp_aux_dev.c
diff --git a/drivers/gpu/drm/drm_dp_cec.c b/drivers/gpu/drm/dp/drm_dp_cec.c
similarity index 100%
rename from drivers/gpu/drm/drm_dp_cec.c
rename to drivers/gpu/drm/dp/drm_dp_cec.c
diff --git a/drivers/gpu/drm/drm_dp_dual_mode_helper.c b/drivers/gpu/drm/dp/drm_dp_dual_mode_helper.c
similarity index 100%
rename from drivers/gpu/drm/drm_dp_dual_mode_helper.c
rename to drivers/gpu/drm/dp/drm_dp_dual_mode_helper.c
diff --git a/drivers/gpu/drm/drm_dp_helper_internal.h b/drivers/gpu/drm/dp/drm_dp_helper_internal.h
similarity index 100%
rename from drivers/gpu/drm/drm_dp_helper_internal.h
rename to drivers/gpu/drm/dp/drm_dp_helper_internal.h
diff --git a/drivers/gpu/drm/dp/drm_dp_helper_mod.c b/drivers/gpu/drm/dp/drm_dp_helper_mod.c
new file mode 100644
index 000000000000..db753de24000
--- /dev/null
+++ b/drivers/gpu/drm/dp/drm_dp_helper_mod.c
@@ -0,0 +1,22 @@ 
+// SPDX-License-Identifier: MIT
+
+#include <linux/module.h>
+
+#include "drm_dp_helper_internal.h"
+
+MODULE_DESCRIPTION("DRM DisplayPort helper");
+MODULE_LICENSE("GPL and additional rights");
+
+static int __init drm_dp_helper_module_init(void)
+{
+	return drm_dp_aux_dev_init();
+}
+
+static void __exit drm_dp_helper_module_exit(void)
+{
+	/* Call exit functions from specific dp helpers here */
+	drm_dp_aux_dev_exit();
+}
+
+module_init(drm_dp_helper_module_init);
+module_exit(drm_dp_helper_module_exit);
diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/dp/drm_dp_mst_topology.c
similarity index 100%
rename from drivers/gpu/drm/drm_dp_mst_topology.c
rename to drivers/gpu/drm/dp/drm_dp_mst_topology.c
diff --git a/drivers/gpu/drm/drm_dp_mst_topology_internal.h b/drivers/gpu/drm/dp/drm_dp_mst_topology_internal.h
similarity index 100%
rename from drivers/gpu/drm/drm_dp_mst_topology_internal.h
rename to drivers/gpu/drm/dp/drm_dp_mst_topology_internal.h
diff --git a/drivers/gpu/drm/drm_kms_helper_common.c b/drivers/gpu/drm/drm_kms_helper_common.c
index 88260d26409c..8be20080cd8d 100644
--- a/drivers/gpu/drm/drm_kms_helper_common.c
+++ b/drivers/gpu/drm/drm_kms_helper_common.c
@@ -29,7 +29,6 @@ 
 
 #include <drm/drm_print.h>
 
-#include "drm_dp_helper_internal.h"
 #include "drm_crtc_helper_internal.h"
 
 MODULE_AUTHOR("David Airlie, Jesse Barnes");
@@ -62,17 +61,3 @@  MODULE_PARM_DESC(edid_firmware,
 		 "DEPRECATED. Use drm.edid_firmware module parameter instead.");
 
 #endif
-
-static int __init drm_kms_helper_init(void)
-{
-	return drm_dp_aux_dev_init();
-}
-
-static void __exit drm_kms_helper_exit(void)
-{
-	/* Call exit functions from specific kms helpers here */
-	drm_dp_aux_dev_exit();
-}
-
-module_init(drm_kms_helper_init);
-module_exit(drm_kms_helper_exit);
diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig
index a4c94dc2e216..b68e8b551b83 100644
--- a/drivers/gpu/drm/i915/Kconfig
+++ b/drivers/gpu/drm/i915/Kconfig
@@ -9,6 +9,7 @@  config DRM_I915
 	# the shmem_readpage() which depends upon tmpfs
 	select SHMEM
 	select TMPFS
+	select DRM_DP_HELPER
 	select DRM_KMS_HELPER
 	select DRM_PANEL
 	select DRM_MIPI_DSI
diff --git a/drivers/gpu/drm/msm/Kconfig b/drivers/gpu/drm/msm/Kconfig
index 39197b4beea7..75015b0e165e 100644
--- a/drivers/gpu/drm/msm/Kconfig
+++ b/drivers/gpu/drm/msm/Kconfig
@@ -12,6 +12,7 @@  config DRM_MSM
 	select IOMMU_IO_PGTABLE
 	select QCOM_MDT_LOADER if ARCH_QCOM
 	select REGULATOR
+	select DRM_DP_HELPER
 	select DRM_KMS_HELPER
 	select DRM_PANEL
 	select DRM_BRIDGE
diff --git a/drivers/gpu/drm/nouveau/Kconfig b/drivers/gpu/drm/nouveau/Kconfig
index 9436310d0854..3ec690b6f0b4 100644
--- a/drivers/gpu/drm/nouveau/Kconfig
+++ b/drivers/gpu/drm/nouveau/Kconfig
@@ -4,6 +4,7 @@  config DRM_NOUVEAU
 	depends on DRM && PCI && MMU
 	select IOMMU_API
 	select FW_LOADER
+	select DRM_DP_HELPER
 	select DRM_KMS_HELPER
 	select DRM_TTM
 	select DRM_TTM_HELPER
diff --git a/drivers/gpu/drm/rockchip/Kconfig b/drivers/gpu/drm/rockchip/Kconfig
index 9f1ecefc3933..d59dca5efb52 100644
--- a/drivers/gpu/drm/rockchip/Kconfig
+++ b/drivers/gpu/drm/rockchip/Kconfig
@@ -2,6 +2,7 @@ 
 config DRM_ROCKCHIP
 	tristate "DRM Support for Rockchip"
 	depends on DRM && ROCKCHIP_IOMMU
+	select DRM_DP_HELPER
 	select DRM_GEM_CMA_HELPER
 	select DRM_KMS_HELPER
 	select DRM_PANEL
diff --git a/drivers/gpu/drm/tegra/Kconfig b/drivers/gpu/drm/tegra/Kconfig
index 1650a448eabd..dc88adc7ba40 100644
--- a/drivers/gpu/drm/tegra/Kconfig
+++ b/drivers/gpu/drm/tegra/Kconfig
@@ -5,6 +5,7 @@  config DRM_TEGRA
 	depends on COMMON_CLK
 	depends on DRM
 	depends on OF
+	select DRM_DP_HELPER
 	select DRM_KMS_HELPER
 	select DRM_MIPI_DSI
 	select DRM_PANEL
diff --git a/drivers/gpu/drm/xlnx/Kconfig b/drivers/gpu/drm/xlnx/Kconfig
index d8d38d86d5c6..06cf477dbcdd 100644
--- a/drivers/gpu/drm/xlnx/Kconfig
+++ b/drivers/gpu/drm/xlnx/Kconfig
@@ -6,6 +6,7 @@  config DRM_ZYNQMP_DPSUB
 	depends on PHY_XILINX_ZYNQMP
 	depends on XILINX_ZYNQMP_DPDMA
 	select DMA_ENGINE
+	select DRM_DP_HELPER
 	select DRM_GEM_CMA_HELPER
 	select DRM_KMS_HELPER
 	select GENERIC_PHY