# SPDX-License-Identifier: GPL-2.0-only
config DRM_XE_WERROR
	bool "Force GCC to throw an error instead of a warning when compiling"
	# As this may inadvertently break the build, only allow the user
	# to shoot oneself in the foot iff they aim really hard
	depends on EXPERT
	# We use the dependency on !COMPILE_TEST to not be enabled in
	# allmodconfig or allyesconfig configurations
	depends on !COMPILE_TEST
	default n
	help
	  Add -Werror to the build flags for (and only for) xe.ko.
	  Do not enable this unless you are writing code for the xe.ko module.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_XE_DEBUG
	bool "Enable additional driver debugging"
	depends on DRM_XE
	depends on EXPERT
	depends on !COMPILE_TEST
	default n
	help
	  Choose this option to turn on extra driver debugging that may affect
	  performance but will catch some internal issues.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_XE_DEBUG_VM
	bool "Enable extra VM debugging info"
	default n
	help
	  Enable extra VM debugging info

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_XE_DEBUG_MEMIRQ
	bool "Enable extra memirq debugging"
	default n
	help
	  Choose this option to enable additional debugging info for
	  memory based interrupts.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_XE_DEBUG_SRIOV
	bool "Enable extra SR-IOV debugging"
	default n
	select DRM_XE_DEBUG_MEMIRQ
	help
	  Enable extra SR-IOV debugging info.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_XE_DEBUG_MEM
	bool "Enable passing SYS/VRAM addresses to user space"
	default n
	help
	  Pass object location through uapi. Intended for extended
	  testing and development only.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_XE_KUNIT_TEST
        tristate "KUnit tests for the drm xe driver" if !KUNIT_ALL_TESTS
	depends on DRM_XE && KUNIT && DEBUG_FS
	default KUNIT_ALL_TESTS
	select DRM_EXPORT_FOR_TESTS if m
	help
	  Choose this option to allow the driver to perform selftests under
	  the kunit framework

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_XE_LARGE_GUC_BUFFER
        bool "Enable larger guc log buffer"
        default n
        help
          Choose this option when debugging guc issues.
          Buffer should be large enough for complex issues.

          Recommended for driver developers only.

          If in doubt, say "N".

config DRM_XE_USERPTR_INVAL_INJECT
       bool "Inject userptr invalidation -EINVAL errors"
       default n
       help
         Choose this option when debugging error paths that
	 are hit during checks for userptr invalidations.

	 Recommended for driver developers only.
	 If in doubt, say "N".
