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