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_LIB_RANDOM
	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
	default n
	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
