# SPDX-License-Identifier: MIT

config DRM_AMDGPU
	tristate "AMD GPU"
	depends on DRM && PCI && MMU
	depends on !UML
	select FW_LOADER
	select DRM_CLIENT
	select DRM_CLIENT_SELECTION
	select DRM_DISPLAY_DP_HELPER
	select DRM_DISPLAY_DSC_HELPER
	select DRM_DISPLAY_HDMI_HELPER
	select DRM_DISPLAY_HDCP_HELPER
	select DRM_DISPLAY_HELPER
	select DRM_KMS_HELPER
	select DRM_SCHED
	select DRM_TTM
	select DRM_TTM_HELPER
	select POWER_SUPPLY
	select HWMON
	select I2C
	select I2C_ALGOBIT
	select CRC16
	select BACKLIGHT_CLASS_DEVICE
	select INTERVAL_TREE
	select DRM_BUDDY
	select DRM_SUBALLOC_HELPER
	select DRM_EXEC
	select DRM_PANEL_BACKLIGHT_QUIRKS
	# amdgpu depends on ACPI_VIDEO when ACPI is enabled, for select to work
	# ACPI_VIDEO's dependencies must also be selected.
	select INPUT if ACPI
	select ACPI_VIDEO if ACPI
	# On x86 ACPI_VIDEO also needs ACPI_WMI
	select X86_PLATFORM_DEVICES if ACPI && X86
	select ACPI_WMI if ACPI && X86
	help
	  Choose this option if you have a recent AMD Radeon graphics card.

	  If M is selected, the module will be called amdgpu.

config DRM_AMDGPU_SI
	bool "Enable amdgpu support for SI parts"
	depends on DRM_AMDGPU
	help
	  Choose this option if you want to enable experimental support
	  for SI (Southern Islands) asics.

	  SI is already supported in radeon. Experimental support for SI
	  in amdgpu will be disabled by default and is still provided by
	  radeon. Use module options to override this:

	  radeon.si_support=0 amdgpu.si_support=1

config DRM_AMDGPU_CIK
	bool "Enable amdgpu support for CIK parts"
	depends on DRM_AMDGPU
	help
	  Choose this option if you want to enable support for CIK (Sea
	  Islands) asics.

	  CIK is already supported in radeon. Support for CIK in amdgpu
	  will be disabled by default and is still provided by radeon.
	  Use module options to override this:

	  radeon.cik_support=0 amdgpu.cik_support=1

config DRM_AMDGPU_USERPTR
	bool "Always enable userptr write support"
	depends on DRM_AMDGPU
	depends on MMU
	select HMM_MIRROR
	select MMU_NOTIFIER
	help
	  This option selects CONFIG_HMM and CONFIG_HMM_MIRROR if it
	  isn't already selected to enabled full userptr support.

config DRM_AMD_ISP
	bool "Enable AMD Image Signal Processor IP support"
	depends on DRM_AMDGPU
	select MFD_CORE
	select PM_GENERIC_DOMAINS if PM
	help
	Choose this option to enable ISP IP support for AMD SOCs.
	This adds the ISP (Image Signal Processor) IP driver and wires
	it up into the amdgpu driver.  It is required for cameras
	on APUs which utilize mipi cameras.

config DRM_AMDGPU_WERROR
	bool "Force the compiler to throw an error instead of a warning when compiling"
	depends on DRM_AMDGPU
	depends on EXPERT
	depends on !COMPILE_TEST
	default n
	help
	  Add -Werror to the build flags for amdgpu.ko.
	  Only enable this if you are warning code for amdgpu.ko.

source "drivers/gpu/drm/amd/acp/Kconfig"
source "drivers/gpu/drm/amd/display/Kconfig"
source "drivers/gpu/drm/amd/amdkfd/Kconfig"
