# SPDX-License-Identifier: GPL-2.0-only
#
# Drm device configuration
#
# This driver provides support for the
# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
#
menuconfig DRM
	tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)"
	depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && HAS_DMA
	select DRM_PANEL_ORIENTATION_QUIRKS
	select HDMI
	select FB_CMDLINE
	select I2C
	select I2C_ALGOBIT
	select DMA_SHARED_BUFFER
	select SYNC_FILE
	help
	  Kernel-level support for the Direct Rendering Infrastructure (DRI)
	  introduced in XFree86 4.0. If you say Y here, you need to select
	  the module that's right for your graphics card from the list below.
	  These modules provide support for synchronization, security, and
	  DMA transfers. Please see <http://dri.sourceforge.net/> for more
	  details.  You should also select and configure AGP
	  (/dev/agpgart) support if it is available for your platform.

config DRM_MIPI_DBI
	tristate
	depends on DRM

config DRM_MIPI_DSI
	bool
	depends on DRM

config DRM_DP_AUX_CHARDEV
	bool "DRM DP AUX Interface"
	depends on DRM
	help
	  Choose this option to enable a /dev/drm_dp_auxN node that allows to
	  read and write values to arbitrary DPCD registers on the DP aux
	  channel.

config DRM_DEBUG_MM
	bool "Insert extra checks and debug info into the DRM range managers"
	default n
	depends on DRM=y
	depends on STACKTRACE_SUPPORT
	select STACKDEPOT
	help
	  Enable allocation tracking of memory manager and leak detection on
	  shutdown.

	  Recommended for driver developers only.

	  If in doubt, say "N".

config DRM_DEBUG_SELFTEST
	tristate "kselftests for DRM"
	depends on DRM
	depends on DEBUG_KERNEL
	select PRIME_NUMBERS
	select DRM_LIB_RANDOM
	select DRM_KMS_HELPER
	default n
	help
	  This option provides kernel modules that can be used to run
	  various selftests on parts of the DRM api. This option is not
	  useful for distributions or general kernels, but only for kernel
	  developers working on DRM and associated drivers.

	  If in doubt, say "N".

config DRM_KMS_HELPER
	tristate
	depends on DRM
	help
	  CRTC helpers for KMS drivers.

config DRM_KMS_FB_HELPER
	bool
	depends on DRM_KMS_HELPER
	select FB
	select FRAMEBUFFER_CONSOLE if !EXPERT
	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
	select FB_SYS_FOPS
	select FB_SYS_FILLRECT
	select FB_SYS_COPYAREA
	select FB_SYS_IMAGEBLIT
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
	select FB_CFB_IMAGEBLIT
	select FB_DEFERRED_IO
	help
	  FBDEV helpers for KMS drivers.

config DRM_DEBUG_DP_MST_TOPOLOGY_REFS
        bool "Enable refcount backtrace history in the DP MST helpers"
	depends on STACKTRACE_SUPPORT
        select STACKDEPOT
        depends on DRM_KMS_HELPER
        depends on DEBUG_KERNEL
        depends on EXPERT
        help
          Enables debug tracing for topology refs in DRM's DP MST helpers. A
          history of each topology reference/dereference will be printed to the
          kernel log once a port or branch device's topology refcount reaches 0.

          This has the potential to use a lot of memory and print some very
          large kernel messages. If in doubt, say "N".

config DRM_FBDEV_EMULATION
	bool "Enable legacy fbdev support for your modesetting driver"
	depends on DRM
	select DRM_KMS_HELPER
	select DRM_KMS_FB_HELPER
	default y
	help
	  Choose this option if you have a need for the legacy fbdev
	  support. Note that this support also provides the linux console
	  support on top of your modesetting driver.

	  If in doubt, say "Y".

config DRM_FBDEV_OVERALLOC
	int "Overallocation of the fbdev buffer"
	depends on DRM_FBDEV_EMULATION
	default 100
	help
	  Defines the fbdev buffer overallocation in percent. Default
	  is 100. Typical values for double buffering will be 200,
	  triple buffering 300.

config DRM_FBDEV_LEAK_PHYS_SMEM
	bool "Shamelessly allow leaking of fbdev physical address (DANGEROUS)"
	depends on DRM_FBDEV_EMULATION && EXPERT
	default n
	help
	  In order to keep user-space compatibility, we want in certain
	  use-cases to keep leaking the fbdev physical address to the
	  user-space program handling the fbdev buffer.
	  This affects, not only, Amlogic, Allwinner or Rockchip devices
	  with ARM Mali GPUs using an userspace Blob.
	  This option is not supported by upstream developers and should be
	  removed as soon as possible and be considered as a broken and
	  legacy behaviour from a modern fbdev device driver.

	  Please send any bug reports when using this to your proprietary
	  software vendor that requires this.

	  If in doubt, say "N" or spread the word to your closed source
	  library vendor.

config DRM_LOAD_EDID_FIRMWARE
	bool "Allow to specify an EDID data set instead of probing for it"
	depends on DRM
	help
	  Say Y here, if you want to use EDID data to be loaded from the
	  /lib/firmware directory or one of the provided built-in
	  data sets. This may be necessary, if the graphics adapter or
	  monitor are unable to provide appropriate EDID data. Since this
	  feature is provided as a workaround for broken hardware, the
	  default case is N. Details and instructions how to build your own
	  EDID data are given in Documentation/driver-api/edid.rst.

config DRM_DP_CEC
	bool "Enable DisplayPort CEC-Tunneling-over-AUX HDMI support"
	select CEC_CORE
	help
	  Choose this option if you want to enable HDMI CEC support for
	  DisplayPort/USB-C to HDMI adapters.

	  Note: not all adapters support this feature, and even for those
	  that do support this they often do not hook up the CEC pin.

config DRM_TTM
	tristate
	depends on DRM && MMU
	help
	  GPU memory management subsystem for devices with multiple
	  GPU memory types. Will be enabled automatically if a device driver
	  uses it.

config DRM_TTM_DMA_PAGE_POOL
	bool
	depends on DRM_TTM && (SWIOTLB || INTEL_IOMMU)
	default y
	help
	  Choose this if you need the TTM dma page pool

config DRM_VRAM_HELPER
	tristate
	depends on DRM
	help
	  Helpers for VRAM memory management

config DRM_TTM_HELPER
	tristate
	depends on DRM
	select DRM_TTM
	help
	  Helpers for ttm-based gem objects

config DRM_GEM_CMA_HELPER
	bool
	depends on DRM
	help
	  Choose this if you need the GEM CMA helper functions

config DRM_KMS_CMA_HELPER
	bool
	depends on DRM
	select DRM_GEM_CMA_HELPER
	help
	  Choose this if you need the KMS CMA helper functions

config DRM_GEM_SHMEM_HELPER
	bool
	depends on DRM
	help
	  Choose this if you need the GEM shmem helper functions

config DRM_VM
	bool
	depends on DRM && MMU

config DRM_SCHED
	tristate
	depends on DRM

source "drivers/gpu/drm/i2c/Kconfig"

source "drivers/gpu/drm/arm/Kconfig"

config DRM_RADEON
	tristate "ATI Radeon"
	depends on DRM && PCI && MMU
	select FW_LOADER
        select DRM_KMS_HELPER
        select DRM_TTM
	select POWER_SUPPLY
	select HWMON
	select BACKLIGHT_CLASS_DEVICE
	select INTERVAL_TREE
	help
	  Choose this option if you have an ATI Radeon graphics card.  There
	  are both PCI and AGP versions.  You don't need to choose this to
	  run the Radeon in plain VGA mode.

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

source "drivers/gpu/drm/radeon/Kconfig"

config DRM_AMDGPU
	tristate "AMD GPU"
	depends on DRM && PCI && MMU
	select FW_LOADER
	select DRM_KMS_HELPER
	select DRM_SCHED
	select DRM_TTM
	select POWER_SUPPLY
	select HWMON
	select BACKLIGHT_CLASS_DEVICE
	select INTERVAL_TREE
	select CHASH
	help
	  Choose this option if you have a recent AMD Radeon graphics card.

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

source "drivers/gpu/drm/amd/amdgpu/Kconfig"

source "drivers/gpu/drm/nouveau/Kconfig"

source "drivers/gpu/drm/i915/Kconfig"

config DRM_VGEM
	tristate "Virtual GEM provider"
	depends on DRM
	help
	  Choose this option to get a virtual graphics memory manager,
	  as used by Mesa's software renderer for enhanced performance.
	  If M is selected the module will be called vgem.

config DRM_VKMS
	tristate "Virtual KMS (EXPERIMENTAL)"
	depends on DRM
	select DRM_KMS_HELPER
	select CRC32
	default n
	help
	  Virtual Kernel Mode-Setting (VKMS) is used for testing or for
	  running GPU in a headless machines. Choose this option to get
	  a VKMS.

	  If M is selected the module will be called vkms.

config DRM_ATI_PCIGART
        bool

source "drivers/gpu/drm/exynos/Kconfig"

source "drivers/gpu/drm/rockchip/Kconfig"

source "drivers/gpu/drm/vmwgfx/Kconfig"

source "drivers/gpu/drm/gma500/Kconfig"

source "drivers/gpu/drm/udl/Kconfig"

source "drivers/gpu/drm/ast/Kconfig"

source "drivers/gpu/drm/mgag200/Kconfig"

source "drivers/gpu/drm/cirrus/Kconfig"

source "drivers/gpu/drm/armada/Kconfig"

source "drivers/gpu/drm/atmel-hlcdc/Kconfig"

source "drivers/gpu/drm/rcar-du/Kconfig"

source "drivers/gpu/drm/shmobile/Kconfig"

source "drivers/gpu/drm/sun4i/Kconfig"

source "drivers/gpu/drm/omapdrm/Kconfig"

source "drivers/gpu/drm/tilcdc/Kconfig"

source "drivers/gpu/drm/qxl/Kconfig"

source "drivers/gpu/drm/bochs/Kconfig"

source "drivers/gpu/drm/virtio/Kconfig"

source "drivers/gpu/drm/msm/Kconfig"

source "drivers/gpu/drm/fsl-dcu/Kconfig"

source "drivers/gpu/drm/tegra/Kconfig"

source "drivers/gpu/drm/stm/Kconfig"

source "drivers/gpu/drm/panel/Kconfig"

source "drivers/gpu/drm/bridge/Kconfig"

source "drivers/gpu/drm/sti/Kconfig"

source "drivers/gpu/drm/imx/Kconfig"

source "drivers/gpu/drm/ingenic/Kconfig"

source "drivers/gpu/drm/v3d/Kconfig"

source "drivers/gpu/drm/vc4/Kconfig"

source "drivers/gpu/drm/etnaviv/Kconfig"

source "drivers/gpu/drm/arc/Kconfig"

source "drivers/gpu/drm/hisilicon/Kconfig"

source "drivers/gpu/drm/mediatek/Kconfig"

source "drivers/gpu/drm/zte/Kconfig"

source "drivers/gpu/drm/mxsfb/Kconfig"

source "drivers/gpu/drm/meson/Kconfig"

source "drivers/gpu/drm/tiny/Kconfig"

source "drivers/gpu/drm/pl111/Kconfig"

source "drivers/gpu/drm/tve200/Kconfig"

source "drivers/gpu/drm/xen/Kconfig"

source "drivers/gpu/drm/vboxvideo/Kconfig"

source "drivers/gpu/drm/lima/Kconfig"

source "drivers/gpu/drm/panfrost/Kconfig"

source "drivers/gpu/drm/aspeed/Kconfig"

source "drivers/gpu/drm/mcde/Kconfig"

# Keep legacy drivers last

menuconfig DRM_LEGACY
	bool "Enable legacy drivers (DANGEROUS)"
	depends on DRM && MMU
	select DRM_VM
	select DRM_ATI_PCIGART if PCI
	help
	  Enable legacy DRI1 drivers. Those drivers expose unsafe and dangerous
	  APIs to user-space, which can be used to circumvent access
	  restrictions and other security measures. For backwards compatibility
	  those drivers are still available, but their use is highly
	  inadvisable and might harm your system.

	  You are recommended to use the safe modeset-only drivers instead, and
	  perform 3D emulation in user-space.

	  Unless you have strong reasons to go rogue, say "N".

if DRM_LEGACY

config DRM_TDFX
	tristate "3dfx Banshee/Voodoo3+"
	depends on DRM && PCI
	help
	  Choose this option if you have a 3dfx Banshee or Voodoo3 (or later),
	  graphics card.  If M is selected, the module will be called tdfx.

config DRM_R128
	tristate "ATI Rage 128"
	depends on DRM && PCI
	select FW_LOADER
	help
	  Choose this option if you have an ATI Rage 128 graphics card.  If M
	  is selected, the module will be called r128.  AGP support for
	  this card is strongly suggested (unless you have a PCI version).

config DRM_I810
	tristate "Intel I810"
	# !PREEMPTION because of missing ioctl locking
	depends on DRM && AGP && AGP_INTEL && (!PREEMPTION || BROKEN)
	help
	  Choose this option if you have an Intel I810 graphics card.  If M is
	  selected, the module will be called i810.  AGP support is required
	  for this driver to work.

config DRM_MGA
	tristate "Matrox g200/g400"
	depends on DRM && PCI
	select FW_LOADER
	help
	  Choose this option if you have a Matrox G200, G400 or G450 graphics
	  card.  If M is selected, the module will be called mga.  AGP
	  support is required for this driver to work.

config DRM_SIS
	tristate "SiS video cards"
	depends on DRM && AGP
	depends on FB_SIS || FB_SIS=n
	help
	  Choose this option if you have a SiS 630 or compatible video
	  chipset. If M is selected the module will be called sis. AGP
	  support is required for this driver to work.

config DRM_VIA
	tristate "Via unichrome video cards"
	depends on DRM && PCI
	help
	  Choose this option if you have a Via unichrome or compatible video
	  chipset. If M is selected the module will be called via.

config DRM_SAVAGE
	tristate "Savage video cards"
	depends on DRM && PCI
	help
	  Choose this option if you have a Savage3D/4/SuperSavage/Pro/Twister
	  chipset. If M is selected the module will be called savage.

endif # DRM_LEGACY

# Separate option because drm_panel_orientation_quirks.c is shared with fbdev
config DRM_PANEL_ORIENTATION_QUIRKS
	tristate

config DRM_LIB_RANDOM
	bool
	default n
