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 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_MM_SELFTEST
	select SW_SYNC # signaling validation framework (igt/syncobj*)
	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_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_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_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_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".
