# 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 FB_IOMEM_HELPERS if DRM_FBDEV_EMULATION
	select RELAY
	select I2C
	select I2C_ALGOBIT
	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 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 i915 for selected Intel hardware IDs"
	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 i915 driver for Intel graphics devices that are
	  recognized but not properly supported by this kernel version. Force
	  probing an unsupported device taints the kernel. It is recommended to
	  upgrade to a kernel version with proper support as soon as it is
	  available.

	  It can also be used to block the probe of recognized and fully
	  supported devices.

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

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

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

	  Use "!" right before the ID to block the probe of the device. For
	  example, "4500,!4571" forces the probe of 4500 and blocks the probe of
	  4571.

	  Use "!*" to block the probe of 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://drm.pages.freedesktop.org/intel-docs/how-to-file-i915-bugs.html

	  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_KVMGT
	tristate "Enable KVM host support Intel GVT-g graphics virtualization"
	depends on DRM_I915
	depends on KVM_X86
	depends on 64BIT
	depends on VFIO
	select DRM_I915_GVT
	select KVM_EXTERNAL_WRITE_TRACKING
	select VFIO_MDEV

	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:
	  https://github.com/intel/gvt-linux/wiki.

	  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.

config DRM_I915_DP_TUNNEL
	bool "Enable DP tunnel support"
	depends on DRM_I915
	depends on USB4
	select DRM_DISPLAY_DP_TUNNEL
	default y
	help
	  Choose this option to detect DP tunnels and enable the Bandwidth
	  Allocation mode for such tunnels. This allows using the maximum
	  resolution allowed by the link BW on all displays sharing the
	  link BW, for instance on a Thunderbolt link.

	  If in doubt, say "Y".

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

config DRM_I915_GVT
	bool
