# SPDX-License-Identifier: MIT

config DRM_AMDGPU
	tristate "AMD GPU"
	depends on DRM && PCI
	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.


config GCOV_PROFILE_AMDGPU
	bool "Enable GCOV profiling on amdgpu"
	depends on DRM_AMDGPU
	depends on GCOV_KERNEL
	default n
	help
	  Enable GCOV profiling on the amdgpu driver for checking which
	  functions/lines are executed during testing. This adds compiler
	  instrumentation flags to all amdgpu source files, producing
	  .gcda/.gcno coverage data accessible via debugfs.

	  This increases the amdgpu module size by ~50% and adds ~2-5%
	  runtime overhead on GPU submission paths.

	  If unsure, say N.

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