Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/dp: Move DisplayPort helpers into separate helper module

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

+55 -22
+8
drivers/gpu/drm/Kconfig
··· 80 80 81 81 If in doubt, say "N". 82 82 83 + config DRM_DP_HELPER 84 + tristate 85 + depends on DRM 86 + help 87 + DRM helpers for DisplayPort. 88 + 83 89 config DRM_KMS_HELPER 84 90 tristate 85 91 depends on DRM ··· 242 236 depends on DRM && PCI && MMU 243 237 depends on AGP || !AGP 244 238 select FW_LOADER 239 + select DRM_DP_HELPER 245 240 select DRM_KMS_HELPER 246 241 select DRM_TTM 247 242 select DRM_TTM_HELPER ··· 263 256 tristate "AMD GPU" 264 257 depends on DRM && PCI && MMU 265 258 select FW_LOADER 259 + select DRM_DP_HELPER 266 260 select DRM_KMS_HELPER 267 261 select DRM_SCHED 268 262 select DRM_TTM
+4 -6
drivers/gpu/drm/Makefile
··· 48 48 drm_ttm_helper-y := drm_gem_ttm_helper.o 49 49 obj-$(CONFIG_DRM_TTM_HELPER) += drm_ttm_helper.o 50 50 51 - drm_kms_helper-y := drm_bridge_connector.o drm_crtc_helper.o drm_dp_helper.o \ 51 + drm_kms_helper-y := drm_bridge_connector.o drm_crtc_helper.o \ 52 52 drm_dsc.o drm_encoder_slave.o drm_flip_work.o drm_hdcp.o \ 53 53 drm_probe_helper.o \ 54 - drm_plane_helper.o drm_dp_mst_topology.o drm_atomic_helper.o \ 55 - drm_kms_helper_common.o drm_dp_dual_mode_helper.o \ 54 + drm_plane_helper.o drm_atomic_helper.o \ 55 + drm_kms_helper_common.o \ 56 56 drm_simple_kms_helper.o drm_modeset_helper.o \ 57 57 drm_scdc_helper.o drm_gem_atomic_helper.o \ 58 58 drm_gem_framebuffer_helper.o \ 59 59 drm_atomic_state_helper.o drm_damage_helper.o \ 60 60 drm_format_helper.o drm_self_refresh_helper.o drm_rect.o 61 - 62 61 drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o 63 62 drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fb_helper.o 64 - drm_kms_helper-$(CONFIG_DRM_DP_AUX_CHARDEV) += drm_dp_aux_dev.o 65 - drm_kms_helper-$(CONFIG_DRM_DP_CEC) += drm_dp_cec.o 66 63 67 64 obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o 68 65 obj-$(CONFIG_DRM_DEBUG_SELFTEST) += selftests/ ··· 69 72 obj-$(CONFIG_DRM_MIPI_DSI) += drm_mipi_dsi.o 70 73 obj-$(CONFIG_DRM_PANEL_ORIENTATION_QUIRKS) += drm_panel_orientation_quirks.o 71 74 obj-y += arm/ 75 + obj-y += dp/ 72 76 obj-$(CONFIG_DRM_TTM) += ttm/ 73 77 obj-$(CONFIG_DRM_SCHED) += scheduler/ 74 78 obj-$(CONFIG_DRM_TDFX) += tdfx/
+4
drivers/gpu/drm/bridge/Kconfig
··· 184 184 tristate "Parade PS8640 MIPI DSI to eDP Converter" 185 185 depends on OF 186 186 select DRM_DP_AUX_BUS 187 + select DRM_DP_HELPER 187 188 select DRM_KMS_HELPER 188 189 select DRM_MIPI_DSI 189 190 select DRM_PANEL ··· 255 254 config DRM_TOSHIBA_TC358767 256 255 tristate "Toshiba TC358767 eDP bridge" 257 256 depends on OF 257 + select DRM_DP_HELPER 258 258 select DRM_KMS_HELPER 259 259 select REGMAP_I2C 260 260 select DRM_PANEL ··· 275 273 config DRM_TOSHIBA_TC358775 276 274 tristate "Toshiba TC358775 DSI/LVDS bridge" 277 275 depends on OF 276 + select DRM_DP_HELPER 278 277 select DRM_KMS_HELPER 279 278 select REGMAP_I2C 280 279 select DRM_PANEL ··· 303 300 config DRM_TI_SN65DSI86 304 301 tristate "TI SN65DSI86 DSI to eDP bridge" 305 302 depends on OF 303 + select DRM_DP_HELPER 306 304 select DRM_KMS_HELPER 307 305 select REGMAP_I2C 308 306 select DRM_PANEL
+2
drivers/gpu/drm/bridge/analogix/Kconfig
··· 3 3 tristate "Analogix ANX6345 bridge" 4 4 depends on OF 5 5 select DRM_ANALOGIX_DP 6 + select DRM_DP_HELPER 6 7 select DRM_KMS_HELPER 7 8 select REGMAP_I2C 8 9 help ··· 15 14 config DRM_ANALOGIX_ANX78XX 16 15 tristate "Analogix ANX78XX bridge" 17 16 select DRM_ANALOGIX_DP 17 + select DRM_DP_HELPER 18 18 select DRM_KMS_HELPER 19 19 select REGMAP_I2C 20 20 help
+1
drivers/gpu/drm/bridge/cadence/Kconfig
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 config DRM_CDNS_MHDP8546 3 3 tristate "Cadence DPI/DP bridge" 4 + select DRM_DP_HELPER 4 5 select DRM_KMS_HELPER 5 6 select DRM_PANEL_BRIDGE 6 7 depends on OF
+7
drivers/gpu/drm/dp/Makefile
··· 1 + # SPDX-License-Identifier: MIT 2 + 3 + drm_dp_helper-y := drm_dp.o drm_dp_dual_mode_helper.o drm_dp_helper_mod.o drm_dp_mst_topology.o 4 + drm_dp_helper-$(CONFIG_DRM_DP_AUX_CHARDEV) += drm_dp_aux_dev.o 5 + drm_dp_helper-$(CONFIG_DRM_DP_CEC) += drm_dp_cec.o 6 + 7 + obj-$(CONFIG_DRM_DP_HELPER) += drm_dp_helper.o
+22
drivers/gpu/drm/dp/drm_dp_helper_mod.c
··· 1 + // SPDX-License-Identifier: MIT 2 + 3 + #include <linux/module.h> 4 + 5 + #include "drm_dp_helper_internal.h" 6 + 7 + MODULE_DESCRIPTION("DRM DisplayPort helper"); 8 + MODULE_LICENSE("GPL and additional rights"); 9 + 10 + static int __init drm_dp_helper_module_init(void) 11 + { 12 + return drm_dp_aux_dev_init(); 13 + } 14 + 15 + static void __exit drm_dp_helper_module_exit(void) 16 + { 17 + /* Call exit functions from specific dp helpers here */ 18 + drm_dp_aux_dev_exit(); 19 + } 20 + 21 + module_init(drm_dp_helper_module_init); 22 + module_exit(drm_dp_helper_module_exit);
drivers/gpu/drm/drm_dp_aux_dev.c drivers/gpu/drm/dp/drm_dp_aux_dev.c
drivers/gpu/drm/drm_dp_cec.c drivers/gpu/drm/dp/drm_dp_cec.c
drivers/gpu/drm/drm_dp_dual_mode_helper.c drivers/gpu/drm/dp/drm_dp_dual_mode_helper.c
drivers/gpu/drm/drm_dp_helper.c drivers/gpu/drm/dp/drm_dp.c
drivers/gpu/drm/drm_dp_helper_internal.h drivers/gpu/drm/dp/drm_dp_helper_internal.h
drivers/gpu/drm/drm_dp_mst_topology.c drivers/gpu/drm/dp/drm_dp_mst_topology.c
drivers/gpu/drm/drm_dp_mst_topology_internal.h drivers/gpu/drm/dp/drm_dp_mst_topology_internal.h
-15
drivers/gpu/drm/drm_kms_helper_common.c
··· 29 29 30 30 #include <drm/drm_print.h> 31 31 32 - #include "drm_dp_helper_internal.h" 33 32 #include "drm_crtc_helper_internal.h" 34 33 35 34 MODULE_AUTHOR("David Airlie, Jesse Barnes"); ··· 61 62 "DEPRECATED. Use drm.edid_firmware module parameter instead."); 62 63 63 64 #endif 64 - 65 - static int __init drm_kms_helper_init(void) 66 - { 67 - return drm_dp_aux_dev_init(); 68 - } 69 - 70 - static void __exit drm_kms_helper_exit(void) 71 - { 72 - /* Call exit functions from specific kms helpers here */ 73 - drm_dp_aux_dev_exit(); 74 - } 75 - 76 - module_init(drm_kms_helper_init); 77 - module_exit(drm_kms_helper_exit);
+1
drivers/gpu/drm/i915/Kconfig
··· 9 9 # the shmem_readpage() which depends upon tmpfs 10 10 select SHMEM 11 11 select TMPFS 12 + select DRM_DP_HELPER 12 13 select DRM_KMS_HELPER 13 14 select DRM_PANEL 14 15 select DRM_MIPI_DSI
+1
drivers/gpu/drm/msm/Kconfig
··· 12 12 select IOMMU_IO_PGTABLE 13 13 select QCOM_MDT_LOADER if ARCH_QCOM 14 14 select REGULATOR 15 + select DRM_DP_HELPER 15 16 select DRM_KMS_HELPER 16 17 select DRM_PANEL 17 18 select DRM_BRIDGE
+1
drivers/gpu/drm/nouveau/Kconfig
··· 4 4 depends on DRM && PCI && MMU 5 5 select IOMMU_API 6 6 select FW_LOADER 7 + select DRM_DP_HELPER 7 8 select DRM_KMS_HELPER 8 9 select DRM_TTM 9 10 select DRM_TTM_HELPER
+1
drivers/gpu/drm/rockchip/Kconfig
··· 2 2 config DRM_ROCKCHIP 3 3 tristate "DRM Support for Rockchip" 4 4 depends on DRM && ROCKCHIP_IOMMU 5 + select DRM_DP_HELPER 5 6 select DRM_GEM_CMA_HELPER 6 7 select DRM_KMS_HELPER 7 8 select DRM_PANEL
+1 -1
drivers/gpu/drm/selftests/test-drm_dp_mst_helper.c
··· 10 10 #include <drm/drm_dp_mst_helper.h> 11 11 #include <drm/drm_print.h> 12 12 13 - #include "../drm_dp_mst_topology_internal.h" 13 + #include "../dp/drm_dp_mst_topology_internal.h" 14 14 #include "test-drm_modeset_common.h" 15 15 16 16 int igt_dp_mst_calc_pbn_mode(void *ignored)
+1
drivers/gpu/drm/tegra/Kconfig
··· 5 5 depends on COMMON_CLK 6 6 depends on DRM 7 7 depends on OF 8 + select DRM_DP_HELPER 8 9 select DRM_KMS_HELPER 9 10 select DRM_MIPI_DSI 10 11 select DRM_PANEL
+1
drivers/gpu/drm/xlnx/Kconfig
··· 6 6 depends on PHY_XILINX_ZYNQMP 7 7 depends on XILINX_ZYNQMP_DPDMA 8 8 select DMA_ENGINE 9 + select DRM_DP_HELPER 9 10 select DRM_GEM_CMA_HELPER 10 11 select DRM_KMS_HELPER 11 12 select GENERIC_PHY