# SPDX-License-Identifier: GPL-2.0-only
config DRM_NOUVEAU
	tristate "Nouveau (NVIDIA) cards"
	depends on DRM && PCI && MMU
	select IOMMU_API
	select FW_LOADER
	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 MMU
	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.
