# 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
	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_DEBUG_SELFTEST
	select DMABUF_SELFTESTS
	select SW_SYNC # signaling validation framework (igt/syncobj*)
	select DRM_I915_SW_FENCE_DEBUG_OBJECTS
	select DRM_I915_SELFTEST
	select DRM_I915_DEBUG_RUNTIME_PM
	select DRM_I915_DEBUG_MMIO
	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_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
	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 FAULT_INJECTION
	select PRIME_NUMBERS
	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.

	  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.

	  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.

	  If in doubt, say "N"
