# 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 I2C
	select DMA_SHARED_BUFFER
	select SYNC_FILE
# gallium uses SYS_kcmp for os_same_file_description() to de-duplicate
# device and dmabuf fd. Let's make sure that is available for our userspace.
	select KCMP
	select VIDEO
	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.

if DRM

config DRM_MIPI_DBI
	tristate
	depends on DRM
	select DRM_KMS_HELPER

config DRM_MIPI_DSI
	bool
	depends on DRM

config DRM_DEBUG_MM
	bool "Insert extra checks and debug info into the DRM range managers"
	default n
	depends on DRM
	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_USE_DYNAMIC_DEBUG
	bool "use dynamic debug to implement drm.debug"
	default n
	depends on BROKEN
	depends on DRM
	depends on DYNAMIC_DEBUG || DYNAMIC_DEBUG_CORE
	depends on JUMP_LABEL
	help
	  Use dynamic-debug to avoid drm_debug_enabled() runtime overheads.
	  Due to callsite counts in DRM drivers (~4k in amdgpu) and 56
	  bytes per callsite, the .data costs can be substantial, and
	  are therefore configurable.

config DRM_KUNIT_TEST_HELPERS
	tristate
	depends on DRM && KUNIT
	select DRM_KMS_HELPER
	help
	  KUnit Helpers for KMS drivers.

config DRM_KUNIT_TEST
	tristate "KUnit tests for DRM" if !KUNIT_ALL_TESTS
	depends on DRM && KUNIT && MMU
	select DRM_BUDDY
	select DRM_DISPLAY_DP_HELPER
	select DRM_DISPLAY_HDMI_STATE_HELPER
	select DRM_DISPLAY_HELPER
	select DRM_EXEC
	select DRM_EXPORT_FOR_TESTS if m
	select DRM_GEM_SHMEM_HELPER
	select DRM_KUNIT_TEST_HELPERS
	select DRM_LIB_RANDOM
	select PRIME_NUMBERS
	default KUNIT_ALL_TESTS
	help
	  This builds unit tests for DRM. This option is not useful for
	  distributions or general kernels, but only for kernel
	  developers working on DRM and associated drivers.

	  For more information on KUnit and unit tests in general,
	  please refer to the KUnit documentation in
	  Documentation/dev-tools/kunit/.

	  If in doubt, say "N".

config DRM_KMS_HELPER
	tristate
	depends on DRM
	select FB_CORE if DRM_FBDEV_EMULATION
	help
	  CRTC helpers for KMS drivers.

config DRM_DRAW
	bool
	depends on DRM

config DRM_PANIC
	bool "Display a user-friendly message when a kernel panic occurs"
	depends on DRM
	select FONT_SUPPORT
	select DRM_DRAW
	help
	  Enable a drm panic handler, which will display a user-friendly message
	  when a kernel panic occurs. It's useful when using a user-space
	  console instead of fbcon.
	  It will only work if your graphic driver supports this feature.
	  To support Hi-DPI Display, you can enable bigger fonts like
	  FONT_TER16x32

config DRM_PANIC_FOREGROUND_COLOR
	hex "Drm panic screen foreground color, in RGB"
	depends on DRM_PANIC
	default 0xffffff

config DRM_PANIC_BACKGROUND_COLOR
	hex "Drm panic screen background color, in RGB"
	depends on DRM_PANIC
	default 0x000000

config DRM_PANIC_DEBUG
	bool "Add a debug fs entry to trigger drm_panic"
	depends on DRM_PANIC && DEBUG_FS
	help
	  Add dri/[device]/drm_panic_plane_x in the kernel debugfs, to force the
	  panic handler to write the panic message to this plane scanout buffer.
	  This is unsafe and should not be enabled on a production build.
	  If in doubt, say "N".

config DRM_PANIC_SCREEN
	string "Panic screen formatter"
	default "user"
	depends on DRM_PANIC
	help
	  This option enable to choose what will be displayed when a kernel
	  panic occurs. You can choose between "user", a short message telling
	  the user to reboot the system, or "kmsg" which will display the last
	  lines of kmsg.
	  This can also be overridden by drm.panic_screen=xxxx kernel parameter
	  or by writing to /sys/module/drm/parameters/panic_screen sysfs entry
	  Default is "user"

config DRM_PANIC_SCREEN_QR_CODE
	bool "Add a panic screen with a QR code"
	depends on DRM_PANIC && RUST
	select ZLIB_DEFLATE
	help
	  This option adds a QR code generator, and a panic screen with a QR
	  code. The QR code will contain the last lines of kmsg and other debug
	  information. This should be easier for the user to report a kernel
	  panic, with all debug information available.
	  To use this panic screen, also set DRM_PANIC_SCREEN to "qr_code"

config DRM_PANIC_SCREEN_QR_CODE_URL
	string "Base URL of the QR code in the panic screen"
	depends on DRM_PANIC_SCREEN_QR_CODE
	help
	  This option sets the base URL to report the kernel panic. If it's set
	  the QR code will contain the URL and the kmsg compressed with zlib as
	  a URL parameter. If it's empty, the QR code will contain the kmsg as
	  uncompressed text only.
	  There is a demo code in javascript, to decode and uncompress the kmsg
	  data from the URL parameter at https://github.com/kdj0c/panic_report

config DRM_PANIC_SCREEN_QR_VERSION
	int "Maximum version (size) of the QR code."
	depends on DRM_PANIC_SCREEN_QR_CODE
	default 40
	help
	  This option limits the version (or size) of the QR code. QR code
	  version ranges from Version 1 (21x21) to Version 40 (177x177).
	  Smaller QR code are easier to read, but will contain less debugging
	  data. Default is 40.

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_DEBUG_MODESET_LOCK
	bool "Enable backtrace history for lock contention"
	depends on STACKTRACE_SUPPORT
	depends on DEBUG_KERNEL
	depends on EXPERT
	select STACKDEPOT
	default y if DEBUG_WW_MUTEX_SLOWPATH
	help
	  Enable debug tracing of failures to gracefully handle drm modeset lock
	  contention. A history of each drm modeset lock path hitting -EDEADLK
	  will be saved until gracefully handled, and the backtrace will be
	  printed when attempting to lock a contended lock.

	  If in doubt, say "N".

config DRM_CLIENT
	bool
	depends on DRM
	help
	  Enables support for DRM clients. DRM drivers that need
	  struct drm_client_dev and its interfaces should select this
	  option. Drivers that support the default clients should
	  select DRM_CLIENT_SELECTION instead.

source "drivers/gpu/drm/clients/Kconfig"

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/admin-guide/edid.rst.

source "drivers/gpu/drm/display/Kconfig"

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_KUNIT_TEST
        tristate "KUnit tests for TTM" if !KUNIT_ALL_TESTS
        default n
        depends on DRM && KUNIT && MMU && (UML || COMPILE_TEST)
        select DRM_TTM
        select DRM_BUDDY
        select DRM_EXPORT_FOR_TESTS if m
        select DRM_KUNIT_TEST_HELPERS
        default KUNIT_ALL_TESTS
        help
          Enables unit tests for TTM, a GPU memory manager subsystem used
          to manage memory buffers. This option is mostly useful for kernel
          developers. It depends on (UML || COMPILE_TEST) since no other driver
          which uses TTM can be loaded while running the tests.

          If in doubt, say "N".

config DRM_EXEC
	tristate
	depends on DRM
	help
	  Execution context for command submissions

config DRM_GPUVM
	tristate
	depends on DRM
	select DRM_EXEC
	help
	  GPU-VM representation providing helpers to manage a GPUs virtual
	  address space

config DRM_GPUSVM
	tristate
	depends on DRM && DEVICE_PRIVATE
	select HMM_MIRROR
	select MMU_NOTIFIER
	help
	  GPU-SVM representation providing helpers to manage a GPUs shared
	  virtual memory

config DRM_BUDDY
	tristate
	depends on DRM
	help
	  A page based buddy allocator

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
	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
	select FB_CORE if DRM_FBDEV_EMULATION
	select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
	help
	  Helpers for ttm-based gem objects

config DRM_GEM_DMA_HELPER
	tristate
	depends on DRM
	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
	select FB_CORE if DRM_FBDEV_EMULATION
	select FB_DMAMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
	help
	  Choose this if you need the GEM DMA helper functions

config DRM_GEM_SHMEM_HELPER
	tristate
	depends on DRM && MMU
	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
	select FB_CORE if DRM_FBDEV_EMULATION
	select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
	help
	  Choose this if you need the GEM shmem helper functions

config DRM_SUBALLOC_HELPER
	tristate
	depends on DRM

config DRM_SCHED
	tristate
	depends on DRM

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

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

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

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

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

source "drivers/gpu/drm/xe/Kconfig"

source "drivers/gpu/drm/kmb/Kconfig"

config DRM_VGEM
	tristate "Virtual GEM provider"
	depends on DRM && MMU
	select DRM_GEM_SHMEM_HELPER
	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.

source "drivers/gpu/drm/vkms/Kconfig"

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/armada/Kconfig"

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

source "drivers/gpu/drm/renesas/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/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/loongson/Kconfig"

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

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

source "drivers/gpu/drm/logicvc/Kconfig"

source "drivers/gpu/drm/mediatek/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/panthor/Kconfig"

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

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

source "drivers/gpu/drm/tidss/Kconfig"

source "drivers/gpu/drm/adp/Kconfig"

source "drivers/gpu/drm/xlnx/Kconfig"

source "drivers/gpu/drm/gud/Kconfig"

source "drivers/gpu/drm/solomon/Kconfig"

source "drivers/gpu/drm/sprd/Kconfig"

source "drivers/gpu/drm/imagination/Kconfig"

config DRM_HYPERV
	tristate "DRM Support for Hyper-V synthetic video device"
	depends on DRM && PCI && MMU && HYPERV
	select DRM_CLIENT_SELECTION
	select DRM_KMS_HELPER
	select DRM_GEM_SHMEM_HELPER
	help
	 This is a KMS driver for Hyper-V synthetic video device. Choose this
	 option if you would like to enable drm driver for Hyper-V virtual
	 machine. Unselect Hyper-V framebuffer driver (CONFIG_FB_HYPERV) so
	 that DRM driver is used by default.

	 If M is selected the module will be called hyperv_drm.

config DRM_EXPORT_FOR_TESTS
	bool

# Separate option as not all DRM drivers use it
config DRM_PANEL_BACKLIGHT_QUIRKS
	tristate

config DRM_LIB_RANDOM
	bool
	default n

config DRM_PRIVACY_SCREEN
	bool
	default n

config DRM_WERROR
	bool "Compile the drm subsystem with warnings as errors"
	depends on DRM && EXPERT
	depends on !WERROR
	default n
	help
	  A kernel build should not cause any compiler warnings, and this
	  enables the '-Werror' flag to enforce that rule in the drm subsystem.

	  The drm subsystem enables more warnings than the kernel default, so
	  this config option is disabled by default.

	  If in doubt, say N.

config DRM_HEADER_TEST
	bool "Ensure DRM headers are self-contained and pass kernel-doc"
	depends on DRM && EXPERT && BROKEN
	default n
	help
	  Ensure the DRM subsystem headers both under drivers/gpu/drm and
	  include/drm compile, are self-contained, have header guards, and have
	  no kernel-doc warnings.

	  If in doubt, say N.

endif

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