# SPDX-License-Identifier: GPL-2.0-only
config DRM_NOUVEAU
	tristate "Nouveau (NVIDIA) cards"
	depends on DRM && PCI
	select IOMMU_API
	select FW_LOADER
	select FW_CACHE if PM_SLEEP
	select DRM_CLIENT_SELECTION
	select DRM_DISPLAY_DP_HELPER
	select DRM_DISPLAY_HDMI_HELPER
	select DRM_DISPLAY_HELPER
	select DRM_KMS_HELPER
	select DRM_TTM
	select DRM_TTM_HELPER
	select DRM_EXEC
	select DRM_GPUVM
	select DRM_SCHED
	select I2C
	select I2C_ALGOBIT
	select BACKLIGHT_CLASS_DEVICE if DRM_NOUVEAU_BACKLIGHT
	select X86_PLATFORM_DEVICES if ACPI && X86
	select ACPI_WMI if ACPI && X86
	select MXM_WMI if ACPI && X86
	select POWER_SUPPLY
	# Similar to i915, we need to select ACPI_VIDEO and it's dependencies
	select BACKLIGHT_CLASS_DEVICE if ACPI && X86
	select INPUT if ACPI && X86
	select THERMAL if ACPI && X86
	select ACPI_VIDEO if ACPI && X86
	select SND_HDA_COMPONENT if SND_HDA_CORE
	help
	  Choose this option for open-source NVIDIA support.

config NOUVEAU_PLATFORM_DRIVER
	bool "Nouveau (NVIDIA) SoC GPUs"
	depends on DRM_NOUVEAU && ARCH_TEGRA
	default y
	help
	  Support for Nouveau platform driver, used for SoC GPUs as found
	  on NVIDIA Tegra K1.

config NOUVEAU_DEBUG
	int "Maximum debug level"
	depends on DRM_NOUVEAU
	range 0 7
	default 5
	help
	  Selects the maximum debug level to compile support for.

	  0 - fatal
	  1 - error
	  2 - warning
	  3 - info
	  4 - debug
	  5 - trace (recommended)
	  6 - paranoia
	  7 - spam

	  The paranoia and spam levels will add a lot of extra checks which
	  may potentially slow down driver operation.

config NOUVEAU_DEBUG_DEFAULT
	int "Default debug level"
	depends on DRM_NOUVEAU
	range 0 7
	default 3
	help
	  Selects the default debug level

config NOUVEAU_DEBUG_MMU
	bool "Enable additional MMU debugging"
	depends on DRM_NOUVEAU
	default n
	help
	  Say Y here if you want to enable verbose MMU debug output.

config NOUVEAU_DEBUG_PUSH
	bool "Enable additional push buffer debugging"
	depends on DRM_NOUVEAU
	default n
	help
	  Say Y here if you want to enable verbose push buffer debug output
	  and sanity checks.

config DRM_NOUVEAU_BACKLIGHT
	bool "Support for backlight control"
	depends on DRM_NOUVEAU
	default y
	help
	  Say Y here if you want to control the backlight of your display
	  (e.g. a laptop panel).

config DRM_NOUVEAU_SVM
	bool "(EXPERIMENTAL) Enable SVM (Shared Virtual Memory) support"
	depends on DEVICE_PRIVATE
	depends on DRM_NOUVEAU
	depends on STAGING
	select HMM_MIRROR
	select MMU_NOTIFIER
	default n
	help
	  Say Y here if you want to enable experimental support for
	  Shared Virtual Memory (SVM).

config DRM_NOUVEAU_GSP_DEFAULT
	bool "Use GSP firmware for Turing/Ampere (needs firmware installed)"
	depends on DRM_NOUVEAU
	default n
	help
	  Say Y here if you want to use the GSP codepaths by default on
	  Turing and Ampere GPUs.

config DRM_NOUVEAU_CH7006
	tristate "Chrontel ch7006 TV encoder"
	depends on DRM_NOUVEAU
	default m
	help
	  Support for Chrontel ch7006 and similar TV encoders.

	  This driver is currently only useful if you're also using
	  the nouveau driver.

config DRM_NOUVEAU_SIL164
	tristate "Silicon Image sil164 TMDS transmitter"
	depends on DRM_NOUVEAU
	default m
	help
	  Support for sil164 and similar single-link (or dual-link
	  when used in pairs) TMDS transmitters.
