# 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 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).
