# SPDX-License-Identifier: GPL-2.0-only
config DRM_XE
	tristate "Intel Xe2 Graphics"
	depends on DRM && PCI
	depends on KUNIT || !KUNIT
	depends on INTEL_VSEC || !INTEL_VSEC
	depends on X86_PLATFORM_DEVICES || !(X86 && ACPI)
	depends on PAGE_SIZE_4KB || COMPILE_TEST || BROKEN
	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_BUDDY
	select DRM_CLIENT_SELECTION
	select DRM_KMS_HELPER
	select DRM_KUNIT_TEST_HELPERS if DRM_XE_KUNIT_TEST != n
	select DRM_PANEL
	select DRM_SUBALLOC_HELPER
	select DRM_DISPLAY_DP_HELPER
	select DRM_DISPLAY_DSC_HELPER
	select DRM_DISPLAY_HDCP_HELPER
	select DRM_DISPLAY_HDMI_HELPER
	select DRM_DISPLAY_HELPER
	select DRM_MIPI_DSI
	select RELAY
	select IRQ_WORK
	# xe 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 ACPI_VIDEO if X86 && ACPI
	select ACPI_WMI if X86 && ACPI
	select SYNC_FILE
	select CRC32
	select SND_HDA_I915 if SND_HDA_CORE
	select CEC_CORE if CEC_NOTIFIER
	select VMAP_PFN
	select DRM_TTM
	select DRM_TTM_HELPER
	select DRM_EXEC
	select DRM_GPUSVM if !UML
	select DRM_GPUVM
	select DRM_SCHED
	select MMU_NOTIFIER
	select WANT_DEV_COREDUMP
	select AUXILIARY_BUS
	select REGMAP if I2C
	help
	  Driver for Intel Xe2 series GPUs and later. Experimental support
	  for Xe series is also available.

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

config DRM_XE_DISPLAY
	bool "Enable display support"
	depends on DRM_XE && DRM_XE=m && HAS_IOPORT
	select FB_IOMEM_HELPERS if DRM_FBDEV_EMULATION
	select I2C
	select I2C_ALGOBIT
	default y
	help
	  Disable this option only if you want to compile out display support.

config DRM_XE_DP_TUNNEL
	bool "Enable DP tunnel support"
	depends on DRM_XE_DISPLAY
	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".

config DRM_XE_GPUSVM
	bool "Enable CPU to GPU address mirroring"
	depends on DRM_XE
	depends on !UML
	depends on ZONE_DEVICE
	default y
	select DEVICE_PRIVATE
	select DRM_GPUSVM
	help
	  Enable this option if you want support for CPU to GPU address
	  mirroring.

	  If in doubt say "Y".

config DRM_XE_PAGEMAP
	bool "Enable device memory pool for SVM"
	depends on DRM_XE_GPUSVM
	select GET_FREE_REGION
	default y
	help
	  Disable this option only if you don't want to expose local device
	  memory for SVM. Will reduce KMD memory footprint when disabled.

	  If in doubt say "Y".

config DRM_XE_FORCE_PROBE
	string "Force probe xe for selected Intel hardware IDs"
	depends on DRM_XE
	help
	  This is the default value for the xe.force_probe module
	  parameter. Using the module parameter overrides this option.

	  Force probe the xe for 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.

	  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 xe for listed
	  devices. For example, "4500" or "4500,4571".

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

	  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.

menu "drm/Xe Debugging"
depends on DRM_XE
depends on EXPERT
source "drivers/gpu/drm/xe/Kconfig.debug"
endmenu

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