config DRM_USE_DYNAMIC_DEBUG
	bool "use dynamic debug to implement drm.debug"
	default n
	depends on BROKEN
	depends on DRM
	depends on DYNAMIC_DEBUG || DYNAMIC_DEBUG_CORE
	depends on JUMP_LABEL
	help
	 Use dynamic-debug to avoid drm_debug_enabled() runtime overheads.
	 Due to callsite counts in DRM drivers (~4k in amdgpu) and 56
	 bytes per callsite, the .data costs can be substantial, and
	 are therefore configurable.

config DRM_WERROR
	bool "Compile the drm subsystem with warnings as errors"
	depends on DRM && EXPERT
	depends on !WERROR
	default n
	help
	  A kernel build should not cause any compiler warnings, and this
	  enables the '-Werror' flag to enforce that rule in the drm subsystem.

	  The drm subsystem enables more warnings than the kernel default, so
	  this config option is disabled by default.

	  If in doubt, say N.

config DRM_HEADER_TEST
	bool "Ensure DRM headers are self-contained and pass kernel-doc"
	depends on DRM && EXPERT && BROKEN
	default n
	help
	  Ensure the DRM subsystem headers both under drivers/gpu/drm and
	  include/drm compile, are self-contained, have header guards, and have
	  no kernel-doc warnings.

	  If in doubt, say N.

config DRM_DEBUG_MM
	bool "Insert extra checks and debug info into the DRM range managers"
	default n
	depends on DRM
	depends on STACKTRACE_SUPPORT
	select STACKDEPOT
	help
	  Enable allocation tracking of memory manager and leak detection on
	  shutdown.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_KUNIT_TEST_HELPERS
	tristate
	depends on DRM && KUNIT
	select DRM_KMS_HELPER
	help
	  KUnit Helpers for KMS drivers.

config DRM_KUNIT_TEST
	tristate "KUnit tests for DRM" if !KUNIT_ALL_TESTS
	depends on DRM && KUNIT && MMU
	select DRM_BRIDGE_CONNECTOR
	select DRM_BUDDY
	select DRM_DISPLAY_DP_HELPER
	select DRM_DISPLAY_HDMI_STATE_HELPER
	select DRM_DISPLAY_HELPER
	select DRM_EXEC
	select DRM_EXPORT_FOR_TESTS if m
	select DRM_GEM_SHMEM_HELPER
	select DRM_KUNIT_TEST_HELPERS
	select DRM_SYSFB_HELPER
	select PRIME_NUMBERS
	default KUNIT_ALL_TESTS
	help
	  This builds unit tests for DRM. This option is not useful for
	  distributions or general kernels, but only for kernel
	  developers working on DRM and associated drivers.

	  For more information on KUnit and unit tests in general,
	  please refer to the KUnit documentation in
	  Documentation/dev-tools/kunit/.

	  If in doubt, say "N".

config DRM_TTM_KUNIT_TEST
	tristate "KUnit tests for TTM" if !KUNIT_ALL_TESTS
	depends on DRM && KUNIT && MMU && (UML || COMPILE_TEST)
	select DRM_TTM
	select DRM_BUDDY
	select DRM_EXPORT_FOR_TESTS if m
	select DRM_KUNIT_TEST_HELPERS
	default KUNIT_ALL_TESTS
	help
	  Enables unit tests for TTM, a GPU memory manager subsystem used
	  to manage memory buffers. This option is mostly useful for kernel
	  developers. It depends on (UML || COMPILE_TEST) since no other driver
	  which uses TTM can be loaded while running the tests.

	  If in doubt, say "N".

config DRM_SCHED_KUNIT_TEST
	tristate "KUnit tests for the DRM scheduler" if !KUNIT_ALL_TESTS
	select DRM_SCHED
	depends on DRM && KUNIT
	default KUNIT_ALL_TESTS
	help
	  Choose this option to build unit tests for the DRM scheduler.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_EXPORT_FOR_TESTS
	bool
