# SPDX-License-Identifier: GPL-2.0-only
config DRM_I915_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) i915.ko.
	  Do not enable this unless you are writing code for the i915.ko module.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_I915_DEBUG
	bool "Enable additional driver debugging"
	depends on DRM_I915
	depends on EXPERT # only for developers
	depends on !COMPILE_TEST # never built by robots
	select DEBUG_FS
	select PREEMPT_COUNT
	select I2C_CHARDEV
	select STACKDEPOT
	select DRM_DP_AUX_CHARDEV
	select X86_MSR # used by igt/pm_rpm
	select DRM_VGEM # used by igt/prime_vgem (dmabuf interop checks)
	select DRM_DEBUG_MM if DRM=y
	select DRM_EXPORT_FOR_TESTS if m
	select DRM_DEBUG_SELFTEST
	select DMABUF_SELFTESTS
	select SW_SYNC # signaling validation framework (igt/syncobj*)
	select DRM_I915_WERROR
	select DRM_I915_DEBUG_GEM
	select DRM_I915_DEBUG_GEM_ONCE
	select DRM_I915_DEBUG_MMIO
	select DRM_I915_DEBUG_RUNTIME_PM
	select DRM_I915_SW_FENCE_DEBUG_OBJECTS
	select DRM_I915_SELFTEST
	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_I915_DEBUG_MMIO
	bool "Always insert extra checks around mmio access by default"
	default n
	help
	  By default, always enables the extra sanity checks (extra register
	  reads) around every mmio (register) access that will slow the system
	  down. This sets the default value of i915.mmio_debug to -1 and can
	  be overridden at module load.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_I915_DEBUG_GEM
	bool "Insert extra checks into the GEM internals"
	default n
	depends on DRM_I915_WERROR
	help
	  Enable extra sanity checks (including BUGs) along the GEM driver
	  paths that may slow the system down and if hit hang the machine.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_I915_DEBUG_GEM_ONCE
	bool "Make a GEM debug failure fatal"
	default n
	depends on DRM_I915_DEBUG_GEM
	help
	  During development, we often only want the very first failure
	  as that would otherwise be lost in the deluge of subsequent
	  failures. However, more casual testers may not want to trigger
	  a hard BUG_ON and hope that the system remains sufficiently usable
	  to capture a bug report in situ.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_I915_ERRLOG_GEM
	bool "Insert extra logging (very verbose) for common GEM errors"
	default n
	depends on DRM_I915_DEBUG_GEM
	help
	  Enable additional logging that may help track down the cause of
	  principally userspace errors.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_I915_TRACE_GEM
	bool "Insert extra ftrace output from the GEM internals"
	depends on DRM_I915_DEBUG_GEM
	select TRACING
	default n
	help
	  Enable additional and verbose debugging output that will spam
	  ordinary tests, but may be vital for post-mortem debugging when
	  used with /proc/sys/kernel/ftrace_dump_on_oops

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_I915_TRACE_GTT
	bool "Insert extra ftrace output from the GTT internals"
	depends on DRM_I915_DEBUG_GEM
	select TRACING
	default n
	help
	  Enable additional and verbose debugging output that will spam
	  ordinary tests, but may be vital for post-mortem debugging when
	  used with /proc/sys/kernel/ftrace_dump_on_oops

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_I915_SW_FENCE_DEBUG_OBJECTS
	bool "Enable additional driver debugging for fence objects"
	depends on DRM_I915
	select DEBUG_OBJECTS
	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_I915_SW_FENCE_CHECK_DAG
	bool "Enable additional driver debugging for detecting dependency cycles"
	depends on DRM_I915
	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_I915_DEBUG_GUC
	bool "Enable additional driver debugging for GuC"
	depends on DRM_I915
	select STACKDEPOT
	default n
	help
	  Choose this option to turn on extra driver debugging that may affect
	  performance but will help resolve GuC related issues.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_I915_SELFTEST
	bool "Enable selftests upon driver load"
	depends on DRM_I915
	default n
	select DRM_EXPORT_FOR_TESTS if m
	select FAULT_INJECTION
	select PRIME_NUMBERS
	select CRC32
	help
	  Choose this option to allow the driver to perform selftests upon
	  loading; also requires the i915.selftest=1 module parameter. To
	  exit the module after running the selftests (i.e. to prevent normal
	  module initialisation afterwards) use i915.selftest=-1.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_I915_SELFTEST_BROKEN
	bool "Enable broken and dangerous selftests"
	depends on DRM_I915_SELFTEST
	depends on BROKEN
	default n
	help
	  This option enables the execution of selftests that are "dangerous"
	  and may trigger unintended HW side-effects as they break strict
	  rules given in the HW specification. For science.

	  Recommended for masochistic driver developers only.

	  If in doubt, say "N".

config DRM_I915_LOW_LEVEL_TRACEPOINTS
	bool "Enable low level request tracing events"
	depends on DRM_I915
	default n
	help
	  Choose this option to turn on low level request tracing events.
	  This provides the ability to precisely monitor engine utilisation
	  and also analyze the request dependency resolving timeline.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_I915_DEBUG_VBLANK_EVADE
	bool "Enable extra debug warnings for vblank evasion"
	depends on DRM_I915
	default n
	help
	  Choose this option to turn on extra debug warnings for the
	  vblank evade mechanism. This gives a warning every time the
	  the deadline allotted for the vblank evade critical section
	  is exceeded, even if there isn't an actual risk of missing
	  the vblank.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_I915_DEBUG_RUNTIME_PM
	bool "Enable extra state checking for runtime PM"
	depends on DRM_I915
	default n
	select STACKDEPOT
	help
	  Choose this option to turn on extra state checking for the
	  runtime PM functionality. This may introduce overhead during
	  driver loading, suspend and resume operations.

	  Recommended for driver developers only.

	  If in doubt, say "N"
