# SPDX-License-Identifier: GPL-2.0-only
config DRM_I915
	tristate "Intel 8xx/9xx/G3x/G4x/HD Graphics"
	depends on DRM
	depends on X86 && PCI
	depends on !PREEMPT_RT
	select INTEL_GTT if X86
	select INTERVAL_TREE
	# we need shmfs for the swappable backing store, and in particular
	# the shmem_readpage() which depends upon tmpfs
	select SHMEM
	select TMPFS
	select DRM_DISPLAY_DP_HELPER
	select DRM_DISPLAY_HDCP_HELPER
	select DRM_DISPLAY_HDMI_HELPER
	select DRM_DISPLAY_HELPER
	select DRM_KMS_HELPER
	select DRM_PANEL
	select DRM_MIPI_DSI
	select RELAY
	select IRQ_WORK
	# i915 depends on ACPI_VIDEO when ACPI is enabled
	# but for select to work, need to select ACPI_VIDEO's dependencies, ick
	select BACKLIGHT_CLASS_DEVICE if ACPI
	select INPUT if ACPI
	select X86_PLATFORM_DEVICES if ACPI
	select ACPI_WMI if ACPI
	select ACPI_VIDEO if ACPI
	select ACPI_BUTTON if ACPI
	select SYNC_FILE
	select IOSF_MBI if X86
	select CRC32
	select SND_HDA_I915 if SND_HDA_CORE
	select CEC_CORE if CEC_NOTIFIER
	select VMAP_PFN
	select DRM_TTM
	select DRM_BUDDY
	select AUXILIARY_BUS
	help
	  Choose this option if you have a system that has "Intel Graphics
	  Media Accelerator" or "HD Graphics" integrated graphics,
	  including 830M, 845G, 852GM, 855GM, 865G, 915G, 945G, 965G,
	  G35, G41, G43, G45 chipsets and Celeron, Pentium, Core i3,
	  Core i5, Core i7 as well as Atom CPUs with integrated graphics.

	  This driver is used by the Intel driver in X.org 6.8 and
	  XFree86 4.4 and above. It replaces the older i830 module that
	  supported a subset of the hardware in older X.org releases.

	  Note that the older i810/i815 chipsets require the use of the
	  i810 driver instead, and the Atom z5xx series has an entirely
	  different implementation.

	  If "M" is selected, the module will be called i915.

config DRM_I915_FORCE_PROBE
	string "Force probe driver for selected new Intel hardware"
	depends on DRM_I915
	help
	  This is the default value for the i915.force_probe module
	  parameter. Using the module parameter overrides this option.

	  Force probe the driver for new Intel graphics devices that are
	  recognized but not properly supported by this kernel version. It is
	  recommended to upgrade to a kernel version with proper support as soon
	  as it is available.

	  Use "" to disable force probe. If in doubt, use this.

	  Use "<pci-id>[,<pci-id>,...]" to force probe the driver for listed
	  devices. For example, "4500" or "4500,4571".

	  Use "*" to force probe the driver for all known devices.

config DRM_I915_CAPTURE_ERROR
	bool "Enable capturing GPU state following a hang"
	depends on DRM_I915
	default y
	help
	  This option enables capturing the GPU state when a hang is detected.
	  This information is vital for triaging hangs and assists in debugging.
	  Please report any hang for triaging according to:
	    https://gitlab.freedesktop.org/drm/intel/-/wikis/How-to-file-i915-bugs

	  If in doubt, say "Y".

config DRM_I915_COMPRESS_ERROR
	bool "Compress GPU error state"
	depends on DRM_I915_CAPTURE_ERROR
	select ZLIB_DEFLATE
	default y
	help
	  This option selects ZLIB_DEFLATE if it isn't already
	  selected and causes any error state captured upon a GPU hang
	  to be compressed using zlib.

	  If in doubt, say "Y".

config DRM_I915_USERPTR
	bool "Always enable userptr support"
	depends on DRM_I915
	select MMU_NOTIFIER
	default y
	help
	  This option selects CONFIG_MMU_NOTIFIER if it isn't already
	  selected to enabled full userptr support.

	  If in doubt, say "Y".

config DRM_I915_GVT
	bool

config DRM_I915_GVT_KVMGT
	tristate "Enable KVM host support Intel GVT-g graphics virtualization"
	depends on DRM_I915
	depends on X86
	depends on 64BIT
	depends on KVM
	depends on VFIO_MDEV
	select DRM_I915_GVT
	select KVM_EXTERNAL_WRITE_TRACKING

	help
	  Choose this option if you want to enable Intel GVT-g graphics
	  virtualization technology host support with integrated graphics.
	  With GVT-g, it's possible to have one integrated graphics
	  device shared by multiple VMs under KVM.

	  Note that this driver only supports newer device from Broadwell on.
	  For further information and setup guide, you can visit:
	  http://01.org/igvt-g.

	  If in doubt, say "N".

config DRM_I915_PXP
	bool "Enable Intel PXP support"
	depends on DRM_I915
	depends on INTEL_MEI && INTEL_MEI_PXP
	default n
	help
	  PXP (Protected Xe Path) is an i915 component, available on graphics
	  version 12 and newer GPUs, that helps to establish the hardware
	  protected session and manage the status of the alive software session,
	  as well as its life cycle.

menu "drm/i915 Debugging"
depends on DRM_I915
depends on EXPERT
source "drivers/gpu/drm/i915/Kconfig.debug"
endmenu

menu "drm/i915 Profile Guided Optimisation"
	visible if EXPERT
	depends on DRM_I915
	source "drivers/gpu/drm/i915/Kconfig.profile"
endmenu

menu "drm/i915 Unstable Evolution"
	visible if EXPERT && STAGING && BROKEN
	depends on DRM_I915
	source "drivers/gpu/drm/i915/Kconfig.unstable"
endmenu
