# SPDX-License-Identifier: MIT

config DRM_AMDGPU
	tristate "AMD GPU"
	depends on DRM && PCI
	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 support
	  for SI (Southern Islands) asics.

	  SI (Southern Islands) are first generation GCN GPUs,
	  supported by both drivers: radeon (old) and amdgpu (new).
	  By default, SI dedicated GPUs are supported by amdgpu.

	  Use module options to override this:
	  To use radeon for SI,
	  radeon.si_support=1 amdgpu.si_support=0

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 (Sea Islands) are second generation GCN GPUs,
	  supported by both drivers: radeon (old) and amdgpu (new).
	  By default,
	  CIK dedicated GPUs are supported by amdgpu
	  CIK APUs are supported by radeon

	  Use module options to override this:
	  To use amdgpu for CIK,
	  radeon.cik_support=0 amdgpu.cik_support=1
	  To use radeon for CIK,
	  radeon.cik_support=1 amdgpu.cik_support=0

config DRM_AMDGPU_USERPTR
	bool "Always enable userptr write support"
	depends on DRM_AMDGPU
	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 && ACPI
	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"
