drm/dp: Move DisplayPort helpers into separate helper module
authorThomas Zimmermann <tzimmermann@suse.de>
Fri, 14 Jan 2022 11:45:33 +0000 (12:45 +0100)
committerThomas Zimmermann <tzimmermann@suse.de>
Mon, 17 Jan 2022 10:25:44 +0000 (11:25 +0100)
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.

v3:
* fix include statement in DRM selftests
v2:
* move DP helper code into dp/ (Jani)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Lyude Paul <lyude@redhat.com>
Acked-by: Daniel Vetter <daniel@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20220114114535.29157-4-tzimmermann@suse.de
22 files changed:
drivers/gpu/drm/Kconfig
drivers/gpu/drm/Makefile
drivers/gpu/drm/bridge/Kconfig
drivers/gpu/drm/bridge/analogix/Kconfig
drivers/gpu/drm/bridge/cadence/Kconfig
drivers/gpu/drm/dp/Makefile [new file with mode: 0644]
drivers/gpu/drm/dp/drm_dp.c [moved from drivers/gpu/drm/drm_dp_helper.c with 100% similarity]
drivers/gpu/drm/dp/drm_dp_aux_dev.c [moved from drivers/gpu/drm/drm_dp_aux_dev.c with 100% similarity]
drivers/gpu/drm/dp/drm_dp_cec.c [moved from drivers/gpu/drm/drm_dp_cec.c with 100% similarity]
drivers/gpu/drm/dp/drm_dp_dual_mode_helper.c [moved from drivers/gpu/drm/drm_dp_dual_mode_helper.c with 100% similarity]
drivers/gpu/drm/dp/drm_dp_helper_internal.h [moved from drivers/gpu/drm/drm_dp_helper_internal.h with 100% similarity]
drivers/gpu/drm/dp/drm_dp_helper_mod.c [new file with mode: 0644]
drivers/gpu/drm/dp/drm_dp_mst_topology.c [moved from drivers/gpu/drm/drm_dp_mst_topology.c with 100% similarity]
drivers/gpu/drm/dp/drm_dp_mst_topology_internal.h [moved from drivers/gpu/drm/drm_dp_mst_topology_internal.h with 100% similarity]
drivers/gpu/drm/drm_kms_helper_common.c
drivers/gpu/drm/i915/Kconfig
drivers/gpu/drm/msm/Kconfig
drivers/gpu/drm/nouveau/Kconfig
drivers/gpu/drm/rockchip/Kconfig
drivers/gpu/drm/selftests/test-drm_dp_mst_helper.c
drivers/gpu/drm/tegra/Kconfig
drivers/gpu/drm/xlnx/Kconfig

index b1f22e4..91f54ae 100644 (file)
@@ -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
index 301a44d..69be80e 100644 (file)
@@ -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/
index a1b52ea..fcd93f1 100644 (file)
@@ -184,6 +184,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
@@ -254,6 +255,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
@@ -273,6 +275,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
@@ -300,6 +303,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
index 2ef6eb2..319ba0d 100644 (file)
@@ -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
index ef8c230..de697ba 100644 (file)
@@ -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 (file)
index 0000000..5b892ae
--- /dev/null
@@ -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/dp/drm_dp_helper_mod.c b/drivers/gpu/drm/dp/drm_dp_helper_mod.c
new file mode 100644 (file)
index 0000000..db753de
--- /dev/null
@@ -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);
index 88260d2..8be2008 100644 (file)
@@ -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);
index a4c94dc..b68e8b5 100644 (file)
@@ -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
index 39197b4..75015b0 100644 (file)
@@ -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
index 9436310..3ec690b 100644 (file)
@@ -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
index 9f1ecef..d59dca5 100644 (file)
@@ -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
index 6b4759e..784048c 100644 (file)
@@ -10,7 +10,7 @@
 #include <drm/drm_dp_mst_helper.h>
 #include <drm/drm_print.h>
 
-#include "../drm_dp_mst_topology_internal.h"
+#include "../dp/drm_dp_mst_topology_internal.h"
 #include "test-drm_modeset_common.h"
 
 int igt_dp_mst_calc_pbn_mode(void *ignored)
index 1650a44..dc88adc 100644 (file)
@@ -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
index d8d38d8..06cf477 100644 (file)
@@ -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