# 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_SRIOV
	bool "Enable extra SR-IOV debugging"
	default n
	imply 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_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_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_DEBUG_GUC
        bool "Enable extra GuC related debug options"
        depends on DRM_XE_DEBUG
        default n
        select STACKDEPOT
        help
          Choose this option when debugging guc issues.
          The GuC log buffer is increased to the maximum allowed, which should
          be large enough for complex issues. The tracking of FAST_REQ messages
          is extended to include a record of the calling stack, which is then
          dumped on a FAST_REQ error notification.

          Recommended for driver developers only.

          If in doubt, say "N".

config DRM_XE_USERPTR_INVAL_INJECT
       bool "Inject userptr invalidation -EINVAL errors"
       depends on DRM_GPUSVM
       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".
